如何將目的地位於 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 回覆資料包,但 dig 沒有得到任何結果。

相關內容