
У меня имеется следующая инфраструктура:
интернет [внешний 81.xxx] маршрутизатор [внутри 192.168.1.1] | [сеть 192.168.1.0/24] | почтовый сервер [192.168.1.2]
На маршрутизаторе (DD-WRT) с iptables. У меня включен NAT, так как я хочу, чтобы мой почтовый сервер отвечал на внешний IP. У меня следующая настройка:
iptables -t nat -I PREROUTING -d 81.x.x.x -j DNAT --to 192.168.1.2
iptables -t nat -I POSTROUTING -s 192.168.1.2 -j SNAT --to 81.x.x.x
iptables -I FORWARD -d 192.168.1.2 -p tcp --dport 25 -j ACCEPT
с некоторыми другими открытыми портами.
Однако, когда почта приходит на почтовый сервер, Postfix показывает следующее сообщение:
postfix/smtpd[6964]: connect from unknown[192.168.1.1]
Все письма, приходящие извне, похоже, приходят с IP-адресом маршрутизаторов внутри. Что я упускаю, чтобы отображался исходный IP-адрес вместо IP-адреса маршрутизаторов внутри?
решение1
Судя по всему, вы настроили NAT 1-к-1 с помощью первых двух правил iptables, но затем вы добавили третье, довольно любопытное правило:
iptables -I FORWARD -d 192.168.1.2 -p tcp --dport 25 -j ACCEPT
Такие правила не нужны при выполнении 1-to-1 NAT и на самом деле не делают ничего полезного. Из предоставленной вами информации это, по-видимому, является наиболее вероятной причиной проблемы. Просто удалите его.
iptables -D FORWARD -d 192.168.1.2 -p tcp --dport 25 -j ACCEPT
решение2
ISTR странности, как это и раньше, но чего-то не хватает, как вы говорите. Следующая информация может быть полезной от маршрутизатора:
iptables -t nat -L -n
iptables -L -n
ip route
А это с почтового сервера:
iptables -t nat -L -n
ip route
grep . /proc/sys/net/ipv4/conf/*/rp_filter
Без этой информации, я бы, пожалуй, просто удалил ваш существующий брандмауэр и сделал бы что-то более конкретное:
iptables -t nat -F # also on server
iptables -t nat -I PREROUTING -p tcp -d 81.x.x.x --dport 25 \
-j DNAT --to 192.168.1.2:25
И посмотрите, что происходит в почтовых журналах. Если вам нужен SNAT для исходящего SMTP, что-то вроде:
iptables -t nat -I POSTROUTING -p tcp -s 192.168.1.2 --dport 25 \
-m multiport --sports 1024:65535 -j SNAT --to 81.x.x.x:25
А если локального DNS-резолвера недостаточно:
iptables -t nat -I POSTROUTING -p udp -s 192.168.1.2 --dport 53 \
-j SNAT --to 81.x.x.x