[俺日記]

地震なのに / 2003-07-26 (土)

ヒカルの碁やるとは思わなかったよ>東北放送
この調子だとガンダムSEEDもやるだろうか。

[追記] 結局SEEDも放送したし、テロップのひとつも出なかった。以前抗議でもあったのか?>東北放送

[俺日記]

qmail on Mac OS X(not Mac OS X Server) 9回目補足 / 2003-07-25 (金)

そういやsendmailを無効にしておくのを忘れてますね。
/usr/lib/sendmail
/usr/sbin/sendmail
がMac OS Xに入っているsendmailです。qmailにはsendmail互換のsendmailまたはdatemailというプログラムが入っているので、そちらを使うようにします。両者の違いは自分で調べましょう:-)
まず、実行権限を落とします。

sudo chmod -x /usr/lib/sendmail /usr/sbin/sendmail

んで、名前を変えます。

sudo mv /usr/lib/sendmail /usr/lib/sendmail.bak
sudo mv /usr/sbin/sendmail /usr/sbin/sendmail.bak

最後にシンボリックリンクを作成します。

sudo ln -s /var/qmail/bin/datemail /usr/lib/sendmail
sudo ln -s /var/qmail/bin/datemail /usr/sbin/sendmail

以上。/var/qmail/bin/sendmailを使うなら

sudo ln -s /var/qmail/bin/sendmail /usr/lib/
sudo ln -s /var/qmail/bin/sendmail /usr/sbin/

ですね。

[俺日記]

¥と\ / 2003-07-22 (火)

なんか変だなーと思っていたらSafariのせいなのか?
半角で¥と入れても\と入れても?になってしまう。かといって
Mozillaで入力後Safariで表示すると半角の¥になるし。コピペしても
¥は¥のままだし。まいったなー。
というわけで、俺が書いたqmail関係の日記の中で半角の¥になっている部分は
全部半角の\ですので、各自置き換えてくれ.........
#今まで遅れに遅れたのはこの話のせいでもあったり。もう嫌........

[俺日記]

qmail on Mac OS X(not Mac OS X Server) 9回目改/qmailをインストールする。 / 2003-07-22 (火)

qmailのインストール書き直しー。

事前に書いておきますが、ここに書かれている内容については無保証ですので、「動かねー」「SPAMの踏み台にされた」などなどの苦情は受け付けませんのでそこんとこよろしく。なお、「ここ間違ってるぞ」「こんな設定させんなゴルァ!」などのツッコミは大歓迎ですので是非是非ツッコんでやって下さい。よろしくお願いします。

んではいくかぁ。

当初、qmailのOS X用パッケージを使う、と最初書きましたが、qmailのオリジナルのソースにパッチを当ててビルドしようと思います。おそらくこっちのほうが簡単。

今回出来るようにするのは以下の項目です。

・メールの保存形式はMaildir
・APOPでの認証
・POPでの認証
・メールの送信
・メールの受信

以下のものは今回やりません。

#つか俺がまだやってないので出来ない:-)

・virtual user
・virtual domain
・POP before SMTP
・IMAP4対応
・SSL対応

んじゃまずダウンロードから。一般ユーザでOKです。適当なディレクトリを作ってその中で作業しましょう。

% mkdir -p ~/Desktop/qmail_tmp
% cd ~/Desktop/qmail_tmp

qmail本体。必須←あたりまえだ

% curl -O http://cr.yp.to/software/qmail-1.03.tar.gz

展開します。

% tar zxvf qmail-1.03.tar.gz

APOP認証を使うので、SourceForgeで配布しているcheckpwを使います。いろんなミラーがある(*)んですが、今回はflowサーバ(オーストラリア)から落として展開しておきます。

% curl -O http://flow.dl.sourceforge.net/sourceforge/checkpw/checkpw-1.00.tar.gz
% tar zxvf checkpw-1.00.tar.gz

