iptables 繼續使用舊的 nat 規則

iptables 繼續使用舊的 nat 規則

我在網關上使用 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

新規則只有在我重新啟動系統後才會生效這種情況以前偶爾會發生,但最近發現我無法在不重新啟動的情況下更改這些規則。

相關內容