Есть два интерфейса с разными IP'шниками. Пусть будет eth1 (1.1.1.1 и шлюз 1.1.1.254) и eth2 (2.2.2.2 и шлюз 2.2.2.254)
Требуется для локальных сокетов рулить исходящим IP'шником через iptables. Иначе говоря, у меня стоит route add default gw 2.2.2.254 но для некоторых адресов и портов я хочу направлять соединения через другой интерфейс. Пишу:
iptables -t mangle -A OUTPUT --dport 22 -j ROUTE --gw 1.1.1.254
и пакеты отлично уходят через eth1 НО с исходящим адресом интерфейса eth2 (2.2.2.2), а нужно чтобы уходили, разумеется, с адресом 1.1.1.1
В доке на netfilter сказано:
The NF_IP_LOCAL_OUT [5] hook is called for locally generated packets. Here You can see that routing occurs after this hook is called: in fact, the routing code is called first (to figure out the source IP address and some IP options), and called again if the packet is altered.
Т.е. в каких-то случаях можно повторно запустить routing code, чтобы правильный локальный адрес выбрался? Как это сделать?