あなたは尋ねました:「この問題がなぜ最初に起こるのか誰かが説明できますか?」
OpenVPNの公式FAQで報告されている内容に基づいて、OpenVPNエンジン内のルーティングの問題が原因であると思います。
シナリオをより明確にするために、次の図を参照してください。
ここであなたは見ることができます:
- HEADQUARTER内部ネットワーク(10.0.1.0/24)に接続されたOpenVPN「サーバー」
- リモートサイトで実行され、リモート192.168.1.0/24ネットワークに接続されたOpenVPN「クライアント」
また
- OpenVPNトンネルが確立されており、次のことを前提としています。
- OpenVPN「サーバー」は、アドレス10.10.0.1の独自のtunインターフェースを介して到達可能です。また、tunインターフェースで使用されるP2Pアドレスは10.10.0.2です(これは後の説明で重要なので、強調しましょう)
- OpenVPN「クライアント」にはIP 10.10.0.2のtunインターフェースがあります
さて、それを仮定しましょう:
- OpenVPNの「クライアント」はデフォルトゲートウェイを再定義しているため、トンネル内ですべての発信IPトラフィックをリダイレクトできます。
- OpenVPNの「クライアント」ではIP_FORWARDINGが有効になっているため、内部LAN(192.168.1.0/24)からのパケットをルーティングできます(この点は、説明のために重要であるため強調しています)。
このようなシナリオが整ったら、R_PC1(192.168.1.2)がecho-requestなどのパケットをL_PC1(10.0.1.2)に送信したときに何が起こるかを詳しく確認してみましょう。
- R_PC1 NICを離れると、パケットはOpenVPNクライアントに到達します。
- OpenVPNクライアント(これは一般的なルーターとして機能するように構成されています)のルーティングテーブルに従ってルーティングします。デフォルトゲートウェイはトンネルなので、パケットをトンネルに送信します。
- パケットがOpenVPNサーバーのtunインターフェースに到達します。OpenVPNはそれを「認識」し、10.0.1.2がそのLANサブネットに属するアドレスであることを(OpenVPNサーバー)が認識しているため、TUNからLANにパケットを「転送」します。
- パケットはL_PC1に到達します。
だからすべてが大丈夫です...
次に、L_PC1がR_PC1に返信するエコー応答で何が起こるかを確認しましょう。
- エコー応答はL_PC1 NICを離れ、OpenVPNサーバーのLANインターフェース(10.0.1.1)に到達します。
OpenVPNサーバーがリモートサイトに到達できるようにするには、「静的ルート」を使用してルーティングを定義する必要があります。何かのようなもの:
route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.10.0.2
ゲートウェイとして使用されるP2Pアドレスに注意してください。
このような静的ルートはOSレベルで動作します。つまり、オペレーティングシステムがパケットを適切にルーティングする必要があります。それは、「192.168.1.0/24サブネットにアドレス指定されたすべてのトラフィックは、OSがP2Pアドレスを介して通信できるOpenVPNエンジンに転送される必要がある」のようなものを意味します。そのような静的ルートのおかげで、今...
- パケットはOSルーティングコンテキストを離れ、OpenVPNに到達します。OpenVPNサーバーで実行されているOpenVPNインスタンス。したがって、この時点では、OSは何もする必要がなく、すべてのルーティング(VPN内)はOpenVPNサーバーソフトウェアに任されています。
つまり、openvpnサーバーソフトウェアは、SRC_IP 10.0.1.2およびDST_IP 192.168.1.2を使用して、パケットのルートをどのように決定できるのでしょうか。
OpenVPNサーバーの構成に基づいて、192.168.1.0 / 24ネットワークや192.168.1.2ホストについては何も認識しないことに注意してください。それはだていない接続されたクライアント。それはだないローカルクライアント。など?OpenVPNは、それが「OSルーター」ではないことも知っているため、ローカルゲートウェイにパケットを送り返すことは望んでいません(そして、できます...)。したがって、ここでの唯一の選択肢は、エラーを発生させることです。まさに発生しているエラー
FAQの言語でそれを言うには: " ...このマシンにパケットをルーティングする方法がわからないため、パケットをドロップします... "。
どうすれば問題を解決できますか?
公式ドキュメントからわかるように、オプションirouteは私たちのスコープに完全に対応します。
--iroute network [netmask]
Generate an internal route to a specific client. The netmask
parameter, if omitted, defaults to 255.255.255.255.
This directive can be used to route a fixed subnet from the server
to a particular client, regardless of where the client is
connecting from. Remember that you must also add the route to the
system routing table as well (such as by using the --route
directive). The reason why two routes are needed is that the
--route directive routes the packet from the kernel to OpenVPN.
Once in OpenVPN, the --iroute directive routes to the specific
client.
だからあなたは必要です:
--iroute 192.168.1.0 255.255.255.0
OpenVPNクライアントがサーバーに定義されているアドホック構成ファイル(client-config-dirなど)を介して接続するときに(サーバーに)適用されます。
あなたはこの問題がない理由だろべきではない以上、私の理解は、OpenVPNのクライアントがいることである)ステップ2で起こる知っているか、それはVPNトンネルは、デフォルトゲートウェイであることを知っている原因ルートそれ」へ。
OpenVPNサーバーでも同じことはできません。なぜなら、デフォルトゲートウェイは通常、上書きされないためです。また、多数のOpenVPNクライアントを備えた単一のOpenVPNサーバーを使用できると考えてください。各クライアントはサーバーに到達する方法を知っていますが、サーバーは、不明なサブネットのゲートウェイとして機能しているクライアントをどのように決定できますか?
あなたの最初の質問(必要なルールは一般的な/一回限りの方法で書くことができますか?)については、申し訳ありませんが私はあなたの問題を解決していません。詳細を説明することはできますか?