概要: 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.xx) にアクセスできますが、他のサーバー (google.com など) にはアクセスできません。VPN 経由でルーティングしたい 10.132.xx IP を除くすべてのサーバーに eth0 設定を使用するようにしたいと思います。
PS 他の記事を参考にして、no-pull
.ovpn ファイルで使用して、route
そこに設定を追加してみましたが、効果はありませんでした。
編集1:
ip a
実行中およびtraceroute
VPN 接続中の結果:
$ 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
答え1
「この接続はネットワーク上のリソースにのみ使用してくださいnm-connection-editor の " チェックボックスは、NetworkManager が VPN 経由のデフォルト ルートを追加するかどうかを制御します。チェックされている場合、VPN サブネット宛のパケットのみが VPN ゲートウェイを通過し、システムは他の宛先に対して既存のデフォルト ルートを使用します。
nmcli を使用してコマンドラインから同じ設定を変更できます。
nmcli connection modify <VPN connection> ipv4.never-default yes
答え2
クライアント 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
エントリ (デフォルト ルート) がすべてを台無しにしていたようです。
答え3
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を実行しているので、しなければならない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
答え4
ここでは FreshTomato を使用しています。3 つの宛先 IP のみを VPN にリダイレクトできました。
以下は OpenVPN のカスタム構成です。
allow-pull-fqdn
route-nopull
script-security 2
up /opt/openvpn-routes.sh
次に、上記のスクリプトを実行します。
root@router:/tmp/home/root# cat /opt/openvpn-routes.sh
#!/bin/sh
ip route add 204.11.51.251/32 dev tun11 # www.linksysinfo.org
ip route add 201.54.48.99/32 dev tun11 # www12.senado.leg.br
ip route add 34.160.111.145/32 dev tun11 # ifconfig.me
/optマウントポイントは、以下の指示に従って設定されました。https://github.com/Entware/Entware/wiki/Install-on-TomatoUSB-and-FreshTomato