mochikoAsTechのdig日記

当方好きなコマンドはdigです!お友達から!!よろしくお願いします!!!

ドメインで_(アンダーバー)使おうとしたらbad owner name (check-names)になった

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以降で発生する模様)

解決方法は?

  1. アンダーバー使わない ←こっちがあるべき姿
  2. どうしても使いたい場合は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

その辺の矛盾から、昔のサイトとかWindowsActive Directoryだと普通にアンダーバー使ってたり、BIND9.3.1でcheck-namesのデフォルト値が変更になったり、今でもignoreにすれば使えたりするのかなー。

まあハイフン使えよ、という話だと思うので、取りあえず私は「アンダーバー使わない」で行こー。

あ、でもこれみたいにアスタリスク使ってると、アンダーバー入りでも普通に引けるのね。