Networking

帶有一個網路介面的 iptables + NAT 和埠轉發循環

  • May 10, 2019

我在 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每個範圍的附加值。

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