
Eu tenho uma interface chamada em2, que é uma interface nat. Quero rotear todos os pacotes cujo destino está em um ipset chamado test para em2.
Se eu não usar ipset e roteamento de política, funciona bem
iptables -A POSTROUTING -t nat -o em2 -j MASQUERADE
ip route add 1.1.1.1 via 10.1.1.13 dev em2
Mas se eu usar roteamento de política e ipset
iptables -A POSTROUTING -t nat -o em2 -j MASQUERADE
ip rule add fwmark 1 lookup 100
ip route add default via 10.1.1.13 dev em2 table 100
ipset create test hash:ip
ipset add test 1.1.1.1
iptables -t mangle -N TEST_ROUTE
iptables -t mangle -A TEST_ROUTE -m set --match-set test dst -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -j TEST
iptables -t mangle -A PREROUTING -j TEST
O problema é que todos os pacotes são roteados perfeitamente para em2, mas o pacote de resposta não pode ser recebido. De acordo com a captura do tcpdump, parece que o pacote de resposta não fez o nat corretamente. O que eu perdi?
A captura do tcpdump é mostrada a seguir, 10.1.1.14 é o endereço de em2
18:57:39.696669 IP 10.1.1.14.40169 > 1.1.1.1.53: 28094+ [1au] A? www.google.com. (55)
18:57:39.753114 IP 1.1.1.1.53 > 10.1.1.14.40169: 28094 1/0/1 A 142.250.66.100 (59)
18:57:44.701781 IP 10.1.1.14.40169 > 1.1.1.1.53: 28094+ [1au] A? www.google.com. (55)
18:57:44.745936 IP 1.1.1.1.53 > 10.1.1.14.40169: 28094 1/0/1 A 142.250.66.100 (59)
18:57:49.706916 IP 10.1.1.14.40169 > 1.1.1.1.53: 28094+ [1au] A? www.google.com. (55)
18:57:49.750357 IP 1.1.1.1.53 > 10.1.1.14.40169: 28094 1/0/1 A 142.251.220.4 (59)
Posso ver a resposta 1.1.1.1 com o pacote, mas dig não obteve nada.