新的 iptables NAT 為其他 HTTP 請求產生錯誤 400 錯誤請求
全部:
最近,我添加了幾個新的 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介面 (IP10.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
滿足路由語句後,您可以強制將發往 IP
172.67.168.48:443
的流量路由通過隧道並在另一側作為1.2.3.4
en-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不會改變,如果後續鏈不允許,該數據包可能會被丟棄。