最終更新:2007/10/31

大前提
ルータの設定(IPフィルタ等)はすでに終わっている。
一通りDNS(BIND9)が設定できる。
FreeBSDのカーネルが作成できる。
設定を外部から確認するためにsshが使えるマシンか別回線を用意できる。

主な機材
master DNS server (FreeBSD 4系 P3-800MHz) 外部にハウジングして稼動中
slave DNS server (FreeBSD 7系 P3-866MHz) NAT配下のプライベートマシン
local DNS server (Windows 2000 server SP4 C2Q-2.4GHz) 元default gatewayのマシン
クライアントPC(Windows XP Pro SP2 C2Q-2.4GHz)SSH作業マシン
NTT-ME製 ISDNルータ MN128-SOHO SL10(フレッツISDN、固定IP1個契約)
BUFFALO製 無線BBルータ WHR-HP-G(フレッツADSL専用線、動的IP契約)
Corega製 ギガビットスイッチングハブ CG-SW08GTV2

割り当てIP
master DNS (203.141.151.2 lemon.akane.ws)
slave DNS (192.168.2.31 minerva.peach.ne.jp.private)
local DNS server (192.168.2.30 athena.peach.ne.jp.private)
クライアントPC (192.168.2.20 artemis.peach.ne.jp.private)
固定IP 203.141.134.114 MN128 (192.168.2.3 isdn-gw.peach.ne.jp.private)
動的グローバルIP WHR-HP-G (192.168.2.5 adsl-gw.peach.ne.jp.private)

LAN系はIP再割り当てを実行しました。
WAN系はWHR2-G54(192.168.2.4 ADSL電話共有)があったけど解約。近々Bフレッツ固定IPにする予定。

 +-- WHR-HP == ADSLモデム == ADSL専用回線 (これがデフォルトの経路)
 |+- WHR2-G54 == 未接続
 ||+ local DNS
 |||
GbE SW-HUB
 |||
 ||+ WinXP
 |+- slave DNS
 +- MN128 == ISDN回線(ネームサーバ用の経路)

LAN内は192.168.2.0/24を利用

ドメイン利用までの手順
予め、マスターサーバでbindの設定を行う。
稼動したマスターサーバを上位ドメインに登録する。
(今回はpeach.ne.jpなのでJPRSへのns1.peach.ne.jp登録)
スレーブサーバを設定して稼動させる。
固定IPの53番ポートをスレーブサーバ(192.168.2.31)に振り向ける。
(MN128でのNAT設定とIPフィルタ設定)
稼動したスレーブサーバを上位ドメインに登録する。
(今回はpeach.ne.jpなのでJPRSへのns2.peach.ne.jp登録)

ドメインの確認
マスター側から
lemon$ dig @ns1.peach.ne.jp peach.ne.jp soa
lemon$ dig @ns2.peach.ne.jp peach.ne.jp soa
スレーブ側から
minerva$ dig @ns1.peach.ne.jp peach.ne.jp axfr
minerva$ dig @ns1.peach.ne.jp peach.ne.jp soa
minerva$ dig @192.168.2.31 peach.ne.jp soa
WinXP(クライアント)から
C:\>nslookup -q=soa peach.ne.jp
補足
このページを作成した時点のBINDバージョンは9.4.1-P1です。
スレーブへのゾーン転送にはTCP53ポートが利用されるので設定を忘れずに。
sshの接続制限は /etc/hosts.allow で行える。
ipfwはデフォルトが 65535 deny ip from any to any で遮断されるので
リモートから操作する場合はsshのセッションが切られないように注意する。
うかつに ipfw flush や delete すると死にます(汗)

参考ページ:JPRS DNS に関連する技術情報

マスターサーバの主な設定

/etc/named/named.conf
acl my_nameservers {
        203.141.151.2;   /* lemon.akane.ws (ns1.peach.ne.jp) */
        203.141.134.114; /* minerva.peach.ne.jp (ns2.peach.ne.jp) */
};
options {
        .
        .
        .
        listen-on { 203.141.151.2; };
        allow-transfer { localhost; my_nameservers; };
        allow-query { any; };
        recursion yes;
        .
        .
        .
};
zone "peach.ne.jp" {
        type master;
        file "z/peach.ne.jp";
};

