zerotier+端口映射解决VPS无法发邮件问题
- IT
- 30天前
- 9热度
- 0评论
大概在2021年左右开始,几乎所有的VPS厂商都默认关闭了VPS对外部TCP/25端口的连接,以避免邮件滥发,和邮件滥发造成的IP污染问题。
以腾讯云为例,新建云服务器、轻量服务器均默认封禁了25端口,云服务器可以申请解封,但有每个帐号只能解封5次的限制;轻量服务器则压根不给解封。
比如,邮件服务器是smtp.a.com,它支持25端口。VPS上的应用如果试图连接smtp.a.com,会根本连不上。可以用telnet来测试这一点:
telnet smtp.a.com 25
推荐的(但是复杂的)方法是用465、587端口。但这就使得免费好用的(同时也是上古的)jmail组件无法工作了:因为它只支持25端口。
其实除了VPS,随便一台能联网的电脑通常都不会被限制连接25端口。因此我们可以用zerotier内网穿透+端口映射来解决这个问题。假设家里有一台24h不关机的电脑A。
1、在VPS和A上安装zerotier(或者tailscale),并join同一个network。此时VPS和A处于同一个虚拟局域网(内网穿透)。他们的局域网IP分别是VPS-IP、A-IP。
2、将VPS的本地25端口映射到A-IP的25025端口(没被占用的任意端口号)。假设VPS是windows,那么管理员模式的cmd中执行:
netsh interface portproxy add v4tov4 listenport=25 connectaddress=A-IP connectport=25025
3、将A的本地25025端口映射到smtp.a.com的25端口。同样,假设A是windows,那么管理员模式的cmd中执行:
netsh interface portproxy add v4tov4 listenport=25025 connectaddress=smtp.a.com connectport=25
如果VPS和A是linux系统,则建议使用haproxy,之前写过用法,此处不再赘述。
4、在A的防火墙上放行TCP/25025端口的入站。
5、好了,这时候,VPS的应用上,在需要填写smtp服务器的位置,直接使用"127.0.0.1"即可。数据将从VPS本地的25端口转到A的25025端口,再转发到smtp.a.com的25端口。
用这个方法当然也是可以“干坏事”的,只不过,从邮件服务器那边看来,干坏事的不是VPS,而是A——这样VPS的IP就始终纯洁了。