網路命名空間不適用於 vpn
我創建了一個網路命名空間(名為
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 SNAT
中POSTROUTING
鏈中的內容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