Como rotear pacotes cujo destino está em um ipset para uma interface nat

Como rotear pacotes cujo destino está em um ipset para uma interface nat

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.

informação relacionada