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

Что установил клиент и почему исчезла LAN

Начните с чтения таблицы, а не интерфейса клиента. В macOS netstat -rn печатает всю таблицу, а route -n get default называет интерфейс и метрику, которые сейчас побеждают; в Linux пара — ip route show и ip route get 8.8.8.8. Оба отвечают на один вопрос: какая запись понесёт пакет, который не совпадает ни с чем более конкретным.

Имя туннельного устройства не фиксировано. Профиль IKEv2 в macOS обычно показывает utun с номером, клиент SSL VPN показывает ppp0, а OpenVPN показывает tun0. Два маршрута по умолчанию могут присутствовать одновременно с разными метриками, а запись клиента может перехватить управление только после переподключения, а не в момент появления. Поэтому два снимка таблицы с разницей в пять минут могут рассказывать разные истории.

Почему маршрут по умолчанию туннеля должен уйти первым

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

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

Последовательность в macOS и в Linux

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

sudo route delete -net default -interface utun4
sudo route add -net 0.0.0.0 -interface en0
sudo route add -net 10.20.0.0 -netmask 255.255.0.0 -interface utun4

В Linux тот же порядок использует другой инструмент: шлюз LAN для маршрута по умолчанию и туннельное устройство для офисного префикса. Старая команда route всё ещё принимает старый синтаксис, но ip route — это форма, соответствующая текущей документации.

sudo ip route del default dev tun0
sudo ip route add default via 192.168.50.1
sudo ip route add 10.20.0.0/16 dev tun0

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

Префиксы, резолвер и DMZ, которая остаётся тёмной

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

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

У клиента SSL в Linux есть отказ, специфичный для одного поля, о котором стоит знать: туннель подключается, офисная LAN отвечает, а один диапазон DMZ остаётся тёмным. Недостающий кусок — маршрут для этого диапазона через шлюз туннеля, а шлюз различается от машины к машине, поэтому жёстко прописанный адрес — это способ, которым ломается следующий ноутбук. Выведите его из состояния клиента и оставьте команду самодокументируемой:

PEER=$(ip -4 addr show dev ppp0 | awk '/peer/ {print $4}' | cut -d/ -f1)
sudo ip route add 192.168.30.0/24 via "$PEER"

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

После следующего подключения и когда прекратить делать это локально

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

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

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

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