/24 サブネットワーク全体の Linux iptables NAT

/24 サブネットワーク全体の Linux iptables NAT

私の目的は、すべてのポートとプロトコルで eth0 に到達するすべての IP アドレスを次のように NAT (変換) することです: 192.168.55.x -> 192.168.42.x (IP 転送を有効にし、192.168.42.0/24 サブネットは eth1 にあります)。次のように、1 行のペアごとに 1 つのホストに対してこれを実行できます。たとえば、x=20 の場合:

iptables -t nat -A PREROUTING -i eth0 -d 192.168.55.20 -j DNAT --to 192.168.42.20
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.42.20 -j SNAT --to 192.168.55.20

しかし、253 個のホストすべてを翻訳する方法が見つかりません。次の方法を試しました:

iptables -t nat -A PREROUTING -i eth0 -d 192.168.55.0/24 -j DNAT --to 192.168.42.0-192.168.42.255
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.42.20/24 -j SNAT --to 192.168.55.0-192-168.55.255

これにより、ランダムなホスト変換が行われます。負荷分散に役立ちます。しかし、単純な 1 対 1 変換を取得するにはどうすればよいでしょうか。

ありがとう。

答え1

からman iptables-extensions

NETMAP
このターゲットを使用すると、アドレスのネットワーク全体を別のアドレスのネットワークに静的にマップできます。これは、nat テーブルのルールからのみ使用できます。

したがって、必要なルールは 1 つだけです。

iptables -t nat -A PREROUTING -d 192.168.55.0/24 -i eth0 -j NETMAP --to 192.168.42.0/24

最初に「42」ネットから開始された接続も正しく表示されるようにしたい場合は、次の 2 番目のルールを完了します。

iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o eth0 -j NETMAP --to 192.168.55.0/24

関連情報