インターネットなこと: 2021年9月アーカイブ

いやあ、長いこと zone ファイルの書き方、間違えてたわ(^^;

前にいた会社でインターネット関連の仕事を中心に営業していて、それこそ Windows 3.1 で Trumpet Winsock 使ってインターネット接続していた時代ね。
まあ、俺は FreeBSD で接続してたけど(笑)。メインのブラウザが NCSA Mosaic だった時代。
広島市内に AP のあるプロバイダは、ASAHI-NET と BEKKOAME しかなかったな。IIJ は・・・来てたか。

仕事取ってきても社内に技術者がいなかったので、手の空いてたプログラマの女の子に Perl 教えて CGI 組ませたりしてたけど、サーバ構築は全部自分でやってた。

メインフレームでの COBOL 開発がまったく面白くなかったので、PC系の仕事したいって言ったら、広島じゃあ営業するしかないなあってんで某社への常駐契約が残っていたのに、ちょうど営業が一人転勤するってんで後釜に入ったんだけど、実際に PC系の開発は広島にはあんまり落ちてなくて、人売りの仕事ばっかだったのでインターネット関連の仕事は楽しかったなあ。

地元の企業がプロバイダを立ち上げるってんで、その関連の仕事も受注して、でも上記のようにインターネット関係の技術者いなかったから、自分で DNS やメール、Web サーバも立ち上げて。FreeBSD で、帯域制限かけられるルータとかも構築したなあ(笑)。5Mbps(Gじゃないよ(笑)M(メガ)ね)の専用線を、128Kbps ごとに帯域制限してセグメントごとに振り分けるルータ。

広島県庁にインターネット回線を引く、引かないの議論が始まった頃、県の職員数十人を前に「インターネットとは?パソコン通信との違い」って内容で講演したこともあったなあ(笑)。2万円ほど講演料もらったけど、会社には内緒で(笑)。

まあ、そんな中、DNS の zone ファイルの書き方も(今みたいにネットで検索すれば何でも出てくる時代じゃなかったんで)自腹で書籍買って自習したりして覚えたんだけど、いやあ、なんか、すげえ根本的なことを 30年近く誤解したままだったよ(笑)

zone ファイルというのは、そのドメインの各ホストの IP アドレスを記述したもので、例えば www.exsample.com が 10.11.1.1 で、mail.exsample.com が 10.11.1.2 なら、

www     IN      A       10.11.1.1
mail    IN      A       10.11.1.2

のように記述する。そしたら、あなたがブラウザに http://www.exsample.com/ とか打てば、インターネット上の DNS の仕組みで、この zone ファイルの内容をブラウザが取得し、「よーし、IP アドレス 10.11.1.1 のサーバに接続すればいいんだな」ということになるわけ。インターネット上のサーバへのアクセスは IP アドレスで行われるのでね。

で、世の中には「www や mail という名前のついていないサーバ」、いわゆるホスト名を持たないサーバというのも存在する。http://exsample.com/ みたいに、www とか付けずにアクセスするサイトとかあるでしょ?それ。

それを zone ファイルに書くとき、

        IN      A       10.11.1.3

とか書くんで、俺はずっとこれが「ホスト名なしの書き方」だと思ってたのよ(笑)
これ、実は「前の行に書いたホスト名と同じホスト名の設定のときにホスト名を省略する書き方」なのね(笑)
たまたま zone ファイルの先頭に書いたら「前の行にホスト名を書いた設定がないので、空のホスト名と判断されているだけ」なのね。

なもんで、

        IN      A       10.11.1.3
hoge    IN      A       10.11.1.4
        IN      TXT     "hogehoge"

とか書いて、俺はホスト名なしサーバのテキスト情報を書いたつもりが、実際には、

        IN      A       10.11.1.3
hoge    IN      A       10.11.1.4
hoge    IN      TXT     "hogehoge"

という意味になってて、いやぁ~、はまったわぁ・・・という話。
ま、今までは偶然こういう書き方をしたことはなくて問題は発生してなかったんだけどね、30年間(笑)

いや、今のネットで調べればなんでもわかる「ググれカス」の時代の技術者や、学校でちゃんと基礎から習ったか、あるいは先輩に教えてもらったような技術者にあれこれは言われたくないわ(笑)

<追記>
こういう間違いをしないように、ホスト名を省略したいときは、ホスト名なしのドメイン名を記述するようにすればいいね。exsample.com. IN A 10.11.1.3 のように(ドメイン名の最後のピリオドを忘れないように(笑))

いや、ずっとサーバ管理をやってる人には常識だったんだろうけど・・・

最近の bind って(ver 9.8以降)、マスターサーバからコピーしてきたスレーブサーバの zone ファイルって raw 形式っていう、いわゆるバイナリデータになってるんだね。

いつもの調子で、

# cat chroot/var/named/slaves/exsample.com.zone

なんてやったら、画面がぐちゃぐちゃに乱れてビビったわ(笑)

named-compilezone というコマンドで、text 形式に変換して表示できるということなのでやってみた。

# named-compilezone -f raw -F text -o - exsample.com chroot/var/named/slaves/exsample.com.zone
zone exsample.com/IN: loaded serial 2021091501
exsample.com.               28800 IN SOA  serv1.exsample.com. root.serv1.exsample.com. 2021091502 21600 3600 604800 28800
<略>
OK

おお、ちゃんと表示された。

ちなみに、コマンド引数の意味は、

named‐compilezone -F text -f raw -o (出力ファイル名) (ゾーン名) (ゾーンファイル名)

である。

出力ファイル名を '-' とだけしておけば、標準出力に出力される。
ゾーン名は、そのゾーンファイルに設定されているドメイン名ね。
ゾーンファイル名については、「ファイル名だけでパスは必要ない」と説明しているサイトがあるが嘘です。ちゃんとパスまで指定しないとファイルが見つからなくて、

dns_master_load: file format mismatch
zone exsample.com/IN: loading from master file exsample.com.zone failed: not implemented
zone exsample.com/IN: not loaded due to errors.

みたいなエラーになるぞ。「file format mismatch」って出てるけど、ちゃんとスレーブの zone ファイルが見つけられてないだけだ。「chroot/var/named/slaves/exsample.com.zone」みたいにフルパスで指定すれば問題なく実行される。

あと、named.conf の options に「masterfile‐format text;」を追加すれば、バイナリではなくテキストで出力されるらしんだけど、うちの環境ではエラーが出て bind が起動しなかった。

まあ、別にバイナリでも named-compilezone コマンドで確認できるからいいけど。

このアーカイブについて

このページには、2021年9月以降に書かれたブログ記事のうちインターネットなことカテゴリに属しているものが含まれています。

前のアーカイブはインターネットなこと: 2021年5月です。

次のアーカイブはインターネットなこと: 2021年10月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら