「hoge_fuga.infra.xyz」っていうサブドメインが作りたくて、自前のBINDでinfra.xyz.zoneに
hoge_fuga IN A 153.121.58.159
っていうレコードを追加して、再起動前に
named-checkzone infra.xyz infra.xyz.zone
でゾーンファイルのチェックしたら、
/var/named/chroot/var/named/infra.xyz.zone:22: hoge_fuga.infra.xyz: bad owner name (check-names)
って出た。
どうやらリソースレコードで_(アンダーバー)を使うと、named-checkzoneしたときにこういうエラーが出るらしい。(named.confで設定するcheck-namesのデフォルト値がfailになったBIND9.3.1以降で発生する模様)
解決方法は?
- アンダーバー使わない ←こっちがあるべき姿
- どうしても使いたい場合はnamed.confの中で、
zone "infra.xyz" {
type master;
file "infra.xyz.zone";
};
を、
zone "infra.xyz" {
type master;
file "infra.xyz.zone";
check-names ignore;
};
にして、念のため
named-checkconf
も叩いて、named.confに間違いがないか確認する。
named.confにcheck-namesの行を足しても、named-checkzoneすると相変わらず「bad owner name (check-names)」っていうメッセージは出るんだけど、それでもnamed restartするとちゃんとhoge_fuga.infra.xyzが引けるようになってる。
もしbad owner name (check-names)出てるけどいいや!と、check-namesの行を足さずにBIND再起動を強行すると、「ゾーン情報にアンダーバー使っているという問題がある(とみなされる)」ため、そのゾーン全体が無効になってしまい、BINDが起動しなくなります。
# /etc/init.d/named restart
named を停止中: . [ OK ]
named を起動中:
Error in named configuration:
infra.xyz.zone:22: hoge_fuga.infra.xyz: bad owner name (check-names)
zone infra.xyz/IN: loading from master file infra.xyz.zone failed: bad owner name (check-names)
zone infra.xyz/IN: not loaded due to errors.
_default/infra.xyz/IN: bad owner name (check-names)
こんな感じです。これでもかっていうくらいbad owner name (check-names)出てます。BIND起動しないので、普通にinfra.xyz.zoneに書いてある全部のリソースレコードが引けなくなります。ぎゃー。
ドメインってアンダーバーダメなのね。知らなかった。確かにお名前.comで買えるか試したらちゃんとはねられたわ・・・。
によると、RFC952で定義されている「ホスト名に使える文字」にはアンダーバーが入っていなくて、
1. A "name" (Net, Host, Gateway, or Domain name) is a text string up
to 24 characters drawn from the alphabet (A-Z), digits (0-9), minus
sign (-), and period (.).
でもRFC1033で定義されている「ドメイン名に使える文字」には、アンダーバーが入っているんだね。
Because of other protocol
restrictions, only the following characters are recommended for use
in a host name (besides the dot separator):
"A-Z", "a-z", "0-9", dash and underscore
その辺の矛盾から、昔のサイトとかWindowsのActive Directoryだと普通にアンダーバー使ってたり、BIND9.3.1でcheck-namesのデフォルト値が変更になったり、今でもignoreにすれば使えたりするのかなー。
まあハイフン使えよ、という話だと思うので、取りあえず私は「アンダーバー使わない」で行こー。
あ、でもこれみたいにアスタリスク使ってると、アンダーバー入りでも普通に引けるのね。