
내 게이트웨이에서 iptables snat을 사용하여 로컬 소스 IP 주소를 외부로 변경합니다. 문제는 규칙을 변경한 후에도(또는 iptables nat 테이블을 플러시하더라도) 게이트웨이를 재부팅할 때까지 게이트웨이가 이전 규칙을 계속 사용한다는 것입니다. 저는 Ubuntu 14.04 Server를 실행 중인 운영 체제로 사용합니다. 예를 들어 내가 들어간 후
iptables -t nat -A POSTROUTING -s 10.0.0.129 -j SNAT --to-source 1.2.3.4
10.0.0.129의 외부 주소는 1.2.3.4이고 외부 게이트웨이 인터페이스에서 다음과 같은 것을 볼 수 있습니다.
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
09:48:07.920936 IP 1.2.3.4 > 8.8.8.8: ICMP echo request, id 2425, seq 1, length 64
09:48:08.920066 IP 1.2.3.4 > 8.8.8.8: ICMP echo request, id 2425, seq 2, length 64
09:48:09.920422 IP 1.2.3.4 > 8.8.8.8: ICMP echo request, id 2425, seq 3, length 64
그리고 그 후에도
iptables -F
iptables -t nat -F
iptables -t nat -A POSTROUTING -s 10.0.0.129 -j SNAT --to-source 4.3.2.1
결과는 같을 것이다
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
09:54:20.674671 IP 1.2.3.4 > 8.8.8.8: ICMP echo request, id 2666, seq 1, length 64
09:54:21.674997 IP 1.2.3.4 > 8.8.8.8: ICMP echo request, id 2666, seq 2, length 64
09:54:22.676283 IP 1.2.3.4 > 8.8.8.8: ICMP echo request, id 2666, seq 3, length 64
새 규칙은 시스템을 재부팅한 후에만 적용됩니다. 이 문제는 가끔 발생했지만 최근에는 재부팅하지 않으면 이러한 규칙을 변경할 수 없다는 것이 밝혀졌습니다.