Iptables
VPN 路由到本地網路中公共 IP 的 NAT 規則
我正在嘗試配置測試 VPN 設置以將 ping 路由到實例公共 IP。我們正在連接的一家公司供應商已將所有私人空間保留在他們身邊。我不確定我需要什麼 NAT 規則來從我們這邊的 VPN 路由器實例獲取流量,以根據其公共地址而不是私有地址將流量轉發到其後面的對應實例。
我有類似的拓撲
A-Server <-> A-VPN <–internet–> B-VPN <-> B-Server。
VPN 隧道已建立,我可以毫無問題地通過私有 IP ping 任一端。ping 公共 IP 確實到達了“另一端”的 VPN 機器,但停在那裡(我認為由“$ ip xfrm monitor”中的活動指示?)。
兩個 VPN 實例在其左側/右側允許的子網中都有 A-Server 公共 IP/32,如果合適的話。
在 A-VPN 實例上遵循 NAT 規則似乎不起作用,我不確定我是否在濫用它們或如何進一步調試。
iptables -t nat -A POSTROUTING -s <A-Server PRIVATE IP>/32 -d <B-Server PRIVATE IP>/32 -j SNAT --to-source <A-Server PUBLIC IP> iptables -t nat -A PREROUTING -s <B-Server PRIVATE IP>/32 -d <A-Server PUBLIC IP>/32 -j DNAT --to-destination <A-Server PRIVATE IP>
A-VPN 的現行規則:
# iptables-save # Generated by iptables-save v1.4.21 on Fri Feb 15 11:12:15 2019 *nat :PREROUTING ACCEPT [2:168] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [21:1848] :POSTROUTING ACCEPT [23:2016] -A PREROUTING -s 172.31.24.75/32 -d <A-Server PUBLIC IP>/32 -j DNAT --to-destination 10.0.10.15 -A POSTROUTING -s 10.0.0.34/32 -d 172.31.24.75/32 -j SNAT --to-source <A-Server PUBLIC IP> COMMIT # Completed on Fri Feb 15 11:12:15 2019 # Generated by iptables-save v1.4.21 on Fri Feb 15 11:12:15 2019 *filter :INPUT ACCEPT [104381:64450743] :FORWARD ACCEPT [189:13956] :OUTPUT ACCEPT [89586:3506732] COMMIT # Completed on Fri Feb 15 11:12:15 2019
經過一些閱讀和支持,我設法解決了這個問題。
採取的步驟:
‘左邊:
創建了一個新的 ElasticIP 而不將其分配給實例。
添加
<unallocated EIP>
到 A-VPN .conf 文件的左子網。將這些 iptables 規則添加到 A-VPN:
- iptables -t nat -A PREROUTING -d
<unallocated EIP>
-j DNAT –to-destination<A-Server PRIVATE IP>
- iptables -t nat -A POSTROUTING -d
<B-Server PRIVATE IP>
-j SNAT –to-source<unallocated EIP>
‘右邊:
- 添加
<unallocated EIP>
到 B-VPN .conf 文件的右子網。- 添加了 VPC 子網路由表規則,以將具有目的地的流量指向
<unallocated EIP>
通過 B-VPN 的流量。兩台VPN機器:
- 重新啟動 ipsec。
此時所有機器上的 tcpdump 在通過公共 IP 從 B-Server ping 到 A-Server 時在所有機器上顯示正確的路由和 ip rewriting
<unallocated EIP>