Вопрос или проблема
Я знаю, что это похоже на много вопросов об OpenVPN и таблице маршрутов, однако я считаю, что это отличается от остальных — или, по крайней мере, я еще не нашел дубликатов.
В моем случае, после подключения к серверу OpenVPN, я заметил, что шлюз по умолчанию изменился на 255.255.255.0 (верно, шлюз, а не маска). Ниже представлена моя таблица маршрутов.
Перед подключением к серверу OpenVPN:
Таблица маршрутизации IP ядра
Назначение Шлюз Маска Флаги Метрика Ссылка Использ. Интерфейс
0.0.0.0 172.16.15.254 0.0.0.0 UG 20600 0 0 wlp0s20f3
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 wlp0s20f3
172.16.8.0 0.0.0.0 255.255.248.0 U 600 0 0 wlp0s20f3
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-8c249cf54f1c
После подключения к серверу OpenVPN:
Таблица маршрутизации IP ядра
Назначение Шлюз Маска Флаги Метрика Ссылка Использ. Интерфейс
0.0.0.0 255.255.255.0 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 172.16.15.254 0.0.0.0 UG 600 0 0 wlp0s20f3
10.8.0.0 255.255.255.0 255.255.255.0 UG 0 0 0 tun0
128.0.0.0 255.255.255.0 128.0.0.0 UG 0 0 0 tun0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 wlp0s20f3
172.16.8.0 0.0.0.0 255.255.248.0 U 600 0 0 wlp0s20f3
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-8c249cf54f1c
192.168.100.0 255.255.255.0 255.255.255.0 UG 0 0 0 tun0
_VPN_server_IP_ 172.16.15.254 255.255.255.255 UGH 0 0 0 wlp0s20f3
255.255.255.0 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
Это работает, как и ожидалось: OpenVPN направляет весь мой интернет-трафик через сервер, а также весь трафик на удаленную локальную сеть (192.168.100.0/24). Мне просто стало непонятно, когда я увидел, что шлюз равен 255.255.255.0. Я бы понял это, если бы маска была 255.255.255.0, но это шлюз, установленный на 255.255.255.0. Как это понимать?
Если я удалю первую запись с помощью ip route del 0.0.0.0/1 via 255.255.255.0 dev tun0
, интернет действительно перестает маршрутизироваться через VPN. Я попытался поиграть с этим, добавив обратно с помощью
ip route add 0.0.0.0/1 via _VPNserver_IP_ dev tun0
или используя IP сервера в подсети VPN (10.8.0.0/24),
ip route add 0.0.0.0/1 via 10.8.0.1 dev tun0
ни одно из решений не сработало. Поэтому я подозреваю, что это какой-то трюк, который использует OpenVPN для направления трафика к серверу. Любая информация будет полезна.
Как предположил @A.B, это действительно связано с неправильной конфигурацией: я забыл указать топологию как подсеть, поэтому она была по умолчанию установлена на net30. В результате в журнале появилась эта предупреждение:
"Пт апр. 29 22:38:56 2022 ВНИМАНИЕ: Поскольку вы используете --dev
tun с топологией «точка-точка», второй аргумент к
--ifconfig должен быть IP-адресом. Вы используете что-то
(255.255.255.0), что больше похоже на маску сети. (умолчать это
предупреждение с помощью --ifconfig-nowarn)".
После изменения на подсеть проблема была устранена. Вот как в моей таблице маршрутов выглядят записи, связанные с tun0
:
10.8.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
192.168.0.0 10.8.0.1 255.255.0.0 UG 0 0 0 tun0
Ответ или решение
Понимание маршрутизации в OpenVPN: Проблема с шлюзом 255.255.255.0
При использовании OpenVPN для соединения с VPN-сервером пользователи могут столкнуться с различными необычными конфигурациями маршрутизации. В данном случае ключевым моментом является наблюдение о том, что шлюз изменяется на значение 255.255.255.0. Это решение рассматривает проблему, затрагивает детали маршрутизации и предлагает пути к её решению.
Контекст проблемы
После подключения к OpenVPN пользователи могли заметить, что новый маршрут с шлюзом 255.255.255.0 добавляется в таблицу маршрутов. На первый взгляд, это может вызвать недоумение, так как обычно шлюзом назначается IP-адрес, тогда как 255.255.255.0 — это маска подсети.
Анализ маршрутизационной таблицы
Маршрутизация до и после соединения с OpenVPN представлена ниже:
Перед подключением к OpenVPN:
0.0.0.0 172.16.15.254 0.0.0.0 UG
...
После подключения к OpenVPN:
0.0.0.0 255.255.255.0 128.0.0.0 UG
...
Из приведенной таблицы видно, что маршрут с шлюзом 255.255.255.0 имеет флаг ‘UG’, что указывает на то, что это маршрут к шлюзу. Однако, он не должен указывать на маску подсети.
Проблема конфигурации
Как упомянуто в вопросе, причина появления такого маршрута связана с конфигурацией OpenVPN. Известно, что при использовании --dev tun
с точкой-точкой (point-to-point) топологией, OpenVPN ожидает адреса, а не маску подсети в качестве второго аргумента команды --ifconfig
.
В данном случае, если топология не была установлена правильно, OpenVPN может использовать значение 255.255.255.0 из соображений конфигурации, что приводит к некорректной маршрутизации.
Решение проблемы
Решением данной проблемы является изменение конфигурации OpenVPN. Необходимо использовать параметр --topology subnet
, что позволит корректно задать маршрут и избежать путаницы в конфигурации. После этого, таблица маршрутизации должна выглядеть следующим образом:
10.8.0.0 0.0.0.0 255.255.255.0 U
Теперь шлюз будет корректно указывать на IP-адрес VPN-сервера, убрав из маршрутизации любые маски подсетей как значения шлюза.
Заключение
Проблема с шлюзом, имеющим значение 255.255.255.0, в OpenVPN является следствием неправильной конфигурации топологии. Убедившись, что используется правильная топология (subnet), можно избежать данной ситуации и гарантировать корректную работу маршрутизации. Следует всегда проверять логи и настройки OpenVPN на наличие предупреждений, что поможет заранее выявить и устранить возможные проблемы.
Если данная информация вам была полезна, просим продолжать следить за обновлениями в мире сетевых технологий и OpenVPN для углубления ваших знаний.