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 记录就可以了。