crashRT のブログ

技術とかそれ以外とか

DHCPサーバーを立ててみた

自宅環境にDHCPサーバーを立ててみました.構築の手順のメモです.

追記 (2024.10.28)

www.isc.org

どうやら isc-dhcp はメンテナンスが終了しているみたいです。

ISC has announced the end of maintenance for ISC DHCP as of the end of 2022.

かわりに Kea DHCP を使うようにするのが良さそうです。 僕の環境のDHCPサーバーも今度置き換えようと思います。

www.isc.org

概要

サーバー環境

やったこと

  • サーバーが属する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/24192.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とかになるとちゃんと考える必要がありそうですね.

細かい設定の内容は以下の記事が分かりやすかったです.

qiita.com

起動する前に,現在使っているDHCPサーバーを停止させます. 今はcisco 891FJDHCPが動いています.

(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サーバーを構築できました.

参考記事

qiita.com

qiita.com

www.server-world.info

最後に

DHCPサーバーを自分で立てることができました. 監視基盤の整備とか冗長化の設定とかに今度は挑戦してみたいです.