web-dev-qa-db-ja.com

リモートホストのインターフェイス間の透過的なトンネル

2つのポートを持つネットワークスイッチとして機能するソリューションを作成する必要があります。1つのポートが1つの国にあり、2つ目のポートが別の国にあります。

              +------------ Virtual switch ----------------+
+---------+   |   +-------+    +----------+    +-------+   |   +--------+
|Client A |<--+-->| BOX 1 |<-->|VPN server|<-->| BOX 2 |<--+-->|Client B|
+---------+   |   +-------+    +----------+    +-------+   |   +--------+
              +--------------------------------------------+

クライアントAとクライアントBは、通常のレイヤー2スイッチのように感じます。 2つのボックス間のVPN接続はOpenVPNです。したがって、2つのボックス間のVPNトンネルを介してイーサネットフレームを転送する必要があります。ボックス1と2はDebian jessieを実行しています。私はそれのために自分のソフトウェアを書かないことを望みます:)誰かが可能な解決策を提案できますか?

追伸LANでのみ動作するように設計された2つのハードウェアを接続する必要があります

UPD:このような設定をシミュレートするために4つのVMをインストールしました(vpnserverは省略されました):
-すべてのマシンはdebianボックスです
-ボックス1とボックス2の間にはGREタップトンネルがあります(Ethernet over IP)
-クライアント上gretapインターフェースでブリッジされたローカルインターフェース:ブリッジのアドレスは10.0.0.253です
-gretapインターフェースでブリッジされたクライアントBローカルインターフェース:ブリッジのアドレスは10.0.0.254です
-クライアントAの静的IPは192.168.1.1です
-クライアントBの静的IPは192.168.1.2です

クライアントAから、ICMPエコー要求を192.168.1.2に送信していて、ARP要求が表示されます"誰が192.168.1.2に192.168.1.1を伝えるか192.168.1.1"ボックス1のブリッジで、ボックス2のブリッジで、クライアントBでしかしARP応答はクライアントBでのみ表示されます。そのため、ARP応答はどういうわけかBox2に戻りません。そして、10.0.0.253と10.0.0.254の間のすべてのネットワーキングがうまく機能します。つまり、ブリッジングが原因の問題だと思います。

UPD2:ここで、GREタップトンネリングを削除し、ボックス1とボックス2の間に通常のネットワークを確立しました。ブリッジを作成すると、pingが機能し始めました。 GREトンネルを実行するときに何が問題を引き起こす可能性がありますか?

解決策:GRE-TAPを使用してVMのすべてを最終的に構成しました。 Box 1とBox 2の間の通常のネットワークでGRE-TAPトンネルを使用しました。次に、各Boxのローカルインターフェイスとトンネリングインターフェイスをブリッジしました。以下は私のステップです:

ボックス1

ip link add tunnel0 type gretap remote 192.168.0.2 local 192.168.0.1
brctl addbr br0
brctl addif br0 eth2  # eth2 - is a local interface on Box 1
brctl addif br0 tunnel
ip addr add 10.0.0.253 dev tunnel0
ip link set br0 up
ip link set tunnel0 up

ボックス2

ip link add tunnel0 type gretap remote 192.168.0.1 local 192.168.0.2
brctl addbr br0
brctl addif br0 eth2  # eth2 - is a local interface on Box 2
brctl addif br0 tunnel
ip addr add 10.0.0.254 dev tunnel0
ip link set br0 up
ip link set tunnel0 up

ありがとうございました!

4
victor_crimea

私自身はこれを試していませんが、gretapを使用してレイヤー3(ip)を介してレイヤー2(イーサネット)をトンネリングできることを知っています。たとえば、これに blogentry を使用すると、両端に1つのgretapインターフェースを設定し、それをイーサネットインターフェースにブリッジできます。私がすべてを正しく理解している場合、例では172.31.0.1はボックス1のVPNエンドポイントのアドレスである必要があり、172.31.0.2ボックス2のVPNエンドポイントのアドレス。10.10.10.1はボックス1のローカルLANアドレスであり、10.10.10.2ボックス2のLANアドレス。

ボックス1:

ip link add gretap0 type gretap local 172.31.0.1 remote 172.31.0.2
ip link set dev gretap0 up
ip link set dev eth0 up
brctl addbr br0
brctl addif br0 gretap0
brctl addif br0 eth0
ip addr add 10.10.10.1/24 dev br0
ip link set br0 up

ボックス2:

ip link add gretap0 type gretap local 172.31.0.2 remote 172.31.0.1
ip link set dev gretap0 up
ip link set dev eth0 up
brctl addbr br0
brctl addif br0 gretap0
brctl addif br0 eth0
ip addr add 10.10.10.2/24 dev br0
ip link set br0 up

MTU設定を微調整する必要がある場合があります。この設定はテストできないので、他の調整も必要になる場合があります。

EditHere は、MTUの問題を説明する記事で、明らかに少し複雑です。あなたの場合、VPN MTU設定を制御できれば、より簡単になるでしょう。

5
dirkt

これはそれほど難しいことではありません。なぜなら、すべてのL2トラフィックが1つのネットワークから別のネットワークに通過できることです。これは bridged OpenVPN 接続の標準機能です。この意味は:

  1. openVPNサーバー(および2つのクライアント)を構成して、ブリッジされたOpenVPN接続をセットアップします(そして、client-to-client命令を介してクライアントから別のクライアントへの接続を許可することを忘れないでくださいサーバー構成ファイル)、...

  2. または、たとえば here または here のように、仲介者を排除して、Box1とBox2を直接接続します。

どちらかの場合、両方のLANで両方のDHCPとルーティングに取り組む必要があります。それらは同じブロードキャストドメインに属している必要があります。たとえば、使用するサブネットが192.168.0.0/23で、LAN1のDHCPサーバーが192.168の範囲のアドレスを提供していると判断する場合があります。 .0.0/24、およびLAN2上のDHCPサーバーが範囲192.168.1.0/24のアドレスを提供します。

次に、ルートを調整する必要があります。 Box1がLAN1内のアドレス192.168.0.121のPCであり、Box2がLAN2内のIPアドレス192.168.1.173のPCであるとします。次に、LAN1のゲートウェイでルートを追加する必要があります。

ip route add 192.168.1.0/24 via 192.168.0.121 

lAN2のゲートウェイでは、次を追加する必要があります。

ip route add 192.168.0.0/24 via 192.168.1.173

これにより、サイト内のL2トラフィックがいくらか生成されます。このような3サイト構成で、トラフィック量と100Mb/s接続に問題はありませんが、YMMVです。 OpenVPNを通過するL2トラフィックの量を制限する場合は、Box1およびBox2でebtablesを使用できます。

それが、あなたが求めていることを理解する唯一の方法です。

1
MariusMatutiae