NAT-ing с iptables перезаписывает исходный IP в журналах

NAT-ing с iptables перезаписывает исходный IP в журналах

У меня имеется следующая инфраструктура:

интернет [внешний 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

Связанный контент