18.3. トラブルシュート

ここには、いくつかのよく聞かれる質問とその答があります. それらは FAQ からこちらに移りました.

18.3.1. どうして自分のサイトのホストなのに FQDN を使わなければいけないのですか?
18.3.2. sendmail が ``mail loops back to myself'' というメッセージを出すのですが.
18.3.3. ダイアルアップ PPP ホストで電子メールを使うにはどうしたらいいの?

18.3.1. どうして自分のサイトのホストなのに FQDN を使わなければいけないのですか?

恐らく, そのホストは実際には別のドメインにあるのでしょう. 例えば foo.bar.edu ドメインにいて, bar.edu というドメイン内の mumble というホストにアクセスしたいとします. この時は単に mumble ではなく mumble.bar.edu と FQDN で参照しなければなりません.

そもそも, BSD BIND のリゾルバー (resolver) ではこのようなことが可能でしたが, FreeBSD に入っている最新版の BIND では自分のドメイン以外に対する FQDN でない省略形は許されません. 従ってホストを mumble と曖昧に指定した場合は mumble.foo.bar.edu という名前があればそれになり, そうでなければ root ドメインから検索されます.

これは, mumble.bar.edumumble.edu ということなったドメイン名に対してホスト名のサーチがおこなわれていた以前の振る舞いとは異なったものです. このような事が悪い例もしくはセキュリティホールとみなされる理由については RFC 1535 を見てください.

/etc/resolv.conf

    domain foo.bar.edu
と書いてある行を
    search foo.bar.edu bar.edu
と書き換えることで上のようなことができます. しかし, RFC 1535 にあるように検索順序が"内部 (local) と外部 (public) の管理の境界"をまたがないようにしてください.

18.3.2. sendmail が ``mail loops back to myself'' というメッセージを出すのですが.

sendmail FAQ に次のように書いてあります.

    * "Local configuration error" というメッセージが出ます. 例えば,
    
    553 relay.domain.net config error: mail loops back to myself
    554 <user@domain.net>... Local configuration error
    
    のような感じですが, どうしたら解決できますか?
    
    これは, 例えば domain.net のようなドメイン宛てのメールを 
    MX レコードで特定のホスト(ここでは
    relay.domain.net) に送ろうとしたのに,
    そのホストでは domain.net
    宛てのメールを受け取れるような設定になっていない場合です.
    設定の際に 
    FEATURE(use_cw_file) を指定してある場合には
    /etc/sendmail.cw の中に domain.net を追加してください.
    もしくは, /etc/sendmail.cf の中に "Cw domain.net"
    を追加してください.

sendmail FAQ は /usr/src/usr.sbin/sendmail にありますので, メールの設定に"おかしなこと"があれば常に読んでください.

18.3.3. ダイアルアップ PPP ホストで電子メールを使うにはどうしたらいいの?

LAN 上にある FreeBSD マシンを, インターネットに接続したいとします. FreeBSD マシンは, その LAN でのメールゲートウェイになります. FreeBSD マシンは専用線接続ではありません (訳注:ダイアルアップ接続など).

これには, 少なくとも二つの方法があります.

一つは UUCP を使うことです.

このとき鍵になるのは, あなたのドメインに対するセカンダリ MX サービスを提供してくれるインターネットサイトをみつけることです. 例えば以下のように.

    bigco.com.	      MX	10	bigco.com.
                          MX        20      smalliap.com.

最終的なメール受信先としては, 一つのホストだけが定義されるべきです (bigco.com 上の /etc/sendmail.cf ファイルに, Cw bigco.com を追加します).

送信側の sendmail が, メールを配送しようとしている時, モデムの接続を 介してあなたのところに接続しようとします. 大抵の場合, あなたのマシンがオンラインでないために, 接続はタイムアウト してしまうでしょう. sendmail は自動的に, メールをセカンダリの MX サイト に (あなたのインターネットプロバイダ) に配送します. セカンダリ MX サイトは, (/etc/rc.conf ファイル に sendmail_flag = "-bd -q15m"と書かれている場合) 15 分ごとに, プライマリ MX サイトにメールを配送しようと, あなたのホストに接続しに いきます.

ログインスクリプトとして, このようなものを使うとよいでしょう.

    #!/bin/sh
    # Put me in /usr/local/bin/pppbigco
    ( sleep 60 ; /usr/sbin/sendmail -q ) &
    /usr/sbin/ppp -direct pppbigco

ユーザごとにログインスクリプトを作りたい場合には, 上記 のスクリプトの代わりに, sendmail -qRbigco.com を使用する こともできます. このようにすると, キューの中の bigco.com に対する すべてのメールは, すぐに強制的に処理されます.

さらに, 次のような改良もできます.

以下は, FreeBSD インターネットサービスプロバイダーメーリングリスト メイリングリストから抜粋してきたメッセージです.

    > 私たちはお客様に対して, セカンダリ MX を提供しています.
    > お客様は一日に何回か私たちのサービスに接続し, メールを彼らのプライマリ MX
    > に受け取ります (彼らのドメインに対するメールが到着した時には,
    > 私たちは彼らのサイトを呼び出しません).
    > 私たちの sendmail は, 30 分ごとにメールキューに溜っているメールを配送します.
    > ちょうどその時に, すべてのメールがプライマリ MX に送られたかどうかを確かめるためには,
    > 彼らは 30 分は オンラインでいなければなりません.
    >
    > すべてのメールを今すぐ送るために sendmail を初期化するコマンドはあるでしょうか?
    > もちろん私たちのマシン上には, ユーザはルート (root) 権限を持っていません.
    
    sendmail.cf の "privacy flags" セクションに,
    Opgoaway,restrictqrun の定義があります.
    
    root 以外のユーザがキューを処理できるようにするには,
    restrictqrun を削除してください. また, MX の再調整が必要かもしれません.
    あなたがたは, 顧客のサイトに対する一番優先度の高い MX なので,
    次のように定義します:
    
    # If we are the best MX for a host, try directly instead of generating
    # local config error.
    OwTrue
    
    このようにすると, リモートサイトからのメールが,
    顧客のマシンと接続しようとせず, 直接あなたがたのホストマシンに配送されるようになります.
    ホストマシンに配送されたメールは, 続いて顧客のマシンに送られます.
    これはホスト名にのみ有効なので, 顧客のメールマシンに,
    "host.customer.com" とは別に, "customer.com"も定義する必要があります.
    DNS 上で, "customer.com"に対する A レコードを定義してください.