====== 概要 ======
* DnsmasqはDHCPサーバーとDNSサーバーの両方を同時に行えるソフトで、小規模なネットワークの構築には非常に便利です。
* DHCPサーバでは各計算ノードにIPアドレスを割り振り、プライベートネットワークを構成します
* DNSサーバはIPアドレスとホスト名の紐づけを行います。
===== 環境 =====
* プライベートLAN側のインターフェース ... enp1s0f1
* 外部DNSサーバ ... aaa.aaa.aaa.aaa および bbb.bbb.bbb.bbb
* わからない場合はネットワーク管理者に問い合わせてください。管理ノードの固定IPを設定するときに使ったのと同じやつです。
* 無料のだと 8.8.8.8 (Google) とか 1.1.1.1 (Cloudflare) などが有名所です。
====== 導入手順 ======
管理ノードで作業を行ってください。
- インストール
$ sudo apt update
$ sudo apt install dnsmasq
- 設定ファイルを編集$ sudo nano /etc/dnsmasq.conf
# 外部DNSサーバー
server=aaa.aaa.aaa.aaa
server=bbb.bbb.bbb.bbb
# 上位DNSサーバーに転送するには、アドレスに.が必要
domain-needed
# プライベートIPアドレスの逆引き要求を上位DNSサーバーに転送しない
bogus-priv
# プライベートLANのドメイン名を定義
domain=cluster.internal
# 管理ノードのプライベートLAN側に接続されているLANポートのデバイス名
interface=enp1s0f1
# 指定したLANポートのIPだけで明示的にバインド
listen-address=192.168.0.1
bind-interfaces
# --- DHCP 設定 ---
# プライベートLANのサブネットマスク
# staticがあると、dhcp-hostで指定された機器にしかIPアドレスが配布されない
dhcp-range=192.168.0.0,static,255.255.255.0,12h
# MACアドレス,ホスト名,IPアドレス(順不同)を入力
dhcp-host=ac:1f:6b:bc:93:8a,node11,192.168.0.11
dhcp-host=ac:1f:6b:bc:92:09,node12,192.168.0.12
dhcp-host=ac:1f:6b:bc:97:98,node13,192.168.0.13
# すでにIPアドレスが固定済みのノード(今の場合は管理ノード)のドメイン名
host-record=head.cluster.internal,192.168.0.1
# 上で登録されていないMACアドレスからの問い合わせを無視
dhcp-ignore=tag:!known
# ルータ(今の場合は管理ノード)のIPアドレス
dhcp-option=option:router,192.168.0.1
# ローカルDNSサーバー(今の場合は管理ノード)のIPアドレス
dhcp-option=option:dns-server,192.168.0.1
* DNSサーバーのポート番号は53番が基本ですが、Ubuntuではsystemd-resolvedがループバック(自己参照アドレス)の53番ポートを使っています。
* このままだと衝突して動かなくなるので、listen-addressとbind-interfaceを使って計算ノード側のIPアドレスだけを監視させるようにします
* domainで定義するドメイン名は、平たく言えばこのプライベートLANの名前です。インターネットに存在するドメイン名(google.comなど)と衝突しなければなんでもいいです。ここでは後述のLDAPのドメイン名に合わせました。
- 構文チェックと起動・有効化
$ dnsmasq --test
$ sudo systemctl restart dnsmasq
$ sudo systemctl enable dnsmasq
- 管理ノード自身がDnsmasqによって動いているDNSサーバーを見に行くようにする$ sudo nano /etc/systemd/resolved.conf
[Resolve]
DNS=192.168.0.1
Domains=cluster.internal
$ sudo systemctl restart systemd-resolved
- IPアドレスが配布され、名前解決ができるか確認
$ ping node11
* ドメイン名を省略せずに書くと以下のようになります。
$ ping node11.cluster.internal
- リースしてるIPアドレスの確認
$ cat /var/lib/misc/dnsmasq.leases
* IPアドレスの変更などで、リースをやり直したい場合はこのファイルを削除してください
$ sudo systemctl stop dnsmasq
$ sudo rm /var/lib/misc/dnsmasq.leases
$ sudo systemctl start dnsmasq
* Dnsmasqを再起動してもIPアドレスが配布されない場合は、NICを再起動させてください。
$ sudo ip link set enp1s0f1 down
$ # 数秒待つ
$ sudo ip link set enp1s0f1 up
* NICを再起動できない(ネットワークを切れない場合)は、計算ノードのターミナルを開いて、以下のようにIPの開放と再取得を行います(NIC名が enp1s0 の場合)
$ sudo dhclient -r enp1s0
$ sudo dhclient enp1s0
計算ノードの追加などで設定ファイルを更新したときは、Dnsmasqも忘れずに再起動する。
$ sudo systemctl restart dnsmasq