次のネットワーク設定があります。
ゲートウェイ:
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.1
CloudflareのVIPにリダイレクトされます。1.1.1.1
ユーザーがVIPをpingすると10.8.8.8
Googleにリダイレクトされます。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が自動的に実行されます。)