Linuxユーザの立場から、役立つ情報や困ったときの解決方法を分かりやすく、かつ簡潔に記事にまとめています。主に、Ubuntu 8.04(→9.04)やCentOS 5.2(→5.3)で確認したことですが、他のディストリビューションでも応用できると思います。内容は(1)設定ファイルの書き方(2)役立つソフトウェア紹介やインストール方法(3)便利なコマンドの使い方や活用例(4)困ったときの解決方法です。このページの末尾にキーワード別で記事を分類してあります。また、真上の「ブログ検索」フォームからブログ内の記事を検索できます。

2009年6月20日土曜日

dnsmasqで簡易DNSサーバ このエントリーを含むはてなブックマーク

本記事では、簡易的なDNSサーバを構築するための方法をまとめる。

DNSサーバ

ネットワーク上にある各ホストにはipアドレスが割り当てられているが、各クライアントは、それらのホスト(例えば、webサーバなど)を指定するときにipアドレスでなく、ホスト名を使うことが多い。実際に、ネットワークがある程度以上大きくなると、それだけホスト数が増えるからである、利用するホストのipアドレスを覚えることは現実的でない。そこで、DNSサーバは、クライアントが問い合わせてきたホスト名から、そのipアドレスを答える。

dnsmasq

DNSサーバというと、Bindが有名だが、設定するのが大変で、セキュリティにも十分注意しなければならない。小中規模の内部ネットワークで名前解決をする場合など、手っ取り早く簡易的なDNSサーバを立てる場合、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 コメント:

キーワード

キーワード別に記事を分類してあります。クリックすると各キーワードに該当する記事たちが表示されます。

筆者について

自分の写真
趣味はコンピュータ、音楽、写真などです。