web-dev-qa-db-ja.com

ファイアウォールの背後にあるDockerで実行されているipsecサーバーに接続できません

私は非常に難しいとは思わないセットアップを持っていますが、それを機能させることはできません。

作業セットアップ:インターネットに直接接続されたDockerで実行されているipsecサーバー。クライアントは接続できます。

セットアップが機能していません:ファイアウォールの背後でインターネットに接続されたDockerで実行されているipsecサーバー。 node1として機能するesxiサーバーにinternet gatewayがあり、node2がある同じesxiサーバーでipsec server running in a dockerが実行されています。

Node1(インターネットゲートウェイ)でポート500と4500を開き、node2(dockerでipsecサーバーを実行)に転送しました。
私が直面している問題は、クライアントが接続できないことです。

以下はiptablesファイアウォールルールです

-A FORWARD -d 192.168.2.37/32 -o ens34 -p udp -m udp --dport 500 -j ACCEPT
-A FORWARD -d 192.168.2.37/32 -o ens34 -p udp -m udp --dport 4500 -j ACCEPT
-A FORWARD -d 192.168.2.37/32 -o ens34 -p udp -m udp --dport 53 -j ACCEPT

他に欠けているものを見つけることができません。誰かが私の設定が正しいかどうか、そしてなぜそれが機能しないのかアドバイスできますか?

2
BTR Naidu

質問コメントからのiptablesルール:

-A FORWARD -d 192.168.2.37/32 -o ens34 -p udp -m udp --dport 500 -j ACCEPT 
-A FORWARD -d 192.168.2.37/32 -o ens34 -p udp -m udp --dport 4500 -j ACCEPT 
-A FORWARD -d 192.168.2.37/32 -o ens34 -p udp -m udp --dport 53 -j ACCEPT

ポート53を転送する必要がある理由はよくわかりません。内部ネットワークのDNSサーバーをインターネット上のすべての人に見えるようにすることは、DNSスプーフィング攻撃を要求することです。これは良い考えではありません。 VPNが接続すると、インターネットゲートウェイホストにファイアウォールルールがなくても、VPNパイプを介してVPNに安全にアクセスできるようになります。本当に正当な理由がない限り、UDPポート53のFORWARDルールを削除することをお勧めします。

Iptables FORWARDフィルターテーブルのACCEPTルールは、システムがすでに適切に宛先にアドレス指定されているトラフィックのみをルーティングすることを許可します。 IPsecサーバーには192.168。*。*アドレスがあるように見えるため、クライアントはそのアドレスを使用してインターネット経由でアクセスすることはできません。

代わりに、インターネットゲートウェイサーバーのパブリックIPアドレスを使用するようにクライアントを構成する必要があります。ゲートウェイサーバーには、着信IPsecトラフィックをIPsecサーバーにリダイレクトするためのいくつかのDNATルールが必要です。

これらのルールは、すでに持っているFORWARDルールに加えて、インターネットゲートウェイサーバーで必要です。

-t nat -A PREROUTING -i <internet-side NIC> -p udp -m udp --dport 500 -j DNAT --to-destination 192.168.2.37:500
-t nat -A PREROUTING -i <internet-side NIC> -p udp -m udp --dport 4500 -j DNAT --to-destination 192.168.2.37:4500

IPsecの自動接続追跡がないように思われるため、発信トラフィックに対して逆のルールが必要になる場合もあります。

-t nat -A POSTROUTING -o <internet-side NIC> -s 192.168.2.37/32 -p udp -m udp --sport 500 -j SNAT --to-source <public IP>
-t nat -A POSTROUTING -o <internet-side NIC> -s 192.168.2.37/32 -p udp -m udp --sport 4500 -j SNAT --to-source <public IP> 

(この部分については実際にはわかりません。最初にこれらのルールを使用せずに試して、インターネットゲートウェイホストのインターネットに面したインターフェイスで送信応答を監視します。送信IPPEパケットの送信元IPが192.168.2.37の場合は、上記を追加します。 2 SNATルール。ソースIPがすでにインターネットゲートウェイホストのパブリックIPに変更されている場合、DNATルールは接続を正常に追跡しているため、SNATルールは必要ありません。)

クライアントからのVPNトラフィックがインターネットゲートウェイホストに到着すると(最初はそのIPアドレスを宛先として使用)、着信トラフィックは最初にPREROUTINGテーブルを通過します。それらのDNATルールは、宛先アドレスを置き換えます。次に、着信トラフィックはルーティングチェックを通過します。DNATルールが宛先IPを置き換えたため、トラフィックはインターネットゲートウェイホスト自体にアドレス指定されなくなり、ルーティングテーブルを通過してからFORWARDフィルターテーブルを通過します。その後、インターネットゲートウェイホストの「内部」インターフェイスをIPsecホストに向けて送信します。

IPsecホストは、IPパケットヘッダーに独自の192.168.2.37アドレスを持つパケットを受信しますが、暗号化されたコンテンツ内には、インターネットゲートウェイサーバーの元のパブリックIPがあります。これを正常に処理するには、IPsecホストがNAT_TRAVERSALを認識している必要があります。

IPsecホストが応答すると、インターネットゲートウェイホストは、発信IPsecパケットの送信元IPを有効なパブリックIPに置き換える必要があります。

3
telcoM