Vpn

無法連接到防火牆後面的 docker 中執行的 ipsec 伺服器

  • November 9, 2018

我有一個我認為不是很困難但不能讓它工作的設置。

工作設置:在直接連接到網際網路的 docker 中執行的 ipsec 伺服器。客戶端可以連接。

設置不工作:在 docker 中執行的 ipsec 伺服器連接到防火牆後面的網際網路。我有node1一個 esxi 伺服器,它充當internet gatewaynode2執行在具有ipsec server running in a docker.

我在 node1(網際網路網關)中打開了埠 500 和 4500 並轉發到 node2(在 docker 中執行 ipsec 伺服器)。

我面臨的問題是,客戶端無法連接。

下面是 iptables 防火牆規則

-A FORWARD -d 192.168.2.37/32 -o ens34 -p udp -m udp --dport 500 -j ACCEPT
-A FORWARD -d 192.168.2.37/32 -o ens34 -p udp -m udp --dport 4500 -j ACCEPT
-A FORWARD -d 192.168.2.37/32 -o ens34 -p udp -m udp --dport 53 -j ACCEPT

無法發現還缺少什麼。有人可以建議我的設置是否正確以及為什麼它不起作用?

您的 iptables 規則來自問題評論:

-A FORWARD -d 192.168.2.37/32 -o ens34 -p udp -m udp --dport 500 -j ACCEPT 
-A FORWARD -d 192.168.2.37/32 -o ens34 -p udp -m udp --dport 4500 -j ACCEPT 
-A FORWARD -d 192.168.2.37/32 -o ens34 -p udp -m udp --dport 53 -j ACCEPT

我真的不明白你為什麼需要轉發埠 53:讓網際網路上的每個人都可以看到你內部網路的 DNS 伺服器是在要求 DNS 欺騙攻擊——這不是一個好主意。VPN 連接後,您將能夠通過 VPN 管道安全地訪問它,而無需 Internet 網關主機上的任何防火牆規則。我建議您刪除 UDP 埠 53 的 FORWARD 規則,除非您有充分的理由。

iptables FORWARD 過濾表中的 ACCEPT 規則只允許系統將已經正確定址的流量路由到目的地。由於您的 IPsec 伺服器似乎有一個 192.168.. 地址,因此您的客戶端無法使用該地址通過 Internet 訪問它。

相反,您需要將客戶端配置為使用 Internet 網關伺服器的公共 IP 地址,並且網關伺服器需要一些 DNAT 規則來將傳入的 IPsec 流量重定向到 IPsec 伺服器。

除了您已經擁有的 FORWARD 規則之外,Internet 網關伺服器上還需要這些規則:

-t nat -A PREROUTING -i <internet-side NIC> -p udp -m udp --dport 500 -j DNAT --to-destination 192.168.2.37:500
-t nat -A PREROUTING -i <internet-side NIC> -p udp -m udp --dport 4500 -j DNAT --to-destination 192.168.2.37:4500

由於 IPsec 似乎沒有自動連接跟踪,因此您可能還需要針對傳出流量的反向規則:

-t nat -A POSTROUTING -o <internet-side NIC> -s 192.168.2.37/32 -p udp -m udp --sport 500 -j SNAT --to-source <public IP>
-t nat -A POSTROUTING -o <internet-side NIC> -s 192.168.2.37/32 -p udp -m udp --sport 4500 -j SNAT --to-source <public IP> 

(我實際上並不確定這部分:首先嘗試不使用這些規則,並在 Internet 網關主機的面向 Internet 的介面上監視傳出響應。如果傳出 IPsec 數據包的源 IP 為 192.168.2.37,請添加上述內容2 SNAT 規則。如果源 IP 已經更改為 Internet 網關主機的公共 IP,則 DNAT 規則成功跟踪連接,您將不需要 SNAT 規則。)

當來自客戶端的 VPN 流量到達 Internet 網關主機(最初使用其 IP 地址作為其目的地)時,傳入流量首先通過 PREROUTING 表。其中的 DNAT 規則將替換目標地址。然後傳入流量通過路由檢查:由於 DNAT 規則只是替換了目標 IP,因此流量不再定址到 Internet 網關主機本身,因此它通過路由表,然後是 FORWARD 過濾表。之後,它從 Internet 網關主機的“內部”介面向 IPsec 主機發出。

IPsec 主機將在 IP 數據標頭中接收具有自己的 192.168.2.37 地址的數據包,但在加密內容中,將有 Internet 網關伺服器的原始公共 IP。IPsec 主機必須能夠辨識 NAT_TRAVERSAL 才能成功處理此問題。

當 IPsec 主機響應時,網際網路網關主機將需要將傳出 IPsec 數據包的源 IP 替換為有效的公共 IP。

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