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.edu 和 mumble.edu 。如果你想要了解这种方式是否是好,或者它有什么安全方面的漏洞,请参阅 RFC 1535 文档。
如果你想要一个好的工作环境,你可以使用如下行:
search foo.bar.edu bar.edu
替换先前旧的版本:
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 服务:
example.com. MX 10 example.com.MX 20 example.net.
只有一台主机被指定当做你的最终收信主机 (在 example.com 主机的 /etc/mail/sendmail.cf 文件中添加 Cw example.com )。
当 MTA 试图分发邮件的时候,它会尝试通过 PPP 连接到你 (example.com)。因为你并不在线,所以总是会得到一个超时的错误。MTA 将会把邮件发送到副 MX 主机,也就是说,你的互连网服务提供者 (example.net)。副 MX 主机将周期性的尝试连接并发送邮件到你的主机 (example.com)。
你或许需要使用下面的这个登录脚本:
#!/bin/sh# Put me in /usr/local/bin/pppmyisp( sleep 60 ; /usr/sbin/sendmail -q ) &/usr/sbin/ppp -direct pppmyisp
如果你想要为一个用户建立一个分开登录的脚本,你可以使用 sendmail -qRexample.com 替换上面的脚本。这样将使所有的邮件按照你的 example.com 队列立即被处理。
从 {freebsd-isp} 的例子中可以看到这种情况的进一步细化:
> 我们为用户提供副 MX 主机服务。用户每天都会上线好几次> 并且自动把信件取回主 MX 主机>(当有他们的邮件时我们并没有通知他们)。> 我们的 mailqueue 程序每 30 分钟清一次邮件队列。那段时间他们> 就必须上线 30 分钟以确保他们的信件送达他们的主 MX 主机。>> 有任何指令可以用 sendmail 寄出所有邮件么?> 普通用户在我们的机器上当然没有 root 权限。在 sendmail.cf 的 privacy flags 部分,有这样的设定Opgoaway,restrictqrun移除 restrictqrun 可以让非 root 用户启动队列处理的程序。你可能也要重新安排你的 MX 设定。我们是用户的 MX 主机,而且我们还设定了这个:# If we are the best MX for a host, try directly instead of generating # local config error.OwTrue这样的话远程机器会直接把信送给你,而不会尝试连接你的用户的机器。然后你就可以把邮件发送到你的用户。这个设定只对主机有效,所以你必须要让你的用户在 DNS 中把他们的邮件主机设置为customer.com 或者hostname.customer.com 。只要为 customer.com 在 DNS里添加一个 A 记录就可以了。
