web-dev-qa-db-ja.com

複数のルーティングテーブルを備えたOpenVPN

Openvpnクライアントを使用していますが、デフォルトの構成ではデフォルトのGWが上書きされます。 (サーバー上のリダイレクトゲートウェイ)
Linuxクライアントに2つのルーティングテーブルがあります。1つ(デフォルトはeth0)、100 = tun0です。これはupスクリプトによって追加されます。
必要なのは、2つの異なるルーティングテーブルを使用してルーティングを分割することです。

openvpnクライアント構成:

client
dev tun
proto udp
remote blea.com
auth-user-pass
persist-key
persist-tun
remote-cert-tls server
reneg-sec 0
keepalive 10 60
route-nopull
pull-filter ignore "ifconfig-ipv6"
script-security 2
up /etc/openvpn/route-up.sh
mute-replay-warnings
explicit-exit-notify 3
cipher AES-256-CBC
auth SHA512
tls-version-min 1.2

ルートアップスクリプト:

if [ $(/bin/cat /etc/iproute2/rt_tables | /bin/grep $dev | /usr/bin/wc -l) -eq 0 ]; then
/bin/echo "100 tun0" >> /etc/iproute2/rt_tables

/bin/ip route add default via $route_vpn_gateway dev $dev table $dev

Route-nopullを使用する場合、$ route_vpn_gateway環境変数が設定されないという1つの問題があります。
route-nopullを無効にすると、デフォルトルーティングテーブルのデフォルトゲートウェイが上書きされるため、すべてのトラフィックがトンネルを通過します。
サーバーにアクセスできないため、サーバーで何も変更できません。
OpenVPNサーバーによって提供されるデフォルトのGWは動的であるため、これを静的に設定することはできません。

これを回避する方法は?

2
HyperDevil

これを行う1つの方法は、(route-noexecの代わりに)route-nopullオプションを使用することです。これにより、route- *環境変数が完全に入力されますが、実際にはルートテーブルは変更されません。すべてのルート変更は、route-up.shに任されます。

3
quadruplebucky