Правила межсетевого экрана принимают первый и последний адрес, например с 192.168.0.200 по 192.168.0.255, а маршруты — нет. В записи маршрута есть место только для сети и маски, значит, непрерывный диапазон должен стать одним или несколькими выровненными префиксами, прежде чем OpenVPN его установит. Профиль, который соединяет route-nopull с невыровненным интервалом, — это место, где сбой обычно прячется, потому что файл разбирается, а ни один маршрут не совпадает. Приведите блоки в порядок, и сбой станет виден одной командой.

Миф: диапазон — это маршрут

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

Диапазон, не выровненный по префиксу, не является сжатым маршрутом. Это другой тип объекта, и обращение с ним как с маршрутом — это место, где начинается тихий сбой.

Выравнивание — это арифметика, а не стиль

Размеры блоков задаются длиной префикса. /29 может начинаться только с адреса, кратного 8, /28 — с кратного 16, /27 — с кратного 32. Сдвиньте блок с его границы, и маска покроет другой набор адресов, чем вы задумали.

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

Два человека, делающих это вручную, должны прийти к одному результату. Расхождение означает, что кто-то допустил невыровненное начало.

Пройдите 200 до 255

StepStartBlock that fitsLine for the profile
1.200, multiple of 8/29, 8 addresses192.168.0.200 255.255.255.248
2.208, multiple of 16/28, 16 addresses192.168.0.208 255.255.255.240
3.224, multiple of 32/27, 32 addresses192.168.0.224 255.255.255.224

Диапазон начинается с .200, что кратно 8, поэтому первый блок — /29 от .200 до .207. После этих восьми адресов первое свободное значение — .208, оно делится на 16, поэтому /28 занимает .208 до .223. Остаётся .224 до .255, тридцать два адреса, начинающиеся с кратного 32, то есть /27. Эти три строки — весь разбор.

Запишите их строками маршрутов, а не прозой. Профиль, содержащий только первую строку, покрывает восемь адресов и оставляет остальные вне туннеля.

route-nopull
route 192.168.0.200 255.255.255.248
route 192.168.0.208 255.255.255.240
route 192.168.0.224 255.255.255.224

Последний блок требует проверки границы. Внутри 192.168.0.224/27 .224 — это адрес сети, а .255 — широковещательный адрес, поэтому узел, который должен отвечать на .255, покрыт префиксом и всё ещё недоступен. Перенесите этот узел или разделите диапазон иначе, вместо того чтобы маршрутизировать блок и надеяться.

Что route-nopull делает с картиной

Добавляйте route-nopull только тогда, когда продвигаемые сервером маршруты нежелательны. Без директивы продвигаемые маршруты и эти строки сосуществуют, и побеждает самый конкретный префикс. С ней исчезают и продвигаемые параметры DNS и DHCP, поэтому внутреннему разрешению имён нужна своя конфигурация. Этот побочный эффект удивляет тех, кто добавил директиву, чтобы исправить проблему с маршрутом.

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

Проверки, которые ловят обычные ошибки

Проверьте, что каждая маска — один непрерывный ряд единиц. Значение 255.255.255.248 проходит, а 255.255.255.200 не проходит, и маска, которая не является непрерывной, отклоняется или читается неверно. Затем подтвердите путь для одного адреса в каждом блоке.

ip route get 192.168.0.205
ip route get 192.168.0.220
ip route get 192.168.0.240

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

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

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