この質問は元々、--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.1
はveth0
のアドレスであり、仮想インターフェイスveth1
(10.200.200.2
)のもう一方の端であることに注意してください。ルート名前空間でのiptables
ルールとIP転送が、ルートがある場合にtestns
名前空間にトラフィックを出し入れするように機能することを確認しました。 A.B.C.D
はVPNサーバーのアドレスです。
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経由で自動的にルーティングするにはどうすればよいですか?
マニュアルによると、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
スクリプトで実装する必要があります。もちろん、このスクリプトを作成する必要があります。
2つの回避策オプション: