
私はゲートウェイで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
新しいルールはシステムを再起動した後にのみ有効になります。これは以前は時々発生していましたが、最近、再起動しないとこれらのルールを変更できないことが判明しました。