次にテスト( http://www.rbl.jp/svcheck.php )に合格するため:-)のパッチ。実は入れなくてもいいんだけど。
SMTPセッションで、ローカルパートに!やら@やら%やらあるやつをリレーしているように見えるのを、拒否するパッチ(らしい)。qmailでは、宛先の@以降が/var/qmail/control/rcpthostsに書いてあるドメインである場合、とりあえず受け取ります。@の左側はチェックしないんですね。受け取ったあと@の左側をチェックするのは別のプログラムが行い、そこでエラーになれば返送されるわけです。受け取ってリレーするように見えても実はちゃんとエラーを返すので、特に問題無いんですけど、気持ち悪いと思う人は入れましょう、くらいのパッチです。2chのUNIX板qmailスレ( http://pc.2ch.net/test/read.cgi/unix/1044498957/82-115n あたり)を見ると俺より詳しい人:-)が解説してます。

% curl -O http://www.qmail.org/qmail-smtpd-relay-reject

日付をタイムゾーンに従ったものにするパッチ。これも入れなくても問題ないけど、これは入れといたほうが......見にくいし。

% curl -O ftp://ftp.nlc.net.au/pub/unix/mail/qmail/qmail-date-localtime.patch

Mac OS Xでmakeできるようにするパッチ。SENDMAILとINSTALLの上書き対策とかconf-ldのパッチとか。必須。

% curl -O http://gururi.com/qmail/qmail-MacOSX.patch

ディレクトリを移動します。

% cd qmail-1.03

パッチを当てます。

% cat ../qmail-smtpd-relay-reject | patch -d.
% cat ../qmail-date-localtime.patch | patch -d.
% cat ../checkpw-1.00/qmail-popup-auth.patch | patch -d.
% cat ../qmail-MacOSX.patch | patch -d.

インストール先ディレクトリを作成します。

% sudo mkdir -p /var/qmail

グループを作成します。

% sudo niload group . <<END
nofiles:*:81:
qmail:*:82:
END

ユーザを作成します。アカウントPreferencePaneに出したくないのでuidを100未満で作ります。今回はデフォルトで存在するアカウントのuidと被らないように80番台を使います。

% sudo niload passwd . <<END
alias:*:81:81:qmail user:/var/qmail/alias:/bin/true
qmaild:*:82:81:qmail user:/var/qmail:/bin/true
qmaill:*:83:81:qmail user:/var/qmail:/bin/true
qmailp:*:84:81:qmail user:/var/qmail:/bin/true
qmailq:*:85:82:qmail user:/var/qmail:/bin/true
qmailr:*:86:82:qmail user:/var/qmail:/bin/true
qmails:*:87:82:qmail user:/var/qmail:/bin/true
END

makeします。make installではなくmake setup checkです。

% sudo make setup check

これでインストールは終わっているはず。
次にcheckpwをmakeします。

% cd ../checkpw-1.00

INSTALLを退避。面倒なのでパッチはなし。

% mv INSTALL INSTALL.txt

make。

% make prog

selectcheckpwが変なので直しておく。具体的には//binになってるところを/binに直してます。

% /usr/bin/perl -i -pe's|//|/|g;' ./selectcheckpw

インストールします。

% sudo make setup check

インストールははこれでおしまい(たぶん)。次は設定です。

今回サーバの名前はserver.dyndns.example.jpでやってますが、これはローカル向けの名前なので、dyndns.example.jpで設定を行います。

% cd ../qmail-1.03
% sudo config-fast dyndns.example.jp

以上(笑)。

次にユーザを作ります。

% sudo $SHELL
# cd ~alias
# echo '&'${SUDO_USER} > .qmail-mailer-daemon
# echo '&'${SUDO_USER} > .qmail-postmaster
# echo '&'${SUDO_USER} > .qmail-root

最低限この三つは作りましょう。なお、.qmail-hogehogeという名前でファイルを作り、中身を
&example@example.com
にしておくとhogehoge@dyndns.example.jp宛にメールを送るとexample@example.comに転送されます。転送メールアドレスだけだったらこれだけでいくらでも作れるわけです。

んで、次。Maildir形式でやりますので各ユーザのホームディレクトリにMaildirを作ります。

# for i in `nidump passwd .|perl -ne'@u=split(/:/);print "$u[0] " if ($u[1] ne "*");'`
sudo -u $i /var/qmail/bin/maildirmake ~$i/Maildir && sudo -u $i echo ~$i/Maildir/ > ./$i/.qmail && /Developer/Tools/SetFile -a V ~$i/Maildir

複雑に見えますが、nidumpでユーザのリストを取得して、パスワードフィールドが*ではないユーザのユーザ名を取得して、それぞれについて処理しています。やっているのは以下の処理。

・各ユーザの権限で/var/qmail/bin/maildirmakeを実行し、~user/Maildirを作成
・~user/.qmailにMaildirの場所を書き込み
・Developer ToolsのSetFileコマンドでMaildirを不可視に

Maildirを不可視にしておくとユーザが誤って消してしまうと行った事故を防げますのでおいらはこれ推奨。

さて、これで大体の準備が出来ましたので、qmailを稼働させてみましょう。qmailもtinydns同様daemontools支配下で動かします。/service以下にサービスのシンボリックリンクを置くわけですが、今回の例ではそのオリジナルは/var/qmail/svcに置くことにします。

# mkdir -p /var/qmail/svc
# cd /var/qmail/svc

まずqmail-startの起動スクリプトを作ります。

# mkdir qmail
# cat <<END > qmail/run
#! /bin/sh
echo 'Starting qmail...'
exec 2>&1
exec env - PATH="/var/qmail/bin:?$PATH" qmail-start ./Maildir/
END
# chmod 755 qmail/run
# chown root.qmail qmail/run
# mkdir -p qmail/log/main
# cat <<END > qmail/log/run
#!/bin/sh
exec env - PATH="?$PATH" setuidgid qmaill multilog t s1000000 ./main
END
# chmod 755 qmail/log/run
# chown -R qmaill.qmail qmail/log
# chmod +t qmail qmail/log

daemontoolsのサービスに登録します。

# ln -s /var/qmail/svc/qmail /service

起動を確認します。

# svstat /service/qmail
/service/qmail: up (pid 3313) 15 seconds

0または1 secondでうろうろしてpidがどんどん増加する時は起動に失敗しています。起動に成功したらローカル配送のテストをしてみましょう。

# /var/qmail/bin/qmail-inject <<END
To: ${SUDO_USER}
Subject: local mail test

local mail test
END

# cat ${SUDO_USER}/Maildir/new/*
Return-Path: <root@example.dyndns.jp>
Delivered-To: gururi@example.dyndns.jp
Received: (qmail 2764 invoked by uid 0); 16 Jul 2003 11:12:49 +0900
Date: 16 Jul 2003 11:12:49 +0900
Message-ID: <20030716021249.2763.qmail@example.dyndns.jp>
From: root@example.dyndns.jp
To: gururi@example.dyndns.jp
Subject: local mail test

local mail test

Message-IDの数字とかユーザ名は環境によって変わるので、違うからと言って騒がないように。

ここまで出来たら次はsmtpサーバの設定をします。

# cd /var/qmail/svc
# mkdir -p smtp/log/main
# cat <<END > smtp/run
#!/bin/sh
echo 'Starting qmail-smtpd...'
exec 2>&1
exec env - PATH="/var/qmail/bin:?$PATH" envuidgid qmaild softlimit -d250000 tcpserver -vRH -c40 -U -x smtp.cdb 0 25 qmail-smtpd
END
# cat <<END > smtp/smtp
127.0.0.1:allow,RELAYCLIENT=""
10.0.1.100-105:allow,RELAYCLIENT=""
all:allow
END
# cat <<END > smtp/Makefile
TCPRL=/usr/local/bin/tcprules

all: smtp.cdb

smtp.cdb: smtp
        ?${TCPRL} ?$@ smtp.tmp < smtp
END
# cat <<END > smtp/log/run
#!/bin/sh
exec env - PATH="?$PATH" setuidgid qmaill multilog t ./main
END
# chmod 755 smtp/log/run smtp/run
# chown root.qmail smtp/run smtp/Makefile smtp/smtp
# chmod +t smtp smtp/log
# cd smtp
# chown -R qmaill.qmail log
# make

smtpの制限はtcpserverで行います。/var/qmail/svc/smtp/smtp.cdbファイルがその設定ファイルで、そのもとになるテキストファイルが/var/qmail/svc/smtp/smtpです。Makefileを作っておくと/var/qmail/svc/smtp/smtpを編集したあと/var/qmail/svc/smtpでmakeを実行するだけで/var/qmail/svc/smtp/smtp.cdbが更新されます。まぁあんまり編集しないという話もありますが。
で、/serviceに登録します。

# ln -s /var/qmail/svc/smtp /service
# svstat /service/smtp
/service/smtp: up (pid 4808) 32 seconds

0または1 secondでうろ(略)

んで最後にPOPサーバの設定をします。まずパスワードの登録をします。パスワードは~/Maildir/.passwordに書き込んでおきます。

# exit
% vi ~/Maildir/.password

viの簡単な使い方。

・起動時は文字入力出来ません。hjklで左・下・上・右にカーソルが移動します。
・iとタイプするとカーソル位置から文字を入力出来ます。
・aとタイプするとカーソル位置の次から文字を入力出来ます。
・escキーで移動するモードに戻ります。
・移動モードでZZとタイプすると保存して終了します。

つまり、
・viを起動
・i(必ず小文字)を入力する
・パスワードを入力
・escキーを押す
・ZZ(両方とも大文字)とタイプして保存・終了

という流れになります。なお、パスワードを変更する時はddで入力してあるパスワードを消すか、rm ~/Maildir/.passwordでファイル自体を消してから作業して下さい。

パスワードファイルを作ったら、自分以外は読み書き出来ないようにパーミッションを変更します。他の人が読める状態だと動きません。

% chmod 600 ~/Maildir/.password

再びroot権限でshellを動かします。

% sudo ${SHELL}
# cd /var/qmail/svc
# mkdir -p pop/log/main
# cat <<END > pop/run
#!/bin/sh
exec 2>&1
exec env - PATH="/var/qmail/bin:?$PATH" tcpserver -x pop.cdb -vRH 0 110 qmail-popup `cat /var/qmail/control/me` /bin/selectcheckpw qmail-pop3d Maildir
END
# cat <<END > pop/pop
all:allow
END
# cat <<END > pop/Makefile
TCPRL=/usr/local/bin/tcprules
all: pop.cdb
pop.cdb: pop
        ?${TCPRL} ?$@ pop.tmp < pop
END
# cat <<END > pop/log/run
#!/bin/sh
exec env - PATH="?$PATH" setuidgid qmaill multilog t s1000000 ./main
END
# chmod 755 pop/log/run pop/run
# chown root.qmail pop/run pop/Makefile pop/pop
# chmod +t pop pop/log
# cd pop
# chown -R qmaill.qmail log
# make

popは普通どこからでもアクセス出来るようにすると思いますが、変な所からアタック受けた時、すぐに制限出来るようにルールファイルを作っておきます。拒否したいIPアドレス:denyという行をall:allowより前に書いておくと、そのIPアドレスからのPOP接続を拒否出来ます。接続制限をしない場合は、pop/runの-x pop.cdbを削って下さい。

さて、popもdaemontoolsのサービスに登録します。

# ln -s /var/qmail/svc/pop /service

qmail,smtp同様、起動しているかどうか確認します。

# svstat /service/pop
/service/pop: up (pid 5715) 17 seconds

さて、それではネットワークとメールクライアントの設定を変更してみましょう。
10.0.0.201=client1.dyndns.example.jpの設定を変更するものとして進めます。

まずはシステム環境設定→ネットワーク。
DNSキャッシュサーバ=10.0.0.100=dnscache.dyndns.example.jp
としましたので、DNSサーバの欄を10.0.0.100と書き換えます。検索するドメインの欄にdyndns.example.jp とlocal(10.2以降)を加えます。他に変更する部分は無いので、今すぐ適用ボタンを押します。

smtpサーバにはserver.dyndns.example.jp、dyndns.example.jpまたは10.0.0.101と入力します。
popサーバにもserver.dyndns.example.jp、dyndns.example.jpまたは10.0.0.101と入力します。popユーザ名はサーバにあるあるアカウントと同じものを、パスワードはpopのところで入力したパスワードを入れます。

設定はこれで終わりです。なお、ルータの25番と110番をserver.dyndns.example.jpに向けておかないとメールが届きませんので自分のルータの説明書をよく読んで設定しましょう。

(*)
http://aleron.dl.sourceforge.net/sourceforge/checkpw/checkpw-1.00.tar.gz
http://belnet.dl.sourceforge.net/sourceforge/checkpw/checkpw-1.00.tar.gz
http://cesnet.dl.sourceforge.net/sourceforge/checkpw/checkpw-1.00.tar.gz
http://easynews.dl.sourceforge.net/sourceforge/checkpw/checkpw-1.00.tar.gz
http://flow.dl.sourceforge.net/sourceforge/checkpw/checkpw-1.00.tar.gz
http://heanet.dl.sourceforge.net/sourceforge/checkpw/checkpw-1.00.tar.gz
http://switch.dl.sourceforge.net/sourceforge/checkpw/checkpw-1.00.tar.gz
http://twtelecom.dl.sourceforge.net/sourceforge/checkpw/checkpw-1.00.tar.gz
http://umn.dl.sourceforge.net/sourceforge/checkpw/checkpw-1.00.tar.gz
http://unc.dl.sourceforge.net/sourceforge/checkpw/checkpw-1.00.tar.gz

[俺日記]

atso-net.jp / 2003-07-16 (水)

so-netがDynamic DNSサービスを開始した模様。たださー、月額200円ってのはどうなんだろう。微妙な値段だ。
ちなみに、
@nifty:200円/月(*.atnifty.comの場合)
ぷらら:無料(*.plala.jp)
asahi-net:ddnsはない模様。

ちなみに、asahi-netにはddnsの代わりに(と言っては何だけど)固定IPアドレスがオプションで使えて、これがが無料(Bフレッツコース)または500円/月(フレッツADSLコース)。so-netの固定IPが

ちなみに今はDyndns.orgと某所(おいらのウェブを見ると判るけど書かないで置く)で二重化してあります。こっちが無料なだけに金払うのには激しく抵抗がある。おまけに、so-net DDNSのFAQを見ると、

Q-9 www以外のサーバを立てることはできますか?
A-9 いいえ、ご利用いただけません。

おいおい、無料のとこだってMXくらいありますよ?
ということで、とりあえずso-netのDDNSは論外ってことで............やっぱりasahi-netに乗り換えようかなぁ。ちょっと突っ込んで調べてみようか。


[俺日記]

qmail on Mac OS X 9回目を削除 / 2003-07-05 (土)

削除したのはこれが初めてだな。
なんかHTMLとかHTML OKなテキストで書いていると<<とか書いても反映されてないし、エスケープしても駄目だし、ってことで書き直す事にした。

[俺日記]

JR東日本の無線LAN / 2003-07-04 (金)

今日は木下大サーカスを見て来た。久しぶりにJRを使ったので、ついでにこないだ申し込みをしたJR東日本の無線LANを使ってみた。今もそれ経由で書いている。
なかなか快適だ。AirMacでも特に問題なく繋がっているし。メールはOME+sshでトンネリングしながら使っているのだが、これも特に問題なく使えた。別にどっかのポートを閉じてるとかじゃないみたい。
うん、いいんじゃないでしょうか。ただ、実験が終わってから、これがいくらで提供されるかが問題じゃないかと。月額いくらだと俺みたいにめったに駅を使わない人は加入しないしね(笑)。やっぱりその場で申し込んですぐ使える、というのがいいなぁ。今は東京と上野しかその場で申し込みは出来ないみたいだけど、きっと本格運用では仙台でも申し込める事を信じてますよ、JRさん。

#一応「携帯通信」にしてみた。

[俺日記]

うぎゅー / 2003-06-29 (日)

これまでqmailをMac OS Xで使うための駄文をつらつらと書いて来た。
こんだけ大きな間違いは初めてだ。
#発覚している中では、な(笑)。
うぎゅー、となってしまった。1週間も気が付かずに放置してたし。
しかも気が付いたのが朝髭そってる時。なんでだよ(笑)
というわけで、インストールしようとして失敗した人、(いたら)ごめんね。

[俺日記]

qmail on Mac OS X(not Mac OS X Server) 8回目/dnscacheを設定する。 / 2003-06-19 (木)

まず今回はMac OS XのGUIに戻ります。

ネットワークの設定を開きますと、内蔵 EthernetとかAirMacとか内蔵モデムとか表示されている「表示」というメニューがあります。このメニューの一番下には「ネットワークポート設定」という項目がありますので、それを選びます。チェックボックスとポートの名前が左側のボックスに、「新規...」「複製」「削除...」の三つのボタンが右に配置されています。ここで、内蔵イーサネット(何でもいいですけど、今使ってる奴)を選択して「複製」ボタンを押します。名前を付けろ、と要求されますので、何でもいいので適当に付けましょう(名前は重要でないです)。

さて、表示メニューで今複製した奴を選んで下さい。ここでIPアドレスを10.0.0.100に設定します、あとはコピー元と同じで構いません。終わったら「今すぐ適用」ボタンを押して保存します。

これでひとつのネットワークポートに二つのIPアドレスを持たせる作業は終了です。Terminalに戻りましょう。

dnscacheの設定には/usr/local/bin/dnscache-confを使います。終わり(嘘)。←しつこい
dnscache-confを単独で実行すると

% /usr/local/bin/dnscache-conf
dnscache-conf: usage: dnscache-conf acct logacct /dnscache [ myip ]

と表示されます。tinydns-confとほぼ同じですね。tinydnsと同様、

acct=dnscacheを実行するアカウント
logacct=dnscacheのログを取るアカウント
/dnscache=dnscacheが使うディレクトリ
myip=dnscacheが使うIPアドレス

です。こいつらを与えてやると、dnscache-confが最低限の設定をやってくれると言う寸法です。つーことで、

acct=dnscache
logacct=dnslog
/dnscache=/var/dnscache
ip=10.0.0.100

で設定しましょう。dnslogはtinydnsの使い回しです。tinydnsと同様、任意の名前で構いません。注意点も一緒です。

ではグループとユーザの作成です。shellをroot権限で動かしましょう。

% sudo ${SHELL}

グループをNetInfoに登録します。

# niload group . <<END
dnscache:*:532:
END

ユーザを登録します。

# niload passwd . <<END
dnscache:*:7503:532::0:0::/noexistent:/sbin/nologin
END

tinydnsのときとほとんど同じですね。登録したら、確認します。

# nidump group .|grep dnscache
dnscache:*:532:
# nidump passwd .|grep dnscache
dnscache:*:7503:532::0:0::/noexistent:/sbin/nologin

確認できたら、

# dnscache-conf dnscache dnslog /var/dnscache 10.0.0.100

と入力します。たぶん実行自体は一瞬で終わると思います(何も表示されません)。

では/var/dnscacheに移動しましょう。

# cd /var/dnscache

/var/dnscacheの中はこんな感じ。
drwxr-sr-x 7 root wheel 238 Jun 18 13:29 env/
-rw-r--r-- 1 root wheel 8 Jun 18 13:29 env/CACHESIZE
-rw-r--r-- 1 root wheel 8 Jun 18 13:29 env/DATALIMIT
-rw-r--r-- 1 root wheel 11 Jun 18 13:29 env/IP
-rw-r--r-- 1 root wheel 8 Jun 18 13:29 env/IPSEND
-rw-r--r-- 1 root wheel 19 Jun 18 13:29 env/ROOT
drwxr-sr-x 5 root wheel 170 Jun 18 13:29 log/
drwxr-sr-x 2 dnslog dnslog 68 Jun 18 13:29 log/main/
-rwxr-xr-x 1 root wheel 50 Jun 18 13:29 log/run*
-rw-r--r-- 1 dnslog dnslog 0 Jun 18 13:29 log/status
drwxr-sr-x 4 root wheel 136 Jun 18 13:29 root/
drwxr-sr-x 3 root wheel 102 Jun 18 13:29 root/ip/
-rw------- 1 root wheel 0 Jun 18 13:29 root/ip/127.0.0.1
drwxr-sr-x 3 root wheel 102 Jun 18 13:29 root/servers/
-rw-r--r-- 1 root wheel 164 Jun 18 13:29 root/servers/@
-rwxr-xr-x 1 root wheel 141 Jun 18 13:29 run*
-rw------- 1 root wheel 128 Jun 18 13:29 seed

./envの中にはenvdirコマンドによってdnscacheに渡される環境変数が入っています。ファイル名が変数名、中身がその値です。ここには5つファイルがあります。IPはdnscacheがリクエストを待ち受けるIPアドレスです。

# cat env/IP
10.0.0.100

ROOTはdnscacheを動かすときにdnscacheがchrootするディレクトリです。

# cat env/ROOT
/var/dnscache/root

こんな感じですね。IPSEND,DATALIMIT,CACHESIZEはデフォルトで問題ないと思いますので、今回はいじりません。いじりたい人はここじゃなく他で調べた方がいいと思います:-)

./rootには2つのディレクトリがあります。
./root/ipには127.0.0.1という名前の空ファイルがあります。dnscacheは、ここにあるファイルの名前に一致するIPアドレスからのリクエストにしか返答しません。つまり、デフォルトでは自分自身(127.0.0.1)にしか返答しないわけです。今回は他のクライアントにも返答しますから、クライアントのIPアドレスを登録してやりましょう。登録は空ファイルを作るだけなので、簡単です。

# cd /var/dnscache/root/ip
# touch 10.0.0.101 10.0.0.102 ...

このように、全部のマシンの分ファイルを作ってもいいのですが、マシンを増やしたときにまた作業いなきゃいけません。それが面倒だ、という時は

# touch 10.0.0

とすることで、10.0.0で始まるIPアドレスからのリクエストを受け付けるようになります。ちなみに、今回の例だと

# touch 10

でもOKです。これだと10で始まるIPアドレスなら何でもOKになります。

./root/serversには@という名前のファイルがあります。これはDNS問い合わせの基点となるルートサーバのIPアドレスが書かれているのですが、実は最近変更になったサーバがあります。djbdnsのパッケージに含まれている@ファイルの内容は古いんで、これは更新しましょう。

# /usr/local/bin/dnsq ns . a.root-servers.net|grep additional|sort|awk '{print $5}' > /var/dnscache/root/servers/@

また、*.dyndns.example.jpの問い合わせが外に行かないように設定します。dnscacheは、@の他にファイルがあると、そのファイル名をドメイン名に含む問い合わせをそのファイルの中に書かれているIPアドレスに問い合わせます。そうでない場合はルートネームサーバを使って通常通りの解決を行います。今回は

dyndns.example.jp宛の問い合わせは10.0.0.101で受けるので、

# echo 10.0.0.101 > dyndns.example.jp
# echo 10.0.0.101 > 10.in-addr.arpa

とします。これで、*.dyndns.example.jpの問い合わせと、10.x.y.zの問い合わせは外ではなく10.0.0.101に行くようになります。

さて、これで設定が出来ました。dnscacheを稼動してみましょう。

# ln -s /var/dnscache /service

最大5秒待つとdaemontoolsがdnscacheを起動してくれます。

# svstat /service/dnscache /service/dnscache/log
/service/dnscache: up (pid 18042) 14 seconds
/service/dnscache/log: up (pid 18041) 14 seconds

秒数が0または1でpidが毎回変わるようだと失敗しています。設定を見直しましょう。秒数が順調に増えていれば起動していると思われます。

起動出来ていればroot権限での作業は終了です。CTRL+Dを入力してroot権限のシェルを終了させましょう。

ちゃんと名前が引けるかどうか確認してみましょう。

% dig @10.0.0.100 apple.com mx

(略)
;; ANSWER SECTION:
apple.com. 3h59m41s IN MX 10 mail-in2.apple.com.
apple.com. 3h59m41s IN MX 20 mail-in1.apple.com.
apple.com. 3h59m41s IN MX 30 mail-in.asia.apple.com.
apple.com. 3h59m41s IN MX 30 mail-in.euro.apple.com.
(略)

引けたかな?引けるのを確認したらネットワークの設定にあるDNSサーバのIPアドレスを10.0.0.100にして、ブラウザやメーラで接続出来るか確認してみましょう。

さて、次回はいよいよqmailのインストールです。気合い入れて行くぜー。←やる気無さげ

[俺日記]

qmail on Mac OS X(not Mac OS X Server) 7回目/tinydnsを設定する。 / 2003-06-18 (水)

tinydnsの設定には/usr/local/bin/tinydns-confを使います。終わり(嘘)。
tinydns-confを単独で実行すると

% /usr/local/bin/tinydns-conf
tinydns-conf: usage: tinydns-conf acct logacct /tinydns myip

なんて表示されますね。これは、

acct=tinydnsを実行するアカウント
logacct=tinydnsのログを取るアカウント
/tinydns=tinydnsが使うディレクトリ
myip=tinydnsが使うIPアドレス

です。こいつらを与えてやると、tinydns-confが最低限の設定をやってくれると言う寸法です。つーことで、

acct=tinydns
logacct=dnslog
/tinydns=/var/tinydns
ip=10.0.0.101

で設定しましょう。任意の名前で構いませんが、その場合は以下の説明を読み替えてください。その場合は、エディタにでもコピーして置換すると間違いが少ないと思います。

まずはグループとユーザの作成です。niloadというコマンドを使って、NetInfoにグループとユーザを登録します。

まずshellをroot権限で動かしましょう。

% sudo ${SHELL}

グループをNetInfoに登録します。

# niload group . <<END
tinydns:*:530:
dnslog:*:531:
END

次に、ユーザを登録します。

# niload passwd . <<END
tinydns:*:7501:530::0:0::/noexistent:/sbin/nologin
dnslog:*:7502:531::0:0::/noexistent:/sbin/nologin
END

530,531,7501,7502は任意の数字で構いませんが、他のグループ・ユーザのIDと重複しない事と、ここで同じ数字が入っているところは必ず一致させておく必要があります。

nidump passwd .

または

nidump group .

でそれぞれユーザ・グループの設定が確認できます。/etc/passwdや/etc/groupに書く必要はありませんし、書いても反映されませんのでご注意を。

登録したら、確認します。

# nidump group .|grep dns
tinydns:*:530:
dnslog:*:531:
# nidump passwd .|grep dns
tinydns:*:7501:530::0:0::/noexistent:/sbin/nologin
dnslog:*:7502:531::0:0::/noexistent:/sbin/nologin

確認できたら、

# tinydns-conf tinydns dnslog /var/tinydns 10.0.0.101

と入力します。たぶん実行自体は一瞬で終わると思います(何も表示されません)。

では/var/tinydnsに移動しましょう。

# cd /var/tinydns

/var/tinydnsの中はこんな感じ。
drwxr-sr-x 4 root wheel 136 Jun 17 10:13 env/
-rw-r--r-- 1 root wheel 11 Jun 17 10:13 env/IP
-rw-r--r-- 1 root wheel 18 Jun 17 10:13 env/ROOT
drwxr-sr-x 5 root wheel 170 Jun 17 10:13 log/
drwxr-sr-x 2 dnslog dnslog 68 Jun 17 10:13 log/main/
-rwxr-xr-x 1 root wheel 50 Jun 17 10:13 log/run*
-rw-r--r-- 1 dnslog dnslog 0 Jun 17 10:13 log/status
drwxr-sr-x 9 root wheel 306 Jun 17 10:13 root/
-rw-r--r-- 1 root wheel 44 Jun 17 10:13 root/Makefile
-rwxr-xr-x 1 root wheel 77 Jun 17 10:13 root/add-alias*
-rwxr-xr-x 1 root wheel 79 Jun 17 10:13 root/add-childns*
-rwxr-xr-x 1 root wheel 76 Jun 17 10:13 root/add-host*
-rwxr-xr-x 1 root wheel 74 Jun 17 10:13 root/add-mx*
-rwxr-xr-x 1 root wheel 74 Jun 17 10:13 root/add-ns*
-rw-r--r-- 1 root wheel 0 Jun 17 10:13 root/data
-rwxr-xr-x 1 root wheel 98 Jun 17 10:13 run*

./logはログが置かれるディレクトリです。tinydnsの場合は、中を見ることはあってもいじることはまずないので省略。ログを見るときは

# tail -f /var/tinydns/log/main/current | tai64nlocal

とするとリアルタイムで見られます。リアルタイムで見ないなら

# tai64nlocal < /var/tinydns/log/main/current | less

などとするといいでしょう。

./envの中にはenvdirコマンドによってtinydnsに渡される環境変数が入っています。ファイル名が変数名、中身がその値です。ここには二つファイルがあります。IPはtinydnsがリクエストを待ち受けるIPアドレスです。

# cat env/IP
10.0.0.101

ROOTはtinydnsを動かすときにtinydnsがchrootするディレクトリです。

# cat env/ROOT
/var/tinydns/root

こんな感じですね。とくにいじる必要はありませんが、tinydnsを動かすIPアドレスを変更するときは変更する必要があります(tinydns-confを使ったほうが楽ですね)。

./rootには最初7つファイルがあります。この中で一番大事なのは、tinydnsが提供する情報を収めたdataという名前のファイルです。./rootでmakeを実行するとMakefileにしたがって、dataからdata.cdbというファイルが作られます。
主なデータは./rootにあるadd-*スクリプトで生成することが出来ます(もちろん手動でもOKです)。dataは単なるテキストなので、viなどのエディタで直接編集することも可能ですし、sed/awk/perl/rubyなどのスクリプトで編集するのも簡単です。

ということで、さくさく登録しましょう。
なお、ネットワークの諸設定ですが、今回は以下のような構成であると仮定して行います。適当に読み替えたりエディタで置換して:-)作業してください。

