複数の同じLANを使用する1:1 NAT

複数の同じLANを使用する1:1 NAT

リモートビルの複数のLANを接続したいです。
「中央」サイトには、OpenVPNを実行しているLinuxコンピュータがあります。各リモートサイトもOpenVPNを実行します。

  1. 中央サイトには192.168.0.0/24というLAN番号があります。
  2. 複数のリモートサイトの番号も192.168.0.0/24と指定されています。
  3. LAN番号を変更できません/しない/したくない/しかし、LAN番号は変更されます。
  4. ほとんどのリモートOpenVPNを制御できません。

その後、次のことを行う必要があります。
1.仮想LANを定義します
。 2. 各サイトに対して 1:1 NAT を設定します。
3. 中央ルータで 1:1 NAT を設定する必要があります。

LAN図
したがって、各サイトには10​​.10.x.0/24 LANが表示されます。
たとえば、コンピュータがサイト12の192.168.0.44にアクセスしようとすると、単に10.10.12.44にパケットを送信します。

VPNを運営することは私にとって問題ではありません。現在60以上のサイトに接続しています。しかし、1:1 NATを実行する簡単な方法が見つかりませんでした。

以下は、中央サイトからリモートサイトに送信されるパケットとその応答パケットの例です。

ここに画像の説明を入力してください。

iptables NETMAPでいくつかのテストを行いましたが、ルーティングの決定後にソース+ターゲットを変更する方法が見つからないため、動作しません。
新しいOpenVPN機能を使用しないことをお勧めします--client-nat
強制的にルーティングする必要がありますかip route?それとも、ループを使用してネットワークスタックに2回入りますかveth

注:私は変装を使用したくありません。 1/1 NATのみ可能です。

編集:
一般的なopenVPN設定はできません。リモートサイトのパケットは他のサイトのパケットと区別できないため、両方とも同じソースアドレスと宛先アドレスを持ち、両方とも同じトン(またはタブ)インターフェイスから来ます。したがって、ソースNATingは不可能です。

解決策1:リモートサイトのNAT。私の場合は不可能です。中央サイトでのみこれを行う必要があります。

解決策2:各リモートサイトにVPNを設定します。だから私はみんなに多くを与えるでしょう。大丈夫だと思います。メモリ効率的ではありませんが、大丈夫です。

解決策3:VPN内の各サイトに(暗号化されていない)トンネルを設定します。これはそれぞれにインターフェイスを提供します。 Simple Tunnelは(私が知る限り)クロスプラットフォームではありません。たとえば、GRE、ipip、またはsitはLinuxでは問題ありませんが、一部のリモートサイトはWindowsシステムのみを実行するため、openVPNがインストールされます。したがって、単純なトンネルを構築することは不可能です。他のオプションは、より複雑なトンネルを使用することです(どのようなものですか?)。ただし、システムおよびシステム管理者にかかるオーバーヘッドは、複数のVPNを使用するよりも大きくなる可能性があります。

解決策4:1:1 NAT機能を含む最新のopenVPNをコンパイルします。今週テストしてみましょう。

ベストアンサー1

非常に基本的な解決策は次のとおりです。
1.サーバー+クライアントにOpenVPN 2.3以降を使用します(現在の最新バージョンは2.3-alphaです)。
2. 以下の OpenVPN 設定オプションを使用します
。 3.他のものは使用しません(ipfilterなし、トリックなし)。

サーバー側では、VPNアドレスを手動で割り当てる必要があります(したがってオプションがないため、またはをserver使用する必要があります)。 ifconfigifconfig-push

# /etc/openvpn/server.conf
ifconfig 10.99.99.1 10.99.99.2
route 10.99.99.0 255.255.255.0
push "route 10.99.99.0 255.255.255.0"
push "client-nat dnat 10.99.99.11 255.255.255.255 10.10.111.11"
push "client-nat dnat 10.99.99.12 255.255.255.255 10.10.112.12"
push "client-nat dnat 10.99.99.13 255.255.255.255 10.10.113.13"

VPNを介してリモートサイトからルータ間で直接通信するには、回線が必要routeですpush route。それ以外の場合は削除できます。 client-natping 10.99.99.1

これで仮想ネットワークアドレスを選択する必要があります。お客様の例で使用したのと同じ 10.10.0.0/16 を維持し、
そのルーティングを許可しました。

# /etc/openvpn/server.conf
route 10.10.0.0 255.255.0.0
push "route 10.10.0.0   255.255.0.0"

クライアントに1:1 NATを使用するように指示する必要があります。

# /etc/openvpn/ccd/client_11
ifconfig-push 10.99.99.11 10.99.99.1
push "client-nat snat 10.99.99.11 255.255.255.255 10.10.111.11"
push "client-nat snat 192.168.0.0 255.255.255.0 10.10.11.0"
push "client-nat dnat 10.10.10.0 255.255.255.0 192.168.0.0"
iroute 10.10.11.0 255.255.255.0
iroute 10.10.111.0 255.255.255.0

最初の行はリモートルータアドレスを設定します。 Windowsドライバには特別なアドレスが必要です。
2番目と最後の行を使用すると、リモートルーターは10.99.99.xインターフェースを介して通信できます。
3行目と4行目は送信元と宛先の1:1 NATを実行し、
5行目はOpenVPNにそのパケットを処理する方法を示します。

この方法では、シャドウホストなしで同じ(または他の)LANアドレスを使用してサイトを接続できます。

おすすめ記事