BIND9 (DNS)

  • 最初はTTL短め、だんだん長く。
  • 一部、設定例向けに本当の設定と変えている。

最近の動向

  • bind 9.4 あたりから
    • named.conf では localhost と 0.0.127.in-addr.arpa は記述しなくてよい
      • /etc/named.rfc1912.zones に含まれている様です。
    • 各ドメインの定義ファイル (*.zoneとか*.revとか)は /var/named/chroot/var/named になっているっぽい
  • CentOS 5.5あたりでは
    • bind-chrootが入っているので
      • /etc/named.conf → /var/named/chroot/etc/named.conf
      • /var/named/masters/hogehoge.zone → /var/named/chroot/var/named/masters/hogehoge.zone
    • パーミッションが厳しいので
      • 面倒だったらSELinuxを切ってしまう
      • /var/named/chroot/etc/named.conf を chown root:named
      • /var/named/chroot/var/named を chmod g+w

インストール

  • CentOS系
    • yum install bind bind-utils bind-chroot
    • systemctl enable named-chroot
      • chrootするときはnamedではなく、named-chrootを起動すること。

設定

  • /etc/named.conf
    // Studio JamPack DNS : named.conf
    
    options {
    //    listen-on port 53 { 127.0.0.1; };
        directory "/var/named";
        pid-file "/var/run/named/named.pid";
    };
    
    // プライベート域
    view "private" {
        // この IP アドレス帯にこの view を適用する
        match-clients { 172.16.0.0/16; };
        // 再帰検索(他の管轄外ドメインまで検索)を有効
        recursion yes;
        // ルートDNSのキャッシュファイル
        zone "." {
            type hint;
            file "named.ca";
        };
        // localhostの逆引き
        zone "0.0.127.in-addr.arpa" {
            type master;
            file "localhost.rev";
        };
        // 都合上、勝手に .priv ドメインを定義
        zone "JamFunk.priv" {
            type master;
            // DynamicDNS を有効
            allow-update { key DDNS; };
            file "jamfunk.priv.zone";
        };
        // プライベート IP アドレスの逆引き
        zone "16.172.in-addr.arpa" {
            type master;
            allow-update { key DDNS; };
            file "16.172.rev";
        };
    };
    // セクション global
    view "global" {
        // この view は全ての IP 帯に適用する
        match-clients { any; };
        // 再帰検索(他の管轄外ドメインまで検索)を無効
        recursion no;
        // localhostの正引き
        zone "localhost" {
            type master;
            file "localhost.zone";
        };
        // 所持ドメイン
        zone "JamFunk.jp" {
            type master;
            file "jamfunk.jp.zone";
        };
        zone "JamFunk.net" {
            type master;
            file "jamfunk.net.zone";
        };
        // 本当はもっと持ってるけど長いだけなので省略
    };
  • 補足
    • //listen-on...
      • 53番ポートを受け付けるホスト。大公開なのでコメントアウトした。
    • recursion yes;
      • 自身の受け持つドメイン以外も問い合わせをする(キャッシュサーバ)
      • これを設定すると外部のユーザもキャッシュサーバとして使えるので、
        攻撃対象になりやすいらしい。
      • 攻撃されたことがないのでよく分からん。。。
    • file "...";
      • それぞれが directory つまり この設定では /var/named の中のファイルに対応する。
    • named.ca
      • トップドメインネームサーバのキャッシュ
      • このファイルの中に書いてる DNS サーバが .com .net .org .jp などの IP を知っている。
      • ごく希に変更されるらしい。
      • ftp://ftp.rs.internic.net/domain/named.root
      • とりあえず、Jan 29, 2004 に更新されたらしい(2006.11.30現在)
    • 16.172.in-addr.arpa
      • IP アドレスの一部 172.16. のこと。
      • IP アドレスの逆引きを設定するなら書く。
      • グローバルアドレスを逆引きするのは一般向けでは必要ない。
      • そもそも一般向けのプロバイダはグローバル IP の逆引き権限をくれない。
  • 正引きファイル
    • /var/named/jamfunk.jp.zone
      $TTL 86400
      @   IN      SOA     DNS1.JamFunk.jp.    support.jamfunk.net. (
          200612071   ; serial
          10800       ; refresh
          3600        ; retry
          604800      ; expire
          86400       ; ttl
      )
      
              IN  NS      DNS1.JamFunk.jp.
      
      @       IN  MX      10 qmail.JamFunk.jp.
      *       IN  MX      10 qmail.JamFunk.jp.
      
      @       IN  A       202.171.139.210
      DNS1    IN  A       202.171.139.210
      qmail   IN  A       202.171.139.210
      
      GW1     IN  A       202.171.139.209
      Hibaru  IN  A       202.171.139.210
      Katae   IN  A       202.171.139.211
      Shingu  IN  A       202.171.139.212
      Kaizuka IN  A       202.171.139.213
      GW2     IN  A       202.171.139.214
  • 補足
    • $TTL
      • この設定の有効期限秒数。
      • 大抵、この秒数が切れるまで世界中にキャッシュされる。
      • 最初はおっかなびっくり 120 ぐらいで、
        設定が確認できたら 86400(1日)ぐらいにしてやる。
        勇気があるなら 604800(1週間)とか?
      • 当然、短くすれば変更したときに気づいてもらいやすいが、
        短くしすぎると世界中からアタックのごとく問い合わせが来るので注意。
    • IN SOA
      • マスタ DNS の FQDN と管理者のメアド(@を.で書いて最後にも.)
    • serialとかの数字
      • このファイルを更新するごとに数値を大きくしてやること。
        でないと slave DNS を設けるとき、更新に気づいてくれない。
      • refresh=更新間隔 retry=転送再試行時間 expire=レコード有効時間 TTL=キャッシュ有効時間
    • IN NS
      • 管轄ネームサーバ
      • サブドメインを別のネームサーバに任せるときは
        sub IN NS dns.sub.jamfunk.jp.
        も書いておく。
    • IN MX
      • メールサーバ(10は優先度、小さい方が優先)
    • IN A
      • ここでIPを書いてやる
      • * はワイルドカード つまり anything.jamfunk.net とか全てこの IP を返す。
      • @ はドメインそのもの。つまり jamfunk.jp 自体がこの IP を返す。
      • IN CNAME Hibaru にするとHibaru の別名として設定できる。
        Hibaru IN A を書いておき、www IN CNAME と書くとか。
        注意 : MX なんかを CNAME すると問い合わせ回数が増えて非効率的でナンセンス。
  • 逆引き
    • /var/named/16.172.rev
      $TTL 86400
      @   IN      SOA     DNS1.JamFunk.jp.    support.jamfunk.net. (
          200612071   ; serial
          10800       ; refresh
          3600        ; retry
          604800      ; expire
          86400       ; ttl
      )
      
              IN  NS      DNS1.JamFunk.priv.
              IN  PTR     JamFunk.priv.
              IN  A       255.255.0.0
      
      1.0     IN  PTR     Hibaru.JamFunk.priv.
      2.0     IN  PTR     Katae.JamFunk.priv.
      255.0   IN  PTR     GW2.JamFunk.priv.
      16.0    IN  PTR     USBsvr.JamFunk.priv.
      
      8.0     IN  PTR     BR-JamFunk.JamFunk.priv.
      9.0     IN  PTR     AP-JamFunk.JamFunk.priv.
      10.0    IN  PTR     BR-Naginata.JamFunk.priv.
      
      1.1     IN  PTR     Blair.JamFunk.priv.
      2.1     IN  PTR     BRAVIA.JamFunk.priv.
      3.1     IN  PTR     Dempa.JamFunk.priv.
  • IN PTR JamFunk.priv.
    • このファイルで扱うドメイン(なんだかよく分からないけど設定したw)
    • 後の PTR でドメイン省略するとこれになるのかな?
  • IN A 255.255.0.0
    • ネットマスク
    • 余談 プロバイダから逆引き権限が与えられたとき(OCNエコノミーとか)、
      202.171.139.208/29 だったら named.conf での表記は 208.139.171.202.in-addr.arpa になる。
  • 1.0 IN PTR Hibaru.JamFunk.priv.
    • もちろん 1.0 は逆順表記で、0.1 すなわち 172.16.0.1 である。
    • 192.168.0. のように、1セグメントだけなら 1 IN PTR と書く。

