我有一个家庭宽带网络,我还在上面运行一个电子邮件服务器。由于我 16 岁,而且我正在准备兼职工作认证,所以我的提供商不会给我一个固定的 IP 地址。因此,我在游戏机上创建了 Exchange 2016 服务器。我觉得简单的解决方案是在虚拟服务器和我的家庭服务器之间创建一个 VPN。
我做得很好,我安装了 OpenVPN,连接正常。我的家庭网络运行在 192.168.1.x 上,VPN 运行在 172.27.224.x 上,客户端(我的邮件服务器)在隧道末端的地址为 172.27.224.2。vps 在互联网端有一个真实世界的 IP 地址。
我进行了 IP 转发,这样我就可以愉快地从客户端、电子邮件、网页浏览等发送流量,但我不知道如何将来自 Internet 的流量转发到我的邮件服务器的 SMTP 端口。
这是我为预路由和后路由添加的网络规则。
openvpnas@ip-172-31-34-110:~$ sudo iptables -t nat -A PREROUTING -p tcp --dport 25 -d 13.58.xxx.xx -j DNAT --to-destination 172.27.224.2
openvpnas@ip-172-31-34-110:~$ sudo iptables -t nat -A POSTROUTING -p tcp --dport 25 -d 172.27.224.2 -j SNAT --to-source 172.27.224.1
openvpnas@ip-172-31-34-110:~$ sudo iptables -A FORWARD -p tcp --dport 25 -d 172.27.224.2 -j ACCEPT
在调试时,我发现我可以使用 windows 的 wireshark 来捕获数据包,我是新手,但找到了一个 tcp.srcport==25 的基本过滤器并转储了流量,但它很大。我没有找到 VPS 服务器的 IP 地址,我猜应该是 172.27.224.1。然后在谷歌上搜索了一下后,我发现我可以在 Linux vps 上使用 tcpdump,这是结果。
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
12:37:51.498699 IP (tos 0x2,ECT(0), ttl 106, id 28057, offset 0, flags [DF], proto TCP (6), length 52)
www.adminkit.net.55303 > ip-172-31-34-110.us-east-2.compute.internal.smtp: Flags [SEW], cksum 0xe8da (correct), seq 1003591980, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
12:37:51.498749 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40)
ip-172-31-34-110.us-east-2.compute.internal.smtp > www.adminkit.net.55303: Flags [R.], cksum 0x4a5a (correct), seq 0, ack 1003591981, win 0, length 0
12:37:52.122587 IP (tos 0x0, ttl 106, id 28058, offset 0, flags [DF], proto TCP (6), length 52)
www.adminkit.net.55303 > ip-172-31-34-110.us-east-2.compute.internal.smtp: Flags [S], cksum 0xe99a (correct), seq 1003591980, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
12:37:52.122621 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40)
ip-172-31-34-110.us-east-2.compute.internal.smtp > www.adminkit.net.55303: Flags [R.], cksum 0x4a5a (correct), seq 0, ack 1, win 0, length 012:37:52.747621 IP (tos 0x0, ttl 106, id 28059, offset 0, flags [DF], proto TCP (6), length 48)
www.adminkit.net.55303 > ip-172-31-34-110.us-east-2.compute.internal.smtp: Flags [S], cksum 0xfda9 (correct), seq 1003591980, win 8192, options [mss 1460,nop,nop,sackOK], length 0
12:37:52.747659 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40)
ip-172-31-34-110.us-east-2.compute.internal.smtp > www.adminkit.net.55303: Flags [R.], cksum 0x4a5a (correct), seq 0, ack 1, win 0, length 0
我可以看到来自外部网络的流量,但它没有路由到我的本地 Exchange 服务器客户端。
但如果我从我的 VPS 进行 telnet,我可以连接到终端节点
openvpnas@ip-172-31-34-110:~$ telnet 172.27.224.2 25
Trying 172.27.224.2...
Connected to 172.27.224.2.
Escape character is '^]'.
220 locmx01 Microsoft ESMTP MAIL Service ready at Mon, 21 Dec 2020 04:39:18 -0800
^]
我希望我已经给你足够的信息。
提前致谢。
答案1
将您的邮件服务器连接到 Internet(或使用 SMTP 的另一个前组织邮件系统)时,您必须始终确保世界其他地方可以成功解析您域的 MX 记录,否则将导致电子邮件无法传递给您。(为传入 SMTP 电子邮件流量配置 MX 记录)
对于从 VPS 到 Exchange Server 的外部邮件流,您需要配置 MX 记录并将电子邮件服务器的 IP 地址或 FQDN 添加到该记录中。