У меня есть 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
Согласно комментариям, подход был надежным:
- Дайте указание ОС просмотреть таблицу 42 для принятия решений о маршрутизации любого пакета со значением
fwmark
42:ip rule add fwmark 42 table 42
- Добавьте в эту таблицу альтернативный маршрут по умолчанию:
ip route add default via 192.168.1.2 dev eno1 table 42 metric 200
- Пометьте (в
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-адрес вторичного маршрутизатора и, вероятно, заставляла маршрутизатор отбрасывать пакет.