web-dev-qa-db-ja.com

OpenVPNは、デフォルトルートが存在しない場合、それを作成できますか?

注意

この質問は元々、--redirect-gateway localまたは--redirect-gateway def1を指定しても、デフォルトゲートウェイがまだ存在しない場合にOpenVPNがデフォルトゲートウェイを設定しないことについて尋ねられました。 2.4.1以降 、OpenVPNdoesは、すでに存在するかどうかに関係なく、このオプションでデフォルトゲートウェイを設定するため、廃止されましたそのバージョンを使用している場合。

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.1veth0のアドレスであり、仮想インターフェイスveth110.200.200.2)のもう一方の端であることに注意してください。ルート名前空間でのiptablesルールとIP転送が、ルートがある場合にtestns名前空間にトラフィックを出し入れするように機能することを確認しました。 A.B.C.DはVPNサーバーのアドレスです。

VPNを起動するには、ip netns exec testns openvpn abcd.ovpnを実行します。この構成ファイルにはpullディレクティブが含まれ、サーバーからのPushed構成には次のものが含まれます。

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/1128.0.0.0/1。デフォルトルートがないと、これらが作成されないようにするにはどうすればよいですか?また、デフォルトルートが最初に存在しない場合に、OpenVPNですべてのトラフィックをVPN経由で自動的にルーティングするにはどうすればよいですか?

2
detly

マニュアルによると、redirect-gateway def1はデフォルトルートを置き換えようとはせず、0.0.0.0/1と128.0.0.0/1の2つの新しいルートを作成するだけです。デフォルトルートがないと、これらが作成されないようにするにはどうすればよいですか?

OpenVPNがデフォルトゲートウェイをオーバーライドするだけの場合、元のゲートウェイを介してピアエンドポイントに到達することはできなくなります。したがって、最初に行うことは、デフォルトゲートウェイを確認し、そのゲートウェイを介してピアエンドポイントの明示的なホストルートを設定することです。

OpenVPNのマニュアルページはこれについて非常に明確です:

-redirect-gatewayフラグ...

ルーティングコマンドを自動的に実行して、すべての発信IPトラフィックがVPN経由でリダイレクトされるようにします。これはクライアント側のオプションです。

このオプションは、次の3つのステップを実行します。

(1)既存のデフォルトゲートウェイに転送する--remoteアドレスの静的ルートを作成します。これは、(3)がルーティングループを作成しないようにするために行われます。

(2)デフォルトゲートウェイルートを削除します。

(3)新しいデフォルトゲートウェイをVPNエンドポイントアドレスに設定します(--dev tunが指定されている場合は--route-gatewayまたは2番目のパラメーターのいずれかから--ifconfigに派生します)。

トンネルが解体されると、上記のすべての手順が逆になり、元のデフォルトルートが復元されます。

次に、

デフォルトルートが最初に存在しない場合に、OpenVPNですべてのトラフィックをVPN経由で自動的にルーティングするにはどうすればよいですか?

OpenVPNクライアントがピアエンドポイント(つまりサーバー)に到達するには、ルートが(どこかに)存在している必要があります。したがって、そのルートが何であれ、上記の3つのタスクを--upスクリプトで実装する必要があります。もちろん、このスクリプトを作成する必要があります。

3
roaima

2つの回避策オプション:

  • 偽のデフォルトゲートウェイ(例:127.0.0.1)を設定し、OpenVPNがそれを上書きできるようにします。
  • 実行後のスクリプトを使用して、IPルートを使用してゲートウェイを設定します
1
Tim Fletcher