Iptables

新的 iptables NAT 為其他 HTTP 請求產生錯誤 400 錯誤請求

  • October 16, 2020

全部:

最近,我添加了幾個新的 iptables(RE:下面的程式碼片段)規則,通過我的 VPN(0x1000/0x1000)通過埠 443 為特定目的地(172.67.168.48)路由流量。新規則根據需要通過 VPN 進行 NAT,但是他們創造了一種不良影響,導致與上述目的地無關的其他 HTTP 請求產生錯誤響應 400 Bad Request。


# Create the RPDB rules
ip rule add from 0/0 fwmark "0x1000/0x1000" table ovpnc1 prio 9993        # VPN 1 fwmark

iptables -t mangle -A PREROUTING -i br0 -p tcp -d 172.67.168.48 --dport 443 -j MARK --set-mark 0x1000/0x1000
iptables -t nat -A PREROUTING -i br0 -p tcp -m mark --mark 0x1000/0x1000 -j DNAT --to-destination 172.67.168.48:443

知道為什麼在明確指定目標地址和埠時,新的 NAT 規則會影響其他 HTTP 請求(400 Bad Request)嗎?

感謝您的時間和幫助。

親切的問候,

加里

全部:

原來我原來的 iptables -t nat 規則缺少 –dport 443 定義以及它與其他 HTTP 請求互動的原因。

# Create the RPDB rules
ip rule add from 0/0 fwmark "0x1000/0x1000" table ovpnc1 prio 9993        # VPN 1 fwmark

iptables -t mangle -A PREROUTING -i br0 -p tcp --dport 443 -d 172.67.168.48 -j MARK --set-mark 0x2000/0x2000
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 443 -j DNAT --to-destination 172.67.168.48:443 -m mark --mark 0x2000/0x2000

將 –dport 443 定義添加到 iptables -t nat 規則後,問題就解決了。

希望這對將來的其他人有所幫助。

尊敬,

加里

VPN 伺服器:假設eth0 (IP 1.2.3.4) 是直接連接到或至少具有到目標 Web 伺服器 IP 或網路的路由的物理介面,您可以監控任何發往 Web 伺服器 IP 的流量172.67.168.48:443,以強制通過VPN 隧道,然後 NAT 出到 eth0 的 IP 地址(1.2.3.4在本例中)。在這種情況下,br0介面 (IP 10.10.10.1) 是 VPN 伺服器用來隧道傳輸流量的虛擬介面。當 VPN 啟動並執行時,它已經知道如何將數據包路由到目標 IP172.67.168.48

如果沒有,那麼你必須添加一個靜態路由:

$ ip route show
172.67.168.48/32 via 10.10.10.1 dev br0 metric 101

滿足路由語句後,您可以強制將發往 IP172.67.168.48:443的流量路由通過隧道並在另一側作為1.2.3.4en-route退出172.67.168.48

$ sudo iptables -t nat -A POSTROUTING -o eth0 -p tcp -m tcp -d 172.67.168.48 --dport 443 -j SNAT --to-source 1.2.3.4
$ sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

例如,如果客戶端發送一個數據包172.67.168.48:80,源IP不會改變,如果後續鏈不允許,該數據包可能會被丟棄。

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