Как мне сохранить приоритет моего правила?

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

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

ip addr add 192.168.1.113 dev enp1s0 label enp1s0:0
ip rule add from 192.168.1.113 table 402
ip route add default via 192.168.1.1 dev enp1s0:0 table 402

Это работает с openvpn, но не работает с wireguard, потому что мой клиент wireguard добавляет несколько правил перед моим правилом выше.

0:  from all lookup local
32761:  from all lookup main suppress_prefixlength 0
32762:  not from all fwmark 0xca6c lookup 51820
32763:  from 192.168.1.113 lookup 402
32766:  from all lookup main
32767:  from all lookup default

Если я добавлю правило from 192.168.1.113 lookup 402 после подключения wireguard, то я смогу подключиться к серверу по SSH. Так что я предполагаю, что это вопрос приоритета.

Как я могу убедиться, что мое правило (32763) сохраняет приоритет даже после подключения wireguard и добавления тех нескольких (32761, 32762) правил?

Ответ или решение

Для обеспечения приоритетного выполнения правила маршрутизации при использовании WireGuard необходимо понимать, как система управляет правилами маршрутизации. Правила маршрутизации в Linux обрабатываются в порядке их добавления — чем ниже номер правила, тем выше его приоритет. Это означает, что новое правило может затушевать или переопределить существующее, если оно добавляется после.

Инструкция по сохранению приоритета правила маршрутизации

1. Установите правила маршрутизации после подключения WireGuard

Одним из решений является автоматизация добавления вашего правила после установления соединения с WireGuard. Это можно сделать с помощью скрипта:

  • Создайте скрипт (например, add_route_after_wireguard.sh):

    #!/bin/bash
    ip rule add from 192.168.1.113 lookup 402
  • Сделайте скрипт исполняемым:

    chmod +x add_route_after_wireguard.sh
  • Добавьте его в конфигурацию WireGuard:
    В файле конфигурации WireGuard добавьте строку, которая вызовет ваш скрипт после успешного подключения:

    PostUp = /path/to/add_route_after_wireguard.sh

2. Используйте более низкий номер правила

Если возможно, задайте вашему правилу более низкий номер, чтобы оно имело приоритет над другими правилами. Для этого можно использовать команду ip rule с указанием явного номера:

ip rule add from 192.168.1.113 lookup 402 prio 32760

3. Установите управление с помощью A systemd service

Если у вас есть systemd, вы можете создать сервис, который будет следить за состоянием WireGuard и пересоздавать ваши приоритетные правила после его подключения:

  • Создайте файл сервиса, например, /etc/systemd/system/ensure_route.service:

    [Unit]
    Description=Ensure SSH Routing Rule
    After=wg-quick@wg0.service
    
    [Service]
    ExecStart=/path/to/add_route_after_wireguard.sh
    Type=oneshot
    RemainAfterExit=yes
    
    [Install]
    WantedBy=multi-user.target
  • Активируйте и запустите сервис:

    systemctl enable ensure_route.service
    systemctl start ensure_route.service

4. Проверьте и протестируйте

После внесения изменений убедитесь, что ваше правило действительно добавляется после установления соединения с WireGuard. Используйте команду:

ip rule show

Убедитесь, что ваше правило (from 192.168.1.113 lookup 402) отображается с правильным приоритетом.

Заключение

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

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

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