web-dev-qa-db-ja.com

ネットワーク名前空間を介して特定のアプリケーションにVPNを使用する

このガイドを使用して、VPN固有のトラフィックにネットワーク名前空間を使用しようとしています: https://schnouki.net/posts/2014/12/12/openvpn-for-a-single-application-on- Debianではlinux /

ここに示すように、名前空間と花嫁の設定に関してはすべてが機能します。名前空間の名前はpiavpn、名前空間側のvethはvpn1、メイン側のvethはvpn0です。ただし、名前空間からインターネットやメインネットワークにアクセスできません。

名前空間:

Sudo ip netns exec piavpn ip addr list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope Host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope Host 
       valid_lft forever preferred_lft forever
7: vpn1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether da:8f:25:6f:47:74 brd ff:ff:ff:ff:ff:ff
    inet 10.200.200.2/24 scope global vpn1
       valid_lft forever preferred_lft forever
    inet6 fe80::d88f:25ff:fe6f:4774/64 scope link 
       valid_lft forever preferred_lft forever

通常のネットワークの場合:

ip addr list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope Host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope Host 
       valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 00:90:f5:eb:90:24 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 68:17:29:90:f5:ba brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.16/24 brd 192.168.0.255 scope global dynamic wlan0
       valid_lft 80406sec preferred_lft 80406sec
    inet6 fe80::6a17:29ff:fe90:f5ba/64 scope link 
       valid_lft forever preferred_lft forever
4: vmnet1: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 00:50:56:c0:00:01 brd ff:ff:ff:ff:ff:ff
5: vmnet8: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 00:50:56:c0:00:08 brd ff:ff:ff:ff:ff:ff
8: vpn0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 2a:19:71:d5:79:29 brd ff:ff:ff:ff:ff:ff
    inet 10.200.200.1/24 scope global vpn0
       valid_lft forever preferred_lft forever
    inet6 fe80::2819:71ff:fed5:7929/64 scope link 
       valid_lft forever preferred_lft forever

Pingは両方の方法で機能します。

ping 10.200.200.2
PING 10.200.200.2 (10.200.200.2) 56(84) bytes of data.
64 bytes from 10.200.200.2: icmp_seq=1 ttl=64 time=0.084 ms
64 bytes from 10.200.200.2: icmp_seq=2 ttl=64 time=0.068 ms

Sudo ip netns exec piavpn ping 10.200.200.1
PING 10.200.200.1 (10.200.200.1) 56(84) bytes of data.
64 bytes from 10.200.200.1: icmp_seq=1 ttl=64 time=0.088 ms
64 bytes from 10.200.200.1: icmp_seq=2 ttl=64 time=0.040 ms

ただし、名前空間からインターネットやメインネットワークにアクセスできません。 sysctlでipv4転送を有効にしているので、iptablesの問題であるに違いないと思います。

私のiptablesルールはここにあります: https://Gist.github.com/anonymous/a1b440f1d3538be6557d

NAT iptablesルールは次のとおりです。

Sudo iptables -t nat --list
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  10.200.200.0/24      anywhere            
MASQUERADE  all  --  10.200.200.0/24      anywhere            
MASQUERADE  all  --  10.200.200.0/24      anywhere            
MASQUERADE  all  --  10.200.200.0/24      anywhere            
MASQUERADE  all  --  anywhere             anywhere            
MASQUERADE  all  --  10.0.0.0/8           anywhere

何度も試したところ、明らかに面倒になりました。しかし、それは寛容でなければなりません。

名前空間から一般的な接続を取得するまで、VPNについて心配する意味はありません。

1
jamesmcm

トリックはufwを無効にすることであることが判明しました:

Sudo ufw disable

次に、iptablesをフラッシュしてルールを再度追加し、NetworkManagerが何らかの理由で上書きした後、/ etc /resolv.confを書き直しました。

今ではすべてが完全に機能します。

2
jamesmcm