webdevqa.jp.net

特定のIPにはOpenVPN、その他すべてにはeth0

概要: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)

編集2ip 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 
8
ThaDon

クライアントGUI(Ubuntu NetworkManager)をいじくり回すことで、目的の効果を得ることができました。 「ネットワーク上のリソースにのみこの接続を使用する」のIPv4 Settings -> Routesの下のチェックボックスがオンになっていることを確認する必要がありました。

"Use this connection only for resrouces on its network

これを複製するために.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エントリ(デフォルトルート)がすべてをめちゃくちゃにしていました。

7
ThaDon

Nm-connection-editorの「この接続をネットワーク上のリソースにのみ使用」チェックボックスは、NetworkManagerがVPNを介してデフォルトルートを追加するかどうかを制御します。オンにした場合、チェックした場合、VPNサブネットに向けられたパケットのみがVPNゲートウェイを通過し、システムは他の宛先に既存のデフォルトルートを使用します。

Nmcliを使用して、コマンドラインから同じ設定を変更できます。

nmcli connection modify <VPN connection> ipv4.never-default yes
6
bengal

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
3
Brennen Smith

サーバーが/ 2410.8.0.X)の場合

サーバー10.8.0.0 255.255.255.0

クライアントのルートは/ 1610.132.X.X)です

Push "route 10.132.0.0 255.255.0.0"

多分それは対立ではないでしょうか?

0
jdmorei