本資料はdnsmasqのネームサーバ機能の最小限の設定方法とDNSラウンドロビン機能の利用方法の手順を記しています。
dnsmasqの基本機能の一つは、/etc/hostsファイルの記述内容をDNSレコードとして、
問い合わせに応じるネームサーバです。
特別な記述方法はなく、通常の/etc/hostsがそのままAレコード(ホスト名に対応するIPv4アドレス)になります。
また、/etc/hostsにIPv6アドレスを記述すると、
それはAAAAレコード(ホスト名に対応するIPv6アドレス)になります。
/etc/hostsに以下のように記述しておくと、
192.168.20.1 ubuntu 2001:5c0:871b:0:20a:85ff:fe01:8628 ubuntu
以下のようなDNSレコードがdnsmasqにより生成されます。
% host -a ubuntu 192.168.10.1 Trying "ubuntu" Using domain server: Name: 192.168.10.1 Address: 192.168.10.1#53 Aliases: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27069 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;ubuntu. IN ANY ;; ANSWER SECTION: ubuntu. 0 IN A 192.168.20.1 ubuntu. 0 IN AAAA 2001:5c0:871b:0:20a:85ff:fe01:8628 Received 69 bytes from 192.168.10.1#53 in 82 ms %
この記事では、dnsmasqのネームサーバ機能で利用できるDNSレコードのうち、
もっとも一般的なAレコードとAAAAレコード、それに関連する最小限の設定と、
DNSラウンドロビン機能を利用する手順を説明します。
対象とするdnsmasqのバージョンは、Ubuntu12.04上のバージョン2.59です。
DNSレコードは実験的なものも含めると、いろいろな種類がありますが、
一般的によく知られているのは、A, AAAA, PTR, NS, MX, CNAME, TXT, SRVといったところだと思います。
dnsmasqでは、A, AAAA, PTR, MX, CNAME, TXT, SRV, NAPTRのレコードを利用することができます。
もっとも一般的な、ホスト名に対応するIPアドレスを返すレコードです。
いわゆる名前解決のためのレコードです。
上述の通り、/etc/hostsの記述がそのままレコードの設定になります。
以下の設定オプションがA, AAAAレコードの生成に関連します。
ドメイン名を指定します。
下記のexpand-hostsとの組み合わせで、
ホスト名とドメイン名を組み合わせたFQDNに対応します。
ドメイン名を付けたFQDNでの問い合わせにも応じます。
% host ubuntu.example.tld 192.168.10.1 Using domain server: Name: 192.168.10.1 Address: 192.168.10.1#53 Aliases:
ubuntu.example.tld has address 192.168.20.1 %
/etc/hostsファイルの他に、任意のファイルをホスト情報ファイルにすることができます。
ファイルの書式は/etc/hostsと同様です。
/etc/hostsには書きたくないが、dnsmasqのネームサーバに与えたいホスト情報を記述することができます。
以上の設定オプションを用いた記述例は以下のようになります。
(/etc/more_hostsは任意のホスト情報ファイルの名前です。)
expand-hosts domain=example.tld addn-hosts=/etc/more_hosts
DNSラウンドロビンは、あるホスト名のA, AAAAレコードの問い合わせに対して、
複数のIPアドレスを順番に返していくというネームサーバの機能です。
簡単な負荷分散などに利用します。
dnsmasqは、A,AAAAレコードのラウンドロビン機能のサポートしています。
利用方法は/etc/hostsに同じホスト名で別のアドレスの行を複数設定するだけです。
/etc/hostsファイル
192.168.20.1 ubuntu 192.168.20.2 ubuntu 192.168.20.3 ubuntu 192.168.20.4 ubuntu
/etc/hostsとしては正しくない上記の記述を避けたければ、
addn-hosts機能を使って、別ファイルに記述すればいいでしょう。
/etc/hostsファイル
192.168.20.1 ubuntu 2001:5c0:871b:0:20a:85ff:fe01:8628 ubuntu
/etc/more_hostsファイル
192.168.20.2 ubuntu 192.168.20.3 ubuntu 192.168.20.4 ubuntu 2001:5c0:871b:0:20d:bff:fe26:6c9a ubuntu
複数行を設定したレコードへの問い合わせ結果は以下になります。
% host ubuntu.example.tld 192.168.10.1 Using domain server: Name: 192.168.10.1 Address: 192.168.10.1#53 Aliases: ubuntu.example.tld has address 192.168.20.2 ubuntu.example.tld has address 192.168.20.4 ubuntu.example.tld has address 192.168.20.3 ubuntu.example.tld has address 192.168.20.1 ubuntu.example.tld has IPv6 address 2001:5c0:871b:0:20a:85ff:fe01:8628 ubuntu.example.tld has IPv6 address 2001:5c0:871b:0:20d:bff:fe26:6c9a %
このホストubutuに対してpingを実行すると、
以下のように複数のアドレスが順番にdnsmasqのネームサーバから返されているのが判ります。
% ping -c 1 ubuntu PING ubuntu (192.168.20.1) 56(84) bytes of data. 64 bytes from ubuntu (192.168.20.1): icmp_req=1 ttl=64 time=2.24 ms --- ubuntu ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 2.242/2.242/2.242/0.000 ms
% ping -c 1 ubuntu PING ubuntu (192.168.20.2) 56(84) bytes of data. 64 bytes from ubuntu (192.168.20.2): icmp_req=1 ttl=64 time=10.3 ms --- ubuntu ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 10.345/10.345/10.345/0.000 ms
% ping -c 1 ubuntu PING ubuntu (192.168.20.4) 56(84) bytes of data. 64 bytes from ubuntu (192.168.20.4): icmp_req=1 ttl=64 time=5.48 ms --- newmars ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 5.483/5.483/5.483/0.000 ms %
以上、dnsmasqのネームサーバ機能で、
A, AAAAレコードに関する最小限の設定と、
DNSラウンドロビン機能の利用方法についてでした。