web-dev-qa-db-ja.com

VPNと非VPNの両方を同時に使用するにはどうすればよいですか?

これはVPN構成の問題かもしれませんが、私がやりたいのは、特定のユーザーアカウントにVPN接続を使用させ、システムの残りの部分に非VPN接続を使用させることです。私が直面している問題は、VPN接続と非VPN接続の両方を確立できないように見えることです。

私のセットアップに関するいくつかの情報。 Ubuntu Server 16.04を新規インストールし、OpenVPNを使用して(プライベートインターネットアクセスVPNサーバーへの)VPN接続を確立しています。

例えば。 ifconfigを実行すると、次のようになります。

enp2s0    Link encap:Ethernet  HWaddr fc:aa:14:cd:89:1c
          inet addr:192.168.2.2  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::feaa:14ff:fecd:891c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:638452 errors:0 dropped:0 overruns:0 frame:0
          TX packets:93481 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:901618753 (901.6 MB)  TX bytes:5702645 (5.7 MB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:176 errors:0 dropped:0 overruns:0 frame:0
          TX packets:176 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:12800 (12.8 KB)  TX bytes:12800 (12.8 KB)

virbr0    Link encap:Ethernet  HWaddr 52:54:00:60:89:9c
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

これで、上記のインターフェイスを使用して、次を実行できます。

$ curl --interface enp2s0 icanhazip.com

そしてそれは私のIPアドレスを正常に返します。次に、次の設定を使用してVPNに接続します。

client
dev tun
proto udp
remote us-chicago.privateinternetaccess.com 1198
resolv-retry infinite
nobind
persist-key
persist-tun
cipher aes-128-cbc
auth sha1
tls-client
remote-cert-tls server
auth-user-pass pia.cred
# route-nopull
comp-lzo
verb 1
reneg-sec 0
crl-verify crl.rsa.2048.pem
ca ca.rsa.2048.crt
disable-occ

接続を確立し、ifconfigから以下を提供します。

enp2s0    Link encap:Ethernet  HWaddr fc:aa:14:cd:89:1c
          inet addr:192.168.2.2  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::feaa:14ff:fecd:891c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:638594 errors:0 dropped:0 overruns:0 frame:0
          TX packets:93598 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:901632961 (901.6 MB)  TX bytes:5727985 (5.7 MB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:176 errors:0 dropped:0 overruns:0 frame:0
          TX packets:176 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:12800 (12.8 KB)  TX bytes:12800 (12.8 KB)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.53.10.6  P-t-P:10.53.10.5  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 B)  TX bytes:375 (375.0 B)

virbr0    Link encap:Ethernet  HWaddr 52:54:00:60:89:9c
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

これで、次のコマンドを実行するとVPNが正常に通過します。

$ curl --interface tun0 icanhazip.com

ただし、次のコマンドを実行すると接続に失敗します。

$ curl --interface enp2s0 icanhazip.com

私がしたいのは、tun0経由でVPN経由で接続し、enp2s0経由で非VPN経由で接続できるようにしたいということです。そこから、必要に応じて特定の接続をルーティングするようにiptablesルーティングを設定できます。

Update:ネットワーク名前空間の使用を推奨するコメントなので、検索の結果、 OpenVPNでのネットワーク名前空間の使用に関する記事 。このコマンドで接続を確立できます

$ Sudo openvpn --ifconfig-noexec --route-noexec --up netns-script --route-up netns-script --down netns-script --script-security 2 --config 'US Chicago.ovpn'

ただし、VPNを使用して接続しようとすると、単にタイムアウトします

$ Sudo ip netns exec vpn curl icanhazip.com
curl: (6) Could not resolve Host: icanhazip.com
2
Alex

これは、VPNサーバーの構成によって異なります。あなたの場合、すべてのトラフィックはVPNを介してルーティングされています。 enp2s0のデフォルトゲートウェイを変更することで、答えが得られる場合があります。また、VPNサーバーのP2P IPリンクが到達可能かどうかは、ip neighコマンドで確認してください。

1
BDN