NAT 發生在路由之前

NAT 發生在路由之前

我目前正在使用 Proxmox 建立私有雲叢集。我的叢集包含一個頭節點和兩個運算節點。

我的頭節點託管一個 NAT 伺服器和 openvpn 伺服器以及三個 NIC:一個用於出站,每個計算節點一個。 NAT 允許我與兩個運算節點進行互動。在兩個運算節點上,我託管一個路由器,每個路由器有大約 30 個 VLAN。

我的目標是在連接到路由器時能夠看到 VPN 用戶端的位址。目前,我使用 VPN 連接到頭,然後嘗試 ping 或 ssh 到路由器,它顯示連接來自頭節點的 IP 位址。任何幫助是極大的讚賞!

我的路線如下:

default via *.*.*.1 dev eno1 onlink 
10.10.1.0/24 via 10.10.1.2 dev tun0 
10.10.1.2 dev tun0 proto kernel scope link src 10.10.1.1 
*.*.*.0/25 dev eno1 proto kernel scope link src *.*.*.46 
192.168.0.0/19 via 192.168.77.1 dev vmbr0 
192.168.32.0/19 via 192.168.76.6 dev vmbr1 
192.168.76.0/24 dev vmbr1 proto kernel scope link src 10.10.1.1
192.168.77.0/24 dev vmbr0 proto kernel scope link src 192.168.77.1 

以及 NAT 規則(我目前使用的是firewalld):

-A POST_public_allow ! -o lo -j MASQUERADE

答案1

您顯示的 NAT 規則提供的資訊幾乎為零,因為它修改了風俗鏈,據說是從其他表(應該是表POSTROUTINGnat;您可以使用iptables -t nat -L POSTROUTING)中的其他(標準)鏈調用的。

您遇到的問題是,據稱偽裝被應用在連接頭節點與計算節點的介面上。

解決這個問題的一種方法是僅在頭節點用於連接網際網路的介面上使用 SNAT。

但請注意一個問題。事實上,您使用 VPN 存取頭節點(如果我正確地閱讀了問題)意味著當您在頭節點上停用過度偽裝時,您的計算節點將看到您正在發送的資料包超過VPN 來自您的發送程式所在的任何網路。由於它被視為私有子網,因此您必須確保 - 您的來源網路以及連接頭節點和計算節點的網路都具有不同的位址(並且它們都必須與隧道使用的子網路不同) - 運算節點必須有來源網路的路由規則(將發送到那裡的資料包傳送到頭節點)。 - 頭節點必須啟用 IP 轉送。

相關內容