dnsmasqを使ってDHCPでIP配布
目的
DHCPはルーターの機能を使っていたが、なぜか固定IPを指定してもDHCPで新しいIPが配布されてしまうという不具合があった。
そのため、ルータのDHCPはとめてopenmedeavaultサーバでDHCPを配布することにした。
構成
debian bullsyeベースのopenmediavolt
sudo ss -tulpn | grep :53
で現在Port53がどこで捕まっているか確認。
127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=278636,fd=17))
出力をみると上記項目があり、systemd-resolveがPort53をつかんでいることがわかった。
dnsmasqをインストールして起動すると
dnsmasq: failed to bind DHCP/DNS server socket: Address already in use
のようなメッセージがでる。
これが、過去に dnsmasqをインストールしてもうまく動かなかった原因。
今回は、ここをどう解決していくか分かったので、やってみることにした。
dnsmasq を使うなら Stub Listener を無効化しないといけない。
さてこのStub Listenerなのだが、何をしているしろものかというと
systemd-resolved の DNS Stub Listener(スタブリスナー) は、
ローカルの 127.0.0.53:53 で簡易DNSサーバとして待ち受ける機能です。
ということで、dnsmasq を入れるとまる被りする機能。
よってこれを停止する。
sudo vi /etc/systemd/resolved.conf
DNSStubListener=no
コメントではデフォルトでyesなのでnoにしてコメントを外す。
sudo systemctl restart systemd-resolved
にてsystemd-resolvedを再起動。
先のコマンドで53をリッスンしていないことを確認。
/etc/resolv.conf の symlink を解除
sudo mv /etc/resolv.conf /etc/resolv.conf.org
dnsmasq用のresolv.confを作成
sudo sh -c 'echo "nameserver 127.0.0.1" > /etc/resolv.conf'
dnsmasqのインストール
sudo apt install dnsmasq
これだけでさくっと導入できる。
設定は /etc/dnsmasq.conf だが、最近の流儀だとconf.dの中に設定ファイルを置くのが流行っぽい。しかしながら、自分は以前と同じやり方で、dnsmasq.more.conf を有効にした。
これは、設定ファイルの中の該当部分のコメントアウトを外して行う。
# Include another lot of configuration options.
conf-file=/etc/dnsmasq.more.conf
#conf-dir=/etc/dnsmasq.d
dnsmasq.more.confに書く内容は
# .local は mDNS に任せる
domain-needed #
bogus-priv
localise-queries
この後にDHCPの設定
dhcp-option=3,はルータのアドレスを記載dhcp-range=192.168.0.100,192.168.0.150,12h
dhcp-option=3,192.168.0.254
resolv-file=/etc/resolv.dnsmasq
固定IPの設定
dhcp-host=00:24:2c:01:33:77,192.168.0.3
名前解決
address=/pi4.local/192.168.0.3
resolv-file=/etc/resolv.dnsmasqの内容は
nameserver 1.1.1.1nameserver 8.8.8.8
nameserver 9.9.9.9
確認
DHCPをどこからもらっているかを確認するコマンドライン
cat /var/lib/dhcp/dhclient.leases | grep dhcp-server-identifier






















