resolv.conf
については man resolv.conf
すると出てきますが、要は www.ceres.dti.ne.jp といった
domain 名を含むホスト名を IP アドレスに変換する際の手続きや
ルールなどを記述するファイルです。
これは以下のように記述します。
nameserver 202.216.224.67
nameserver 202.216.224.66
domain ceres.dti.ne.jp
lookup file bind
nameserver
のところには文字通りプロバイダから指定される
name server の IP アドレスを記述します。たいていは
二つのアドレスを指定されると思うのでそれらを列挙します。
domain
は接続するプロバイダのドメイン名です。DTI ならば
ceres.dti.ne.jp などですし、リムネットなら na.rim.or.jp などです。
lookup
はホスト名を IP アドレスに変換する際に
/etc/hosts
の参照と
Domain Name Server(DNS) に対する問い合わせとのどちらを先に
行なうかということを指定します。
file
は /etc/hosts
の参照を、
yp は NIS を利用した問い合わせを、
bind は DNS を利用した問い合わせを示し、
参照させたい順序にこれら 3つを
スペースで区切ってならべて記述します。
通常はスタンドアローンのマシンでは NIS は走っていないでしょうから
file bind
の順で指定すればよいと思います。
DTI で提供しているサービスはダイアルアップ PPP 接続のみなので、
NetBSD で DTI に接続するためには pppd を利用する必要があります。
FreeBSD では IIJ-ppp の方がよく使われているようですが、
NetBSD の場合は標準の /usr/sbin/pppd
が
使われることが多いようです。
(私は IIJ-ppp のことはよく知らないのでわかりません)
NetBSD のページにも書いたように、
man pppd
すればたいていのことは書いてあるんですが、
手っ取り早く私が設定したファイルを順に挙げていきます。
まず /etc/ppp
のディレクトリを作成します。
# mkdir /etc/ppp
/etc/ppp/options
の作成
次に /etc/ppp/options
のファイルを作成します。
とりあえず中身は空でも構いません。
# touch /etc/ppp/options
/etc/ppp/peers
ディレクトリの作成
次に /etc/ppp/peers
というディレクトリを作成します。
# mkdir /etc/ppp/peers
/etc/ppp/peers/
以下の設定ファイルの作成
そして /etc/ppp/peers/dti
という設定ファイル
(ファイル名は何でも構いません)
を作成します。これは以下のような内容とします。
tty01 115200
crtscts
modem
lock
defaultroute
connect '/usr/sbin/chat -V -f /etc/ppp/chat-dti'
noauth
これは(man
を読めば書いてありますが)、
モデムがつながっているのが /dev/tty01
で、
通信速度は 115200bps で、
ハードウェアフロー制御を用いて、
ポートのロックファイルを作成して、
コネクト時に default route を設定することにして、
コネクト時に /etc/ppp/chat-dti
のスクリプトにもとづいて chat(1)
を実行し、
認証を要求しない
というような意味です。
次に上に書いた /etc/ppp/chat-dti
に
chat(1)
のスクリプトを書きます
(ファイル名は上記の設定ファイルで指定した名前にします)。
chat(1)
は端末からの応答に対して
指定した文字列を出力するためのコマンドです。
/etc/ppp/chat-dti
には以下のように記述します。
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
ABORT "ERROR"
ABORT "NO ANSWER"
ABORT "BUSY"
ABORT "Username/Password Incorrect"
"" "at"
OK "atz"
OK "atdp952820"
"ogin:" "username@ceres"
"word:" "\qyourepassword"
始めに列挙してある "ABORT"
はその行に指定した文字列が返ってきた場合には
chat(1)
の実行を中断するというものです。
続く行の記述は、行の 1カラム目に記述した文字列が返ってきたら
続いて記述してある文字列を出力するということを示しています。
この例では DTI の姫路のアクセスポイントにかける例で、
プロバイダから指定された
login ユーザー名は "username@ceres"
、
password が "yourpassword"
であるとしています。
まず "at"
を出力し、
"OK"
が返ってきたら "atz"
を出力して
(これはモデムのリセットコマンドです)
"OK"
が返ってきたら "atdp952820"
を出力し、
"ogin:"
(が最後にある文字列)が返ってきたら
"username@ceres"
を出力し、
"word:"
(が最後にある文字列)が返ってきたら
"********"
を出力します。
ここで記述した以外の文字列が返ってきたり、
何も返ってこない場合はタイムアウトまで待った上で
chat
コマンドを中断します。
接続先によっては login:
のプロンプト等が微妙に
異なる場合があるので、スクリプトもそれに合わせます。
password を送っているところにある "\q"
というのは
それ以降の文字列については log file に出力しないと
いうことを指定します。
モデムに対してはあらかじめ適切なコマンドを設定して セーブしておくか chat script に書いておきます。
私が持っている HUCOM-EX336 というモデムでは 以下のようなものをデフォルトと変えて設定しています。 各自のモデムのマニュアル等を参考にして 環境にあった設定をして下さい。
at&d3 [DTR が off になると atz を実行する]
atl0 [スピーカを off にする]
at&p3 [ダイアル回線のパルスを 20pps にする]
atw2 [モデムポートの回線速度を表示]
atx3 [ダイアルトーンの検出を行なわない](内線ではこれが必要)
password を直接ファイルに記述するのが気に食わないという場合は、
chat(1)
の代わりに expect
などの
script を用いれば password のところのみ
キーボードから入力するといったことも可能です。
スタンドアローンの環境ではそれほど問題ないと思いますが、 マルチユーザー環境では直接 password が記述してある ファイルのパーミッションには注意して下さい。
前節では認証においてプロバイダからの login:
プロンプトに対して chat
を用いて
username と password を送信しましたが、
DTI を含むたいていのプロバイダでは PAP をサポートしているので
そちらを使って認証をすることもできます。
PAP で認証を行なうと接続にかかるまでの時間が わずかですが短縮されるようです。また、 login prompt を 待つ必要がないのでどのプロバイダでも同じ chat script が 使用できます。
PAP を使う場合には前節で説明したファイルにいくつかの変更を加えます。
/etc/ppp/pap-secrets
の作成
PAP による認証では、プロバイダの username や password は
/etc/ppp/pap-secrets
に記述します。
書式は以下の通りです。
username@ceres * yourpassword
最初の項はプロバイダから指定された login 時の username です。
2項目は server を指定する時に使用する項目なので通常の
プロバイダに接続する場合は "*"
を指定します。
3項目はプロバイダ接続に使用する password を記述します。
この項も全節の chat script と同じく平文の password
を書くことになってしまうため、
マルチユーザ環境では /etc/ppp/pap-secrets
のパーミッションに注意する必要があります。
PAP では encrypt された password も使えるようですが
動作の確認していません。
/etc/ppp/peers/
以下の設定ファイル
以下のように name username
の項を追加します。
tty01 115200
crtscts
modem
lock
defaultroute
connect '/usr/sbin/chat -V -f /etc/ppp/chat-dti'
noauth
name username@ceres
username@ceres
の部分には
/etc/ppp/pap-secrets
で指定した username
(つまりプロバイダから指定された login 時の username)
を書きます。
認証を PAP で行なう場合はテキストで username を 送信する必要はなくなるので chat script も 以下のように変更します。
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
ABORT "ERROR"
ABORT "NO ANSWER"
ABORT "BUSY"
ABORT "Username/Password Incorrect"
"" "at"
OK "atz"
OK "atdp952820"
CONNECT ""
動作としては、アクセスポイントにダイアルした後、
"CONNECT"
が帰ってきたら PAP
認証に入ることになります。
以上の設定を行なった上で
% pppd call dti
(dti は前項で設定した /etc/ppp/peers 以下の設定ファイル名です)
とすればモデムが勝手にダイアルしてプロバイダに接続されるはずです。
ちゃんと接続されたか判断する手段はあまりないので、
% tail -f /etc/ppp/connect-errors
あるいは
% tail -f /var/log/messages
として log を参照するなり、
% ifconfig ppp0
を繰り返し確認してちゃんと接続されているかを確かめます。
接続が確認できるまではモデムのスピーカは
on にしておいたほうがいいかもしれません。
ちゃんとつながっているようならば
% nslookup www.dti.ad.jp
などとして DNS が正しく引けているか確かめましょう。
なんならいきなり netscape を立ち上げてみたりしてもいいでしょう。
接続を終わる時は、
% kill `cat /var/run/ppp0.pid`
として pppd
の process を kill してやれば
自動的に回線が切断されます。
私のマシンではメールの受信は fetchmail
で pop 経由で取得し、
送信は sendmail
で smtp に
投げる設定にしています。
こうすれば、普段は local spool で
メールを読み書きして、プロバイダにつないだ時だけ
% sendmail -q
% fetchmail -a
:
のようにすれば一気にメールを送受信することができ、
つなぎっぱなしにする必要がありません。
この設定については以下にメモ書き程度に書いときます。
ftp://ftp.dti.ad.jp/pub/unix/net/mail/CF/CF-3.6W.tar.gz
ftp://ftp.dti.ad.jp/pub/unix/net/mail/fetchmail/fetchmail-4.4.8.tar.gz
sendmail.cf
の設定
CF
のパッケージを展開したら
まず README.jpn
に目を通して下さい。
そしたらそこに書いてあるとおり
として
% make cleantools
:
% make tools
:
% make samples
% cp Standards/sendmail-v7.def sendmail.def
% vi sendmail.def
sendmail.def
の設定を行ないます。CF
のデフォルトの
sendmail.def
から書き換えた部分は
以下のとおりです。
OS_TYPE=bsd4.4
MX_SENDMAIL=no
MY_DOMAIN=ceres.dti.ne.jp
MY_NAME=yourhostname
FROM_ADDRESS='$m'
RECIPIENT_GENERIC=yes
REWRITE_GENERIC_FROM=yes
REWRITE_GENERIC_TO=yes
DIRECT_DELIVER_DOMAINS=none
DEFAULT_RELAY='smtp:smtp.ceres.dti.ne.jp.'
これでローカル宛のメールはローカルのスプールに、
それ以外は smtp.ceres.dti.ne.jp
に
smtp で投げる設定になるはずです。 From:
等のアドレスはホスト名を含まないものになります。
smtp.ceres.dti.ne.jp
だけに投げる設定にしていると、こちらが悪いのか
DTI が悪いのかわかりませんが、接続している時でも
hostname look up failer
で mail が送れないということがありました。
smtp で投げる宛先を
とすると
DEFAULT_RELAY='smtp:smtp.ceres.dti.ne.jp.:pop.ceres.dti.ne.jp.'
smtp.ceres.dti.ne.jp
で失敗しても
pop.ceres.dti.ne.jp
のほうに送ってくれますが、
smtp host に
pop.ceres.dti.ne.jp
を指定するのが許されるのかどうかはわかりません。
sendmail.def
を編集したら、
% make sendmail.cf
とすると sendmail.def
の設定に基づいて
sendmail.cf
が作られます。そうしたら
# mv /etc/sendmail.cf{,.orig}
# cp sendmail.cf /etc/sendmail.cf
# kill -HUP `head -1 /var/run/sendmail.pid`
として sendmail.cf
をインストールして
sendmail
に設定を読み込ませれば OK です。
fetchmail
のコンパイル
コンパイルは fetchmail
を展開した
ディレクトリで
% ./configure
% make
とします。libgnumalloc
をリンクするようにしておくのも
いいかもしれません。
~/.fetchmailrc
の中身
この設定についても man fetchmail
すると
書いてありますが…
これで pop.ceres.dti.ne.jp の yourname 宛のメッセージを local の yourname 宛のメールとしてスプールに落してくれます。
poll pop.ceres.dti.ne.jp proto pop3 \
user yourname with pass yourpassword is yourname here
(注: 行の途中で折り返しています)
fetchmail
を動かすためには
先に sendmail
を起動しておく必要があります。
起動の際のオプションは
# sendmail -bd
でいいと思います。マシンの起動時に自動的に
sendmail
を立ちあげるには、
1.2R の場合は /etc/netstart
の中、
1.2D 以降, 1.3R の場合は /etc/rc.conf
の中で
sendmail_flags
を設定してやります。
上記の設定がしてあれば、メールを受信する時は プロバイダにつないで
% fetchmail -a
とすれば、プロバイダの pop サーバーにたまっている
メールがローカルのメールスプールにセーブされます。
そのメールを読むには mh
や mew
、
mnews
等で「local spool のメールを読む」という
設定で読むことになります。
メールの送信をする時は使用するメーラで
「sendmail
を利用する」という設定にしておけば、
いつでもメール送信の操作をしても構いません。
プロバイダにつないでいない時に送信されたメールは
(smtp server のホスト名が引けないというエラーのため)
ローカルのスプールにためられるので、プロバイダにつないだ時に
% sendmail -q
とすればためられていたメールはまとめて送信されます。
この操作は一般ユーザーの権限で実行できます。