自宅に検証環境を作っていると、中には FQDN を必要とする製品もあって DNS を手元で立てたくなることがあります。
今回はドメイン名を sugimura.home として解決できるようにしてみました。 当初は sugimura.local で作っていたのですが、.local ドメインは使用しないほうがいいようです。
用意したVM
DNS サーバを動かすために VM を一つ用意しました。
- RHEL 8.3
- IP アドレス: 192.168.0.93
これに dnsmasq を入れて設定していきます。
dnsmasq のインストール
dnsmasq は RHEL 8 のリポジトリ (rhel-8-for-x86_64-appstream-rpms) から普通にインストールできます。
# dnf install dnsmasq
# systemctl enable dnsmasq --now
Created symlink /etc/systemd/system/multi-user.target.wants/dnsmasq.service → /usr/lib/systemd/system/dnsmasq.service.
# systemctl status dnsmasq
● dnsmasq.service - DNS caching server.
Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2021-03-10 15:19:48 JST; 19s ago
Main PID: 5606 (dnsmasq)
Tasks: 1 (limit: 23544)
Memory: 1.8M
CGroup: /system.slice/dnsmasq.service
└─5606 /usr/sbin/dnsmasq -k
3月 10 15:19:48 localhost.localdomain systemd[1]: Started DNS caching server..
3月 10 15:19:48 localhost.localdomain dnsmasq[5606]: started, version 2.79 cachesize 150
3月 10 15:19:48 localhost.localdomain dnsmasq[5606]: compile time options: IPv6 GNU-getopt DBus no-i18n IDN2 DHCP DHCPv6 no-Lua TFTP no-conntrack ipset auth DNSSEC >
3月 10 15:19:48 localhost.localdomain dnsmasq[5606]: reading /etc/resolv.conf
3月 10 15:19:48 localhost.localdomain dnsmasq[5606]: using nameserver 192.168.0.1#53
3月 10 15:19:48 localhost.localdomain dnsmasq[5606]: using nameserver XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX#53
3月 10 15:19:48 localhost.localdomain dnsmasq[5606]: read /etc/hosts - 2 addresses
dnsmasq の設定
/etc/dnsmasq.d/ 以下にファイルを置いて設定します。
- ドメインは sugimura.home
- 上位DNSは 192.168.0.1
- *.api.sugimura.home のワイルドカードも解決してみる
ということでこのように設定してみました。
# cat sugimura.home.conf
local=/sugimura.home/
domain=sugimura.home
server=192.168.0.1
expand-hosts
address=/api.sugimura.home/192.168.0.222
設定のチェックをします。
# dnsmasq --test
dnsmasq: syntax check OK.
問題なければ反映します。
# systemctl restart dnsmasq
ログも一応確認します。
# journalctl -e -u dnsmasq
問い合わせを受けられるように、firewall も開けておきます。
# firewall-cmd --add-service=dns --permanent
success
/etc/resolv.conf の書き込み保護を念のためしておきます。これはやらなくても大丈夫です。
# lsattr /etc/resolv.conf
-------------------- /etc/resolv.conf
# chattr +i /etc/resolv.conf
# lsattr /etc/resolv.conf
----i--------------- /etc/resolv.conf
chattr +i を設定すると、owner であっても書き込みができなくなります。
# touch /etc/resolv.conf
touch: '/etc/resolv.conf' のタイムスタンプを設定中です: 許可されていない操作です
レコードを定義
/etc/hosts に書きます。 dnsmasq の設定で expand-hosts を設定しているので、ドメイン名は自動的に補完されます。
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.93 dnsmasq
192.168.0.100 tower
192.168.0.101 db
192.168.0.102 automationhub
反映されるにはサービスを再起動します。
# systemctl restart dnsmasq
# journalctl -e -u dnsmasq
確認
まずはこの 192.168.0.93 上で参照できるかどうかを確認してみます。
# dig @localhost tower.sugimura.home
; <<>> DiG 9.11.20-RedHat-9.11.20-5.el8_3.1 <<>> @localhost tower.sugimura.home
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33732
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;tower.sugimura.home. IN A
;; ANSWER SECTION:
tower.sugimura.home. 0 IN A 192.168.0.100
;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: 金 3月 12 09:59:27 JST 2021
;; MSG SIZE rcvd: 64
正しく引けていました。次は他のクライアントから検索してみます。 これは mac からの例です。
$ dig @192.168.0.93 tower.sugimura.home
; <<>> DiG 9.10.6 <<>> @192.168.0.93 tower.sugimura.home
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62887
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;tower.sugimura.home. IN A
;; ANSWER SECTION:
tower.sugimura.home. 0 IN A 192.168.0.100
;; Query time: 0 msec
;; SERVER: 192.168.0.93#53(192.168.0.93)
;; WHEN: Fri Mar 12 10:01:14 JST 2021
;; MSG SIZE rcvd: 64
ワイルドカードも試してみます。正しく引けました。
$ dig @192.168.0.93 sample.api.sugimura.home
; <<>> DiG 9.10.6 <<>> @192.168.0.93 sample.api.sugimura.home
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29382
;; flags: qr aa rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;sample.api.sugimura.home. IN A
;; ANSWER SECTION:
sample.api.sugimura.home. 0 IN A 192.168.0.222
;; Query time: 1 msec
;; SERVER: 192.168.0.93#53(192.168.0.93)
;; WHEN: Fri Mar 12 10:02:09 JST 2021
;; MSG SIZE rcvd: 58
逆引きも確認してみます。
$ dig @192.168.0.93 -x 192.168.0.100
; <<>> DiG 9.10.6 <<>> @192.168.0.93 -x 192.168.0.100
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33228
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;100.0.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
100.0.168.192.in-addr.arpa. 0 IN PTR tower.sugimura.home.
;; Query time: 1 msec
;; SERVER: 192.168.0.93#53(192.168.0.93)
;; WHEN: Fri Mar 12 10:15:48 JST 2021
;; MSG SIZE rcvd: 88
管理
あとは必要に応じて /etc/hosts を書いてサービスを再起動するだけです。 ワイルドカードのときは /etc/dnsmasq.d/sugimura.home.conf に書きます。
mac での設定
mac のクライアントからは既存の設定を邪魔しないようにしたかったのでドメインごとに参照するDNSを分けたかったのですが、mac ではこのようにしてできました。 /etc/resolver/<ドメイン名> というファイルを作るといいそうです。
$ sudo vi /etc/resolver/sugimura.home
...
$ sudo cat /etc/resolver/sugimura.home
nameserver 192.168.0.93
ファイルを書いたら、scutil –dns コマンドで確認できます。
$ scutil --dns
DNS configuration
...
resolver #8
domain : sugimura.home
nameserver[0] : 192.168.0.93
flags : Request A records
reach : 0x00020002 (Reachable,Directly Reachable Address)
あとは普通に使えます。
$ ping tower.sugimura.home
PING tower.sugimura.home (192.168.0.100): 56 data bytes
64 bytes from 192.168.0.100: icmp_seq=0 ttl=64 time=1.085 ms
64 bytes from 192.168.0.100: icmp_seq=1 ttl=64 time=0.682 ms