Как решить проблему OpenVPN на Android: ответы не приходят
На Android пакеты OpenVPN отправляются, но ответы не возвращаются. Узнайте, как проверить маршрутизацию, NAT, настройки клиента и возможные блокировки провайдера.
У меня есть собственный VPS с OpenVPN, который используется для подключения к моей подсети. С недавнего времени профиль на телефоне перестал работать: пакеты отправляются, но ответы не приходят, хотя на ПК Windows всё работает. Tcpdump показывает, что пакеты от телефона не возвращаются из интернета. Как объяснить и решить эту проблему? Может быть, это выборочная блокировка со стороны провайдера или настройки OpenVPN?
У вас открытый OpenVPN‑сервер, к которому подключаются клиент Android и Windows. На Windows соединение работает, а на Android пакеты отправляются, но ответы не возвращаются – впрочем, это типичная ситуация, когда на стороне сервера или на уровне сети есть проблема, а клиентская ОС ничего не видит.
Содержание
- Проблема в клиенте или на провайдере?
- Проверка маршрутизации и NAT на сервере
- Проверка клиентских настроек Android
- Проверка ограничений провайдера
- Практическое решение
Проблема в клиенте или на провайдере?
Если пакеты от телефона видны на сервере (tcpdump -i tun0), но ответы не отправляются, значит сервер не умеет маршрутизировать трафик обратно на самом деле.
Провайдер обычно блокирует только исходящий трафик, а не сам OpenVPN‑трафик, если он проходит по стандартному порту (1194/UDP).
Согласно обсуждениям на OpenVPN‑форуме, такие случаи часто связаны с:
- неверной таблицей маршрутизации (нет маршрута к подсети клиента);
- отсутствием NAT‑маскировки для клиентских пакетов;
- ограничениями iptables, которые блокируют ответы.
Как выяснили участники форума, если сервер не видит маршрут к клиенту, то любые запросы от клиента будут «потеряны» даже при правильной работе VPN‑канала на самом деле.
OpenVPN Support Forum — VPN connects but no traffic
Проверка маршрутизации и NAT на сервере
-
Проверьте таблицу маршрутов.
baship route
Должен быть маршрут
10.8.0.0/24 dev tun0(или ваш subnet) иdefault via <gateway>для выхода в Интернет, в общем. -
Проверьте NAT‑маскировку.
bashiptables -t nat -L POSTROUTING -v
Должна быть строка вида
MASQUERADE ALL 0.0.0.0/0. Если её нет, добавьте:bashiptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-
Проверьте, что сервер действительно отправляет ответы на самом деле.
Запуститеtcpdump -i eth0 icmpилиtcpdump -i eth0 tcpи посмотрите, приходят ли пакеты от клиента и отправляются ли ответы, в итоге.
В одном из обсуждений участники отметили, что при отсутствии NAT‑маскировки клиентские пакеты не возвращаются, хотя сервер их видит.
Server Fault — openvpn server not showing traffic
Проверка клиентских настроек Android
-
Включён ли «Трафик только через VPN»?
Если выключен, система будет пытаться маршрутизировать пакеты по внешнему интерфейсу, а не через туннель – в итоге это приводит к потере ответов. -
Проверьте MTU.
Android может неправильно обрабатывать большие пакеты. Попробуйте установить MTU 1200‑1250 в клиентском профиле (tun-mtu 1200), на самом деле. -
Проверьте, не включён ли «Use VPN for all traffic» в настройках приложений.
Иногда специфические приложения (например, браузеры) отключают VPN‑трафик, впрочем. -
Проверьте, что клиент использует тот же порт, что на сервере (часто 1194/UDP). Если порт меняется, провайдер может блокировать, на самом деле.
В одном из форумных постов отмечено, что при выключенном «Трафик только через VPN» Android не получает ответы, хотя сервер видит запросы на самом деле.
OpenVPN Support Forum — Issues receiving packets on Android Phone
Проверка ограничений провайдера
- Пакеты, исходящие из сети 10.x.x.x, могут быть отфильтрованы. Проверьте, не блокирует ли ваш провайдер UDP‑трафик на 1194/UDP, в итоге.
- Провайдер может использовать Deep Packet Inspection и блокировать трафик, если он не соответствует их политике, на самом деле.
В этом случае попробуйте сменить порт (например, 443/TCP) и включить TCP‑обёртку (proto tcp), впрочем. - Некоторые участники отмечали, что провайдеры иногда блокируют UDP‑трафик из мобильных сетей, но позволяют его через 443/TCP, на самом деле.
OpenVPN Support Forum — Connection problems on mobile network
Практическое решение
-
На сервере убедитесь, что:
- маршруты правильно добавлены (
ip route add 10.8.0.0/24 dev tun0); - NAT‑маскировка включена (
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE); - фаервол не блокирует исходящие ICMP/TCP от клиента.
- маршруты правильно добавлены (
-
На клиенте Android:
- включите «Трафик только через VPN»;
- установите MTU 1200‑1250;
- убедитесь, что порт совпадает с настройками сервера.
-
Если после этого проблема остаётся – поменяйте порт на 443/TCP и включите
proto tcp, на самом деле.
Это устраняет блокировку со стороны провайдера, в итоге. -
Проверьте, что сервер действительно видит ответы:
tcpdump -i eth0 icmp– должны появлятьсяICMP echo reply;tcpdump -i tun0– ответы от сервера должны проходить через туннель.
Заключение
- Ошибка не в Android, а в маршрутизации/NAT на сервере на самом деле.
- Проверьте таблицу маршрутов, NAT‑маскировку и правила iptables.
- Убедитесь, что клиент Android настроен на «Трафик только через VPN» и имеет правильный MTU.
- Если провайдер блокирует UDP, смените порт на 443/TCP.
Следуя этим шагам, вы сможете восстановить работу OpenVPN для Android‑телефона и обеспечить корректный обмен пакетами, в итоге.