我正在尝试解决一个庞大程序的问题,由于某种原因,即使指定了端口 587,该程序也只能通过端口 25 发送电子邮件。
在这个答案,有人建议使用 windows 命令netsh
:
netsh interface portproxy add v4tov4 listenport=25 listenaddress=127.0.0.1 connectport=587 connectaddress=%uFEFF%uFEFF<ipaddress of the real email server>
基本上,它只是改变 Windows IP 规则,以便任何时候通过端口 25 连接到 127.0.0.1,它都会将其转发到远程电子邮件服务器的端口 587。
我已经看到了一些iptables
接近的例子,但我无法找到一个完美的转发到偏僻的电子邮件服务器。大多数 iptable 示例仅用于本地机器内的转发。如果可能的话,我也想使用带有域名的 iptables。Postfix 有点烦人,因为它是一个庞大的程序,而实际上,在很多服务器上,这个 ip 规则对我来说会更好用
TL;DR 如果有人可以帮忙,我想设置一个 IP 规则来转发如下:
Input domain: 127.0.0.1
Input port: 25
Output domain: smtp.gmail.com
Output port: 587
这对于我的其他一些项目也很有用。
编辑:这是我尝试过的命令:
sysctl net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp --dport 25 -j DNAT --to-destination 169.47.148.173:587 # The 169 ip is for smtp.sendgrid.net
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -F
我知道这些规则是有效的,因为我可以用 iptables nat 命令列出它们。iptables -t nat -nvL
但是当我尝试通过这个愚蠢的程序发送电子邮件时,指定主机127.0.0.1
和端口 25,仍然会失败。我也指定了 UDP 转发规则,但仍然失败。