2017/05/22(Mon)BINDで独自ドメインをLAN内から解決できるようにした。

はてブ数 2017/05/22 2:17 つーさ
成功メモ。
今日は自宅サーバにBINDを入れて、家のLAN内からでも http://tu3.jp/ でサイトを開けるようにしていた。
tu3.jpのネームサーバはバリュードメインのを使っているので、普通にDNS引くと、
ルータのWAN側IPに解決されてしまい、LAN内からはつながらなかった。

デスクトップPCにはhosts書いて対応してたけど、LANとLTEを行き来するノーパソやらスマホではこの方法は不便だ。
LAN内で通用するホスト名での通信ではVirtualHostが死んでしまう。

つい最近、デスクトップPCのドライブ構成を見直してOS再インストールしたのだけどhostsはまだ書いてなかったの気づいた。
ので、いつもどおり書くか、いやまてよ。

せっかくの機会だから、DNSでも立ててみるかー。

やったことメモ

BINDのインストール

ipkg install bind
ipkgはもはやメンテされてないリポジトリと聞くけど、
今回はLAN内で使いたいだけなのでバージョンは気にしないことにする。

named.conf と tu3.jp.zone を書く。

使っているルータにはドメインごとのDNSサーバを設定できる機能があるようなので、
それを試してみることにして、まずは権威サーバを準備してみよう。
リゾルバとして機能させないのであれば、localhostやら逆引きやらに関するゾーン設定は不要らしい。

query failed (SERVFAIL) 祭り

C:\\Users\\tu-sa>nslookup tu3.jp tnas
サーバー:  UnKnown
Address:  192.168.0.251

*** UnKnown が tu3.jp を見つけられません: Server failed
設定ファイルの書き方が間違ってたんだけど、設定ファイルの書き方が間違っててもそのまま起動はしちゃう。
named -d 1 -c named.conf
-d オプションを付けて起動するとnamed.runというファイルにログを出してくれる。
起動時にエラーログが出てくれてるんだけど、1つのゾーンがおかしいくらいでは普通に起動してしまうので、
エラーログが出ていることに気づくまでが手探りでハマっていた。

named.conf.zoneの検証であれば、-d 1 で十分そう。おかしな記述のある行番号まで教えてくれる。
21-May-2017 03:52:51.718 zone tu3.jp/IN: starting load
21-May-2017 03:52:51.718 zone tu3.jp/IN: loading from master file tu3.jp failed: file not found
21-May-2017 03:47:59.982 dns_master_load: tu3.jp.zone:15: tu3.jp: CNAME and other data
21-May-2017 03:48:47.168 dns_rdata_fromtext: tu3.jp.zone:23: near 'SPMX.L.GOOGLE.COM.': not a valid number
あれこれいじって、
21-May-2017 03:53:12.161 zone tu3.jp/IN: starting load
21-May-2017 03:53:12.164 zone tu3.jp/IN: journal rollforward completed successfully: no journal
21-May-2017 03:53:12.164 zone tu3.jp/IN: loaded
21-May-2017 03:53:12.165 zone tu3.jp/IN: loaded serial 2017052103
なんか読めたっぽい。
C:\\Users\\tu-sa>nslookup tu3.jp tnas
サーバー:  UnKnown
Address:  192.168.0.251

名前:    tu3.jp
Address:  192.168.0.251
返事がもらえるようになったっぽい。

ルータ側の設定。

我が家のネットワークではNEC*1のAterm WR9500Nを採用している。

このルータには、DNSルーティング設定という機能があって、ドメインごとにDNS解決先のサーバを指定する機能がある。
本来はインターネットとフレッツスクエアとを両方つないだ時とか用なんだろうけど、今回はこれを使ってみる。
宛先ドメイン名: tu3.jp
ゲートウェイ: なし
プライマリDNS: 192.168.0.251
セカンダリDNS: なし
として保存してみたところ、ルータのDNSへの問い合わせで、
無事にローカルのIPアドレスが返ってくるようになった。
C:\\Users\\tu-sa>nslookup piyopyoro.tu3.jp
サーバー:  aterm.me
Address:  192.168.0.1

名前:    tu3.jp
Address:  192.168.0.251
Aliases:  piyopyoro.tu3.jp
これでダメだと、自宅サーバ内にDNSリゾルバとDHCPサーバも立ててあげる必要があったかもしれないが、それはしなくて済んだようだ。

めでたしめでたし。

*1 : NECのルータって基本性能いいよねっていうイメージがあって決めた

ファイル

オーソリティネームサーバを立てるだけならこんなもんでいいようだ。

named.conf

options {
    directory "/opt/etc/named";
    notify no;
    recursion no;
};

zone "tu3.jp" in {
    type master;
    file "tu3.jp.zone";
};

tu3.jp.zone

CNAMEがとてもテキトー。
$ORIGIN tu3.jp.
$TTL    120 ; sec

@   IN SOA tnas nsroot (
        2017052103 ; Serial
        1H ; Refresh
        5M ; Retry
        1W ; Expire
        2M ; Minimum
    )
    IN A     192.168.0.251
    IN NS    @
    IN MX 1 ASPMX.L.GOOGLE.COM.
    IN MX 5 ALT1.ASPMX.L.GOOGLE.COM.
    IN MX 5 ALT2.ASPMX.L.GOOGLE.COM.

*   IN CNAME @