Нажмите «подключиться», и на машине Linux меняются три вещи: появляется интерфейс, устанавливаются маршруты и резолвер начинает отвечать иначе. Большинство ошибок настройки возникают из-за того, что одно из этих трёх происходит без остальных, или из-за того, что две программы не сходятся в том, кому они принадлежат. Понимание последовательности объясняет сбой быстрее, чем чтение вывода журнала клиента.

Интерфейс появляется раньше, чем что-либо заработает

Клиент туннеля открывает виртуальный интерфейс и передаёт ему пакеты. Устройство TUN переносит пакеты IP, что нужно маршрутизируемому VPN; устройство TAP переносит кадры Ethernet, что нужно мостовой схеме. Модуль ядра предоставляет устройство, и клиент владеет им всё время, пока длится сеанс.

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

Оставьте предложенный режим интерфейса без изменений. Превращение профиля TUN в TAP не делает маршрутизируемый сервер мостовым и обычно даёт соединение, которое устанавливается и ничего не передаёт.

Маршруты устанавливает тот, кому принадлежит туннель

Маршруты — это второе изменение, и их принадлежность важнее содержимого. Профиль NetworkManager, модуль systemd и клиент, запущенный вручную, могут устанавливать маршруты, и если двое из них делают это одновременно, получается таблица, которую потом никто не сможет объяснить.

ip -br addr show
ip route show
ip -6 route show

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

Читайте таблицу, а не предполагайте. Более конкретный маршрут или правило политики может направлять трафик в туннель, пока маршрут по умолчанию всё ещё указывает на физический интерфейс, что выглядит противоречиво, пока не прочитаешь всю таблицу. Такое сочетание нормально для раздельного туннеля и сбивает с толку того, кто ждёт, что одна строка опишет схему. Ищите маршрут, соответствующий вашему реальному назначению, а не тот, что соответствует диаграмме.

Резолвер переходит в другие руки

DNS — третье изменение и то, которым чаще всего управляют где-то, куда вы не заглядывали. На настольной системе NetworkManager может передавать настройки резолвера для каждого соединения. В системе с systemd-resolved настройки применяются для каждого звена, и /etc/resolv.conf может быть заглушкой или символической ссылкой, а не файлом, который стоит редактировать.

resolvectl status
readlink -f /etc/resolv.conf
cat /etc/resolv.conf

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

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

Один управляющий на соединение

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

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

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

Что проверять, когда всё поднято, но не работает

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

nmcli connection show --active
nmcli device status
wg show

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

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

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