テスト(設定的な)

  • named.confをテストするにはnamed-checkconf
    named-checkconf -t /var/named/chroot /etc/named.conf
    • chrootしてるなら-tが必要らしい。
  • ゾーンファイルをチェックするにはnamed-checkzone
    named-checkzone "example.com" example.com.zone

テスト(名前解決的な)

  • nslookup は腐ってるとか言われていて癪なので dig で。
  • dig @(DNS-server) (target) (type)
    • 127.0.0.1(自身)に対して jamfunk.net. の SOA を引く
      • dig @127.0.0.1 jamfunk.net. soa
        ;; QUESTION SECTION:
        ;jamfunk.net.                   IN      SOA
        
        ;; ANSWER SECTION:
        jamfunk.net.            86400   IN      SOA     Hibaru.JamFunk.net. support.jamf
        unk.net. 200611131 3600 900 604800 86400
        
        ;; AUTHORITY SECTION:
        jamfunk.net.            86400   IN      NS      Hibaru.JamFunk.net.
      • 結果は一部ばっさり省略
      • ANSWER で正しい項目が出れば良し。
    • NS レコード
      • dig @127.0.0.1 jamfunk.net. ns
    • A レコード
      • dig @127.0.0.1 jamfunk.net. a
    • トップドメインから全部引いてみる(失笑)
      • dig @a.root-servers.net. net. ns
          ↑named.caに書いてある
      • dig @A.GTLD-SERVERS.net. jamfunk.net. ns
          ↑a.root-servers.net から .net を引いたときに ANSWER に出てきた
      • dig @Hibaru.JamFunk.net jamfunk.net. a
        ようやく jamfunk.net 持ってるサーバに来たので A レコードを
    • 逆引き
      • dig @Hibaru.JamFunk.net 210.139.171.202.in-addr.arpa. ptr

参考文献

次にやりたいこと

  • OCNエコノミーとか使ってみてぇ。
    • 逆引きをじゃんじゃん設定してやる。