dnsmasqでDHCP

2026年2月4日水曜日

linux

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.1
nameserver 8.8.8.8
nameserver 9.9.9.9

dnsmasqの再起動

sudo systemctl restart dnsmasq

確認

DHCPをどこからもらっているかを確認するコマンドライン

 cat /var/lib/dhcp/dhclient.leases | grep dhcp-server-identifier

これで、設定したIPからDHCPがリースされていればOK