Вопрос или проблема
У меня возникла проблема с настройкой Wireguard VPN на моем роутере, который я могу использовать для доступа к моей домашней сети, когда я нахожусь вдали, вместе с NordVPN, работающим на моем сервере Ubuntu.
Когда я подключаюсь к WG VPN, мой виртуальный IP — 10.0.0.2/24, устройства в локальной сети находятся в диапазоне 192.168.8.x. Я могу достичь всех моих LAN-устройств через VPN, кроме случаев, когда сервер подключен к Nord. Для доступа к этому серверу мне нужно выполнить на сервере:
sudo ip route add 10.0.0.0/24 via 192.168.8.1
Я пробовал настроить сервис или cron, который запускает скрипт при загрузке для добавления этого маршрута, и это работает до тех пор, пока я не подключусь к NordVPN. Если я настрою скрипт, который могу использовать с sudo для подключения и затем добавления маршрута, это также сработает, но маршруты, похоже, стираются, когда VPN нуждается в повторном подключении после потери интернета.
Есть ли способ автоматически добавить этот маршрут снова, если он стирается? Есть ли способ предотвратить его стирание NordVPN? Может быть, я делаю что-то не так? Буду признателен за любую помощь.
Спасибо.
Редактировать: На данный момент у меня есть обходной путь, когда я могу подключиться по SSH к другому устройству в сети LAN после подключения к WG, а затем подключиться по SSH к серверу, чтобы выполнить команду маршрута IP. Не идеально…
Я написал bash-скрипт, чтобы помочь с этим: https://github.com/waltinator/net-o-matic
Он отслеживает соединение и, когда соединение теряется, выполняет указанное пользователем действие, пытаясь восстановить соединение или сделать что-то другое.
Вы можете адаптировать скрипт для срабатывания на любое событие, обнаруженное man ip-monitor
.
.
Ответ или решение
Теория
Определим проблему: вы испытываете трудности с поддержанием маршрута сети при использовании Wireguard VPN вместе с NordVPN на сервере Ubuntu. При подключении к VPN Wireguard ваш виртуальный IP-адрес находится в сети 10.0.0.2/24, а устройства локальной сети — в 192.168.8.x. Для доступа к серверу с активным соединением NordVPN вам требуется добавлять маршрут с помощью команды sudo ip route add 10.0.0.0/24 via 192.168.8.1
. Однако маршрут теряется при переподключении NordVPN после потери соединения с интернетом.
Для автоматизации восстановления маршрута после его удаления существует несколько стратегий. Рассмотрим детали.
Пример
-
Сценарий перезапуска:
Один из подходов заключается в создании сценария, который будет автоматически добавлять маршрут при изменения состояния сети. Командаip monitor
в Ubuntu позволяет отслеживать изменения состояния сети и инициировать действия в ответ на конкретные события. Используяip monitor
, можно создать условие, которое будет вызывать сценарий для добавления маршрута при потере маршрута. -
Использование NetworkManager:
Если сервер использует NetworkManager для управления соединениями, можно создать сценарий, который будет добавляться через NetworkManager-dispatcher. Dispatcher предоставляет возможность запускать скрипты при изменении состояния сети. -
Сценарий Cron:
В некоторых случаях можно настроить регулярное выполнение сценария с помощью cron, которое будет добавлять маршрут через заданный интервал времени. Это не лучший подход с точки зрения производительности, но может служить простым решением.
Приложение
-
Настройка ip monitor:
Создайте сценарий-шаблон, который будет использоватьip monitor
для отслеживания изменений в таблице маршрутизации:#!/bin/bash ip monitor route | grep --line-buffered "10.0.0.0/24" | \ while read line; do # Проверка, что маршрут был удален: if ! ip route | grep -q "10.0.0.0/24"; then sudo ip route add 10.0.0.0/24 via 192.168.8.1 fi done
Убедитесь, что сценарий запускается с соответствующими привилегиями (например, через systemd или nohup для фоновой работы).
-
Настройка NetworkManager-dispatcher:
Создайте сценарий в директории/etc/NetworkManager/dispatcher.d/
. Например:#!/bin/bash if [[ "$2" == "up" ]] || [[ "$2" == "vpn-up" ]]; then if ! ip route | grep -q "10.0.0.0/24"; then sudo ip route add 10.0.0.0/24 via 192.168.8.1 fi fi
Сделайте сценарий исполняемым с помощью команды
chmod +x /etc/NetworkManager/dispatcher.d/ваш_сценарий
. -
Настройка cron:
Создайте cron-задание для регулярного выполнения:*/5 * * * * /usr/local/bin/add_route_if_missing.sh
Здесь
add_route_if_missing.sh
— сценарий, который проверяет наличие маршрута и добавляет его при необходимости.
Заключение
Автоматическое добавление маршрута при изменении сетевого состояния — это важная задача для устойчивого обеспечения связности сети. В зависимости от использования, может быть применен один или несколько из вышеописанных подходов. Убедитесь в достаточности прав и корректности написания сценариев, а также протестируйте их работу в различных сценариях изменения сети, чтобы избежать возможных ошибок в рабочей среде. Поддержка маршрутизации в сложной сети с несколькими VPN требует тщательного проектирования и регулярного тестирования, чтобы гарантировать стабильную работу.