どうも、Tです。
今までWindowsのフリーソフトを使ってDHCP環境を作っていましたが、ちゃんと検証環境内にDHCPサーバを作ろうと思いRHELを使ってDHCPサーバを作ったので備忘録です。
目次
環境
OS情報
vSphere上の仮想マシンとして動作しているRHELマシンを使用しています。
# cat /etc/redhat-release Red Hat Enterprise Linux release 9.2 (Plow)
設定自体はあまり変更していません。下記部分くらいになります。
- firewalld無効
- SELinux有効
- RHNへ登録済み
操作はすべてrootユーザーで行っています。
ネットワーク情報
DHCPサーバのNICには事前にIPアドレスなどを設定済みです。
# nmcli device show GENERAL.DEVICE: ens33 GENERAL.TYPE: ethernet GENERAL.HWADDR: 00:50:56:82:03:FB GENERAL.MTU: 1500 GENERAL.STATE: 100 (接続済み) GENERAL.CONNECTION: ens33 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 WIRED-PROPERTIES.CARRIER: オン IP4.ADDRESS[1]: 192.168.10.203/24 IP4.GATEWAY: 192.168.10.254 IP4.ROUTE[1]: dst = 192.168.10.0/24, nh = 0.0.0.0, mt = 100 IP4.ROUTE[2]: dst = 0.0.0.0/0, nh = 192.168.10.254, mt = 100 IP4.DNS[1]: 192.168.10.201 IP4.DNS[2]: 192.168.10.202 IP4.SEARCHES[1]: k.local.lab IP6.ADDRESS[1]: fe80::250:56ff:fe82:3fb/64 IP6.GATEWAY: -- IP6.ROUTE[1]: dst = fe80::/64, nh = ::, mt = 256 GENERAL.DEVICE: ens35 GENERAL.TYPE: ethernet GENERAL.HWADDR: 00:50:56:82:BA:06 GENERAL.MTU: 1500 GENERAL.STATE: 100 (接続済み) GENERAL.CONNECTION: ens35 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/8 WIRED-PROPERTIES.CARRIER: オン IP4.ADDRESS[1]: 192.168.11.203/24 IP4.GATEWAY: 192.168.11.254 IP4.ROUTE[1]: dst = 192.168.11.0/24, nh = 0.0.0.0, mt = 101 IP4.ROUTE[2]: dst = 0.0.0.0/0, nh = 192.168.11.254, mt = 101 IP4.DNS[1]: 192.168.10.201 IP4.DNS[2]: 192.168.10.202 IP4.SEARCHES[1]: k.local.lab IP6.ADDRESS[1]: fe80::47f2:26cf:7273:102c/64 IP6.GATEWAY: -- IP6.ROUTE[1]: dst = fe80::/64, nh = ::, mt = 1024 GENERAL.DEVICE: lo GENERAL.TYPE: loopback GENERAL.HWADDR: 00:00:00:00:00:00 GENERAL.MTU: 65536 GENERAL.STATE: 100 (接続済み (外部)) GENERAL.CONNECTION: lo GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/1 IP4.ADDRESS[1]: 127.0.0.1/8 IP4.GATEWAY: -- IP6.ADDRESS[1]: ::1/128 IP6.GATEWAY: -- IP6.ROUTE[1]: dst = ::1/128, nh = ::, mt = 256
やりたいこと
本記事ではDHCPサーバに2枚のNICでそれぞれ別のセグメントのクライアントにIPアドレスを配布します。
DHCPで配布する情報は、各NICで以下のを想定しています。
項目 | NIC1側 | NIC2側 |
ドメイン | k.local.lab | k.local.lab |
LANセグメント | 192.168.10.0/24 | 192.168.11.0/24 |
サブネットマスク | 255.255.255.0 | 255.255.255.0 |
デフォルトゲートウェイ | 192.168.10.254 | 192.168.11.254 |
IP割当範囲 | 開始:192.168.10.220
終了:192.168.10.249 |
開始:192.168.11.220
終了:192.168.11.249 |
DNSサーバー | 192.168.10.201
192.168.10.202 |
192.168.10.201192.168.10.202 |
デフォルトリース時間 ※1 | 21600秒(6時間) | |
最大リース時間 ※1 | 86400(24時間) |
※1:それそれ別設定ではなく、共通項目設定として扱う。
DHCPサーバインストール
DHCPサーバをインストールします。
# dnf install dhcp-server
DHCPサーバ設定
DHCPサーバの設定ファイルを編集します。
# vi /etc/dhcp/dhcpd.conf
内容は下記になります。
# # DHCP Server Configuration file. # see /usr/share/doc/dhcp-server/dhcpd.conf.example # see dhcpd.conf(5) man page # # Common setting default-lease-time 21600; max-lease-time 86400; # 192.168.10.0/24 settings subnet 192.168.10.0 netmask 255.255.255.0 { range 192.168.10.220 192.168.10.249; option routers 192.168.10.254; option broadcast-address 192.168.10.0; option domain-name-servers 192.168.10.201,192.168.10.202; option domain-name "k.local.lab"; } # 192.168.11.0/24 settings subnet 192.168.11.0 netmask 255.255.255.0 { range 192.168.11.220 192.168.11.249; option routers 192.168.11.254; option broadcast-address 192.168.11.0; option domain-name-servers 192.168.10.201,192.168.10.202; option domain-name "k.local.lab"; }
各設定の意味は下記のようになっています。
項目 | 意味 |
default-lease-time | デフォルトのリース期間です。 |
max-lease-time | DHCPクライアントからリース延長要求があった場合に、延長される最大期間です。 |
subnet <ネットワーク> netmask <サブネットマスク> | 設定対象になるネットワークセグメントの指定です。{}内のオプション値が反映される範囲です。 |
range | 配布するIPアドレスの範囲です。 |
option routers | デフォルトゲートウェイの指定です。 |
option broadcast-address | ブロードキャストアドレスの指定です。 |
option domain-name-servers | DNSサーバーの指定です。 |
option domain-name | ドメイン名の指定です。 |
設定が終わったのち、「dhcpd -t」コマンドを実行し設定ファイルが正しいことを確認します。下記のようにエラーが表示さなければ、書式などの誤りなく正しい設定ファイルになっています。
# dhcpd -t Internet Systems Consortium DHCP Server 4.4.2b1 Copyright 2004-2019 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ ldap_gssapi_principal is not set,GSSAPI Authentication for LDAP will not be used Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file Config file: /etc/dhcp/dhcpd.conf Database file: /var/lib/dhcpd/dhcpd.leases PID file: /var/run/dhcpd.pid Source compiled to use binary-leases
DHCPサービスの自動起動を有効にし、起動します。
# systemctl enable dhcpd --now
正常に起動していることを確認します。
# systemctl status dhcpd ● dhcpd.service - DHCPv4 Server Daemon Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; enabled; preset: disabled) Active: active (running) since Fri 2023-07-28 10:15:42 JST; 54min ago Docs: man:dhcpd(8) man:dhcpd.conf(5) Main PID: 2642 (dhcpd) Status: "Dispatching packets..." Tasks: 1 (limit: 48800) Memory: 4.6M CPU: 15ms CGroup: /system.slice/dhcpd.service mq2642 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid 7月 28 10:15:42 k-util dhcpd[2642]: Sending on LPF/ens33/00:50:56:82:03:fb/192.168.10.0/24 7月 28 10:15:42 k-util dhcpd[2642]: Sending on Socket/fallback/fallback-net 7月 28 10:15:42 k-util dhcpd[2642]: Server starting service. 7月 28 10:15:42 k-util systemd[1]: Started DHCPv4 Server Daemon. 7月 28 10:23:18 k-util dhcpd[2642]: DHCPREQUEST for 192.168.10.221 from 00:50:56:82:9a:59 (tpl-rhel92) via ens33 7月 28 10:23:18 k-util dhcpd[2642]: DHCPACK on 192.168.10.221 to 00:50:56:82:9a:59 (tpl-rhel92) via ens33 7月 28 10:42:19 k-util dhcpd[2642]: DHCPREQUEST for 192.168.11.220 from 00:50:56:82:62:c0 (testwin10) via ens35 7月 28 10:42:19 k-util dhcpd[2642]: DHCPACK on 192.168.11.220 to 00:50:56:82:62:c0 (testwin10) via ens35 7月 28 10:53:18 k-util dhcpd[2642]: DHCPREQUEST for 192.168.10.221 from 00:50:56:82:9a:59 (tpl-rhel92) via ens33 7月 28 10:53:18 k-util dhcpd[2642]: DHCPACK on 192.168.10.221 to 00:50:56:82:9a:59 (tpl-rhel92) via ens33
動作確認
それぞれのセグメントにDHCPクライアントを配置し、DHCPサーバからIPアドレスが取得できることを確認します。
今回は、DHCPクライアントにWindows 10を使用しています。
192.168.10.0/24側確認
DHCPサーバから取得できています。
192.168.11.0/24側確認
DHCPサーバから取得できています。
おまけ
DHCPサーバで払い出した情報は、dhcpd.leasesファイルに保存されています。
# cd /var/lib/dhcpd # ls -lh 合計 8.0K -rw-r--r--. 1 dhcpd dhcpd 1.6K 7月 28 11:33 dhcpd.leases -rw-r--r--. 1 dhcpd dhcpd 1.2K 7月 28 11:32 dhcpd.leases~ -rw-r--r--. 1 dhcpd dhcpd 0 11月 3 2022 dhcpd6.leases
dhcpd.leasesファイルの中身は下記のようになっています。
# cat dhcpd.leases # The format of this file is documented in the dhcpd.leases(5) manual page. # This lease file was written by isc-dhcp-4.4.2b1 # authoring-byte-order entry is generated, DO NOT DELETE authoring-byte-order little-endian; ---- 長いため一部割愛 ---- lease 192.168.11.220 { starts 5 2023/07/28 02:33:09; ends 5 2023/07/28 08:33:09; cltt 5 2023/07/28 02:33:09; binding state active; next binding state free; rewind binding state free; hardware ethernet 00:50:56:82:62:c0; uid "\001\000PV\202b\300"; set vendor-class-identifier = "MSFT 5.0"; client-hostname "testwin10"; } lease 192.168.10.221 { starts 5 2023/07/28 02:33:23; ends 5 2023/07/28 08:33:23; cltt 5 2023/07/28 02:33:23; binding state active; next binding state free; rewind binding state free; hardware ethernet 00:50:56:82:9a:59; uid "\001\000PV\202\232Y"; client-hostname "tpl-rhel92"; }
なお、「dhcpd.leases」「dhcpd.leases~」を手動で削除などはしてはいけません。これらはDHCPサーバが動作するために必要なファイルです。
詳細は、下記をご参照ください。
参考
公式
ブログ
まとめ
思っていた以上に簡単にDHCPが作れました。本番環境ではルータを経由したリレーなどの考慮も必要ですが、検証環境であればLinuxでさくっとDHCPサーバーを作るのはありですね。