この投稿は、vExperts Advent Calendar 2020 の 19日目です。
VMware Photon OS 4.0 Beta で、簡易的な DNS サーバを構築してみます。DNS サーバのソフトウェアは、Photon OS の RPM リポジトリに登録されている dnsmasq を利用します。
デモ環境 / 自宅ラボなどでも、DNS による名前解決があったほうがよいケース(たとえば vCenter Server など)があるので、そのときの候補になるかなと思います。また、今回は Photon OS 4.0 Beta で試していますが、3.0 や 4.0 でも一部を除き同様の手順です。
Photon OS の準備
VMware から提供されている、Photon OS 4.0 Beta の OVA をデプロイします。
今回は、「OVA with virtual hardware v13 (UEFI Secure Boot)」を利用しました。
Downloading Photon OS · vmware/photon Wiki · GitHub
vSphere Client でこのOVA ファイルをデプロイして、パワーオンします。
そして、root / changeme でログインして、そのまま初期パスワードを変更します。
ホスト名は、わかりやすいもの(今回は lab-dns-01)に変更しておきます。ログインしなおすと、bash のプロンプトにもホスト名が反映されます。
root@photon-machine [ ~ ]# hostnamectl set-hostname lab-dns-01
ホスト名変更後にログインしなおした Photon OS 4.0 です。
root@lab-dns-01 [ ~ ]# cat /etc/photon-release VMware Photon OS 4.0 PHOTON_BUILD_NUMBER=d98e681
なお、ネットワーク設定はとりあえず DHCP のままにしていますが、本来はスタティックなアドレスを設定します。
DNS サーバの構築(dnsmasq)
dnsmasq のインストール
まず、dnsmasq をインストールします。
root@lab-dns-01 [ ~ ]# tdnf install -y dnsmasq root@lab-dns-01 [ ~ ]# rpm -q dnsmasq dnsmasq-2.82-2.ph4.x86_64
DNS レコードの登録
dnsmasq では、hosts ファイルのエントリを DNS レコードとして利用できます。
/etc/hosts ファイルに、DNS レコードの情報を記入します。
root@lab-dns-01 [ ~ ]# echo '192.168.10.20 lab-vc-11.go-lab.jp' >> /etc/hosts root@lab-dns-01 [ ~ ]# echo '192.168.10.30 lab-esxi-11.go-lab.jp' >> /etc/hosts root@lab-dns-01 [ ~ ]# tail -n 2 /etc/hosts 192.168.10.20 lab-vc-11.go-lab.jp 192.168.10.30 lab-esxi-11.go-lab.jp
systemd-resolved の停止(Photon OS 3.0 では不要)
このあと、dnsmasq を起動しますが、Photon OS 4.0 ではデフォルトで起動されている systemd-resolved と TCP 53番ポートが競合してしまうので、今回は停止してしまいます。
root@lab-dns-01 [ ~ ]# systemctl stop systemd-resolved root@lab-dns-01 [ ~ ]# systemctl disable systemd-resolved Removed /etc/systemd/system/multi-user.target.wants/systemd-resolved.service. Removed /etc/systemd/system/dbus-org.freedesktop.resolve1.service.
デフォルトだと systemd-resolved 関連ファイルのシンボリックリンクになっている /etc/resolv.conf も差し替えます。ここで設定している 192.168.1.101 と 192.168.1.102 は、自宅ラボの DNS サーバです。
root@lab-dns-01 [ ~ ]# rm -rf /etc/resolv.conf root@lab-dns-01 [ ~ ]# echo 'nameserver 192.168.1.101' > /etc/resolv.conf root@lab-dns-01 [ ~ ]# echo 'nameserver 192.168.1.102' >> /etc/resolv.conf root@lab-dns-01 [ ~ ]# echo 'search go-lab.jp' >> /etc/resolv.conf root@lab-dns-01 [ ~ ]# chmod o+r /etc/resolv.conf
dnsmasq の起動
そして、dnsmasq を起動します。
root@lab-dns-01 [ ~ ]# systemctl start dnsmasq root@lab-dns-01 [ ~ ]# systemctl is-active dnsmasq active root@lab-dns-01 [ ~ ]# systemctl enable dnsmasq Created symlink /etc/systemd/system/multi-user.target.wants/dnsmasq.service → /lib/systemd/system/dnsmasq.service.
ファイアウォール(iptables)の解放
iptables で、DNS のポートを開放しておきます。
iptables-save コマンドを利用するかわりに、/etc/systemd/scripts/ip4save ファイルへの「-A INPUT -p udp -m udp --dport 53 -j ACCEPT」直接追記でも、同様に iptables の設定を永続化できます。
root@lab-dns-01 [ ~ ]# iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT root@lab-dns-01 [ ~ ]# iptables-save > /etc/systemd/scripts/ip4save root@lab-dns-01 [ ~ ]# systemctl restart iptables
DNS レコードのメンテナンス
このあとの DNS レコード追加・削除についても、さきほどと同様に /etc/hosts ファイルを編集です。vi などのテキスト エディタで適宜ファイルを編集します。
hosts ファイルを編集するたびに、dnsmasq サービスも再起動します。
root@lab-dns-01 [ ~ ]# systemctl restart dnsmasq
名前解決の確認
別の Photon OS に、bindutils をインストールして、登録した DNS レコードが名前解決できることを確認します。
root@photon-machine [ ~ ]# tdnf install -y bindutils
bindutils には、nslookup や dig コマンドが含まれます。
root@photon-machine [ ~ ]# rpm -ql bindutils /etc/named.conf /usr/bin/dig /usr/bin/host /usr/bin/nslookup /usr/lib/tmpfiles.d/named.conf
登録したレコードの名前解決ができることを確認します。
ここでは、「lab-vc-11.go-lab.jp」←→「192.168.1.30」を正引き / 逆引きで確認してみます。いまさらですが「10.0.1.167」が、dnsmasq をインストールした DNS サーバのアドレスです。
まず A レコードを確認してみます。
root@photon-machine [ ~ ]# nslookup -type=A lab-vc-11.go-lab.jp 10.0.1.167 Server: 10.0.1.167 Address: 10.0.1.167#53 Name: lab-vc-11.go-lab.jp Address: 192.168.10.20
PTR レコード(逆引き)を確認してみます。
root@photon-machine [ ~ ]# nslookup -type=PTR 192.168.10.20 10.0.1.167 Server: 10.0.1.167 Address: 10.0.1.167#53 20.10.168.192.in-addr.arpa name = lab-vc-11.go-lab.jp.
これで、ラボなどで利用できる簡易的な DNS サーバが用意できました。
以上、Photon OS 4.0 を DNS サーバにしてみる話でした。