これは 標準的な質問 VPNクライアントのローカルネットワークとそれからVPNリンクを介したローカルネットワークとの間のIPv4サブネット競合の解決についてです。
OpenVPN経由でリモートロケーションに接続した後、クライアントは192.0.2.0/24などのサブネット上に存在するネットワーク上のサーバーにアクセスしようとします。ただし、クライアントのLAN上のネットワークに同じサブネットアドレス192.0.2.0/24が含まれる場合があります。この競合のため、クライアントはIPを入力してもリモートサーバーに接続できません。 VPNに接続している間は、公共のインターネットにアクセスすることもできません。
問題は、このサブネット192.0.2.0/24がVPNによってルーティングされる必要があることですが、クライアントのLANとしてもルーティングされる必要があります。
この問題を緩和する方法を知っている人はいますか? OpenVPNサーバーにアクセスできます。
NATを使用してこれを解決することが可能です。あまりエレガントではありません。
したがって、実際には競合することがないほど一般的ではないネットワーク番号を持つ内部ネットを使用してこれを解決することができないという仮定の下では、ここに原理があります:
ローカルサブネットとリモートサブネットのネットワーク番号は同じであるため、クライアントからのトラフィックは、宛先に到達するためにトンネルゲートウェイを経由する必要があることに気づくことはありません。そして、私たちがそれを想像できるとしても、リモートホストが応答を送信しようとしているので、状況は同じです。
ですから、私と一緒にいて、現時点では、完全な接続のために書いているので副次的な問題はないように見せてください。ホストを区別してルーティングできるように、トンネル内の両端をNATする必要があります。
ここにいくつかのネットを作る:
したがって、VPNトンネル内では、オフィスホストは198.51.100.xになり、リモートオフィスホストは203.0.113.xになります。さらに、すべてのホストがそれぞれのVPNゲートウェイのNATに1:1でマッピングされているとしましょう。例:
したがって、リモートオフィスのホスト192.0.2.5/24がオフィスネットワークの同じIPでホストに接続する場合、宛先としてアドレス198.51.100.5/24を使用して接続する必要があります。次のことが起こります。
したがって、解決策はありますが、これが実際に機能するためには、対処する必要のある多くの問題があります。
したがって、これを解決するには注意深い設計が必要です。あなたのリモートオフィスが本当にロードウォリアーで構成されている場合は、それに問題のレイヤーを追加します:
VPNクライアントによっては、ローカルセグメントのネットワークアドレスに応じて、自動的に一方のVPNを選択できる場合があります。
このコンテキストでのNATの言及はすべて、いわばトンネルパースペクティブ内で行われるNAT関数を示していることに注意してください。プロセスごとに、静的NATマッピングは、パケットがトンネルに入る前、つまり、インターネットを介して他のVPNゲートウェイに転送されるトランスポートパケットにカプセル化される前に行う必要があります。
これは、VPNゲートウェイのパブリックIPアドレス(実際にはNAT:である可能性がありますが、VPNを介したリモートサイトへのトランスポートの観点からは完全に外れています)を、マスカレードとして使用される一意のプライベートアドレスと混同しないことを意味します。重複するプライベートアドレス。この抽象化を描くのが難しい場合は、この目的でNATをVPNゲートウェイから物理的に分離する方法を以下に示します。
重複するネットワークでのNATの使用 。
NATとVPNゲートウェイの両方の機能を実行できる1台のマシン内の論理的な分離に同じ図を凝縮することは、同じ例をさらに1歩進めるだけですが、手元のソフトウェアの機能をより重視します。 。たとえば、OpenVPNやiptablesと組み合わせてハッキングし、ここにソリューションを投稿することは、価値のある挑戦です。
ソフトウェア的には確かに可能です:
PIX/ASA 7.x以降:重複するネットワーク構成例を持つLAN-to-LAN IPsec VPN
そして:
LANサブネットが重複しているルーター間のIPSecトンネルの構成
したがって、実際の実装は、多くの要因、関連するオペレーティングシステム、関連するソフトウェア、およびその可能性に依存します。しかし、それは確かに実行可能です。少し考えて実験する必要があります。
リンクからわかるように、シスコからこれを学びました。
単一または少数の既知のサーバーIPに対する一時的なダーティ回避策が必要な場合、最も簡単な解決策は、静的なクライアント側のルーティングオプションです。
私の場合、目的の宛先サーバー(192.168.1.100)をLinuxクライアントのルーティングテーブルに追加しました。
route add 192.168.1.100 dev tun0
その後、route deleteコマンドでこの静的ルートを削除します。
うん、これは最悪です。私にとって、それはホテルの部屋からいつでも起こりました。VPN管理者が、あいまいなIP範囲を使用する必要があることに気づく前に。 10.0.0.0/24と10.1.1.1/24が最悪です。あなたがそれを助けることができるなら、そのような無線ネットワークを決してipしないでください。
したがって、答えは、異なる内部ネットワーク(つまり10.255.255.0/24)を使用するようにwapを "修正"してから、差分リース(つまり、corp vpnにルーティングできる範囲のIP)を与えるか、または/ wapで管理者を取得できません。スターバックスにアクセスしてください。または20分のワードライビング:)
これがラボ環境にある場合は、別の範囲を使用してください。
El Capitanを実行しているMacを使用しています。上記の提案は私にとってはうまくいきませんでしたが、彼らは私を実用的な解決策に導きました:
ifconfig
を実行しますvPNを開始し、ifconfig
を実行して、どちらが新しいインターフェースであるかをメモします。私の場合、それはpppで、IPアドレスは192.168.42.74でした。
ppp0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1280
inet 192.168.42.74 --> 192.0.2.1 netmask 0xffffff00
入力:
Sudo route add 192.168.1.79 192.168.42.74
最初にping
を使用してテストし、次にgitサーバーにアクセスすることで機能することを証明しました。
上記のようにrouteコマンドの最後にdev pppを使用しようとすると、文句を言われました。
Aydin K.からの回答はLinux向けです。 Windowsで同じ機能が必要な場合は、次のように入力できます。
route ADD 192.168.1.10 <IP of tunnel adapter>
または
route ADD 192.168.1.10 IF <interface id>
次のコマンドでインターフェースIDを取得できます。
route print
競合するIP範囲(10.x)があるコワーキングスペースで使用している簡単なソリューションがあります
携帯電話でネットワークに接続し、Bluetooth経由でネットワーク接続をラップトップと共有しました。これで、リモートの雇用主にVPNを使用できます。
より高速な接続が必要な場合、これはUSB経由でもまったく同じように機能します。
1つまたは2つのIPアドレスをヒットするだけの場合は、次のように、ovpn構成ファイルにrouteステートメントを追加します。
ルート192.168.1.10 255.255.255.255
ルート192.168.1.11 255.255.255.255
それはあなたがあなたのVPNを接続したときにそれらのIPだけのためのルートを追加し、それがそれが切断したときにそれを削除します。
とにかくWindowsで私のために働いた。
思い出させてください:この問題全体は、長年にわたるIPv4アドレスの不足と、この不足を回避するための プライベートIP範囲 の広範な使用によるものですNAT!
この問題の理想的で決定的な解決策は、非常に簡単です(グローバルに展開できるようになるまでには時間がかかります): IPv6 ...
IPv6の世界では、パブリックIPの不足はありません(数年後には発生しません)。したがって、すべてのネットワークのすべてのデバイスでパブリックIPを使用しない理由はありません。また、ネットワークの分離が必要な場合は、ファイアウォールでフィルタリングを続けますが、醜いNATは使用しません...