Я определил следующие правила:
-A POSTROUTING -j SNAT --to-source [publicip]
-A POSTROUTING -j SNAT -d 192.168.0.0/24 --to-source 192.168.0.6
По сути, я хочу, чтобы через 192.168.0.6 проходила только частная сеть. Однако работает только одна сеть. С этим конфигом работает только общедоступная сеть. Есть ли способ добиться того, чего я хочу?
Правила iptables необходимо настраивать в порядке: от более конкретных правил до менее конкретных.
Правильный порядок должен быть таким:
-A POSTROUTING -j SNAT -d 192.168.0.0/24 --to-source 192.168.0.6
-A POSTROUTING -j SNAT --to-source [publicip]
В Статья в Википедии об iptables достаточно хорошо объясняет как это, так и поток пакетов через цепочки и таблицы.
Пакет продолжает перемещаться по цепочке до тех пор, пока: 1. правило не сопоставит пакет и не определит окончательную судьбу пакета, например, путем вызова одного из ACCEPT или DROP, или модуля, возвращающего такую окончательную судьбу [...]
Решил эту проблему. Очевидно, порядок имеет значение. Сначала появляется установка частной сети, чтобы решить проблему. Я также добавил 0.0.0.0/0, почти уверен, что это значение по умолчанию, поэтому я не думаю, что это что-то изменило, но я не тестирую, чтобы узнать.
-A POSTROUTING -j SNAT -d 192.168.0.0/24 --to-source 192.168.0.6
-A POSTROUTING -j SNAT -d 0.0.0.0/0 --to-source [publicip]