Я пытаюсь использовать маршрутизацию на основе политик в своей системе, сеть проста с двумя независимыми интерфейсами с независимыми сетями… например
NIC1 = 172.31.3.x/24 NIC2 = 172.31.1.x/24
каждый интерфейс получил свой шлюз и создал таблицы в /etc/iproute2/rt_tables
Система также устанавливает структуру контейнера докеров с собственной сетью. изначально я не мог получить доступ к своим контейнерам и портам по сети… но благодаря симметричной / основанной на политике маршрутизации Docker я смог заставить ее работать.
вот команды, которые я запускаю в своей системе
ip route add default scope global nexthop via 172.31.3.185 dev eno1 weight 1 nexthop via 172.31.1.180 dev eno2 weight 2
ip route add 172.31.3.0/24 dev eno1 table eno1
ip route add default via 172.31.3.254 dev eno1 table eno1
ip rule add from 172.31.3.185/32 table eno1
ip rule add to 172.31.3.185/32 table eno1
ip route add 172.31.1.0/24 dev eno2 table eno2
ip route add default via 172.31.1.254 dev eno2 table eno2
ip rule add from 172.31.1.180/32 table eno2
ip rule add to 172.31.1.180/32 table eno2
а для работы докера — следующее
ip rule add fwmark 0x1 table eno1
iptables -t mangle -A PREROUTING -i eno1 -m conntrack --ctstate NEW --ctdir ORIGINAL -j CONNMARK --set-mark 0x1
ip rule add fwmark 0x2 table eno2
iptables -t mangle -A PREROUTING -i eno2 -m conntrack --ctstate NEW --ctdir ORIGINAL -j CONNMARK --set-mark 0x2
iptables -t mangle -A PREROUTING -m conntrack ! --ctstate NEW --ctdir REPLY -m connmark ! --mark 0x0 -j CONNMARK --restore-mark
iptables -t mangle -A OUTPUT -m conntrack ! --ctstate NEW --ctdir REPLY -m connmark ! --mark 0x0 -j CONNMARK --restore-mark
Все работает, за исключением случаев, когда я пытаюсь получить доступ к локальным IP-адресам 172.31.3.185 или 172.31.1.180 локально (из той же системы). Я не могу получить к ним доступ. он доступен извне. Помогите, пожалуйста, автору темы — Антону Данилову. Пожалуйста помоги
iptables linux-networking nat docker-networking
