一部のアプリケーションを実行するためにネットワークネームスペース(という名前)を作成しました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.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は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インターフェイス)は失敗します。POSTROUTING
nat
SNAT
wlo1
wlo1
tun0
パケットがパスを通過するとき、tun0
ネットワークにはまだ送信元アドレスがあり、192.168.163.0/24
VPNサーバーはその送信元アドレスからパケットを返す方法を知りません。
SNAT
この問題を解決するには、パケットをtun0
インターフェイスから移動する必要があります。ここで最も簡単なオプション(glueネットワークアドレスは通常動的であるため)はtargetを使用することです-j MASQUERADE
。
iptables -A POSTROUTING -t nat -s 192.168.163.0/24 -o tun0 -j MASQUERADE