ネットワークネームスペースがVPNでは機能しません。

ネットワークネームスペースがVPNでは機能しません。

一部のアプリケーションを実行するためにネットワークネームスペース(という名前)を作成しましたppn。これはうまく機能しますが、私のビジネスVPN(OpenVPNベース)も有効にすると、トラフィックが一方向にのみ発生するようです。

ネットワーク名前空間を作成するには、次のロジックに従ってください(同じIPアドレスを使用)。https://askubuntu.com/a/499850/820897

VPNが無効になっている場合は、ネットワークネームスペースで8.8.8.8をpingすると正常に動作します。

sudo ip netns exec ppn ping 8.8.8.8

ただし、VPN がイネーブルの場合、tcpdump -i tun0 host 8.8.8.8ICMP エコー要求は記録されますが、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はppn ipルーティングを実行します。

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私のシステムでは

ベストアンサー1

パケットがネットワークネームスペースを離れると(あなたの場合)、ネットワークにソースアドレスがあります192.168.163.0/24。ローカルではネットワークネームスペースに再ルーティングすることはうまく機能しますが、パケットがローカルシステムを離れると、このソースアドレスをユーザーアドレスに再ルーティングする方法を知っているネクストホップ/ゲートウェイに変換する必要があります。

これがテーブル内のチェーンの役割です-j SNAT。ただし、お客様の場合は、インターフェイスの外部にのみパケットを送信できます。そのため、viaルーティングは正常に機能しますが、via(VPNインターフェイス)は失敗します。POSTROUTINGnatSNATwlo1wlo1tun0

パケットがパスを通過するとき、tun0ネットワークにはまだ送信元アドレスがあり、192.168.163.0/24VPNサーバーはその送信元アドレスからパケットを返す方法を知りません。

SNATこの問題を解決するには、パケットをtun0インターフェイスから移動する必要があります。ここで最も簡単なオプション(glueネットワークアドレスは通常動的であるため)はtargetを使用することです-j MASQUERADE

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

おすすめ記事