同じクライアントで複数のトンネルを作成しようとしています。openvpnサーバーへの接続が成功した後、作成されたトンネルにいくつかのルートを適用しましたが、成功しませんでした。最初のトンネルは機能しますが、2番目のトンネルは機能しません。私はそれをこのようにしています:
何もしない前の経路
default 192.168.1.1 0.0.0.0 UG 0 0 0 enp3s0
link-local * 255.255.0.0 U 1000 0 0 enp3s0
192.168.1.0 * 255.255.255.0 U 0 0 0 enp3s0
最初のトンネル
France.ovpn
client
dev tun
proto udp
remote france.privateinternetaccess.com
lport 1190
resolv-retry infinite
persist-key
persist-tun
cipher aes-128-cbc
auth sha1
tls-client
remote-cert-tls server
auth-user-pass /etc/openvpn/piaauth.txt
comp-lzo
verb 1
reneg-sec 0
crl-verify /etc/openvpn/crl.rsa.2048.pem
ca /etc/openvpn/ca.rsa.2048.crt
disable-occ
lport 1189
rport 1198
|
Sudo /usr/sbin/openvpn --config /etc/openvpn/France.ovpn --dev tun0 --route-noexec
Sudo route add -net 10.88.10.1 gw 10.88.10.5 netmask 255.255.255.255 dev tun0
Sudo route add -net 10.88.10.5 gw * netmask 255.255.255.255 dev tun0
Sudo route add -net 128.0.0.0 gw 10.88.10.5 netmask 128.0.0.0 dev tun0
Sudo route add -net 172.98.67.121 gw 192.168.1.1 netmask 255.255.255.255 enp3s0
最初のトンネル後のルート
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.1.1 0.0.0.0 UG 0 0 0 enp3s0
10.88.10.1 10.88.10.5 255.255.255.255 UGH 0 0 0 tun0
10.88.10.5 * 255.255.255.255 UH 0 0 0 tun0
128.0.0.0 10.88.10.5 128.0.0.0 UG 0 0 0 tun0
link-local * 255.255.0.0 U 1000 0 0 enp3s0
172.98.67.121 192.168.1.1 255.255.255.255 UGH 0 0 0 enp3s0
192.168.1.0 * 255.255.255.0 U 0 0 0 enp3s0
すべてが完璧に機能します
今私はこれで試します:
Norway.ovpn
client
dev tun
proto udp
remote no.privateinternetaccess.com
resolv-retry infinite
persist-key
persist-tun
cipher aes-128-cbc
auth sha1
tls-client
remote-cert-tls server
auth-user-pass /etc/openvpn/piaauth.txt
comp-lzo
verb 1
reneg-sec 0
crl-verify /etc/openvpn/crl.rsa.2048.pem
ca /etc/openvpn/ca.rsa.2048.crt
disable-occ
lport 1187
rport 1198
Sudo /usr/sbin/openvpn --config /etc/openvpn/Norway.ovpn --route-noexec
Sudo route add -net 10.39.10.1 gw 10.39.10.5 netmask 255.255.255.255 dev tun1
Sudo route add -net 10.39.10.5 gw * netmask 255.255.255.255 dev tun1
Sudo route add -net 108.61.123.81 gw 192.168.1.1 netmask 255.255.255.255 enp3s0
現在のルート:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.1.1 0.0.0.0 UG 0 0 0 enp3s0
10.39.10.1 10.39.10.5 255.255.255.255 UGH 0 0 0 tun1
10.39.10.5 * 255.255.255.255 UH 0 0 0 tun1
10.8.10.1 10.8.10.5 255.255.255.255 UGH 0 0 0 tun0
10.8.10.5 * 255.255.255.255 UH 0 0 0 tun0
108.61.123.81.c 192.168.1.1 255.255.255.255 UGH 0 0 0 enp3s0
128.0.0.0 10.8.10.5 128.0.0.0 UG 0 0 0 tun0
link-local * 255.255.0.0 U 1000 0 0 enp3s0
172.98.67.121 192.168.1.1 255.255.255.255 UGH 0 0 0 enp3s0
192.168.1.0 * 255.255.255.0 U 0 0 0 enp3s0
そして、最後のルートを追加しようとした後に問題が発生すると思います:
Sudo route add -net 128.0.0.0 gw 10.39.10.5 netmask 128.0.0.0 dev tun1
以前にtun0で128.0.0.0を使用したためです。たとえば、252.0.0.0や224.0.0.0などの別のものに変更しようとしましたが、機能しません。そして、128.0.0.0で試した場合、tun1は機能しますが、tun0は機能しません。両方のトンネルを同時に機能させるにはどうすればよいですか?
ルーティングテーブルごとに可能なデフォルトルートは1つだけです。ルートをmain
ルーティングテーブルに追加する場合は、デフォルトルートとして使用するゲートウェイを決定する必要があります。
redirect-gateway def1
を使用すると、OpenVPNは2つの(より具体的な)ルート(それぞれがIPアドレス範囲の半分に一致する)をメインルーティングテーブルに追加し、デフォルトルートを削除せずに上書きします。
0.0.0.0/1 via 10.8.0.1 dev tun0 # network 0.0.0.0 mask 128.0.0.0
default via 10.0.2.2 dev eth0 # network 0.0.0.0 mask 0.0.0.0
128.0.0.0/1 via 10.8.0.1 dev tun0 # network 128.0.0.0 mask 128.0.0.0
これら2つのオーバーライドルートにも同じことが適用されます。 0.0.0.0/1
または128.0.0.0/1
を含む別のルートをmain
ルーティングテーブルに追加することはできません。
あなたがしたいことは、ある種のスプリットトンネリングを設定することだと思います。これは、tun0
およびtun1
デバイスが使用されています。
まず、さらに2つのルーティングテーブルを追加します。
echo "100 tun0" >> /etc/iproute2/rt_tables
echo "101 tun1" >> /etc/iproute2/rt_tables
Openvpnが接続するときにルートを自動的に追加する/etc/openvpn/route-up.sh
スクリプトを作成します。
#!/bin/bash
RULE_EXIST=$(ip rule list | grep "from ${ifconfig_local}" | wc -l)
if [ $RULE_EXIST -ne 0 ]; then
ip rule del from "${ifconfig_local}" lookup "${dev}"
fi
ip rule add from "${ifconfig_local}" lookup "${dev}"
ip route add default via "${route_vpn_gateway}" dev "${dev}" table "${dev}"
chmod +x /etc/openvpn/route-up.sh
を実行します
これらの行をOpenVPNクライアント構成ファイルに追加します。
route-noexec
route-up /etc/openvpn/route-up.sh
script-security 2
次に、両方のクライアントに接続し、ルーティングテーブルを確認します。
root@debian:/etc/openvpn# ip route show
default via 10.0.2.2 dev eth0
10.0.2.0/24 dev eth0 scope link src 10.0.2.15
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2
root@debian:/etc/openvpn# ip route show table tun0
default via 10.8.0.1 dev tun0
root@debian:/etc/openvpn# ip route show table tun1
default via 10.0.2.2 dev eth0
root@debian:/etc/openvpn# ip rule show
0: from all lookup local
32762: from 10.8.0.2 lookup tun0
32763: from 10.0.2.15 lookup tun1
32766: from all lookup main
32767: from all lookup default
次に、何をするかを決める必要があります。たとえば、単純な負荷分散を有効にするには、次のルートを追加します。
ip route del default
ip route add default scope global nexthop via 10.8.0.1 dev tun0 weight 1 \
nexthop via 10.0.2.2 dev eth0 weight 1
その後、メインルーティングテーブルは次のようになります。
root@debian:/etc/openvpn# ip route show
default
nexthop via 10.8.0.1 dev tun0 weight 1
nexthop via 10.0.2.2 dev eth0 weight 1
10.0.2.0/24 dev eth0 scope link src 10.0.2.15
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2
ポリシーベースのルーティングを使用すると、クールなことができます。その他のアイデアについては、以下の参考文献を参照してください。
これをroute-up.sh
スクリプトに追加して、デバッグを支援し、使用可能な変数を確認します。
log=/tmp/ovpn.log
exec >>"$log" 2>&1
chmod 666 "$log" 2>/dev/null
printenv
次に、接続中にtail -f /tmp/ovpn.log
を実行します。