2台のPCから1台のPCへのIptablesポートマッピング

2台のPCから1台のPCへのIptablesポートマッピング

弊社には 3 台の PC があり、そのうち 2 台はインターネットに接続されています (どちらも 2 つの NIC を備えています)

PC1:

eth0 - 1.0.0.1 (external IP)
eth1 - 172.16.0.1 (internal IP)

PC2:

eth0 - 1.0.0.2 (external IP)
eth1 - 172.16.0.2 (internal IP)

PC3:

eth0 - 172.16.0.3 (internal IP)

ここで、ポート 80 を PC1 と PC2 から PC3 に転送します。

しかし、問題があります。iptables ポート転送は PC1 または PC2 からは正常に機能しますが、PC3 が PC1 または PC2 をゲートウェイとして使用している場合にのみ機能します。

IPtables ルール (PC1 の場合):

iptables -t nat -A PREROUTING  -p tcp -d 1.0.0.1 --dport 80 -j DNAT --to-destination 172.16.0.3:80
iptables -A FORWARD -p tcp -d 172.16.0.3 --dport 80 -j ACCEPT

そこで質問ですが、PC3 のゲートウェイ設定に関係なく、PC1 と PC2 の両方からポート マッピングを行うことができますか?

よろしくお願いします。

答え1

宛先を書き換えただけです。

送信元アドレスを PC1 または PC2 に変更して、応答パケットも NAT できるようにする必要があります。また、パケットが PC3 に送信されるよう、宛先アドレスを変更する必要があります。送信元と宛先の両方を書き換えることを「デュアル NAT」と呼びます。

PREROUTING チェーンで DNAT を実行し、POSTROUTING チェーンで SNAT を実行する必要があります。次のようになります (PC1 の場合):

iptables -t nat -A PREROUTING -p tcp -m tcp -d 1.0.0.1 --dport 80 -j DNAT \
  --to-destination 172.16.0.3:80
iptables -t nat -A POSTROUTING -p tcp -m tcp -d 172.16.0.3 --dport 80 \
   -j SNAT --to-source 172.16.0.1

答え2

PC3 に別の IP アドレスを割り当て、PC1 と PC2 の DNAT ルールを PC3 の異なる IP アドレスに適用します。

PC3 では、次のように「ip rule」を使用して送信元 IP アドレスでルーティングします。http://lartc.org/howto/lartc.rpdb.multiple-links.html

関連情報