帶有一個網路介面的 iptables + NAT 和埠轉發循環
我在 AWS 的 NAT 伺服器後面設置了一個 OpenVPN 訪問伺服器。目前,我的 NAT 伺服器有一個網路介面,我正在嘗試將一些埠轉發到 OpenVPN 訪問伺服器。
埠轉發工作,我可以通過瀏覽器或 OpenVPN 客戶端連接到我的 OpenVPN 訪問伺服器(建立 VPN 連接)。
現在的問題是 OpenVPN 訪問伺服器正在使用埠 443 和 943 進行 HTTPS。但是,當我在連接到 VPN 時嘗試訪問 HTTPS 網站時,HTTPS 證書將全部失效,因為 HTTPS 連接被重定向回 OpenVPN AS。
這是我的 IPTABLES 規則:
iptables -t nat -A POSTROUTING -o eth0 -s 172.16.0.0/24 -j MASQUERADE iptables -A FORWARD -m state -p tcp -d 172.16.0.213 --dport 943 --state NEW,ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A PREROUTING -p tcp --dport 943 -j DNAT --to-destination 172.16.0.213:943 iptables -t nat -A POSTROUTING -p tcp -d 172.16.0.213 --dport 943 -j SNAT --to-source 172.16.0.213 iptables -A FORWARD -m state -p tcp -d 172.16.0.213 --dport 443 --state NEW,ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 172.16.0.213:443 iptables -t nat -A POSTROUTING -p tcp -d 172.16.0.213 --dport 443 -j SNAT --to-source 172.16.0.213 iptables -t nat -A PREROUTING -p udp -i eth0 -d 172.16.0.213 --dport 1194 -j DNAT --to-destination 172.16.0.213:1194
iptables -t nat -L 的輸出:
Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT tcp -- anywhere anywhere tcp dpt:https to:172.16.0.213:443 DNAT udp -- anywhere ip-172-16-0-213.eu-west-1.compute.internal udp dpt:openvpn to:172.16.0.213:1194 DNAT tcp -- anywhere anywhere tcp dpt:943 to:172.16.0.213:943 Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination SNAT tcp -- anywhere ip-172-16-0-213.eu-west-1.compute.internal tcp dpt:https to:172.16.0.213 SNAT tcp -- anywhere ip-172-16-0-213.eu-west-1.compute.internal tcp dpt:943 to:172.16.0.213 MASQUERADE all -- ip-172-16-0-0.eu-west-1.compute.internal/24 anywhere
是否仍然可以使用一個網路介面執行此操作並使用 iptables 解決它?
基本上,我想告訴“iptables,請不要從內部到外部進行任何埠轉發”,目前埠轉發進入“循環”。
感謝您的任何幫助和想法!
您應該重新考慮是否需要任何 DNAT 規則。你沒有提供理由。與 SNAT 規則相同,因為它們無緣無故地強制所有連接顯示為本地連接。
如果需要 DNAT,請使用 connmark 在 mangle 表的 PREROUTING 鏈中標記和恢復來自 openvpn-as tun 介面的數據包,並
-m mark ! --mark <the mark you set>
在您的 nat PREROUTING 埠 443 DNAT 規則中添加條件。這將防止傳出連接被 DNAT 返回到您的設備。根據您的網路編輯:
刪除所有 SNAT 規則。有了這個,您就無法審核 openvpn-as 伺服器上的連接。
確保 openvpn-as 伺服器通過網關路由連接。將預設路由設置為網關(簡單)或策略路由(複雜)。
更改所有 DNAT 規則以忽略您的本地源範圍,即
! -s 172.16.0.0/24
. 如果 openvpn-as 不執行 MASQUERADE 或 SNAT,您可能需要添加 VPN IP 範圍以及! -s base/mask
每個範圍的附加值。