Один сетевой интерфейс с 2 шлюзами

Один сетевой интерфейс с 2 шлюзами

У меня есть 2 маршрутизатора, подключенных через кабель Ethernet. У второго маршрутизатора отключен DHCP-сервер, и у него IP-адрес 192.168.1.2. У обоих маршрутизаторов разный интернет. Если я создам еще один шлюз по умолчанию с более низкой метрикой, то смогу использовать вторую сеть как основную.

ip route add default via 192.168.1.2 dev eno1 metric 10

Работает так, как и ожидалось.

Теперь я пытаюсь использовать обе сети одновременно. Возможно ли создать пользователя linux и направить весь трафик пользователя через вторичный шлюз? Я пробовал следующие команды:

useradd kreator
ip rule add fwmark 42 table 42
ip route add default via 192.168.1.2 dev eno1 table 42 metric 200
iptables -t mangle -A OUTPUT -m owner --uid-owner kreator -j MARK --set-mark 42
iptables -t nat -A POSTROUTING -o eno1 -m mark --mark 42 -j SNAT --to-source 192.168.1.2

Потом я запустил sudo -u kreator ping google.com, и он ничего не зарегистрировал. Что я упускаю?

Я использую Arch Linux, а сетевой менеджер — это демон NetworkManager.

решение1

Согласно комментариям, подход был надежным:

  1. Дайте указание ОС просмотреть таблицу 42 для принятия решений о маршрутизации любого пакета со значением fwmark42:ip rule add fwmark 42 table 42
  2. Добавьте в эту таблицу альтернативный маршрут по умолчанию:ip route add default via 192.168.1.2 dev eno1 table 42 metric 200
  3. Пометьте (в mangleтаблице) все исходящие пакеты (в OUTPUTцепочке), исходящие из процесса, принадлежащего пользователю, kreatorследующим образом 42:iptables -t mangle -A OUTPUT -m owner --uid-owner kreator -j MARK --set-mark 42

На этом этапе пакеты, исходящие от пользователя, kreatorмаркируются и маршрутизируются по альтернативному маршруту по умолчанию в таблице 42, как и требовалось. Дополнительная iptablesкоманда, корректирующая POSTROUTINGцепочку, была ошибочной, поскольку она меняла исходный IP на IP-адрес вторичного маршрутизатора и, вероятно, заставляла маршрутизатор отбрасывать пакет.

Связанный контент