Contents
Overview
isc-dhcp-server を使用して DHCP サーバーを構築します。
DHCP (Dynamic Host Configuration Protocol) サーバーは、ネットワーク内のデバイスに自動的に IP アドレスやその他のネットワーク設定を割り当てる機能を提供します。RFC 2131 で定義されています。
ネットワークプロトコル
DHCP は UDP (User Datagram Protocol) を使用します。ポート番号はサーバー側が 67 (dhcps) 、クライアント側は 68 (dhcpc) を使用します。
主な機能
DHCP の主な機能は次のとおりです。
- IP アドレスの割り当て
- サブネットマスク、デフォルトゲートウェイ、DNS サーバーなどのネットワーク設定の提供
- アドレスの再利用
- IP アドレスの管理
- PXE boot における ブートローダーの情報提供
注意事項
DHCP を使用する際に注意すべき点は次のとおりです。
- DHCP サーバーの適切な設定とセキュリティ確保が重要です。不正な DHCP サーバーがネットワークに接続されると、ネットワークのセキュリティに影響を与える可能性があります。
- 原則として同一セグメント内に複数の DHCP サーバーを設置することはできないとされていますが、冗長化の目的で、DHCP サーバーが割り当てるレンジを分けて複数の DHCP サーバーを設置するケースもあります。専用アプライアンスによっては HA 機能を持つ場合もあります。
- DHCP は IPv4 限定のプロトコルです。IPv6 で使用するには、DHCPv6 が必要となりますが、DHCPv6 はデフォルトゲートウェイの割り当て機能がありません。なお、IPv6 でのIPアドレスの自動割り当て機能は RA (Router Advertisement) が使われるケースが多く、デフォルトゲートウェイを割り当てる機能がないことからも、DHCPv6 はあまり積極的に使われないと思います。
前提条件
- こちらを参考に基本設定が完了していること。
インストール
isc-dhcp-server をインストールします。
myadmin@ubuntu:~$ sudo apt -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold install isc-dhcp-server
/etc/dhcp/dhcpd.conf
isc-dhcp-server の設定ファイルは /etc/dhcp/dhcpd.conf です。
デフォルト値
デフォルト値は下記の通りです。
myadmin@ubuntu:~$ grep -v -e '^\s*#' -e '^\s*$' /etc/dhcp/dhcpd.conf | expand | tr -s [:space:] | sed 's/^ / /g'
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
設定値
設定例は下記の通りです。一般的な環境では十分な設定内容となっています。domain-name はホスト名を FQDN に補完するための設定ですが、これは便利なようであまり効果的ではない設定だと思っています。つまり、FQDN でなくてもホスト名のみでアクセス可能となる点が便利なのですが、運用的には同一ホストに対して複数のアクセス先が存在すると無用な混乱を招きますし、情報量もそれに応じて増えます。このため、個人的にはあえて設定しないことを推奨していますが、もちろん、それを必要とする環境であれば設定してください。本稿の環境では不要なため削除しています。
myadmin@ubuntu:~$ sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.orig
myadmin@ubuntu:~$ sudo tee /etc/dhcp/dhcpd.conf <<"EOF"
option domain-name-servers 10.0.51.71;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
subnet 10.0.33.0 netmask 255.255.255.0 {
option routers 10.0.33.1;
range dynamic-bootp 10.0.33.128 10.0.33.159;
}
EOF
/etc/default/isc-dhcp-server
IP アドレスが有効な複数のインターフェイスが存在している場合、dhcpd.conf にそれに対応する設定が無いと起動時にエラーが出力されます。以下の設定で DHCP サーバーが有効となるインターフェイスを限定することでこのエラーを回避できます。この設定は環境により不要です。
デフォルト値
デフォルト値は下記の通りです。
myadmin@ubuntu:~$ grep -v -e '^\s*#' -e '^\s*$' /etc/default/isc-dhcp-server | expand | tr -s [:space:] | sed 's/^ / /g'
INTERFACESv4=""
INTERFACESv6=""
設定値
設定例は下記の通りです。
myadmin@ubuntu:~$ sudo cp /etc/default/isc-dhcp-server /etc/default/isc-dhcp-server.orig
myadmin@ubuntu:~$ sudo tee /etc/default/isc-dhcp-server <<"EOF"
INTERFACESv4="ens33"
INTERFACESv6=""
EOF
設定の有効化
設定を有効化します。
myadmin@ubuntu:~$ sudo systemctl restart isc-dhcp-server.service && systemctl status isc-dhcp-server.service
Appendix
PXE boot 用の設定
PXE boot 用の設定は下記の通りです。PXE boot を必要とする環境は非常に限られていると思いますが、Ubuntu において Autoinstall などを組み合わせてインストールプロセスを自動化したい場合は必須です。
この設定フィルには以下も含まれます。
- 自ネットワーク以外に DHCP を提供しています。この DHCP サーバーは 10.1.0.0/24 に属しますが、PXE boot 対象となるサーバーは 172.17.0.0/24 に属しています。自ネットワークを DHCP に含めないと DHCP は起動することができません。異なるネットワークへ DHCP を提供するため、上位の L3SW で DHCP リレーを設定しています。
- MAC アドレスをベースとし、ubuntu.s1230.com に固定 IP アドレスを設定しています。PXE boot 完了後の対象ホストへのアクセスをスムーズにするためです。
myadmin@ubuntu:~$ sudo tee /etc/dhcp/dhcpd.conf <<"EOF"
option domain-name-servers 10.1.0.53;
option arch code 93 = unsigned integer 16;
class "pxeclients"{
match if substring (option vendor-class-identifier,0,9) = "PXEClient";
next-server 10.1.0.69;
filename grubnetx64.efi.signed;
}
subnet 10.1.0.0 netmask 255.255.255.0 {
}
subnet 172.17.0.0 netmask 255.255.255.0 {
option routers 172.17.0.1;
range dynamic-bootp 172.17.0.224 172.17.0.239;
}
host ubuntu.s1230.com {
hardware ethernet 80:ee:73:e2:2c:a3;
fixed-address 172.17.0.23;
}
EOF
以下は PXE boot 用設定の説明です。
設定 | 説明 |
---|---|
option arch code 93 = unsigned integer 16; | クライアントのアーキテクチャ情報を定義するオプションを設定しています。アーキテクチャ情報は PXE ブート時に特定のブートローダーを提供するために使用されます。 |
match if substring (option vendor-class-identifier,0,9) = “PXEClient”; | class-identifier オプションが PXEClient で始まるクライアントを対象としています。これに一致するクライアントに対して、次の設定が適用されます。 |
next-server 10.1.0.69; | PXE クライアントの次のサーバーとして 10.1.0.69 (TFTP) を指定しています。 |
filename grubnetx64.efi.signed; | PXE クライアントに提供するブートローダーのファイル名を指定しています。 |