Networking

網路命名空間不適用於 vpn

  • February 17, 2021

我創建了一個網路命名空間(名為ppn)來在其中執行某些應用程序。這非常有效,但是當我的商業 VPN(基於 OpenVPN)也啟用時,似乎流量只是單向的。

對於網路命名空間的創建,遵循此邏輯(也使用相同的 IP 地址):https ://askubuntu.com/a/499850/820897

當 VPN 被禁用時,從網路命名空間 ping 8.8.8.8 正常工作:

sudo ip netns exec ppn ping 8.8.8.8

但是,當啟用 VPN 時,儘管tcpdump -i tun0 host 8.8.8.8記錄了 ICMP 回應要求,但我沒有收到任何 ICMP 回顯回复。

您可以在下面找到我的 iptables 和 ip 路由列表:

  • wlo1 在 192.168.2.106
  • tun0 在 10.8.1.12

sudo iptables -S

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -s 5.180.62.60/32 -i wlo1 -j ACCEPT
-A INPUT -s 5.180.62.60/32 -i enp5s0 -j ACCEPT
-A INPUT -i wlo1 -j DROP
-A INPUT -i enp5s0 -j DROP
-A OUTPUT -d 5.180.62.60/32 -o wlo1 -j ACCEPT
-A OUTPUT -d 5.180.62.60/32 -o enp5s0 -j ACCEPT
-A OUTPUT -o wlo1 -j DROP
-A OUTPUT -o enp5s0 -j DROP

sudo iptables -t nat -S

-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -s 192.168.163.0/24 -o wlo1 -j SNAT --to-source 192.168.2.106

ip路由

0.0.0.0/1 via 10.8.1.1 dev tun0 
default via 192.168.2.1 dev wlo1 proto dhcp metric 600 
5.180.62.60 via 192.168.2.1 dev wlo1 
10.8.1.0/24 dev tun0 proto kernel scope link src 10.8.1.12 
128.0.0.0/1 via 10.8.1.1 dev tun0 
169.254.0.0/16 dev tun0 scope link metric 1000 
192.168.2.0/24 dev wlo1 proto kernel scope link src 192.168.2.106 metric 600 
192.168.163.0/24 dev veth-b proto kernel scope link src 192.168.163.254 

sudo ip netns exec ppn ip route

default via 192.168.163.254 dev veth-a 
192.168.163.0/24 dev veth-a proto kernel scope link src 192.168.163.1

我怎樣才能使網路命名空間在 VPN 下也能正常工作?

——–編輯——–

sysctl net.ipv4.ip_forward = 1在我的系統中

當數據包離開網路名稱空間時,它們(在您的情況下)在192.168.163.0/24-network 中有一個源地址。在本地,路由回網路命名空間工作得很好,但是一旦數據包離開您的本地系統,您需要將此源地址轉換為您的下一跳/網關知道如何路由回您的地址。

這就是表-j SNATPOSTROUTING鏈中的內容nat。但是,在您的情況下,您只有SNAT數據包離開wlo1介面。這就是為什麼路由通過wlo1工作正常,但通過tun0(VPN介面)失敗。

當數據包通過 路由時tun0,它們仍然在 -network 中具有源地址192.168.163.0/24,並且您的 VPN 伺服器不知道如何從該源地址返回數據包。

要解決此問題,您需要將SNAT數據包離開tun0-interface。這裡最簡單的選項(因為膠水網路地址通常是動態的)是使用-j MASQUERADE目標:

iptables -A POSTROUTING -t nat -s 192.168.163.0/24 -o tun0 -j MASQUERADE

引用自:https://unix.stackexchange.com/questions/634869