/etc/named/z/peach.ne.jp
$TTL    24H
@       IN      SOA     ns1.peach.ne.jp. root.peach.ne.jp.  (
                                200709298       ; Serial
                                60M     ; Refresh
                                30M     ; Retry
                                2W      ; Expire
                                30M )   ; Minimum
        IN      NS      ns1.peach.ne.jp.
        IN      NS      ns2.peach.ne.jp.
        IN      MX 10   mx.peach.ne.jp.
        IN      A       203.141.151.2

ns1             IN      A       203.141.151.2
ns2             IN      A       203.141.134.114

minerva         IN      A       203.141.134.114
mx              IN      A       203.141.151.2
www             IN      A       203.141.151.2

スレーブサーバの主な設定(SSH、DNS、NTP以外は許可していない)

kernel config に以下を追加してipfwの転送を有効にする
options         IPFIREWALL              #firewall
options         IPFIREWALL_VERBOSE      #enable logging to syslogd(8)
options         IPFIREWALL_VERBOSE_LIMIT=100    #limit verbosity
options         IPFIREWALL_FORWARD      #packet destination changes

/etc/rc.conf
defaultrouter="192.168.2.5"
hostname="minerva.peach.ne.jp.private"
ifconfig_nge0="inet 192.168.2.31  netmask 255.255.255.0"
sshd_enable="YES"
firewall_enable="YES"
firewall_type="/etc/ipfw.conf"

/etc/ipfw.conf
# allow loop back
add 100 allow ip from any to any via lo0
# deny IP fragments
add 110 deny ip from any to any frag
#
# DNS packet to 192.168.2.3
add 1000 allow udp from any to me 53 in
add 1010 allow udp from 203.141.151.2 53 to me in
add 1020 fwd 192.168.2.3 udp from me 53 to any out
add 1030 fwd 192.168.2.3 udp from me to 203.141.151.2 53 out
add 1100 allow tcp from any to me 53 in
add 1110 allow tcp from 203.141.151.2 53 to me in
add 1120 fwd 192.168.2.3 tcp from me 53 to any out
add 1130 fwd 192.168.2.3 tcp from me to 203.141.151.2 53 out
#
# allow TCP if succeeded
add 2000 allow tcp from any to any established
# allow ssh connections
add 2010 allow tcp from any to me 22 setup
# allow outgoing TCP connections
add 2020 allow tcp from me to any setup
# deny other packets
add 2999 deny tcp from any to any setup
#
# NTP packet
add 3000 allow udp from me to any 123 keep-state
#

/etc/hosts.allow
ALL : localhost 127.0.0.1 : allow
sshd: 127.0.0.1 192.168.2.0/255.255.255.0 : allow
snmpd: 127.0.0.1 192.168.2.31 : allow
sendmail : localhost : allow
sendmail : ALL : allow
ALL : ALL : deny

/var/named/etc/named.conf
acl my_nameservers {
        203.141.151.2;   /* lemon.akane.ws (ns1.peach.ne.jp) */
        203.141.134.114; /* minerva.peach.ne.jp (ns2.peach.ne.jp) */
};
options {
        .
        .
        .
        listen-on { 192.168.2.31; };
        forwarders {
                203.141.151.2;
        };
        allow-transfer { localhost; my_nameservers; };
        allow-query { any; };
        recursion yes;
        allow-recursion { localnets; localhost; my_nameservers; };
        allow-query-cache { localnets; localhost; my_nameservers; };
        .
        .
        .
};
zone "peach.ne.jp" {
        type slave;
        file "slave/peach.ne.jp";
        masters { 203.141.151.2; };
};

ping/tracerouteを許可する場合は以下を追加する
/etc/ipfw.conf
# allow icmp packets
add 120 allow icmp from any to any out icmptype 8
add 130 allow icmp from any to any in icmptype 0,3,11