Dnsmasqで簡易DNS+dhcpサーバを構築する
初めに
小規模向けDNSサーバであるDnsmasqを使ってDNS, dhcpサーバを構築してみます。
Dnsmasqとは
Dnsmasqとは,小規模ネットワーク(クライアント1,000台以下を想定)向けのDNSサーバー,DHCPサーバの機能を持つソフトウェアです。
DNSサーバ用のソフトウェアとしてbindもよく使われていますが,bindと比較すると軽量で設定が簡単という特徴があり,小規模な環境での用途に向いています。
公式: https://thekelleys.org.uk/dnsmasq/doc.html
環境
CentOS Stream 8
Dnsmasq 2.79
Ubuntu 20.04 LTS
構成
図のような構成を作り,以下の検証を行います。
- 内部LANのubuntuからDnsmasqへの非再帰問い合わせが成功する
- インターネット上のDNSサーバに対して再帰問い合わせが成功する
インストール
Dnsmasqをインストールします。CentOSなのでdnfコマンドで入れられます。
dnf -y install dnsmasq
設定
設定ファイルは/etc/dnsmasq.confです。
DNS, dhcpサーバとして機能させるため最低限の設定を行います。
#DNS設定
# 10行目, TCP53番ポートを使用。デフォルトでも53。
port=53
# 19行目, ドメイン名や.のないクエリを上位サーバーに問い合わせない
domain-needed
# 21行目, プライベートIPアドレスの逆引き要求を上位サーバーに問い合わせない
bogus-priv
# 135行目, ドメイン名のないクエリに自動的にドメイン(144行目, domain=で記述)を付与する
expand-hosts
# 144行目, 内部ドメインとしてlocalを使用
domain=local
#DHCP設定
# DNS, dhcpを提供するNICを指定
interface=ens224
# dhcpを提供しないNICを指定。自宅LAN側にはすでにdhcpサーバがあるのでそちらにはdhcpを提供しない。
no-dhcp-interface=ens192
# 163行目, dhcpでのアドレス割り当て範囲
dhcp-range=192.168.10.2,172.16.10.200,255.255.255.0,12h
# 334行目, デフォルトゲートウェイ
dhcp-option=option:router,192.168.10.1
dhcpによるipアドレスの割り当てが確認できました。
dhcp-option=optionでdnsのipアドレスを指定しなくても自動的に割り当てられるようです。
上位DNSの指定
上位DNSはデフォルトで/etc/resolve.confに記述します。今回の検証では自宅LAN上のルータを指定します。
/etc/dnsmasq.confの46行目,resolv-file=にファイル名を指定して,そのファイルに記述することもできます。
nameserver 192.168.0.2
Aレコードの登録
Aレコードはデフォルトで/etc/hostsに記述します。今回の検証では,macにmac.localというFQDNを使用することにします。
192.168.0.1 mac.local
ポート開放, NATの構築
DNSとdhcpで使うポートをfirewall-cmdで開放しておきます。
内部LAN用のNIC(ens224)をinternalのzoneに割り当て,dhcpとDNSを使用可能にします。
またfirewall-cmdでNATを構築し内部LANから自宅LANへの通信を可能にします。
# DNS, dhcpポートの開放
firewall-cmd --zone=internal --change-interface=ens224 --permanent
firewall-cmd --add-service=dhcp --zone=internal --permanent
firewall-cmd --add-service=dns --zone=internal --permanent
# NATの構築
firewall-cmd --zone=internal --add-masquerade –-permanent
firewall-cmd –-permanent --direct --add-rule ipv4 nat POSTROUTING 0 -o eth192 -j MASQUERADE
firewall-cmd –-permanent --direct --add-rule ipv4 filter FORWARD 0 -i eth224 -o eth192 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i ens192 -o ens224 -m state --state RELATED,ESTABLISHED -j ACCEPT
# 設定の反映
firewall-cmd --reload
起動/再起動/リロードなど
systemctlコマンドで起動/再起動等をすることができます。
/etc/hostsの内容を編集した後は,それを反映させるためにforce-reloadをする必要があります。
# 起動
systemctl start dnsmasq
# 再起動
systemctl restart dnsmasq
# 停止
systemctl stop dnsmasq
# ステータス確認
systemctl status dnsmasq
# 更新反映
systemctl force-reload dnsmasq
検証
非再帰問い合わせ
まず,内部LANのubuntuからDnsmasqへの非再帰問い合わせを試します。
digコマンドでmac.localが名前解決できるか確認します。
dig mac.local @192.168.10.1
OKです。
再帰問い合わせ
次に再帰問い合わせを行います。
digコマンドでwww.google.comが名前解決できるか確認します。
dig www.google.com @192.168.10.1
無事成功しました!
おわりに
DnsmasqでDNS,dhcpサーバーを構築することができました。
簡単に構築できるため個人での検証用などでは非常に便利だと思います。
参考リンクまとめ
Dnsmasq公式: https://thekelleys.org.uk/dnsmasq/doc.html
DNSの用語解説: https://www.isoroot.jp/blog/2905/
Discussion