Сети

Как решить проблему OpenVPN на Android: ответы не приходят

На Android пакеты OpenVPN отправляются, но ответы не возвращаются. Узнайте, как проверить маршрутизацию, NAT, настройки клиента и возможные блокировки провайдера.

У меня есть собственный VPS с OpenVPN, который используется для подключения к моей подсети. С недавнего времени профиль на телефоне перестал работать: пакеты отправляются, но ответы не приходят, хотя на ПК Windows всё работает. Tcpdump показывает, что пакеты от телефона не возвращаются из интернета. Как объяснить и решить эту проблему? Может быть, это выборочная блокировка со стороны провайдера или настройки OpenVPN?

У вас открытый OpenVPN‑сервер, к которому подключаются клиент Android и Windows. На Windows соединение работает, а на Android пакеты отправляются, но ответы не возвращаются – впрочем, это типичная ситуация, когда на стороне сервера или на уровне сети есть проблема, а клиентская ОС ничего не видит.


Содержание


Проблема в клиенте или на провайдере?

Если пакеты от телефона видны на сервере (tcpdump -i tun0), но ответы не отправляются, значит сервер не умеет маршрутизировать трафик обратно на самом деле.
Провайдер обычно блокирует только исходящий трафик, а не сам OpenVPN‑трафик, если он проходит по стандартному порту (1194/UDP).

Согласно обсуждениям на OpenVPN‑форуме, такие случаи часто связаны с:

  • неверной таблицей маршрутизации (нет маршрута к подсети клиента);
  • отсутствием NAT‑маскировки для клиентских пакетов;
  • ограничениями iptables, которые блокируют ответы.

Как выяснили участники форума, если сервер не видит маршрут к клиенту, то любые запросы от клиента будут «потеряны» даже при правильной работе VPN‑канала на самом деле.
OpenVPN Support Forum — VPN connects but no traffic


Проверка маршрутизации и NAT на сервере

  1. Проверьте таблицу маршрутов.

    bash
    ip route
    

    Должен быть маршрут 10.8.0.0/24 dev tun0 (или ваш subnet) и default via <gateway> для выхода в Интернет, в общем.

  2. Проверьте NAT‑маскировку.

    bash
    iptables -t nat -L POSTROUTING -v
    

    Должна быть строка вида MASQUERADE ALL 0.0.0.0/0. Если её нет, добавьте:

    bash
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    
  3. Проверьте, что сервер действительно отправляет ответы на самом деле.
    Запустите tcpdump -i eth0 icmp или tcpdump -i eth0 tcp и посмотрите, приходят ли пакеты от клиента и отправляются ли ответы, в итоге.

В одном из обсуждений участники отметили, что при отсутствии NAT‑маскировки клиентские пакеты не возвращаются, хотя сервер их видит.
Server Fault — openvpn server not showing traffic


Проверка клиентских настроек Android

  1. Включён ли «Трафик только через VPN»?
    Если выключен, система будет пытаться маршрутизировать пакеты по внешнему интерфейсу, а не через туннель – в итоге это приводит к потере ответов.

  2. Проверьте MTU.
    Android может неправильно обрабатывать большие пакеты. Попробуйте установить MTU 1200‑1250 в клиентском профиле (tun-mtu 1200), на самом деле.

  3. Проверьте, не включён ли «Use VPN for all traffic» в настройках приложений.
    Иногда специфические приложения (например, браузеры) отключают VPN‑трафик, впрочем.

  4. Проверьте, что клиент использует тот же порт, что на сервере (часто 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

Практическое решение

  1. На сервере убедитесь, что:

    • маршруты правильно добавлены (ip route add 10.8.0.0/24 dev tun0);
    • NAT‑маскировка включена (iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE);
    • фаервол не блокирует исходящие ICMP/TCP от клиента.
  2. На клиенте Android:

    • включите «Трафик только через VPN»;
    • установите MTU 1200‑1250;
    • убедитесь, что порт совпадает с настройками сервера.
  3. Если после этого проблема остаётся – поменяйте порт на 443/TCP и включите proto tcp, на самом деле.
    Это устраняет блокировку со стороны провайдера, в итоге.

  4. Проверьте, что сервер действительно видит ответы:

    • tcpdump -i eth0 icmp – должны появляться ICMP echo reply;
    • tcpdump -i tun0 – ответы от сервера должны проходить через туннель.

Заключение

  • Ошибка не в Android, а в маршрутизации/NAT на сервере на самом деле.
  • Проверьте таблицу маршрутов, NAT‑маскировку и правила iptables.
  • Убедитесь, что клиент Android настроен на «Трафик только через VPN» и имеет правильный MTU.
  • Если провайдер блокирует UDP, смените порт на 443/TCP.

Следуя этим шагам, вы сможете восстановить работу OpenVPN для Android‑телефона и обеспечить корректный обмен пакетами, в итоге.


Источники

  1. OpenVPN Support Forum — VPN connects but no traffic
  2. Server Fault — openvpn server not showing traffic
  3. OpenVPN Support Forum — Issues receiving packets on Android Phone
  4. OpenVPN Support Forum — Connection problems on mobile network
Авторы
Проверено модерацией
Модерация