为 myhostname.ddns.net 配置动态 DNS

为 myhostname.ddns.net 配置动态 DNS

我在家庭路由器后面的 Raspberry Pi 上运行 postfix,并配置了动态 DNS。postfix 可以正常发送电子邮件,但似乎无法接收。

我认为家用路由器和动态 DNS 没问题,我在 Raspberry Pi 上托管了一个网站,它运行良好,并且可以公开访问。因此,要么是我的 MX 记录配置不正确,要么是 postfix 配置不正确(我认为)。

(我在下面删除了我的主机名)。

为 myhostname.ddns.net 配置动态 DNS

  • IPv4 地址:我的 Raspberry Pi 的 IP 地址
  • MX 记录:myhostname.ddns.net,优先级 1

家庭路由器上的端口转发配置

D   Service Port    Internal Port   IP Address  Protocol
1   80      80      192.168.0.10    ALL     # web server
2   22      22      192.168.0.10    ALL     # ssh
3   25      25      192.168.0.10    TCP     # mail server

在第三台电脑上,不是 Raspberry Pi

  • ping myhostname.ddns.net:有效,我看到我的 Raspberry Pi 的 IP 地址响应了。
  • 将浏览器指向http://myhostname.ddns.net: 有效,我可以看到网站的根目录。这证实了动态 DNS 正在运行,并且家庭路由器转发正在运行。
  • 在 Gmail 帐户上,发送邮件[email protected]大约 24 小时后失败,并显示“传递不完整,收件人服务器未接受我们的连接请求。超时”。如果您知道一种更快的测试方法,不需要等待 24 小时,请告诉我。

在 Raspberry Pi 上,以“pi”身份登录

$ mail
No mail for pi

$ dig myhostname.ddns.net MX +short
1 myhostname.ddns.net

$ sudo postfix status
postfix/postfix-script: the Postfix mail system is running: PID: 16232

$ sudo netstat -plutn | grep 25
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      16232/master

$ sudo iptables -L -n -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination

$ cat /etc/postfix/main.cf
smtpd_banner = $myhostname ESMTP $mail_name (Raspbian)
biff = no
append_dot_mydomain = no
readme_directory = no
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_recipient_restrictions =
    permit_sasl_authenticated,
    permit_mynetworks,
    reject_unauth_destination
smtpd_relay_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    defer_unauth_destination
myhostname = myhostname.ddns.net
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = myhostname.ddns.net, myhostname, localhost.localdomain, 
localhost
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4
home_mailbox = Maildir/
mailbox_command =
relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_use_tls = yes

$ cat /etc/mailname
myhostname.ddns.net

更新

康卡斯特封锁了 25 端口,请参阅https://www.xfinity.com/support/articles/email-port-25-no-longer-supported

答案1

这里有几件事您需要检查。

  1. 我猜 Google 无法向您发送电子邮件是因为您没有 MX 记录。但让我们暂时假装这不是问题,然后让我们解决其他问题。(不,出于许多原因,DDNS 不会向您提供 MX)

  2. 确保您可以从 Internet 连接到端口 25。我猜您无法做到这一点,但要进行测试,请执行以下操作:

    nc -vv myhostname.ddns.net 25

或者

telnet myhostname.ddns.net 25

这应该显示您是否被允许连接到端口 25 - 请注意,某些 ISP 可能会阻止到端口 25 的传入连接。当然,您需要检查 pi 上的内部防火墙(您运行的是什么 Linux 发行版?)

  1. 一旦连接到服务器,您将能够使用 telnet/nc 发送电子邮件。

    EHLO myhostname.ddns.net

(您应该看到这里以 250 开头的几行)

mail from: [email protected]
rcpt to: email@to_send_it_to.com
subject: Test email

然后开始输入电子邮件。最后一行以单个“.”结尾,如下所示:

Test email from my server.
.

然后你应该会看到电子邮件已发送或至少已被接受。无需等待 24 小时 :)

  1. 我真的怀疑您是否能够将 Pi 电子邮件服务器用于除少数测试之外的任何用途。首先,您没有 MX 记录,也无法控制 DKIM、PTR 和 SPF……换句话说,它无法投入生产,人们也不会接受来自您服务器的电子邮件。而且您使用的是动态 IP,这意味着您的 IP 被 99% 的垃圾邮件过滤器阻止。是的,只是因为它不是静态的。

答案2

康卡斯特表示康卡斯特网络的端口被阻止您可以使用端口 587。

编辑:ComCast 还表示 --> 如果您正在运行邮件服务器,请联系康卡斯特客户安全保证中心 1-877-807-6580 以获取有关此阻止的更多信息。

看:如何在 Postfix 中配置 TLS 加密

相关内容