能書き
私的サーバー構築日誌:仕切り直しからの自宅サーバー構築の続きです。
今回はDHCPサーバーの冗長化を図ります。以前もやりましたが、その時の計画に基づき、セカンダリサーバー(=ファイルサーバー)にもDHCPサーバーを立てます。
我が家のIPアドレス体系(再掲)
以前も同じ事をやりましたので、その再掲です。クラスBにして、第3オクテットで分類して使い分ける方針です。
DHCPプロトコルについて。プロトコルの仕様は、LAN 内に複数のDHCPサーバーが在っても問題無く動くようになっているそうです。問題はDHCPサーバーのIPアドレス管理が同期されない事で、IPアドレスが重複して発行されてしまう事態になりかねない点にあります。だからDHCPサーバー毎にIPアドレス範囲を分離する事で、多重発行を防ぐようにすれば良い、との事。
我が家のネットワークアドレス: 172.16.0.0/16
- 172.16.0.*
- エイリアスIPアドレスとして、サービス毎に割り当てる固定IPアドレス(仮想IPアドレス)
- 172.16.1.*
- ステイショナリIPアドレスとして、NIC毎に割り当てる固定IPアドレス及びMACアドレス毎にDHCPサーバが固定的に割り当てるIPアドレス
- 172.16.2.*
- 無線LANルータ内蔵のDHCPサーバーによる動的割り当てのIPアドレス
- 172.16.3.*
- プライマリサーバーのDHCPサーバーによる動的割り当てのIPアドレス
- 172.16.4.*
- セカンダリサーバーのDHCPサーバーによる動的割り当てのIPアドレス
目標
Ubuntu 24.04 LTS を入れた我が家のファイルサーバー MicroServer N54L にDHCPサーバーを立てます。
参考文献
インストール
dhcpサーバーをインストール。
sudo apt -y install isc-dhcp-server
インストールに成功したら/etc
をSubversionで確認します。
cd /etc
sudo svn st
結果は下記のようになりました。
$ sudo svn st
? apparmor.d/dhcpd.d
? apparmor.d/local/usr.sbin.dhcpd
? apparmor.d/usr.sbin.dhcpd
? default/isc-dhcp-server
? dhcp/ddns-keys
? dhcp/dhcpd.conf
? dhcp/dhcpd6.conf
M group
M gshadow
? init.d/isc-dhcp-server
? logcheck/ignore.d.server/isc-dhcp-server
M passwd
? rc0.d/K01isc-dhcp-server
? rc1.d/K01isc-dhcp-server
? rc2.d/S01isc-dhcp-server
? rc3.d/S01isc-dhcp-server
? rc4.d/S01isc-dhcp-server
? rc5.d/S01isc-dhcp-server
? rc6.d/K01isc-dhcp-server
M shadow
? systemd/system/multi-user.target.wants/isc-dhcp-server.service
? systemd/system/multi-user.target.wants/isc-dhcp-server6.service
アカウントが増えている様子(group,gshadow,passwd,shadow)なので、中身を確認。
$ sudo svn di --diff-cmd diff -x -U0 group gshadow passwd shadow
Index: group
===================================================================
--- group (revision 5)
+++ group (working copy)
@@ -62,0 +63 @@
+dhcpd:x:110:
Index: gshadow
===================================================================
--- gshadow (revision 5)
+++ gshadow (working copy)
@@ -62,0 +63 @@
+dhcpd:!::
Index: passwd
===================================================================
--- passwd (revision 5)
+++ passwd (working copy)
@@ -36,0 +37 @@
+dhcpd:x:110:110::/run:/usr/sbin/nologin
Index: shadow
===================================================================
--- shadow (revision 6)
+++ shadow (working copy)
@@ -36,0 +37 @@
+dhcpd:!:20057::::::
以前と同じですな。
このまま/etc
をsvn commit
します。
sudo svn st | grep "^?" | cut -b9- | sudo xargs -I{} find {} -type f -or -type d -or -type l | sudo xargs -rt svn add
sudo svn ci -m"installed isc-dhcp-server"
設定
いよいよDHCPサーバーを設定します。
まずはサーバーのネットワーク関係を確認します。
ip a
こんな結果になります。
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 9c:b6:54:a9:14:76 brd ff:ff:ff:ff:ff:ff
inet 172.16.1.3/16 brd 172.16.255.255 scope global enp3s0
valid_lft forever preferred_lft forever
inet6 fe80::9eb6:54ff:fea9:1476/64 scope link
valid_lft forever preferred_lft forever
これを見て、IPアドレスとNIC名を取得します。
SVR_IPADDR=172.16.1.3
NIC_NAME=enp3s0
そして家庭内ルーターのIPアドレス。我が家はこうです。
RTR_IPADDR=172.16.2.1
我が家のドメインネームサーバーのIPアドレス。プライマリ・サーバーになります。
PRIMARY_IPADDR=172.16.1.2
これを踏まえてdhcpd.confを設定します。
cat | sudo tee /etc/dhcp/dhcpd.conf >/dev/null <<___
option domain-name "home";
option domain-name-servers $PRIMARY_IPADDR;
default-lease-time 86400;
max-lease-time 86400;
ddns-update-style none;
authoritative;
subnet 172.16.0.0 netmask 255.255.0.0 {
range 172.16.4.2 172.16.4.254;
option subnet-mask 255.255.0.0;
option broadcast-address 172.16.255.255;
option routers $RTR_IPADDR;
}
# secondary server
host $(cat /etc/hostname) {
hardware ethernet $(cat $(find /sys/devices -name $NIC_NAME)/address);
fixed-address $SVR_IPADDR;
}
___
この設定の説明については以前の記事を参照してください。
起動
起動します。
sudo systemctl start isc-dhcp-server
恐ろしい事に、エラーが発生して起動に失敗しても画面には表示されません。必ず確認しましょう。
systemctl status isc-dhcp-server
本当は動作確認すべきなんですが、もういいよね。
自動起動
全部上手くいったら、マシン再起動で自動起動するようにします。
sudo systemctl enable isc-dhcp-server
/etcバージョン管理
成功を確認したら/etc
をSubversion登録します。
cd /etc
sudo svn st | grep "^?" | cut -b9- | sudo xargs -I{} find {} -type f -or -type d -or -type l | sudo xargs -rt svn add
sudo svn ci -m"setting DHCP server"
仕舞い
DHCPサーバーを冗長化しました。以前の手順をそのままなぞっただけで、難しい事は何もありませんね。