Iptables

如何在現有連接上使用 iptables 應用埠轉發?

  • February 6, 2014

出於負載平衡的目的,我們的伺服器有時會將請求轉發到不同的埠;我們服務的預設埠是埠 5000。

這是使用的程式碼: iptables -t nat -A PREROUTING -p tcp –dport 5000 -j REDIRECT –to-port 5001

應用此程式碼後,埠轉發適用於新請求。

埠 5000 上的新請求被轉發到埠 5001 上的服務。但是,現有連接仍然連接到埠 5000,如 netstat 所示。

我的問題是,如何強制此 iptables 規則立即應用於所有連接,包括新的和現有的(已建立的) - 而不是首先刪除所有連接?

提前致謝

現有的連接保持連接,因為 iptables NAT 跟踪連接的狀態——也就是說,它是“有狀態的”。

iptables 工具不允許您修改現有連接的狀態。即使您可以以某種方式修改 iptables NAT 連接跟踪表中的現有連接,您如何提醒遠端客戶端更改他們正在與之通信的埠?這就是問題所在——TCP 協議中沒有告訴遠端客戶端“更改為埠號###”的功能。這不是協議的一部分(因為它不是,所以 iptables 沒有理由讓你做你要求的事情)。

引用自:https://serverfault.com/questions/573802