
nat 인터페이스인 em2라는 인터페이스가 있습니다. 목적지가 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에는 아무것도 없습니다.