IPアドレス=10.0.0.0/255.0.0.0(クラスA)
ドメイン名=dyndns.example.jp
で、登録するホストは
10.0.0.101=server.dyndns.example.jp
10.0.0.201=client1.dyndns.example.jp
10.0.0.202=client2.dyndns.example.jp
10.0.0.203=client3.dyndns.example.jp
10.0.0.204=client4.dyndns.example.jp
10.0.0.205=client5.dyndns.example.jp
の6つ。
また、

DNSコンテンツサーバ=10.0.0.101=server.dyndns.example.jp
SMTP&POPサーバ =10.0.0.101=server.dyndns.example.jp
DNSキャッシュサーバ=10.0.0.100=dnscache.dyndns.example.jp

とします。10.0.0.100はserver.dyndns.example.jpのマシンの内蔵イーサネットポートを複製したもの(次回以降解説)で、DNSキャッシュサーバとして稼動させるためにあります。

# cat <<END >data
.dyndns.example.jp::server.dyndns.example.jp:259200
+10.in-addr.arpa::server.dyndns.example.jp:259200
@dyndns.example.jp::server.dyndns.example.jp::86400
+dyndns.example.jp:10.0.0.101:86400
=server.dyndns.example.jp:10.0.0.101:86400
=dnscache.dyndns.example.jp:10.0.0.100:86400
=client1.dyndns.example.jp:10.0.0.201:86400
=client2.dyndns.example.jp:10.0.0.202:86400
=client3.dyndns.example.jp:10.0.0.203:86400
=client4.dyndns.example.jp:10.0.0.204:86400
=client5.dyndns.example.jp:10.0.0.205:86400
END

まぁこんな感じでしょうか。
なお、2行目は10.0.0.0/255.0.0.0なネットワークなので10.in-addr.arpaですが、たとえば192.168.0.0/255.255.255.0だったら
.0.168.192.in-addr.arpa〜
になります。

あとは/var/tinydns/rootでmakeを実行するだけです。

# make

dataを編集したら必ずmakeを実行しましょう。でないとせっかくの変更が反映されません。ちなみに、makeを実行するのはtinydnsを起動していても大丈夫です。

さて、設定が出来たらtinydnsを稼動してみましょう。

# ln -s /var/tinydns /service

最大5秒待つとdaemontoolsがtinydnsを起動してくれます。

# svstat /service/tinydns /service/tinydns/log
/service/tinydns: up (pid 17042) 4 seconds
/service/tinydns/log: up (pid 17041) 4 seconds

秒数が0または1でpidが毎回変わるようだと失敗しています。設定を見直しましょう。秒数が順調に増えていれば起動していると思われます。

# dig @10.0.0.101 dyndns.example.jp ns
# dig @10.0.0.101 dyndns.example.jp mx
# dig @10.0.0.101 client1.dyndns.example.jp a

ちゃんと引けてますかね?次回はDNSキャッシュサーバdnscacheを設定します。