I would like to do NAT from a private range to a public range of the same size, in a way that just
the network part of the IP address would be translated.
Use the NETMAP target. This is included in 2.6, but I think you have to patch 2.4 kernels still.
For example, I would like a single iptables rule to map 192.168.10.0/24 => 10.1.1.0/24 as follows:
192.168.10.1 => 10.1.1.1
192.168.10.2 => 10.1.1.2
.
.
.
192.168.10.254 => 10.1.1.254
Assuming 192.168.10.0/24 is private:
iptables -t nat -A PREROUTING -d 10.1.1.0/24 -j NETMAP --to 192.168.10.0/24 iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j NETMAP --to 10.1.1.0/24
-- Philip Craig - SnapGear, A CyberGuard Company - http://www.SnapGear.com