自宅環境に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サーバーも今度置き換えようと思います。
追記(2025.4.19)
KeaDHCPの構築について書きました
概要
サーバー環境
- 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サーバーを構築できました.