web-dev-qa-db-ja.com

OpenVPNサイト間ルーティングの問題

私は2つのサイトを接続するためのopenVPNセットアップと戦っています。これはシナリオがどのように見えるかです

Office 1(サーバー):

  • ローカルネットワーク:192.168.178.0/24
  • openvpn server public ip:192.168.178.2 on br0
  • openvpnサーバーの内部IP:tun0の192.168.0.1

Office 2(クライアント):

  • ローカルネットワーク:192.168.177.0/24
  • openvpn client public ip:192.168.177.2 on p2p1
  • openvpnクライアントの内部IP:tun0の192.168.0.6

  • openvpn内部ネットワーク:192.168.0.0/24

クライアントとサーバーの両方が、動的に割り当てられたIPアドレスを持つNATルーターの背後にあります。

基本的に、どちらかのオフィスに関係するマシンは、お互いを「見る」ことになっています。トンネルを設定し、両方のサイトでルーティングテーブルを適切に構成した後、両方のネットワークの通常のホストは、これら2つのネットワーク上のすべてにpingを実行できます。これまでのところ良い。

ただし、エンドポイントは相互にしか認識できず、それぞれの遠端ネットワーク上のホストは認識できません。たとえば、

ping 192.168.178.2

vPNエンドポイント192.168.177.2からは、問題なく機能し、他のアドレスは機能しません。ホストは応答しません。

別のアドレスにpingを実行したときのtcpdumpの出力を見てみましょう。 192.168.178.3。

11:11:28.104640 IP 192.168.0.6> 192.168.178.3:ICMPエコー要求、ID 2130、シーケンス1、長さ64

ソースIPは完全に正しくないようです。 OpenVPNの内部ネットに属しており、ICMP応答がありません。

適切なソースIPを使用するようにpingに明示的に指示すると、動作が開始されます。

ping 192.168.178.3 -I 192.168.177.2

これで、tcpdumpの出力も問題ありません。

11:20:08.266271 IP 192.168.177.2> 192.168.178.3:ICMPエコー要求、ID 7883、シーケンス17、長さ64 11:20:08.316037 IP 192.168.178.3> 192.168.177.2:ICMPエコー応答、ID 7883、シーケンス17長さ64

クライアントのルーティングテーブルの重要なエントリを見ると、送信元アドレスが内部ネットワークからのものであることがわかります。

default via 192.168.177.1 dev p2p1 
192.168.0.1 via 192.168.0.5 dev tun0 
192.168.0.5 dev tun0  proto kernel  scope link  src 192.168.0.6 
192.168.177.0/24 dev p2p1  proto kernel  scope link  src 192.168.177.2 
192.168.178.0/24 via 192.168.0.5 dev tun0

OpenVPNに適切なsrcでそのエントリを作成させる可能性はありますか?

これが私のopenVPN設定ファイルです。トンネル自体は期待どおりに機能するため、TLSの部分はスキップします。

オフィス1のサーバー:

local 192.168.178.2
server 192.168.0.0 255.255.255.0
proto tcp-server
port 1194
dev tun
mssfix
user nobody
group nogroup

keepalive 20 120
ping-timer-rem
persist-tun
persist-key
float
comp-lzo
Push "comp-lzo"

Push "route 192.168.178.0 255.255.255.0"
route 192.168.177.0 255.255.255.0
client-config-dir client-configs

次のようなクライアント構成が1つあります。

iroute  192.168.177.0 255.255.255.0
Push    "route 192.168.178.0 255.255.255.0 vpn_gateway"

オフィス2のクライアント:

client
dev tun0
remote <server address>
proto tcp-client
port 1194
connect-retry 15


comp-lzo
user nobody
group nogroup

persist-tun
persist-key

私はここで本当に途方に暮れています...あなたの助けは非常にありがたいです。

1
Armin Schmidt

表示されている動作は仕様によるものです。ネットワーク上のホストは、デフォルトで、トラフィックが存在するインターフェイスのIPアドレスを送信元IPとして使用します。

いずれかのLAN上のクライアントマシンは、マルチホームではないため、たとえば192.168.178.10をソースIPとして使用します。その後、ゲートウェイはパケットをOpenVPNボックスにルーティングし、問題なくトンネルを通過します。

ただし、OpenVPNボックス自体からアクセスする場合は、OpenVPNインターフェイスのIPアドレスが使用されます。これは、そこからパケットが送信されるためです。

どちらでも構いません。リモートサイトに到達します。しかし、リモートサイトは192.168.0.6へのping応答のパケットを送信したいと考えています。応答はゲートウェイに送信されますが、ゲートウェイ(ゲートウェイのルーティングテーブルをネットワークに投稿しなかったため)にはそのネットワークへのルートがないため、その方法がわかりません。続行します。

これを解決する最も簡単な方法は、192.168.0.0/24(OpenVPNネットワーク)のルートを両方のネットワークのゲートウェイに追加することです。

別のオプションとして、オペレーティングシステムがサポートしている場合(OpenVPNを実行しているOSを指定しなかった場合)、ルートの「src」パラメーターを使用して、IPアドレスを選択するこのデフォルトの動作をオーバーライドできるかどうかを確認します。出力インターフェイスの。詳細については、 openvpnでカスタムルートソースを設定する方法 というタイトルの質問を参照してください。

2