SNATは実際のクライアントIPを保持するために機能しませんが、MASQUERADEは機能します

SNATは実際のクライアントIPを保持するために機能しませんが、MASQUERADEは機能します

ホストは AAA、BBB、CCC の 3 つです。

  1. ホストAAAOpenVPNサーバーIPでr172.17.10.1マスク 255.255.255.0。
  2. ホストBBBB2つのtunインターフェースがあります: •OpenVPN サーバーIP付き172.16.10.1マスク255.255.255.0 •OpenVPNクライアントIP付き172.17.10.50(OpenVPN サーバー AAA に接続)
  3. ホストCCCIPアドレスを持つOpenVPNクライアントです172.16.10.50(OpenVPN サーバー BBB に接続されています)。172.16.10.1経由で172.17.10.0/24へのルーティングがあります

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

私の目標は、ホスト CCC がホスト AAA に正常に ping を実行し、ホスト AAA がホスト CCC の元の IP (172.16.10.50) からのトラフィックを確認することです。

iptables -A FORWARD... -J ACCEPTホスト BBB に設定しました。

ホストBBBでセットアップしたポストルーティングルール。たとえば、MASQUERADE では ping は成功しますが、問題は、この方法ではホスト AAA が src IP 172.17.10.50 (ホスト BBB からの IP) を認識することです。 iptables -t nat -D POSTROUTING -s 172.16.10.50 -d 172.17.10.1 -o tun17 -j MASQUERADE

MASQUERADEをSNATに変更しましたが、pingが失敗します: iptables -t nat -A POSTROUTING -s 172.16.10.50 -d 172.17.10.1 -o tun17 -j SNAT --to-source 172.16.10.50

問題は、tcpdump でトラフィックがホスト BBB から出ておらず、ホスト AAA へのトラフィックがないことがわかったことです。

root@BBB:# tcpdump -ni tun17
listening on tun17, link-type RAW (Raw IP), capture size 262144 bytes
12:16:45.777464 IP 172.16.10.50 > 172.17.10.1: ICMP echo request, id 30730, seq 1149, length 64
12:16:46.801548 IP 172.16.10.50 > 172.17.10.1: ICMP echo request, id 30730, seq 1150, length 64

SNATを送信元IP 172.17.10.55に変更しようとしました(172.17.10.0/24 ネットワークからの IP アドレス) ですが、再び ping は失敗し、トラフィックは再びホスト BBB から出ません。

iptables -t nat -A POSTROUTING -s 172.16.10.50 -d 172.17.10.1 -o tun17 -j SNAT --to-source 172.17.10.55

12:16:47.825419 IP 172.17.10.55 > 172.17.10.1: ICMP echo request, id 30730, seq 1151, length 64
12:16:48.849460 IP 172.17.10.55 > 172.17.10.1: ICMP echo request, id 30730, seq 1152, length 64

--to-source 172.16.10.50 や --to-source 172.17.10.55 でも SNAT が使用できないのはなぜですか?(どの IP アドレスが同じ 172.17.10.0/24 ネットワークからのものか) ホスト CCC から 172.17.10.1 に ping を実行しますか?

トラフィックはホスト BBB に留まり、tun17 から出ていないようです。トラフィックは HOST CCC から HOST BBB に移動し、tun16 から tun17 に転送されますが、SNAT を使用してホスト AAA に送信することはできません。

ping は、パケットの送信元 IP アドレスが 172.17.10.50 の場合にのみ機能します。たとえば、送信元 IP を 172.17.10.55 に変更すると、ping は失敗します。

問題はファイアウォールでもルーティングでもないと思います。OpenVPN の制限が原因だと思いますが、確信はありません。2 つの OpenVPN サーバーは、--topology subnet/24 ネットワーク マスクのモードになっています。

答え1

追加する必要があるイルートCCD で内部の OpenVPN ルーティング テーブルを操作します。

そうしないと、openvpn はパケットをどこにルーティングして戻すかわかりません。openvpn ログには、「MULTI: クライアント [IP アドレス] からの送信元アドレスが不正です。パケットがドロップされました」のような行があるはずです。

詳細はこちらをご覧ください:

https://community.openvpn.net/openvpn/wiki/RoutedLans

関連情報