IPQ サブネット買いとその設定

自宅サーバを設置するひとの心強い味方,IPQIPアドレスをサブネット買いしたときの設定とか.

IPQ とは

比較的廉価に固定グローバルIPを提供しているプロバイダ(ISP)で,16IP契約(いわゆるサブネット買い)もできるという,自宅サーバ野郎にオススメのプロバイダ.その実態は,上り方向だけ早くて下りが遅かったりするアンバランスなISPだったりするのですが….
IPQ のすばらしいところは,かなり DIY に特化しているところでして,通常 ISP が許していない「DNS逆引き」もサポートされていることでありましょう.昨今,DNS逆引きに成功しないと SMTP のメールリレーを拒否られるというご時世ですから,これができるととてもよい.なによりとても楽しい.
本日は,Linux の bind9 で IPQ を利用するときの正引き,逆引き設定のメモを記述します.この設定で2年以上やってるけど,いまのところ困ったことはありません.

前提条件

Vine Linux 5.2 での設定例です.といっても,べつにどの OS でも bind9 ならだいたい一緒です.ディレクトリとか bind9 を動作させるときの権限管理などに差異はありますけどね.Ubuntu とかは設定の種類毎に複数の設定ファイルに分けて記述したりするので気をつけてね.

なお,正引き方向については,すでにドメインを取得&レジストラに設定済みという前提で話を進めます.私は ムームードメインを利用しています.
今回は,屋内ネットワークからと外部ネットワークからの正引き・逆引き問い合わせに矛盾なく回答し,しかも内部ネットワークからは DNS キャッシュサーバとしても動作するように bind を設定します.
ちなみに,面倒なので,Dynamic DNS とかは使いません.

ネットワーク

IPQ の 16IP つまり /28 サブネット買いです.下記のとおりとしましょう.

設定

IPQ の逆引き設定をしておく

まあこんなかんじでよろしくです.これは IPQ のサイトで登録してきます.

DNS情報更新 xxx.yyy.zzz.144 NS ns1.hoge.org.
DNS情報更新(Secondary) xxx.yyy.zzz.144 NS ns2.hoge.org.
DNS情報更新 xxx.yyy.zzz.145 CNAME 145.144.zzz.yyy.xxx.in-addr.arpa.
DNS情報更新 xxx.yyy.zzz.146 CNAME 146.144.zzz.yyy.xxx.in-addr.arpa.
DNS情報更新 xxx.yyy.zzz.147 CNAME 147.144.zzz.yyy.xxx.in-addr.arpa.
DNS情報更新 xxx.yyy.zzz.148 CNAME 148.144.zzz.yyy.xxx.in-addr.arpa.
DNS情報更新 xxx.yyy.zzz.149 CNAME 149.144.zzz.yyy.xxx.in-addr.arpa.
DNS情報更新 xxx.yyy.zzz.150 CNAME 150.144.zzz.yyy.xxx.in-addr.arpa.
DNS情報更新 xxx.yyy.zzz.151 CNAME 151.144.zzz.yyy.xxx.in-addr.arpa.
DNS情報更新 xxx.yyy.zzz.152 CNAME 152.144.zzz.yyy.xxx.in-addr.arpa.
DNS情報更新 xxx.yyy.zzz.153 CNAME 153.144.zzz.yyy.xxx.in-addr.arpa.
DNS情報更新 xxx.yyy.zzz.154 CNAME 154.144.zzz.yyy.xxx.in-addr.arpa.
DNS情報更新 xxx.yyy.zzz.155 CNAME 155.144.zzz.yyy.xxx.in-addr.arpa.
DNS情報更新 xxx.yyy.zzz.156 CNAME 156.144.zzz.yyy.xxx.in-addr.arpa.
DNS情報更新 xxx.yyy.zzz.157 CNAME 157.144.zzz.yyy.xxx.in-addr.arpa.
DNS情報更新 xxx.yyy.zzz.158 CNAME 158.144.zzz.yyy.xxx.in-addr.arpa.
DNS情報更新 xxx.yyy.zzz.159 CNAME 159.144.zzz.yyy.xxx.in-addr.arpa.
設定が完了しました。

ところで,「CNAME 145.144.zzz.yyy.xxx.in-addr.arpa.」としていますが,ここの144は別に任意の文字でおっけーだと思います.ただし,/etc/named.conf の逆引き zone ファイル指定のときの識別子と一致させなくてはいけませんので注意してください.
例えば,xxx.yyy.zzz.145 の 逆引きでは,IPQの上位DNSサーバに一度リクエストが飛び,IPQのDNSサーバではこの設定を見て,「それは ns1.hoge.org. に設定を委譲しちゃったので,CNAME 145.144.zzz.yyy.xxx.in-addr.arpa. を持って ns1.hoge.org. に聞いてね」という感じの返答をしているわけです.ですので,ここで持っている「145.144.zzz.yyy.xxx.in-addr.arpa.」の144がここの設定と bind の設定で異なると変な動きをしかねません.
このへんは下記が詳しい.
キャッシュ/逆引きDNSの構築と運用 (2/2):実用 BIND 9で作るDNSサーバ(4) - @IT

