ノート
この質問は、元のOpenVPNがデフォルトゲートウェイを持たない場合、--redirect-gateway local
またはを指定してもデフォルトゲートウェイを設定しないことです--redirect-gateway def1
。2.4.1以降、VPNを開きますするこのオプションを使用すると、既定のゲートウェイが既に存在するかどうかに関係なく設定されるため、そのバージョンを使用している場合は使用されなくなります。
Ubuntu ZestyのOpenVPNバージョンは2.4.0で、これらの変更はありません。しかし、ArtfulバージョンはZestyに問題なくインストールされます。
Ubuntu 14.04.5でネットワークネームスペースを作成し、その中でVPNを実行する予定です(OpenVPN 2.3.2および設定ファイルを使用)。 VPNが実行されるまで、トラフィックはネームスペースの外にルーティングできないことがアイデアです。
私はデフォルトルートを作成せずにVPNサーバーのIPアドレスをホワイトリストに追加することでこれを行いました。私のルーティングテーブルは次のとおりです。
# ip netns exec testns ip route add A.B.C.D/32 via 10.200.200.1 dev veth1
# ip netns exec testns ip route show
10.200.200.0/24 dev veth1 proto kernel scope link src 10.200.200.2
A.B.C.D via 10.200.200.1 dev veth1
ちなみに、これは10.200.200.1
仮想インターフェイス()の反対側のアドレスです。ルートネームスペースのルールとIP転送を介して、ルーティングが存在するときにネームスペースの内外にトラフィックが流れるようにすることを確認しました。 VPN サーバーのアドレスです。veth0
veth1
10.200.200.2
iptables
testns
A.B.C.D
VPN を開始するために、構成ip netns exec testns openvpn abcd.ovpn
ファイルにはpull
ディレクティブが含まれ、push
サーバーの ed 構成には以下が含まれます。
PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1,dhcp-option[...]
しかし、しばらくして、私は次の事実を見ました。
NOTE: unable to redirect default gateway -- Cannot read current default gateway from system
したがって、私の名前空間にはデフォルトパスが設定されていませんtestns
。
マニュアルによると、redirect-gateway def1
いいえデフォルトのパスを変更しようとしましたが、2つの新しいパス0.0.0.0/1
と128.0.0.0/1
。デフォルトパスなしでこれらのパスが生成されないようにするにはどうすればよいですか?デフォルトルートが最初に存在しない場合、OpenVPNが自動的にVPNを介してすべてのトラフィックをルーティングするようにするにはどうすればよいですか?
答え1
マニュアルによると、リダイレクトゲートウェイdef1はデフォルトパスを置き換えようとせず、2つの新しいパス0.0.0.0/1と128.0.0.0/1を生成します。デフォルトパスなしでこれらのパスが生成されないようにするにはどうすればよいですか?
OpenVPNがデフォルトゲートウェイのみをオーバーライドすると、元のゲートウェイを介してピアエンドポイントに接続できなくなります。したがって、最初に行うことは、デフォルトゲートウェイを見て、ピアエンドポイントに対してそのゲートウェイを介して明示的なホストパスを確立することです。
OpenVPNのマニュアルページはこれについて非常に明確です。
- ゲートウェイフラグリダイレクト...
VPN を通過するすべての IP トラフィックをリダイレクトするルーティング コマンドを自動的に実行します。これはクライアントオプションです。
このオプションは、次の3つのステップを実行します。
(1) --remote アドレスの固定パスを作成し、既存のデフォルトゲートウェイに渡します。これは、(3)ルーティングループが生成されないように行われる。
(2) デフォルトゲートウェイパスを削除します。
(3)新しいデフォルトゲートウェイをVPNエンドポイントアドレスに設定します(--route-gatewayまたは--dev tunが指定されている場合は-ifconfigの2番目の引数で)。
トンネルが撤去されると、上記のすべてのステップをキャンセルして元のデフォルトルートを復元します。
それからあなたは尋ねる
デフォルトルートが最初に存在しない場合、OpenVPNが自動的にVPNを介してすべてのトラフィックをルーティングするようにするにはどうすればよいですか?
OpenVPNクライアントには、ピアエンドポイント(サーバーなど)に到達するためのパス(どこか)が必要です。したがって、パスが何であれ、上記の3つのタスクをスクリプトに実装する必要があります--up
。もちろんこれをスクリプトで書く必要があります。
答え2
2つの解決策:
- 偽のデフォルトゲートウェイ(例:127.0.0.1)を設定し、OpenVPNがそれを無視できるようにします。
- 実行後のスクリプトを使用したIPパスによるゲートウェイの設定