Вам нужна ещё одна частная подсеть — скажем, 10.60.0.0/24, — которой в профиле сейчас нет. На ноутбуке вы добавили бы маршрут и пошли дальше. В Android VPN — это приложение, tun-устройство принадлежит этому приложению, и без root таблицы маршрутизации для правки нет. Маршрут всё равно должен быть, но он попадает в профиль, который загружает клиент, и работает только если другая сторона согласна. Далее — правка, переподключение, сторона сервера и откат.

До правки: что маршрут может и чего не может

Маршрут отвечает на один вопрос: какой интерфейс должен нести трафик к этому адресату. Он ничего не разрешает. Если владелец сети не согласился, что этот телефон может достичь той подсети, правильный маршрут даёт конфигурацию, которая выглядит правильно, и тихий сброс на шлюзе, а следующий час вы правите не тот файл.

Сначала получите это согласие, письменно, если у сети есть владелец. Затем запишите, чего вы не делаете: не выдаёте телефону адрес внутри той LAN, не меняете слушателя сервера и не выбираете площадку по имени хоста. Это четыре разные правки, и только первая ваша.

The route gives youThe route does not give you
A destination prefix associated with the tunnelPermission to forward at the gateway
A path for the phone's own trafficA return route on the target host
A scope for the client's virtual interfaceA name in DNS, or HTTPS identity

Правьте тот профиль, который клиент действительно загружает

Для совместимого клиента, который импортирует обычный текст опций OpenVPN, добавление — одна строка:

route 10.60.0.0 255.255.255.0

Добавьте её в тело профиля, рядом с другими директивами маршрутизации, а endpoint, сертификаты, работу с ключами и строки проверки оператора оставьте точно такими, какими они были. Не вставляйте целиком старый пример, чтобы позаимствовать одну строку: сжатие, абсолютные пути к файлам и устаревшие настройки cipher едут вместе с ним и обойдутся вам в отдельный сеанс отладки.

Шаг, который люди пропускают, — это владение файлом. Если приложение импортировало профиль, копия, которую оно использует, принадлежит приложению, и правка скачанного оригинала ничего не меняет. Используйте поддерживаемый редактор клиента или импортируйте изменённый файл заново через путь обновления, и подтвердите имя активного профиля, когда похожих имён несколько. Запишите, какой именно вы изменили.

Если в профиле уже есть route-nopull, ни один маршрут от сервера не устанавливается, и каждый префикс, который нужен телефону, должен быть перечислен явно. Это законная схема, но она означает, что пропущенная строка выглядит точно как отказ сервера.

Переподключитесь и проверьте на устройстве

Сначала отключитесь, затем подключитесь заново именно к тому профилю, который правили, вместо того чтобы позволить приложению восстановить последний сеанс. Откройте журнал подключения и убедитесь, что клиент разобрал новую строку; директива маршрутизации, которую интерфейс игнорирует, — обычный результат правки не той копии.

Проверяйте адресат по адресу, а не по имени. Проверка TCP на один известный порт службы говорит больше, чем ping, потому что многие хосты отвечают на ICMP, тогда как порт службы фильтруется. Если адрес отвечает, а имя нет, у вас вопрос к resolver, а не к маршрутизации, и следующий раздел не для вас.

Сюда же относятся две проверки области действия. VPN на приложение означает, что адресный маршрут может быть, тогда как приложение, которым вы тестируете, находится вне включённого набора, поэтому тестируйте приложением, которое действительно внутри. А префикс IPv4 ничего не говорит о пути IPv6; если служба dual-stack, добавьте соответствующий маршрут IPv6 или ожидайте, что клиент предпочтёт путь, который вы не задумывали.

Один отрицательный результат стоит распознать пораньше: если маршрут full-tunnel уже покрывает 0.0.0.0/0, префикса не хватает не из-за этого, и повторное добавление ничего не меняет. Двойное покрытие не исправляет отказ на стороне сервера и не заменяет отсутствующий ответ.

Завершите путь на сервере

Три вещи должны быть верны за пределами телефона. Шлюзу нужен маршрут к адресату и разрешение пересылать источник телефона в его сторону. Цель должна принимать этот источник и возвращать ответы через шлюз, иначе схеме нужен осознанный транслейт на выходе. Опция route из руководства OpenVPN описывает директиву на стороне клиента; пересылка и обратная маршрутизация — отдельные настройки на отдельных машинах.

Если адресат находится за другим клиентом VPN, а не прямо за шлюзом, серверу нужен iroute для подсети этого пира. Эта директива принадлежит серверу и описывает, какому клиенту принадлежит префикс; телефон не может передать её из своего профиля, и никакая правка на стороне клиента её не заменяет.

Проверьте обратный путь явно. Ответ, который уходит по маршруту по умолчанию вместо туннеля, даёт классический симптом полуоткрытого соединения: соединение устанавливается в одну сторону, и ничего не возвращается. Трансляция источника на шлюзе — законное исправление, когда цель не может маршрутизировать обратно, но это решение политики со своими последствиями.

Откат и приёмка

Сохраните предыдущий профиль до правки. Если изменение ухудшило ситуацию, восстановите эту копию тем же путём повторного импорта, переподключитесь и убедитесь, что старое поведение вернулось — это подтверждает, что вы изменили именно то, что думали. Откат, который не восстанавливает прежнее состояние, означает, что приложение держит третью копию, которую вы не нашли.

Примите изменение, когда выполняются четыре условия, проверенные в этом порядке после свежего переподключения: адресат отвечает на своём порту службы, частное имя разрешается, если оно ожидается, HTTPS по-прежнему проверяет нужное имя хоста, и всё работает после перезагрузки или перехода с Wi-Fi на мобильную сеть. Последняя проверка ловит маршрут, который существует только до тех пор, пока Android заново не поднимет туннель.

  • До любой правки убедитесь, что владелец сети разрешает адресат.
  • Поместите маршрут в профиль, который загружает клиент, затем импортируйте заново и переподключитесь.
  • Проверяйте через порт службы, внутри области на приложение, для нужного семейства адресов.
  • Исправляйте пересылку, обратную маршрутизацию и iroute на сервере, а не на телефоне.
  • Держите копию для отката и перепроверьте после перезагрузки.

Похожие статьи