Все машины в моей сети на базе linux. Главный сервер имеет 192.168.0.1, почтовый сервер - 192.168.0.2, клиентская машина - 192.168.0.3 ip.
я добавил
iptables -t nat -A PREROUTING -d 192.168.0.1 -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.0.2:25
на основном сервере, потому что я хочу, чтобы все клиенты работали с моим основным сервером на smtp.
Но я думаю, что это решение не работает, потому что, когда почтовый сервер 192.168.0.2 решает отправить пакет обратно клиенту (192.168.0.3), он делает это без помощи шлюза (192.168.0.1), потому что это локальная сеть.
Как заставить 192.168.0.2 отправлять все пакеты через шлюз?
Вы правы, что пакеты будут отправлены обратно на исходный адрес, а не через 192.168.0.1.
iptables -t nat -A POSTROUTING -p tcp --dport 25 -j SNAT --to-source 192.168.0.1
В результате все соединения будут казаться исходящими от 192.168.0.1, если они проходят через него, и, таким образом, пакеты будут возвращаться таким же образом.
Одним из недостатков этого может быть то, что настоящий сервер не знает исходный IP-адрес.
Если исходный IP-адрес является проблемой, можно создать отдельную подсеть (скажем, 192.168.220.0/30 - маска будет разрешать только IP-адреса 1 и 2) и перенаправить трафик, необходима одна дополнительная таблица маршрутизации для передачи трафика правильно с сервера smtp для пакетов возврата после прихода на этот адрес.