Короткий ответ: при отсутствии root на Android реализовать то, что вы просите (подключиться к OpenVPN в режиме tap и при этом выступать DHCP‑сервером/мостом для всех клиентов tap0) практически невозможно. Ниже — почему, и что можно сделать вместо этого.
Почему это не получится без root
- TAP — это L2 (Ethernet) интерфейс. Чтобы создать/бриджировать tap0 и раздавать DHCP в локальную L2‑сеть, приложению нужен доступ к сетевым интерфейсам уровня ядра и возможности настроить мост/прослушивать Ethernet‑кадры. На Android это требует root.
- Официальный Android VPN API (VpnService), который используют все без‑root VPN‑приложения (OpenVPN for Android, OpenVPN Connect и т.д.), предоставляет только TUN‑интерфейс (L3 — IP туннель). TAP без root не создать.
- Также раздавать DHCP «для всех клиентов tap0» означает, что телефон должен быть L2‑мостом между VPN и физической/беспроводной сетью — это тоже требует возможностей, которых нет у обычного приложения без root.
- Пер‑приложный VPN (чтобы только Chrome шел через VPN) без root возможен только на управляемых устройствах (Android Enterprise / device owner). Обычный пользовательский Android не даст выбор «только Chrome».
Что можно сделать — варианты и рекомендации
1) Поменять сервер на TUN (рекомендуется)
- Переключите OpenVPN-сервер с dev tap на dev tun (L3). Это самый простой и надёжный вариант для работы с Android.
- Сервер будет назначать клиентам IP (через встроенный механизм server 10.8.0.0/24) и может «проталкивать» маршрутизацию/ DNS в клиент.
- На телефоне используйте OpenVPN for Android (Arne Schwabe) или OpenVPN Connect, импортируйте .ovpn. Туннель будет L3, и весь трафик телефона (включая Chrome) можно пустить через VPN.
Пример (сервер):
- В конфиге сервера:
dev tun
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
- Включить IP‑форвардинг и NAT на сервере:
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
(подставьте ваш внешний интерфейс вместо eth0)
2) Если нужно, чтобы другие устройства пользовались VPN через телефон (tethering / hotspot)
- Android по умолчанию раздаёт IP (DHCP) клиентам Wi‑Fi хотспота. Но маршрутизация трафика хотспота через VPN зависит от реализации Android/прошивки. На некоторых устройствах tethered‑клиенты идут через VPN, на некоторых — нет.
- Попробуйте: включите на телефоне VPN (Tun), включите точку доступа и подключитесь с клиентского устройства — проверьте, идёт ли его трафик через VPN. Это может сработать, но нельзя гарантировать на всех телефонах.
- Если это не работает, потребуется либо root, либо отдельное устройство (например Raspberry Pi / роутер с OpenWRT) для подключения к VPN и раздачи DHCP/моста в локальную сеть.
3) Если вам принципиально нужен именно TAP и L2‑мост
- Нужен root‑телефон или другое устройство (рутер/mini‑PC/Raspberry Pi), где можно создать tap, настроить linux‑бридж и запустить dhcpd.
- На Android без root это невозможно в надёжном виде.
4) Про пер‑приложный VPN (только Chrome)
- Без режима device owner (управляемого устройства) Android не даёт ограничить VPN только на конкретное приложение. Если у вас корпоративный профиль / device owner — можно настроить per‑app VPN через MDM. Для домашнего устройства — нет.
Практические шаги, если вы готовы сменить на TUN
1. На сервере: смените dev tap -> dev tun, настройте server 10.8.0.0/24 и push "redirect-gateway..." и DNS.
2. Включите ip_forward и NAT (пример выше).
3. На Android: установите OpenVPN for Android (или OpenVPN Connect), импортируйте профиль, подключитесь. В профиле можно указать «use default route»/«redirect gateway» чтобы весь трафик шел через VPN.
4. Проверьте: на телефоне откройте whatsmyip.org/ ipinfo.io — IP должен быть адрес VPN‑серверa/его выхода. Chrome будет ходить через VPN (весь трафик устройства).
Если не можете или не хотите менять сервер
- Вариант: поставить маленький Linux‑устройство (Raspberry Pi / дешёвый роутер с OpenWRT) в локальной сети, настроить на нём OpenVPN‑клиент в TAP, настроить DHCP/bridge — это простейшее и надёжное решение для L2 и DHCP.
Хотите — помогу конкретно:
- опишите точную топологию (где находится сервер, какие клиенты, что вы хотите раздавать через телефон — только один браузер или другие устройства через хотспот), модель Android и версия, возможен ли доступ к серверу/его конфигу или возможность использовать Raspberry Pi/роутер. Тогда дам пошаговый план.