Какой-то частный сервис отвечает через VPN, а обычный интернет-трафик ведёт себя совсем не так, как на машине коллеги, и так и хочется заключить, что клиент Ubuntu сломан. Этот вывод пропускает один шаг. Работающая частная операция и отличающийся публичный путь — это два наблюдения, и разница обычно кроется в политике трафика, установленной каждым клиентом, а не в самом клиенте.

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

Сначала сохранённый профиль, затем фактическое состояние

Импортированное подключение OpenVPN становится отдельным профилем NetworkManager. Файл .ovpn, из которого оно получено, перестаёт быть источником истины в момент завершения импорта, поэтому последующее редактирование этого файла ничего не меняет в используемом подключении. Это первое место, где сравнение идёт не так, и происходит это молча.

nmcli -f connection.id,connection.uuid,ipv4.never-default,ipv4.routes,ipv4.dns connection show office-vpn

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

Затем посмотрите, что система на самом деле сделала с этим намерением, включая правила политики и все таблицы, а не только основную. Сохранённые свойства — это входные данные, а установленные таблицы — результат.

ip -4 rule show
ip -4 route show table all

Два назначения, одно сравнение

Выберите одно работающее частное назначение и одно обычное публичное, затем спросите у ядра, какой путь выберет каждое. Именно выполнение этого на обеих машинах превращает расплывчатое различие в конкретное.

ip -4 route get 10.40.0.20
ip -4 route get 203.0.113.20

Адреса приведены как примеры, замените их своими; важен набор из двух, а не числа. Сравнивайте интерфейс, адрес источника и таблицу, указанные в каждом выводе. Когда частный запрос указывает на туннель и публичный тоже указывает на туннель, у вас полный туннель, а у другого клиента может быть раздельный, или наоборот.

Не требуйте, чтобы два клиента печатали одинаковый текст. redirect-gateway def1 в OpenVPN обычно выражается двумя маршрутами половинного префикса вместо одного маршрута по умолчанию, и менеджер, который показывает их иначе, от этого не становится неправым. Оценивайте покрытие, которое показывают запросы, а не форматирование.

Где два клиента законно различаются

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

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

DNS — вторая ось, и она отказывает независимо. Правильный маршрут всё равно может отправлять запросы резолверу, который не может ответить за частную зону, а правильный резолвер не исправляет неверный маршрут. Проверяйте и то и другое, и считайте частное имя, которое разрешается, тогда как частный адрес нет, доказательством того, что два слоя решаются по отдельности.

Держите сравнение чистым

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

Зафиксируйте и всё остальное: тот же эндпоинт, тот же аккаунт, те же версии программ, та же сеть. Успех на ноутбуке коллеги с Windows проверяет другой клиент, другую интеграцию с резолвером и, возможно, другой профиль сервера, поэтому это не доказательство в отношении менеджера Ubuntu.

Справочник настроек IPv4 в NetworkManager точно определяет never-default и свойства сохранённых маршрутов, и его стоит прочитать, прежде чем менять управляемое значение. И помните о границах этого сравнения: оно касается IPv4 и ничего не говорит о соответствующей политике IPv6, у которой свои умолчания и свой способ удивлять.

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