
我擁有以下基礎設施:
網際網路 [外部 81.xxx] 路由器 [內部 192.168.1.1] | [網192.168.1.0/24] | 郵件伺服器[192.168.1.2]
在有 iptables 的路由器 (DD-WRT) 上。我啟用了 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
您似乎已經使用前兩個 iptables 規則設定了一對一 NAT,但隨後添加了第三個相當奇怪的規則:
iptables -I FORWARD -d 192.168.1.2 -p tcp --dport 25 -j ACCEPT
在進行一對一 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
並查看郵件日誌中發生了什麼。如果您需要用於傳出 SMTP 的 SNAT,如下所示:
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