named (bind9)をインストール

インストールしてください. apt-get でもなんでもいいので,いれてください.

/etc/named.conf

bind9 が一番最初に読み込む設定ファイル.
内部向けと外向けに分けているので,設定ミスしてもわりとちゃんと動く(笑)

// 内部ネットワーク定義
acl internal-acl {
    xxx.yyy.zzz.144/28;
    127/8;
};

// bind の zone ファイルの場所とか pid の定義とか.
options {
        directory "/var/named";
        pid-file "/var/run/named/named.pid";
};

// 屋内ネットワークからのリクエストに対する反応
// DNS キャッシュサーバとしても動作するようにする
view "internal-view" {
  match-clients { internal-acl; };
  allow-query { internal-acl; };
  allow-transfer { internal-acl; };
  // 他のDNSサーバに質問にいく.キャッシュサーバとしての動作の設定.
  recursion yes;
  zone "." IN {
    type hint;
    file "named.ca";
  };
  zone "localhost" IN {
    type master;
    file "localhost.zone";
  };
  zone "0.0.127.in-addr.arpa" IN {
    type master;
    file "named.local";
  };
  // hoge.org に関する正引きリクエストは hoge.org.zone ファイルを見る
  zone "hoge.org" {
    type master;
    file "hoge.org.zone";
  };
  // xxx.yyy.zzz.144 に関する正引きリクエストは hoge.org.zone ファイルを見る
  // 144の部分は IPQ の逆引き設定と一致させる (ここは内部向けなんであんまり関係ないですが)
  zone "144.zzz.yyy.xxx.in-addr.arpa" {
    type master;
    file "hoge.org.rev.zone";
  };

};

// 外ネットワークからのリクエストに対する反応
view "external-zone" {
  match-clients { any; };
  allow-query { any; };
  recursion no;
  allow-transfer { 127.0.0.1; xxx.yyy.zzz.157; };
  zone "hoge.org" {
    type master;
    file "hoge.org.zone";
  };
  // xxx.yyy.zzz.144 に関する正引きリクエストは hoge.org.zone ファイルを見る
  // 144の部分は IPQ の逆引き設定と一致させる
  zone "144.zzz.yyy.xxx.in-addr.arpa" {
    type master;
    file "hoge.org.rev.zone";
  };
};
/var/named/hoge.org.zone

正引き設定. /var/named/ の部分は前述の options で決まります.

$TTL 86400
@       IN      SOA     ns1.hoge.org. admin@hoge.org. (
                2012082600 ; serial
                3600       ; refresh 1hr
                900        ; retry 15min
                604800     ; expire 1w
                86400      ; min 24hr
)

        IN      NS      ns1.hoge.org.
        IN      NS      ns2.hoge.org.
        IN      MX      10 mail.hoge.org.
        IN      MX      20 obs.hoge.org.

hoge.org.      IN      A       xxx.yyy.zzz.146
serv    IN      A       xxx.yyy.zzz.146
ns1     IN      A       xxx.yyy.zzz.146
router  IN      A       xxx.yyy.zzz.145
www     IN      CNAME   serv
obs     IN      A       xxx.yyy.zzz.157

省略していますが,145 〜 158 まで定義できます.

/var/named/hoge.org.rev.zone
$TTL 86400
@       IN      SOA     ns1.hoge.org. admin@hoge.org. (
                2012082600 ; serial
                3600       ; refresh 1hr
                900        ; retry 15min
                604800     ; expire 1w
                86400      ; min 24hr
)

        IN      PTR     hoge.org.
        IN      A       255.255.255.240

        IN      NS      ns1.hoge.org.
        IN      NS      ns2.hoge.org.

145     IN      PTR     router.hoge.org.
146     IN      PTR     serv.hoge.org.
157     IN      PTR     obs.hoge.org.

省略していますが,145 〜 158 まで定義できます.

/var/named/named.local
$TTL    86400
@       IN      SOA     localhost. root.localhost.  (
                                      1997022700 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
              IN      NS      localhost.

1       IN      PTR     localhost.
/var/named/localhost.zone
$TTL    86400
$ORIGIN localhost.
@                       1D IN SOA       @ root (
                                        42              ; serial (d. adams)
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum

                        1D IN NS        @
                        1D IN A         127.0.0.1
/var/named/named.ca

デフォルトのものをつかってください.

これで

たぶんうごきます.
まちがってたらごめんなさい.