Mac El Capitan + MacPorts + BIND でなかなか言うことを聞いてくれなかった。解決に日曜日が潰れた。
要約
- /opt/local/bin/daemondo をactivate した。
- /Library/LaunchDaemons/org.macports.bind9.plistで、<key>Disabled</key><false/>
- named 関連のファイル、たとえば named.conf のオーナーが named になっていなかったので、named -u named -f;で起動しなかった。launchctl 任せだったので気づくのが遅れた。
インストール
- # port install bind9
- # launchctl load -w /Library/LaunchDaemon/opt.macports.bind9.plist
設定ファイルのコピー(オリジナルが *.dist。そうした方がいいよとインストールの最後で言われた)
# cp /opt/local/etc/named.conf.dist /opt/local/etc/named.conf
# cp /opt/local/var/named/db.127.0.0.dist /opt/local/var/named/db.127.0.0
# cp /opt/local/var/named/db.cache.dist /opt/local/var/named/db.cache
# cp /opt/local/var/named/db.localhost.dist /opt/local/var/named/db.localhost
制御ソフト rndc のための秘密錠の作成
# rndc-confgen -a
実用できるかは置いといて、文法のチェック。
# named-checkconf
起動、停止、バージョン、ロングバージョン、ステイタス、リロード
# named
# rndc stop
# named -v
# named -V
# rndc status
# rndc reload
サービスのを有効化。
# vi /Library/LaunchDaemons/org.macports.bind9.plist
- <key>Disabled</key><true/>
- <key>Disabled</key><false/>
起動したらログに色々と、次々とエラーを吐く。一向に named が立ち上がらない。
- Service exited with abnormal code 126.
- Service only ran for 0 secounds. Pushing respawn out by 10 secounds.
- daemondo: cannot execute binary file.
daemondoがアクティベートされていないので bind がスタートしない模様。
$ daemondo
とすると実行形式では無い?と怒られた。壊れているとおもい /opt/local/bin/daemondo を再インストール
$ port search daemondo
$ sudo port install MacPorts_daemondo
このあとなんかするように言ってきたので、それに従った(なんか強制的に実行ファイルにせよとかだったか)
次のエラーをはく。
Error: Failed to activate MacPorts_daemondo: Image error: /opt/local/bin/daemondo already exists and does not belong to a registered port. Unable to activate port MacPorts_daemondo. Use 'port -f activate MacPorts_daemondo' to force the activation.
言われたとおりにする。
# port -f activate MacPorts_daemondo
$ port installed | grep daemondo
Password:
MacPorts_daemondo @1.1_20141017 (active)
activeが付いたので決着したようだ。
エラーを吐いた。これには解決方法がすぐに思いつかず、めまいがした。
named: couldn't add command channel 127.0.0.1#953: address in use
named: couldn't add command channel ::1#953: address in use
953ってコントローラ rndc が使うポートなんだって。これがヒントなんだろう。
次にやるrndc の設定をちゃんとしているうちに文句言わなくなった。
rndc について、次のページがためになりました。ありがとうございます。
エラーを吐いた。
# rndc stop
rndc: connection to remote host closed
This may indicate that 。。。。。
# rndc-confgen -a
# less /opt/local/etc/rndc.key
secret "lLCYqYIjO9B7rebyxUwNGGxS3s=";
を
# vi /opt/local/etc/named.conf
にコピペした。
リモートコントローラ rndc を利用するための設定。
キーファイル
# less /opt/local/etc/rndc.key
# vi /opt/local/etc/named.conf
controls { inet * allow { any; } keys { "rndc-key"; }; };
key "rndc-key" { algorithm hmac-md5; secret "qPWZ3Ndl81__YOUR__KEY__AmJhVtU=="; };
エラーを吐いた。
# rndc reload
named: open: /opt/local/etc/rndc.key: permision denied
# chmod 0640 /opt/local/etc/rndc.key
エラーを吐いた。
# rndc reload
named: managed-keys.bind.jnl: open: premission denied
# chmod 0644 ./managed-keys.bind
# chmod 0644 ./managed-keys.bind.jnl
エラーを吐いた。
# rndc reload
# chown named:named /opt/local/var/named
# chmod 0777 /opt/local/var/named
エラーを吐いた。
named: /opt/local/etc/named.conf:74: couldn't add command channel 0.0.0.0#953: permission denied
named: stopping command channel on 127.0.0.1#953
named: stopping command channel on ::1#953
# vi named.conf
controls {
inet 127.0.0.1 allow { localhost; } keys { "rndc-key"; };
};
key "rndc-key" {
algorithm hmac-sha256;
secret "eD4CZud56o。。。。u2k/xoU=";
};
ここまでで、次のコマンドは受け付ける。
# rndc reload
# rndc stop
# launchctl unload -w /Library/LaunchDaeomon/org.macports.bind9.plist
次のコマンドは受け付けない。
# rndc start
なお、rndcでポートの開け閉めはできない模様。(リセットする)
BINDがログで
loading configuration: permission denied
と吐いていたので conf やdb.*やらの持ち主をnamedへとchownで直した。
# launchctl list | grep bind
6821 0 org.macports.bind9
named のリモートコントロールは rndc。たとえば、rndc stop -p とか rndc reload。探し回ったわ。named はストップできない模様。
# rndc reload
むむむ、エラーを吐く
rndc: conncect failed: 127.0.0.1#953: connection refused
よく考えたら、named が走っていなかった。
# named
# rndc reload
server reload successful
動いた。
動作テスト
$ nsloopup me.server.co.jp
Server: dns.server.co.jp
Address: 234.5.6.7#53
Name: me.server.co.jp
Address: 123.123.123.123
$ nslookup 123.123.123.123
123.123.123.in-addr.arpa canonical name = 123.123.123.in-addr.arpa.
123.123.123.in-addr.arpa name = me.server.co.jp.
Authoritative answers can be found from:
123.123.123.123.in-addr.arpa nameserver = ns.my.company.jp.
ns.my.company.jp internet address = 123.123.123.123
Mac > ネットワークユーティリティ > Portscan でnamedのポート53番が開いていないのに気づく。
# vi /opt/local/etc/named.conf
listen-on { 127.0.0.1; };
↓
listen-on port 53 { any; };
ここまで。大変苦労して、エラーを無くしたnamed.confを列記します。
options {
listen-on-v6 { none; };
listen-on port 53 { any; };
allow-query { 127.0.0.1; };
dnssec-validation auto;
pid-file "/opt/local/var/run/named/named.pid";
};
zone "." IN {
type hint;
file "db.cache";
};
zone "localhost" IN {
type master;
file "db.localhost";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "db.127.0.0";
allow-update { none; };
};
controls {
inet 127.0.0.1 port 953 allow { localhost; } keys { "rndc-key"; };
};
key "rndc-key" {
algorithm hmac-sha256;
secret "eD4CZud56o__SECRET__OB/WJ42squ2k/xoU=";
};
(END)
postfix を起動しようとしたらエラーを吐いた。
# postfix start
Password:
postfix: warning: valid_hostname: invalid character 47(decimal): 33.32/27.44.15.154.in-addr.arpa
postfix: fatal: unable to use my own hostname
文字コード 47 は / (スラッシュ)のこと。ここはdomain name を表示するはず。
$ hostname
33.32/27.44.15.154.in-addr.arpa
named を起動させて無くても同じ。再起動でもダメ。Onix でもだめ。違うユーザで入っても変わらず。
システム環境設定 > 共有 > コンピュータ名、これでは無い。
$ host my.server.com
host my.server.com has address 123.123.123.123
host my.server.com mail is handled by 10 host my.server.com
これは合っている。
このページに行き着く。
$ sudo scutil --set HostName <新しいホスト名>
やっと設定できたわ。長いこと悩んだわ。
あとはいつもと同じ。
デーモンに登録
# launchctl load -w /Library/LaunchDaemons/org.macports.bind9.plist
デーモンから削除
# launchctl unload -w /Library/LaunchDaemons/org.macports.bind9.plist
起動
# launchctl start /Library/LaunchDaemons/org.macports.bind9.plist
停止
# launchctl stop /Library/LaunchDaemons/org.macports.bind9.plist
ここで
# launchctl list | grep bind
56 0. org.macports.bind9
named and bind が見えなくなった。嫌な予感。でも再起動したらnamedが立ち上がってくる。とりあえず先に進む。再起動したら見えた。見えたら動いている証拠。
ローンチコントローラー任せじゃ無くて、起動できるか手作業でチェックするのも悪くない。superで実行しないといっぱいエラーをはく。
$ sudo named -u named -f
$ sudo named -u root -f