29.5. 故障排除

29.5.1.为什么必须在自己站点的主机上使用 FQDN ?

你可能会发现主机实际上是在另外一个域里面,例如,如果你是在 foo.bar.edu 里,而你要找一台叫 mumble 的主机,它在 bar.edu 域里,你就必须用完整的域名 mumble.bar.edu,而不是用 mumble

传统上,这在 BSD BIND resolvers 中是可行的。然而目前随 FreeBSD 附带的 BIND 已不为同一域外提供缩写服务。所以,这个不完整的主机名 mumble 必须以 mumble.foo.bar.edu 这种形式才能被找到,或者将在根域中搜索它。

这跟以前的处理是不同的,以前版本将会继续寻找 mumble.bar.edumumble.edu 。如果你想要了解这种方式是否是好,或者它有什么安全方面的漏洞,请参阅 RFC 1535 文档。

如果你想要一个好的工作环境,你可以使用如下行:

  1. search foo.bar.edu bar.edu

替换先前旧的版本:

  1. domain foo.bar.edu

把这行放在你的 /etc/resolv.conf 文件中。然而,请一定要确定这样的搜寻顺序不会造成 RFC 1535 里提到的boundary between local and public administration问题。

29.5.2.如何在一个拨号 PPP 主机上运行一个邮件服务?

连接到 LAN 上的 FreeBSD 邮件网关。PPP 连接是非专用的。

一种方法是让一个专职服务器为域提供副 MX 服务。在此示例中,域为 example.com ,并且 ISP 已配置 example.net 以向该域提供副 MX 服务:

  1. example.com. MX 10 example.com.
  2. MX 20 example.net.

只有一台主机被指定当做你的最终收信主机 (在 example.com 主机的 /etc/mail/sendmail.cf 文件中添加 Cw example.com )。

当 MTA 试图分发邮件的时候,它会尝试通过 PPP 连接到你 (example.com)。因为你并不在线,所以总是会得到一个超时的错误。MTA 将会把邮件发送到副 MX 主机,也就是说,你的互连网服务提供者 (example.net)。副 MX 主机将周期性的尝试连接并发送邮件到你的主机 (example.com)。

你或许需要使用下面的这个登录脚本:

  1. #!/bin/sh
  2. # Put me in /usr/local/bin/pppmyisp
  3. ( sleep 60 ; /usr/sbin/sendmail -q ) &
  4. /usr/sbin/ppp -direct pppmyisp

如果你想要为一个用户建立一个分开登录的脚本,你可以使用 sendmail -qRexample.com 替换上面的脚本。这样将使所有的邮件按照你的 example.com 队列立即被处理。

从 {freebsd-isp} 的例子中可以看到这种情况的进一步细化:

  1. > 我们为用户提供副 MX 主机服务。用户每天都会上线好几次
  2. > 并且自动把信件取回主 MX 主机
  3. >(当有他们的邮件时我们并没有通知他们)。
  4. > 我们的 mailqueue 程序每 30 分钟清一次邮件队列。那段时间他们
  5. > 就必须上线 30 分钟以确保他们的信件送达他们的主 MX 主机。
  6. >
  7. > 有任何指令可以用 sendmail 寄出所有邮件么?
  8. > 普通用户在我们的机器上当然没有 root 权限。
  9. sendmail.cf privacy flags 部分,有这样的设定
  10. Opgoaway,restrictqrun
  11. 移除 restrictqrun 可以让非 root 用户启动队列处理的程序。
  12. 你可能也要重新安排你的 MX 设定。我们是用户的 MX 主机,
  13. 而且我们还设定了这个:
  14. # If we are the best MX for a host, try directly instead of generating # local config error.
  15. OwTrue
  16. 这样的话远程机器会直接把信送给你,而不会尝试连接你的用户的机器。
  17. 然后你就可以把邮件发送到你的用户。这个设定只对
  18. 主机有效,所以你必须要让你的用户在 DNS 中把他们的邮件主机设置为
  19. customer.com 或者
  20. hostname.customer.com 。只要为 customer.com DNS
  21. 里添加一个 A 记录就可以了。