Почему локальный маршрут побеждает маршрут по умолчанию VPN
Подключённая подсеть и широкий маршрут по умолчанию через туннель — разные виды маршрутов. Прочитайте выбор ядра, а затем устраните перекрытие, не нагромождая хост-маршруты.
Принтер на столе продолжает работать после поднятия туннеля, а сервер в другом офисе тихо разрешается во что-то локальное. Оба поведения происходят из одного правила: побеждает самый конкретный маршрут, а непосредственно подключённый префикс максимально конкретен. Обычно это и есть нужный дизайн, и именно так дублирующий частный диапазон крадёт удалённый адрес. Если прочитать выбор ядра первым, загадочный сбой превращается в сравнение префиксов.
Подключённый префикс конкретнее маршрута по умолчанию
Туннель обычно устанавливает маршрут по умолчанию или набор префиксов, тогда как локальный интерфейс несёт подключённый префикс и маршрут ко всей локальной сети. Между ними решает совпадение самого длинного префикса, поэтому назначение внутри префикса локальной сети никогда не попадает в туннель. Поэтому принтер, страница администрирования маршрутизатора и локальный NAS остаются доступны, пока VPN включён. Поэтому же удалённый ресурс внутри перекрывающегося диапазона уходит на неверную машину.
Частное адресное пространство не уникально, и выбор одного и того же префикса двумя площадками достаточно обычен, чтобы это планировать. Когда диапазоны перекрываются, локальный ответ приходит быстро и выглядит авторитетно, поэтому сбой легко прочитать как проблему входа. Назначение ответило, просто не то, которое вы имели в виду.
Прочитайте выбор, который сделало бы ядро
Спросите у ядра, какой маршрут оно использовало бы для точного назначения, вместо чтения таблицы сверху. Затем поищите правила политики, которые могли бы выбрать другую таблицу. Две команды отвечают на оба вопроса за несколько секунд.
ip route get 10.20.30.41
ip route show table all | grep -E '10\.|default'
ip rule show
Первый вывод называет интерфейс, следующий переход и адрес источника, которые ядро использовало бы, и это тот ответ, который важен. Значение dev, указывающее на локальный мост, означает, что пакет никогда не входит в туннель, что бы ни утверждала панель состояния клиента VPN. Отфильтрованный список таблиц показывает, держит ли другая таблица тот же префикс, а список правил показывает порядок, в котором эти таблицы запрашиваются. Правило политики может отправить префикс через определённую таблицу даже когда основная таблица не согласна, поэтому этот порядок — часть ответа.
Локальный доступ — отдельное разрешение
Иметь маршрут — не то же самое, что иметь разрешение им пользоваться. Большинство клиентов умеют блокировать локальную сетевую связь, пока туннель поднят, и эта настройка — решение политики, а не артефакт маршрутизации. Когда доверенный сервис поблизости входит в дизайн, включите поддерживаемый параметр локального доступа вместо того, чтобы изобретать маршруты. Когда устройство в публичной сети Wi-Fi, оставьте его выключенным.
Два уровня отказывают по-разному. Заблокированный локальный путь даёт тайм-аут, хотя маршрут существует, а перекрывающийся маршрут даёт ответ от неверного хоста. Различить их стоит одного запроса и экономит половину дня правок брандмауэра, а схема пересылки описана в заметки strongSwan о пересылке.
Устраните перекрытие без нагромождения хост-маршрутов
Хост-маршрут для одного адреса выглядит как исправление перекрытия и ломается в тот момент, когда нужен второй адрес из того же диапазона. После двадцати таких никто не может сказать, какой префикс главный. Устойчивые решения — смена адресации, документированная топология, избегающая дублирующего диапазона, или трансляция на одном конце. Каждое стоит времени на планирование один раз, а не обслуживания навсегда.
Если временный хост-маршрут действительно нужен, запишите рядом причину, владельца и дату, чтобы его можно было позже удалить. Затем проверьте точный адрес и сервис плюс публичное назначение, потому что изменение локального доступа, которое тихо исключает из туннеля посторонние приложения, хуже исходной неисправности. Держите локальный префикс и удалённый префикс записанными отдельно; эта привычка не даёт рабочему локальному ping ходить по рукам как доказательство доступности удалённого офиса.