概要:VPNに接続して特定のサーバーにアクセスしたいのですが、他のすべてのトラフィックには通常のネットワークを使用したいと思います。
私のVPSにOpenVPNサーバーをセットアップしたところ、server.conf
ファイルは次のようになります。
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key # This file should be kept secret
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log /var/log/openvpn.log
verb 4
Push "route 10.132.0.0 255.255.0.0"
次の.ovpn
ファイルを使用して、VPN接続をセットアップします。
client
dev tun
proto udp
remote <my.vpn.server.com> 1194
nobind
user nobody
group nogroup
persist-key
persist-tun
remote-cert-tls server
comp-lzo
verb 3
<ca>....</ca>
<cert>...</cert>
<key>...</key>
最後に、VPN接続のネットワークマネージャーの[IPv4設定]で、[方法]を[自動(VPN)アドレスのみ]に設定しました。
VPNは正常に接続し、必要なすべての内部サーバー(10.132.x.x)にアクセスできますが、それ以外(google.comなど)にはアクセスできません。私のeth0設定を、VPN経由でルーティングしたい10.132.x.x IP以外のすべてに使用したいのですが。
追伸.ovpnファイルでno-pull
を使用してroute
設定をそこに追加しようとしましたが、役に立たなかった他の記事に基づいています。
編集1:
VPNへの接続中にip a
およびtraceroute
を実行した結果:
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
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: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:dc:a6:ef brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic eth0
valid_lft 86320sec preferred_lft 86320sec
inet6 fe80::f3d1:6eb3:e13e:d61b/64 scope link
valid_lft forever preferred_lft forever
15: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
inet 10.8.0.6 peer 10.8.0.5/32 brd 10.8.0.6 scope global tun0
valid_lft forever preferred_lft forever
$ traceroute google.com
google.com: Temporary failure in name resolution
Cannot handle "Host" cmdline arg `google.com' on position 1 (argc 1)
編集2:ip r
の結果
$ ip r
default via 10.8.0.5 dev tun0 proto static metric 50
default via 10.0.2.2 dev eth0 proto static metric 100
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15 metric 100
10.8.0.1 via 10.8.0.5 dev tun0 proto static metric 50
10.8.0.5 dev tun0 proto kernel scope link src 10.8.0.6 metric 50
10.132.0.0/16 via 10.8.0.5 dev tun0 proto static metric 50
104.236.239.153 via 10.0.2.2 dev eth0 proto static metric 100
169.254.0.0/16 dev eth0 scope link metric 1000
クライアントGUI(Ubuntu NetworkManager)をいじくり回すことで、目的の効果を得ることができました。 「ネットワーク上のリソースにのみこの接続を使用する」のIPv4 Settings -> Routes
の下のチェックボックスがオンになっていることを確認する必要がありました。
これを複製するために.ovpnファイルで何をする必要があるかは、完全にはわかりません。
ルーティングテーブルは次のようになります。
$ Sudo netstat -r -n
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.0.2.2 0.0.0.0 UG 0 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.8.0.1 10.8.0.5 255.255.255.255 UGH 0 0 0 tun0
10.8.0.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.132.0.0 10.8.0.5 255.255.0.0 UG 0 0 0 tun0
104.236.239.153 10.0.2.2 255.255.255.255 UGH 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
Push "route 10.132.0.0 255.255.0.0"
にserver.conf
があったことを思い出してください。これにより、10.132.0.0
のエントリが説明され、他のすべてのものがVPNの外部にルーティングされているときにサーバーにアクセスできるようになった理由(つまり、0.0.0.0
エントリ)
この設定をGUIでチェックしないと、ルーティングテーブルは次のようになります。
$ Sudo netstat -r -n
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.8.0.5 0.0.0.0 UG 0 0 0 tun0
0.0.0.0 10.0.2.2 0.0.0.0 UG 0 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.8.0.1 10.8.0.5 255.255.255.255 UGH 0 0 0 tun0
10.8.0.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.132.0.0 10.8.0.5 255.255.0.0 UG 0 0 0 tun0
104.236.239.153 10.0.2.2 255.255.255.255 UGH 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
私の推測では、最初の0.0.0.0
エントリ(デフォルトルート)がすべてをめちゃくちゃにしていました。
Nm-connection-editorの「この接続をネットワーク上のリソースにのみ使用」チェックボックスは、NetworkManagerがVPNを介してデフォルトルートを追加するかどうかを制御します。オンにした場合、チェックした場合、VPNサブネットに向けられたパケットのみがVPNゲートウェイを通過し、システムは他の宛先に既存のデフォルトルートを使用します。
Nmcliを使用して、コマンドラインから同じ設定を変更できます。
nmcli connection modify <VPN connection> ipv4.never-default yes
Jdmoreiの答えを詳しく説明するには、「スプリットトンネル」VPNと呼ばれるものが必要です。実際、ほとんど問題はありませんでした:P.S. based on other articles I've tried using no-pull in the .ovpn file and adding in my route settings there but to no avail.
。
Ovpnファイルに次のものが必要になります。
route-nopull # Make sure not to pull the default routes
route 10.8.0.0 255.255.255.0 # Route the /24 of 10.8.0.0 across the VPN
route 192.168.2.2 255.255.255.255 # Route the /32 (single IP) across the VPN
ここで重要なのは、Windowsを実行しているため、must管理者としてopenvpnアプリケーションを実行することです。そうしないと、ログに次のようなエントリが表示されます。
Sat Nov 13 11:31:05 2010 ROUTE: route addition failed using CreateIpForwardEntry
: Access denied. [status=5 if_index=11]
The requested operation requires elevation.
Sat Nov 13 11:31:05 2010 ERROR: Windows route add command failed [adaptive]: ret
urned error code 1
Sat Nov 13 11:31:05 2010 Initialization Sequence Completed
サーバーが/ 24(10.8.0.X)の場合
サーバー10.8.0.0 255.255.255.0
クライアントのルートは/ 16(10.132.X.X)です
Push "route 10.132.0.0 255.255.0.0"
多分それは対立ではないでしょうか?