
我有一個配置了 nat 連接埠轉送的路由器。我透過 nat 啟動了大文件的 http 副本。 http 伺服器託管在 LAN PC 上,其中包含要下載的大檔案。我啟動了從 WAN PC 下載檔案。我在檔案複製運行時禁用了 nat 規則。文件副本保留。當我使用 conntrack-tool 停用 nat 轉送規則時,我想停止檔案的副本。
我的 conntrack 清單包含以下 conntrack 會話
# conntrack -L | grep "33.13"
tcp 6 431988 ESTABLISHED src=192.168.33.13 dst=192.168.33.215 sport=52722 dport=80 src=192.168.3.17 dst=192.168.33.13 sport=80 dport=52722 [ASSURED] use=1
我嘗試使用以下命令刪除它:
# conntrack -D --orig-src 192.168.33.13
tcp 6 431982 ESTABLISHED src=192.168.33.13 dst=192.168.33.215 sport=52722 dport=80 src=192.168.3.17 dst=192.168.33.13 sport=80 dport=52722 [ASSURED] use=1
conntrack v1.4.3 (conntrack-tools): 1 flow entries have been deleted.
我可以在以下命令中看到 conntrack 會話已刪除。但是創建了另一個 conntrack 會話,其 src ip 位址是已刪除的 conntrack 的 lan 位址
# conntrack -L | grep "33.13"
tcp 6 431993 ESTABLISHED src=192.168.3.17 dst=192.168.33.13 sport=80 dport=52722 src=192.168.33.13 dst=192.168.33.215 sport=52722 dport=80 [ASSURED] use=1
conntrack v1.4.3 (conntrack-tools): 57 flow entries have been shown.
我嘗試刪除新的 conntrack 但它仍然保留
# conntrack -D --orig-src 192.168.3.17
# conntrack -L | grep "33.13"
conntrack v1.4.3 (conntrack-tools): 11 flow entries have been shown.
tcp 6 431981 ESTABLISHED src=192.168.3.17 dst=192.168.33.13 sport=80 dport=52722 src=192.168.33.13 dst=192.168.33.215 sport=52722 dport=80 [ASSURED] use=1
我缺什麼?
答案1
https://www.kernel.org/doc/Documentation/networking/nf_conntrack-sysctl.txt
nf_conntrack_tcp_loose - BOOLEAN
0 - disabled not 0 - enabled (default)
If it is set to zero, we disable picking up already established connections.
因此,已建立的連線會被即時偵測(不涉及 SYN/SYN+ACK/ACK),並作為新的 conntrack 條目加入回來。由於這是一個新的conntrack條目,因此將再次遍歷nat表並再次應用DNAT規則。即使一種方法不能立即起作用(如果除了 DNAT 規則之外沒有定義 SNAT/MASQUERADE,http 伺服器的傳出資料包可能會在 WAN 上短暫顯示為 192.168.3.17,並被 192.168.33.13 拒絕/忽略) ,一旦其他方式再次嘗試(從192.168.33.13 重試ACK...),這將匹配。
輸入:
echo 0 > /proc/sys/net/netfilter/nf_conntrack_tcp_loose
並再次嘗試刪除 conntrack 條目conntrack -D
...
這有望阻止創建新的 conntrack 條目並減少下載。