Автоматизировать команду ip route add всякий раз, когда она удаляется.

Вопрос или проблема

У меня возникла проблема с настройкой 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 после потери соединения с интернетом.

Для автоматизации восстановления маршрута после его удаления существует несколько стратегий. Рассмотрим детали.

Пример

  1. Сценарий перезапуска:
    Один из подходов заключается в создании сценария, который будет автоматически добавлять маршрут при изменения состояния сети. Команда ip monitor в Ubuntu позволяет отслеживать изменения состояния сети и инициировать действия в ответ на конкретные события. Используя ip monitor, можно создать условие, которое будет вызывать сценарий для добавления маршрута при потере маршрута.

  2. Использование NetworkManager:
    Если сервер использует NetworkManager для управления соединениями, можно создать сценарий, который будет добавляться через NetworkManager-dispatcher. Dispatcher предоставляет возможность запускать скрипты при изменении состояния сети.

  3. Сценарий Cron:
    В некоторых случаях можно настроить регулярное выполнение сценария с помощью cron, которое будет добавлять маршрут через заданный интервал времени. Это не лучший подход с точки зрения производительности, но может служить простым решением.

Приложение

  1. Настройка 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 для фоновой работы).

  2. Настройка 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/ваш_сценарий.

  3. Настройка cron:
    Создайте cron-задание для регулярного выполнения:

    */5 * * * * /usr/local/bin/add_route_if_missing.sh

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

Заключение

Автоматическое добавление маршрута при изменении сетевого состояния — это важная задача для устойчивого обеспечения связности сети. В зависимости от использования, может быть применен один или несколько из вышеописанных подходов. Убедитесь в достаточности прав и корректности написания сценариев, а также протестируйте их работу в различных сценариях изменения сети, чтобы избежать возможных ошибок в рабочей среде. Поддержка маршрутизации в сложной сети с несколькими VPN требует тщательного проектирования и регулярного тестирования, чтобы гарантировать стабильную работу.

Оцените материал
Добавить комментарий

Капча загружается...