Было бы прекрасно, если бы можно было в параметрах iptables перечислить несколько подсетей, например, так:
iptables -A POSTROUTING -t nat -s 10.Y.Y.Y -d !10.0.0.0/8,!192.168.0.0/16 --to-source X.X.X.Xно, к сожалению, этот вариант у меня не сработал: iptables не позволил указать несколько подсетей таким образом и заругался на синтаксис.
Насколько я понял, в этом случае решением является следующее: создать отдельную цепочку правил, в которой последовательно проверить назначения пакета:
# создаем цепочку правил iptables -N MYCHAIN -t nat iptables -A MYCHAIN -t nat -d 10.0.0.0/8 -j RETURN iptables -A MYCHAIN -t nat -d 192.168.0.0/16 -j RETURN iptables -A MYCHAIN -t nat -j SNAT --to-source X.X.X.X # используем цепочку правил iptables -A POSTROUTING -t nat -s 10.Y.Y.Y -j MYCHAIN