(無償) logo
世界中で使われるISO標準オフィスソフト(MSオフィス互換)

★LibreOfficeの導入事例★
詳細について

2017年4月3日月曜日

【Linux CentOS 6.7 64bit】dnsmasqでドメイン名に応じて問い合わせ先を自動切替することなど【dnsmasq】

<追記>


CentOS 6.7 64bit では、ifcfg-eth0ファイルのDNS1やDNS2項目に、
それぞれ名前解決サーバのIPアドレスを指定することができる。
通常、リゾルバは、いずれかの名前解決サーバに問い合わせを行う。

ローカルドメインで使用しているFQDNを解決するために専用の名前解決サーバを利用しなければならない場合、
DNS1にその専用サーバを指定することになる。
しかしそこで失敗してしまうとDNS2に指定されたサーバで名前解決が試みられ、非対応のために失敗してしまう。
このために、マシン上でのサービスがうまく動作しないことがあった。

そこで、特定のドメイン(ローカルドメイン)については、必ず指定した名前解決サーバに問い合わせを行うように設定したい
これには、dnsmasqという簡易な名前解決サーバを適切な設定でローカルマシン上で動作させ、
ifcfg-eth0ファイルのDNS1項目に、ループバックアドレスを指定すれば良かった。


以下では、ローカルマシン上で動作させるdnsmasqの名前解決サーバとしての基本的な設定例を挙げている。
(dnsmasqは、DHCPサーバ機能も持っているがここでは取り扱わない。)




■dnsmasqパッケージをインストールした

(CentOS 6.7 には最初から導入されていたかもしれない)
# yum install dnsmasq


■設定ファイルを編集した

空のファイルに記述したいのでオリジナル設定ファイルは名前を変えた。
# mv /etc/dnsmasq.conf /etc/dnsmasq.conf.org

空のファイルに次のように記述した
# vim /etc/resolv.dnsmasq.conf
domain-needed
bogus-priv
no-resolv
no-poll
server=/local.example.co.jp/192.168.0.5
server=/co.jp/com/209.244.0.3
#server=9.9.9.9
server=8.8.8.8
server=8.8.4.4
#server=208.67.220.220
local=/localdomain/
address=/pc01.example.com/192.168.123.45
no-hosts
addn-hosts=/etc/dnsmasq_static_hosts.conf
expand-hosts


★上記の設定項目の意味について★

◇DNSMASQの独立を保つ設定◇

・no-resolv
resolv.conf に定義されているDNSサーバを無視する。
・no-poll
resolv.conf が変更されたとしても無視する。(†3)
・no-hosts
/etc/hosts ファイルを無視する。


◇名前解決のための独自ソースの指定と、ソース選定条件の設定◇

<デフォルトで使用する名前解決サーバを指定する> 
・server=8.8.8.8
・server=8.8.4.4
・server=208.67.220.220
通常の名前解決は、8.8.8.8等の指定した「名前解決サーバ」に依頼する。

<ドメインを条件にして、使用する名前解決サーバを指定する>
・server=/local.example.co.jp/192.168.0.254
local.example.co.jpドメインについての名前解決は、192.168.0.254「名前解決サーバ」に依頼する。(†2)
・server=/co.jp/com/209.244.0.3
co.jpと、com ドメインについての名前解決は、209.244.0.3「名前解決サーバ」に依頼する。(†2)

<静的レコードファイルを参照させるローカルドメインを指定する> 
・local=/localdomain/
ローカルドメインとして、localdomain を指定している。
ローカルドメインに関する名前解決は、/etc/host か、addn-hosts項目で指定した静的ファイルを参照する。
・addn-hosts=/etc/dnsmasq_static_hosts.conf
静的レコードを記述したファイルを指定する。
このファイルは、/etc/hosts のように記述できる。

<例外を設定する>
・address=/pc01.example.com/192.168.123.45
条件(pc01.example.com)に一致した問い合わせの場合、指定したアドレスを優先して答える。


◇問い合わせ条件について◇

・domain-needed
問い合わされたものがドメインパートを持たない”短い名前”の場合、上流の「名前解決サーバ」に問い合わせない。
(/etc/hosts にもなければ、not found を返す。)
・bogus-priv
プライベートIPv4アドレス(/etc/hosts、DHCPリリースファイル にもないもの)の逆引きの場合、上流の「名前解決サーバ」に問い合わせない。not found を返す。


■サービスを起動した

〇自動起動をオンにした。

# chkconfig dnsmasq on


〇サービスを開始した。

# service dnsmasq start
dnsdomainname: Host name lookup failure
Starting dnsmasq:                                          [  OK  ]

○ログは次のファイルで確認できた。

# grep dnsmasq /var/log/messages



■動作テストを行った

〇nslookupコマンドなどが使えるように必要なパッケージを導入した。

# yum install bind-utils


〇動作中のdnsmasqサービスに対して名前解決を要求した。

dnsmasqが動作しているマシンと同じマシンを使用しているため、ループバックアドレスを指定した。

# nslookup google.com 127.0.0.1
Server:         127.0.0.1
Address:        127.0.0.1#53
Non-authoritative answer:
Name:   google.com
Address: 216.xxx.xxx.xxx
他のマシンから利用する場合には、dnsmasqで許可する設定追加する必要がある。



■このdnsmasqを利用するようにリゾルバの設定を行った

〇ネットワークインターフェイスの設定ファイルに、DNS1として127.0.0.1を追加した。

dnsmasqが動作するマシンと同じマシンについて設定を行っている。

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=******
TYPE=Ethernet
UUID=******
ONBOOT=yes
NM_CONTROLLED=yes
#BOOTPROTO=dhcp
IPADDR=******
NETMASK=******
GATEWAY=******
DNS1=127.0.0.1

〇ネットワークサービスを再起動した。

リモートでアクセスしている場合は、切断されるので注意すること!

# service network restart


〇resolv.confファイルの中身を見てみた。
resolve.confファイルは、ifcfgファイルの設定変更によって自動的に書き替わった。

# cat /etc/resolv.conf
nameserver 127.0.0.1

〇テスト

名前解決できた。

# ping google.com



<参考>
1、HOWTO: Setup dnsmasq as DNS DHCP
< https://blogging.dragon.org.uk/howto-setup-dnsmasq-as-dns-dhcp/ > 2017年4月2日

2、How to enforce dnsmasq to use dns for some hosts?
< http://serverfault.com/questions/420689/how-to-enforce-dnsmasq-to-use-dns-for-some-hosts > 2017年4月2日

3、Dnsmasq
< https://wiki.gentoo.org/wiki/Dnsmasq > 2017年4月2日

4、DNS resolver 9.9.9.9 will check requests against IBM threat database
< https://www.theregister.co.uk/2017/11/20/quad9_secure_private_dns_resolver/ > 2018年4月27日