NAT経由の仮想ゲートウェイ

NAT経由の仮想ゲートウェイ

次のネットワーク設定があります。

ゲートウェイ:

Internet <-- eth0 : a.b.c.d (static address)
Clients <-- eth1  : DHCP at server at 172.16.0.1, leasing 172.16.0.0/24

顧客:

Gateway <-- eth0: 172.16.0.0/24

クライアントはインターネットにアクセスでき、配信は正常です。クライアントはゲートウェイを介してアクセスできますが、実際にはインターネット上のいくつかのマシンである一種の「仮想」アドレスを作成したいと思います。

したがって、接続すると172.32.1.1実際にGoogleなどに接続されます。 NATを使ってみました。

TARGET=$(dig -q google.com)
VIRTUAL=172.32.1.1
iptables -t nat -A PREROUTING -d "$VIRTUAL" -j DNAT --to "$TARGET"
iptables -t nat -A POSTROUTING -s "$TARGET" -j SNAT --to "$VIRTUAL"

このアプローチは機能しますが、ゲートウェイでpingを実行すると、次のメッセージが表示されます。

From 20.249.x.y icmp_seq=1 Destination Net Unreachable

(ここで20.249.xyは私のゲートウェイのゲートウェイです。)クライアントでその仮想IPを追跡すると、次のようになります。

traceroute to 172.32.1.1 (172.32.1.1), 30 hops max, 38 byte packets
 1  172.32.1.1 (172.32.1.1)  31.886 ms  31.638 ms  34.029 ms
 2  172.32.1.1 (172.32.1.1)  39.660 ms  40.489 ms  39.153 ms
 3  172.32.1.1 (172.32.1.1)  41.879 ms  40.367 ms  40.436 ms
 4  172.32.1.1 (172.32.1.1)  47.375 ms  48.200 ms  48.878 ms
 5  172.32.1.1 (172.32.1.1)  47.801 ms  47.280 ms  47.405 ms

これは私にとってとても奇妙に見えます。これらの問題を解決する方法はありますか?を試しましたが、ip tunnel他のエンドポイント設定も必要なようですが、明らかにできません。

サーバーのiptables構成には、-A FORWARD -i eth1 -j ACCEPTこれら2つの規則のみが含まれています。

答え1

既存の破損したiptablesルールを更新して最初から始めることができます。ゲートウェイとして機能するLinuxシステムでは、次のことを前提としています。

Linuxゲートウェイには2つのネットワークカードがあります。 eth0はLANに向かい、eth1はWANに向かいます。

ゲートウェイで IP パケット転送をイネーブルにします。

$ sudo echo 1 > /proc/sys/net/ipv4/ip_forward

テスト計画に従って、eth0に2つのテストVIP(仮想IP)を作成します。

$ sudo ifconfig eth0:1 10.1.1.1 netmask 255.255.255.0
$ sudo ifconfig eth0:2 10.8.8.8 netmask 255.255.255.0

私たちの計画に従ってiptablesを設定する

sudo iptables -t nat -A PREROUTING -d 10.1.1.1 -j DNAT --to 1.1.1.1
sudo iptables -t nat -A PREROUTING -d 10.8.8.8 -j DNAT --to 8.8.8.8
sudo iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

この場合、ユーザーがVIPをpingすると、10.1.1.1CloudflareのVIPにリダイレクトされます。1.1.1.1

ユーザーがVIPをpingすると10.8.8.8Googleにリダイレクトされます。8.8.8.8

10.1.1.1 ---> 1.1.1.1
10.8.8.8 ---> 8.8.8.8

答え2

NAT [...]を試してみましたが、どういうわけか動作しますが、ゲートウェイでpingを実行すると[Network Unreachable]というメッセージが表示されます。

名前が示すように、PREROUTING および POSTROUTING チェーンは、ゲートウェイに入り、外部にルーティングされるパケットにのみ使用されます。

これは、特に実行中のpingなど、ゲートウェイで発生するパケットには適用されないことを意味します。この問題を解決する方法はありません。フィルターチェーンがこんなに奇妙に見えます。ただし、ユースケースにはクライアントのNATしか必要ないため、実際には重要ではありません。

(しかし、DNATのみが必要です。これにより、CONNTRACKエントリが作成され、逆NATが自動的に実行されます。)

関連情報