如何将目的地位于 ipset 中的数据包路由到 nat 接口

如何将目的地位于 ipset 中的数据包路由到 nat 接口

我有一个名为 em2 的接口,它是一个 nat 接口。我想将所有目的地位于名为 test 的 ipset 中的数据包路由到 em2。

如果我不使用 ipset 和策略路由,它运行良好

iptables -A POSTROUTING -t nat -o em2  -j MASQUERADE
ip route add 1.1.1.1 via 10.1.1.13 dev em2

但如果我使用策略路由和 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

问题是所有数据包都完美地路由到 em2,但无法收到响应数据包。根据 tcpdump 的捕获,响应数据包似乎没有正确进行 nat。我错过了什么?

tcpdump抓取结果如下,10.1.1.14为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)

我可以看到 1.1.1.1 使用数据包回复,但是挖掘什么也没得到。

相关内容