自宅環境にDHCPサーバーを立ててみました.構築の手順のメモです.
追記 (2024.10.28)
どうやら isc-dhcp はメンテナンスが終了しているみたいです。
ISC has announced the end of maintenance for ISC DHCP as of the end of 2022.
かわりに Kea DHCP を使うようにするのが良さそうです。 僕の環境のDHCPサーバーも今度置き換えようと思います。
概要
サーバー環境
- Raspberry Pi 3B+ (4core, 1GB)
- OS: Ubuntu 22.04.5
やったこと
- サーバーが属するNWセグメントの変更
ics-dhcp-server
の設定,起動(冗長化はなし)
構築
NWセグメントの変更
自宅のNWでは,サーバー用セグメントと人間用セグメント(スマホやPCなど)を分けています.
今回DHCPサーバーにするのは,サーバー用セグメントに入れていたラズパイです.
DHCPが必要になるのは人間用セグメントなので,このサーバーを人間用セグメントへ移動させます.
ということで,アドレスを 192.168.xxx.xxx
(VLAN x) から 192.168.yyy.yyy
(VLAN y) へ変更します.
自宅内とはいえモニターにつないで...とかは面倒なので,SSHだけで作業できるように頑張ります.
まず,netplanで 192.168.xxx.xxx/24
と 192.168.yyy.yyy/24
両方のアドレスを持つように書き換えます.
network: ethernets: eth0: dhcp4: false - addresses: [192.168.xxx.xxx/24] + addresses: [192.168.xxx.xxx/24, 192.168.yyy.yyy/24] routes: - to: default via: 192.168.xxx.1 nameservers: addresses: [8.8.8.8] optional: true version: 2
変更を適用します
$ sudo netplan apply
ラズパイが繋がるスイッチ(Allied Telesis AT-x210-9GT)のポートでaccess VLAN の設定を書き換えます.
(config-if)#switchport access vlan y (config-if)#exit
再びラズパイに変更後のアドレスでSSHします. netplanを編集し,不要なアドレスを削除します. ついでに,この前立てたUnboundのDNSサーバーも設定しています.
network: ethernets: eth0: dhcp4: false - addresses: [192.168.xxx.xxx/24, 192.168.yyy.yyy/24] + addresses: [192.168.yyy.yyy/24] routes: - to: default - via: 192.168.xxx.1 + via: 192.168.yyy.1 nameservers: - addresses: [8.8.8.8] + addresses: [192.168.xxx.zzz] optional: true version: 2
設定を適用して変更は完了です.
$ sudo netplan apply
DHCPサーバー構築
DHCPサーバーを構築します.
ics-dhcp-server
をインストールします.
$ sudo apt install isc-dhcp-server
/etc/dhcp/dhcpd.conf
で設定します.
option domain-name "home"; option domain-name-servers 192.168.xxx.zzz; default-lease-time 60; max-lease-time 7200; ddns-update-style none; authoritative; subnet 192.168.yyy.0 netmask 255.255.255.0 { range 192.168.yyy.129 192.168.yyy.254; option subnet-mask 255.255.255.0; option broadcast-address 192.168.yyy.255; option routers 192.168.yyy.1; }
とりあえず範囲は人間用セグメントの後ろ半分にしました. 一人暮らしなので100個も使うことはまあないはずですが... イベントWiFiと企業WiFiとかになるとちゃんと考える必要がありそうですね.
細かい設定の内容は以下の記事が分かりやすかったです.
起動する前に,現在使っているDHCPサーバーを停止させます. 今はcisco 891FJでDHCPが動いています.
(config)#no service dhcp
スマホをWiFiに繋ぎなおして,アドレスが降ってこないことを確認します.ちゃんと止まっていそうなので起動します.
$ sudo systemctl start isc-dhcp-server
sudo systemctl status isc-dhcp-server
で確認するとちゃんと起動していそうです.
スマホをWiFiに繋ぐとちゃんとアドレスが降ってきました.
リースされたアドレスはここで確認できます.
$ cat /var/lib/dhcp/dhcpd.leases
問題なさそうなので,永続化しておきます.
$ sudo systemctl enable isc-dhcp-server
無事DHCPサーバーを構築できました.