本記事では、簡易的なDNSサーバを構築するための方法をまとめる。
DNSサーバ
ネットワーク上にある各ホストにはipアドレスが割り当てられているが、各クライアントは、それらのホスト(例えば、webサーバなど)を指定するときにipアドレスでなく、ホスト名を使うことが多い。実際に、ネットワークがある程度以上大きくなると、それだけホスト数が増えるからである、利用するホストのipアドレスを覚えることは現実的でない。そこで、DNSサーバは、クライアントが問い合わせてきたホスト名から、そのipアドレスを答える。
dnsmasq
DNSサーバというと、Bindが有名だが、設定するのが大変で、セキュリティにも十分注意しなければならない。小中規模の内部ネットワークで名前解決をする場合など、手っ取り早く簡易的なDNSサーバを立てる場合、dnsmasqがちょうど向いている。
以下のサイトに、比較的詳しい情報が載っているので、興味をもった人は見てみるとよいと思う。
- 第20回 いろいろなキャッシュ:dnsmasq, cache proxy @ Ubuntu Weekly Recipe
- dnsmasqでDNSおよびDHCPサービスを強化する @ Sourceforge.jp
- Dnsmasq構築方法
設定
centOS 5.3にインストールしてみた。
# yum install dnsmasq
設定ファイルは/etc/dnsmasq.confと/etc/hostsと/etc/resolv.confと(dhcpdを使っている場合は、そのサービスを提供しているサーバの)/etc/dhcpd.confである。設定方法は、構築するネットワークによってまちまちだが、(上の参照サイトにあるように)それほど多くの設定項目があるわけではない。私の場合は、内部ネットワークにはdhcpサーバを既に動かしていたことと、プロキシサーバを経由してインターネットに接続するようなネットワークだった。
まず、/etc/dnsmasq.confを読みながら、必要と思われる部分をコメントアウトしたり、パラメータを設定した。まず、"better netizen"であるために、次の2つをコメントアウト。
# Never forward plain names (without a dot or domain part) domain-needed # Never forward addresses in the non-routed address spaces. bogus-priv
内部ネットワークをWANをつなげるゲートウェイ(NIC2枚刺し)のLAN側のNIC(=eth1)が名前解決を受け付ける方なので、それを指定した。
# If you want dnsmasq to listen for DHCP and DNS requests only on # specified interfaces (and the loopback) give the name of the # interface (eg eth0) here. # Repeat the line for more than one interface. interface=eth1
DHCPはdhcpdが既にサービスを提供しているので、dnsmasqではdnsだけを提供することにする。したがって、ゲートウェイのNIC2枚(eth0およびeth1)はDHCPを使わないことを明示。
# If you want dnsmasq to provide only DNS service on an interface, # configure it as shown above, and then use the following line to # disable DHCP on it. no-dhcp-interface=eth0 no-dhcp-interface=eth1
DHCPサーバの設定ファイル/etc/dhcpd.confに次のように書き込み、DHCPでipが割り当てられる内部ネットワークの各クライアントにDNSサーバやドメイン名などの情報を伝える。
subnet 192.168.xxx.xxx netmask 255.255.255.xxx { option routers 192.168.xxx.xxx; <--- ゲートウェイのLAN側のIPアドレス option subnet-mask 255.255.255.0; #option nis-domain "domain.org"; option domain-name "xxx.yyy.jp"; option domain-name-servers 192.168.xxx.xxx; <---- DNSサーバのIPアドレス 以下、省略 }
/etc/hostsに、内部ネットワークおよびDMZにおいてあるwebサーバなどのホスト名(およびエイリアス)とipアドレスとの対応を記述した。
次に、/etc/resolv.confだが、名前解決のためのDNSサーバを登録しておく。自分自身でまずは名前解決を試みて、それができないならば、ルータに問い合わせるように設定した。
; generated by /sbin/dhclient-script search hoge.xxx.yyy.jp nameserver 192.168.xxx.xxx <--- LAN側のIPアドレス nameserver 192.168.yyy.yyy <--- ルータのIPアドレス
ここで、注意しなければならないのは、ネットワークを再起動すると、この設定ファイルが上書きされて、ルータのIPアドレスだけになってしまうことである。"; generated by /sbin/dhclient-script"と書かれているように、このマシーンがdhcpでルータからipアドレスを取得しているならば、自動的にルータのIPアドレスだけが名前解決のために登録されてしまう。これを避けるために、NICを立ち上げるときに参照される設定ファイル/etc/sysconfig/network-scripts/ifcfg-eth0でPEERDNS=noを設定しておく。
DEVICE=eth0 BOOTPROTO=dhcp <--- ルータからDHCPでIPを取得する場合 HWADDR=00:00:00:00:00:00 ONBOOT=yes IPV6INIT=no PEERDNS=no <---これを追加
/etc/resolv.confの上書き対策に関する情報は、centOSのresolv.confをDHCP使用時に上書きしないようにするを参照した。
基本的な設定を済ませた後に、サービスを起動し、登録する。次では、dnsmasqのstartだけを書いているが、上で設定を変更したサービスはすべてリロードしておくこと。
# /etc/rc.d/init.d/dnsmasq start # chkconfig dnsmasq on
0 コメント:
コメントを投稿