Вопрос или проблема
У меня возникла проблема с настройкой VPN Wireguard на моем роутере, который я могу использовать для доступа к домашней сети, когда я в отъезде, которая конфликтует с работой NordVPN на моем сервере Ubuntu.
Когда я подключаюсь к WG VPN, мой виртуальный IP — 10.0.0.2/24, устройства LAN — 192.168.8.x. Я могу подключиться ко всем устройствам LAN через VPN, кроме случая, когда сервер подключен к Nord. Чтобы подключиться к этому серверу, мне нужно запустить на сервере:
sudo ip route add 10.0.0.0/24 via 192.168.8.1
Я пробовал создать службу или crontab, который запускает скрипт при старте для добавления этого маршрута, и это работает до тех пор, пока я не подключусь к NordVPN. Если я настрою скрипт, который можно использовать с sudo для подключения и затем добавления маршрута, это тоже будет работать, но кажется, что маршрут сбрасывается, когда VPN нужно переподключиться после потери интернета.
Есть ли способ автоматически добавлять этот маршрут, если он сбрасывается? Есть ли способ предотвратить его сброс NordVPN? Я неправильно к этому подхожу? Буду признателен за любую помощь.
Спасибо.
Правка: На данный момент у меня есть временное решение, где я могу подключиться по ssh к другому устройству в сети LAN, когда я подключен к WG, а затем по ssh подключиться к серверу, чтобы выполнить мою команду маршрутизации IP. Не идеально…
Ответ или решение
Автоматизация восстановления маршрута в системе Ubuntu
Теория
Проблема, с которой вы столкнулись, связана с конфликтом маршрутизации при использовании двух VPN-связей: Wireguard (WG) для доступа к домашней сети и NordVPN для обеспечения анонимности и безопасности соединения. Настройка маршрутизации важна для корректной работы обеих сетей: когда одно VPN-соединение временно отключает или изменяет маршрутизацию, это может нарушить доступность вашей домашней сети через Wireguard.
Обычно, при подключении VPN, это соединение меняет таблицы маршрутизации, чтобы весь трафик направлялся через VPN-туннель. Это может приводить к тому, что установка пользовательских маршрутов "перетирается", и они становятся недоступными.
Пример
В вашем случае, при подключении к Wireguard, ваша машина обращается к домашней сети через IP 10.0.0.2/24, а все устройства в локальной сети находятся в диапазоне 192.168.8.x. Чтобы получить доступ к устройству (или серверу) в этой сети, необходимо явно указать маршрут:
sudo ip route add 10.0.0.0/24 via 192.168.8.1
Однако при подключении к NordVPN этот маршрут вероятно исчезает, потому что конфигурация NordVPN меняет таблицы маршрутизации системы. В случае разрыва соединения с NordVPN или его переподключения, маршруты, добавленные вами вручную, могут быть утрачены.
Применение
Для автоматизации процесса добавления данного маршрута при его потере предлагается несколько решений:
-
Скрипт на основе мониторинга событий сети:
Можно создать bash-скрипт, который будет периодически проверять наличие желаемого маршрута и восстанавливать его при обнаружении отсутствия. Пример скрипта, который можно добавить в crontab для регулярного выполнения:
#!/bin/bash # Указанный маршрут ROUTE="10.0.0.0/24" GATEWAY="192.168.8.1" # Проверка, установлен ли маршрут ip route | grep -q "${ROUTE} via ${GATEWAY}" # Если маршрут отсутствует, добавляем его if [ $? -ne 0 ]; then echo "Маршрут отсутствует. Добавляем обратно." sudo ip route add ${ROUTE} via ${GATEWAY} fi
Эту команду можно добавить в crontab для периодического выполнения, например, каждую минуту:
* * * * * /path/to/your/script.sh
-
Systemd сервис для мониторинга изменений VPN:
Создайте systemd-юнит, который будет отслеживать событие изменения сети и запускаться, соответственно, для восстановления маршрута:
Создайте файл юнита
/etc/systemd/system/restore-route.service
:[Unit] Description=Автоматическое восстановление маршрута после изменения сети After=network.target [Service] Type=oneshot ExecStart=/path/to/your/script.sh
Затем создайте юнит таймера
/etc/systemd/system/restore-route.timer
:[Unit] Description=Таймер для автоматического восстановления маршрута [Timer] OnUnitActiveSec=5min Unit=restore-route.service [Install] WantedBy=timers.target
Активируйте и запустите таймер:
sudo systemctl enable restore-route.timer sudo systemctl start restore-route.timer
-
Настройки NordVPN:
Возможно, можно настроить NordVPN так, чтобы он не менял таблицы маршрутизации, созданные вручную. Это может варьироваться в зависимости от используемого клиента NordVPN. Проверьте документацию NordVPN на предмет ручной настройки таблиц маршрутизации.
-
Ификаторы обработчика маршрута:
Напишите небольшой Python-скрипт, который будет использовать библиотеки типа
pyroute2
, чтобы следить за изменениями таблицы маршрутизации и автоматически добавлять необходимые маршруты при их удалении.
Каждое из предложенных решений требует определенного уровня знания системных вызовов и администрирования Linux. Главное, удостовериться, что любой автоматизированный скрипт или служба имеют достаточные права на изменение таблицы маршрутизации без необходимости вашего постоянного вмешательства.
Таким образом, автоматизация восстановления маршрутов не только устранит текущие проблемы, но и упростит ваше взаимодействие с сетью при использовании нескольких VPN-соединений.