Имеем ядро 2.4.7, локальную сеть, выделенный ip. Пишем: iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to 1.2.3.4. Делает вид что работает, но на деле не работает!
Чтобы транслировать все запросы из внутренней сети 192.168.0.0/24 ==> 1.2.3.4/24 - тебе надо использовать NETMAP, чего тебе я делать не советую. Глючит он, несмотря на заверения авторов. Решение твоей проблемы -j MASQUERADE.
SNAT и DNAT работают только с отдельными адресами.
OK. Ты можешь транслировать одним правилом ОДИН внутренний адрес на ОДИН внешний при помощи DNAT/SNAT. Два правила - два адреса. 255 внутренних адресов на 255 внешних ты можешь транслировать одним правилом
iptables -t nat -A PREROUTING -d 1.2.3.0/24 -j NETMAP --to 5.6.7.0/24
прикрутив соответствующий патч к ядру и скомпилив iptables с нужным модулем. Транслировать сеть на один внешний адрес можно только при помощи MASQUERADE.
Приведенная в вопросе команда должна работать нормально, я постоянно использую похожие варианты. Одно замечание: в 2.4.7 была какая то проблема с Netfilter. У меня не устанавливались дополнительные патчи из iptables так что это ядро я пропустил.