DHCP 服务器
DHCP 服务器自动提供和分配 IP 地址以及其他网络参数给客户端设备。它依赖于 DHCP 来响应来自客户端的广播请求。
基本配置
本节向您展示如何使用以下拓扑配置 DHCP 服务器,其中 DHCP 服务器是运行 Cumulus Linux 的交换机。

要在 Cumulus Linux 交换机上配置 DHCP 服务器
- 通过提供池 ID 来创建 DHCP 池。ID 是 IPv4 或 IPv6 前缀。
- 为池提供名称(可选)。
- 提供您想在此池中使用的 DNS 服务器的 IP 地址。您可以分配多个 DNS 服务器。
- 提供您想用于此池的域名以进行名称解析(可选)。
- 定义可用于分配的 IP 地址范围。
- 提供默认网关 IP 地址(可选)。
此外,您可以为资源(如服务器或打印机)配置静态 IP 地址
- 为静态分配创建 ID。这通常是资源的名称。
- 提供您想分配给此资源的静态 IP 地址。
- 提供您想将 IP 地址分配到的资源的 MAC 地址。除了 MAC 地址,您可以为静态分配设置接口名称;例如 swp1。
- 要配置静态 IP 地址分配,您必须首先配置一个池。
- 您可以全局设置 DNS 服务器 IP 地址和域名,也可以为不同的池指定不同的 DNS 服务器 IP 地址和域名。
以下示例配置了 storage-servers
池,其中包含 DNS 和 server1
和 server2
的静态 DHCP 分配。
cumulus@switch:~$ nv set service dhcp-server default pool 10.1.10.0/24 pool-name storage-servers
cumulus@switch:~$ nv set service dhcp-server default pool 10.1.10.0/24 domain-name example.com
cumulus@switch:~$ nv set service dhcp-server default pool 10.1.10.0/24 domain-name-server 192.168.200.53
cumulus@switch:~$ nv set service dhcp-server default pool 10.1.10.0/24 range 10.1.10.100 to 10.1.10.199
cumulus@switch:~$ nv set service dhcp-server default pool 10.1.10.0/24 gateway 10.1.10.1
cumulus@switch:~$ nv set service dhcp-server default static server1
cumulus@switch:~$ nv set service dhcp-server default static server1 ip-address 10.0.0.2
cumulus@switch:~$ nv set service dhcp-server default static server1 mac-address 44:38:39:00:01:7e
cumulus@switch:~$ nv config apply
要从配置的池中分配 DHCP 地址,您必须配置一个接口,使其 IP 地址来自池子网。例如
cumulus@switch:~$ nv set interface vlan10 ip address 10.1.10.1/24
cumulus@switch:~$ nv config apply
要全局设置 DNS 服务器 IP 地址和域名,请使用 nv set service dhcp-server <vrf> domain-name-server <address>
和 nv set service dhcp-server <vrf> domain-name <domain>
命令。
要为静态分配设置接口名称,请运行 nv set service dhcp-server <vrf> static <server> ifname
命令。
cumulus@switch:~$ nv set service dhcp-server6 default pool 2001:db8:1::/64
cumulus@switch:~$ nv set service dhcp-server6 default pool 2001:db8:1::/64 pool-name storage-servers
cumulus@switch:~$ nv set service dhcp-server6 default pool 2001:db8:1::/64 domain-name-server 2001:db8::64
cumulus@switch:~$ nv set service dhcp-server6 default pool 2001:db8:1::/64 domain-name example.com
cumulus@switch:~$ nv set service dhcp-server6 default pool 2001:db8:1::/64 range 2001:db8::100 to 2001:db8::199
cumulus@switch:~$ nv set service dhcp-server6 default static server1
cumulus@switch:~$ nv set service dhcp-server6 default static server1 ip-address 2001:db8::100
cumulus@switch:~$ nv set service dhcp-server6 default static server1 mac-address 44:38:39:00:01:7e
cumulus@switch:~$ nv config apply
要从配置的池中分配 DHCP 地址,您必须配置一个接口,使其 IP 地址来自池子网。例如
cumulus@switch:~$ nv set interface vlan10 ip address 2001:db8::10/64
cumulus@switch:~$ nv config apply
要全局设置 DNS 服务器 IP 地址和域名,请使用 nv set service dhcp-server6 <vrf> domain-name-server <address>
和 nv set service dhcp-server6 <vrf> domain-name <domain>
命令。
在文本编辑器中,编辑
/etc/dhcp/dhcpd.conf
文件。使用以下配置作为示例cumulus@switch:~$ sudo nano /etc/dhcp/dhcpd.conf authoritative; subnet 10.1.10.0 netmask 255.255.255.0 { option domain-name-servers 192.168.200.53; option domain-name example.com; default-lease-time 3600; max-lease-time 3600; default-url ; pool { range 10.1.10.100 10.1.10.199; } } #Statics group { host server1 { hardware ethernet 44:38:39:00:01:7e; fixed-address 10.0.0.2; } }
要全局设置 DNS 服务器 IP 地址和域名,请在 /etc/dhcp/dhcpd.conf
文件中的池信息之前添加 DNS 服务器 IP 地址和域名。例如
cumulus@switch:~$ sudo nano /etc/dhcp/dhcpd.conf
authoritative;
option domain-name servers;
option domain-name-servers 192.168.200.51;
subnet 10.1.10.0 netmask 255.255.255.0
default-lease-time 3600;
max-lease-time 3600;
...
编辑
/etc/default/isc-dhcp-server
配置文件,以便 DHCP 服务器在系统启动时启动。这是一个示例配置cumulus@switch:~$ sudo nano /etc/default/isc-dhcp-server DHCPD_CONF="-cf /etc/dhcp/dhcpd.conf"
INTERFACES="swp1"
启用并启动
dhcpd
服务cumulus@switch:~$ sudo systemctl enable dhcpd.service cumulus@switch:~$ sudo systemctl start dhcpd.service
在文本编辑器中,编辑
/etc/dhcp/dhcpd6.conf
文件。使用以下配置作为示例cumulus@switch:~$ sudo nano /etc/dhcp/dhcpd6.conf authoritative; subnet6 2001:db8::/64 { option domain-name-servers 2001:db8:100::64; option domain-name example.com; default-lease-time 3600; max-lease-time 3600; default-url ; pool { range6 2001:db8:1::100 2001:db8::199; } } #Statics group { host server1 { hardware ethernet 44:38:39:00:01:7e; fixed-address6 2001:db8::100; } }
要全局设置 DNS 服务器 IP 地址和域名,请在 /etc/dhcp/dhcpd6.conf
文件中的池信息之前添加 DNS 服务器 IP 地址和域名。例如
cumulus@switch:~$ sudo nano /etc/dhcp/dhcpd6.conf
authoritative;
option domain-name servers;
option domain-name-servers 2001:db8:100::64;
subnet6 2001:db8::/64
default-lease-time 3600;
max-lease-time 3600;
...
编辑
/etc/default/isc-dhcp-server6
文件,以便 DHCP 服务器在系统启动时启动。这是一个示例配置cumulus@switch:~$ sudo nano /etc/default/isc-dhcp-server6 DHCPD_CONF="-cf /etc/dhcp/dhcpd6.conf"
INTERFACES="swp1"
启用并启动
dhcpd6
服务cumulus@switch:~$ sudo systemctl enable dhcpd6.service cumulus@switch:~$ sudo systemctl start dhcpd6.service
可选配置
租用时间
您可以设置分配给 DHCP 客户端的网络地址租用时间。您可以指定介于 180 到 31536000 之间的数字。默认租用时间为 3600 秒。
cumulus@switch:~$ nv set service dhcp-server default pool 10.1.10.0/24 lease-time 200000
cumulus@switch:~$ nv config apply
cumulus@switch:~$ nv set service dhcp-server6 default pool 2001:db8:/64 lease-time 200000
cumulus@switch:~$ nv config apply
编辑
/etc/dhcp/dhcpd.conf
文件以设置租用时间(以秒为单位)cumulus@switch:~$ sudo nano /etc/dhcp/dhcpd.conf authoritative; subnet 10.1.10.0 netmask 255.255.255.0 { option domain-name-servers 192.168.200.53; option domain-name example.com; default-lease-time 200000; max-lease-time 200000; default-url ; pool { range 10.1.10.100 10.1.10.199; } }
重启
dhcpd
服务cumulus@switch:~$ sudo systemctl restart dhcpd.service
编辑
/etc/dhcp/dhcpd6.conf
文件以设置租用时间(以秒为单位)cumulus@switch:~$ sudo nano /etc/dhcp/dhcpd6.conf authoritative; subnet6 2001:db8::/64 { option domain-name-servers 2001:db8:100::64; option domain-name example.com; default-lease-time 200000; max-lease-time 200000; default-url ; pool { range6 2001:db8:1::100 2001:db8::199; } }
重启
dhcpd6
服务cumulus@switch:~$ sudo systemctl restart dhcpd6.service
Ping 检查
配置 DHCP 服务器以在颁发 IP 地址之前 ping 您想分配给客户端的地址。如果没有响应,DHCP 将传递 IP 地址;否则,它将尝试范围内的下一个可用地址。
cumulus@switch:~$ nv set service dhcp-server default pool 10.1.10.0/24 ping-check on
cumulus@switch:~$ nv config apply
cumulus@switch:~$ nv set service dhcp-server6 default pool 2001:db8::/64 ping-check on
cumulus@switch:~$ nv config apply
编辑
/etc/dhcp/dhcpd.conf
文件以添加ping-check true;
cumulus@switch:~$ sudo nano /etc/dhcp/dhcpd.conf authoritative; subnet 10.1.10.0 netmask 255.255.255.0 { option domain-name-servers 192.168.200.53; option domain-name example.com; default-lease-time 200000; max-lease-time 200000; ping-check true; default-url ; pool { range 10.1.10.100 10.1.10.199; } }
重启
dhcpd
服务cumulus@switch:~$ sudo systemctl restart dhcpd.service
编辑
/etc/dhcp/dhcpd6.conf
文件以添加ping-check true;
cumulus@switch:~$ sudo nano /etc/dhcp/dhcpd6.conf authoritative; subnet6 2001:db8::/64 { option domain-name-servers 2001:db8:100::64; option domain-name example.com; default-lease-time 200000; max-lease-time 200000; ping-check true; default-url ; pool { range6 2001:db8:1::100 2001:db8::199; } }
重启
dhcpd6
服务cumulus@switch:~$ sudo systemctl restart dhcpd6.service
分配基于端口的 IP 地址
您可以根据物理位置或端口分配 IP 地址和其他 DHCP 选项,而无需考虑直接通过交换机端口连接到 Cumulus Linux 交换机的客户端的 MAC 地址。这在更换交换机和服务器时很有帮助;您可以避免收集 MAC 地址并将其发送给网络管理员以修改 DHCP 服务器配置的不便。
cumulus@switch:~$ nv set service dhcp-server default static server2
cumulus@switch:~$ nv set service dhcp-server default static server2 ip-address 10.0.0.3
cumulus@switch:~$ nv set service dhcp-server default static server2 ifname swp1
cumulus@switch:~$ nv config apply
cumulus@switch:~$ nv set service dhcp-server6 default static server2
cumulus@switch:~$ nv set service dhcp-server6 default static server2 ip-address 2001:db8:1::100
cumulus@switch:~$ nv set service dhcp-server6 default static server2 ifname swp1
cumulus@switch:~$ nv config apply
- 编辑
/etc/dhcp/dhcpd.conf
文件以添加接口和 IP 地址
cumulus@switch:~$ sudo nano /etc/dhcp/dhcpd.conf
# Statics
group {
host server2 {
ifname "swp1";
fixed-address 10.0.0.3;
}
}
...
重启
dhcpd
服务cumulus@switch:~$ sudo systemctl restart dhcpd.service
编辑
/etc/dhcp/dhcpd6.conf
文件以添加接口和 IP 地址cumulus@switch:~$ sudo nano /etc/dhcp/dhcpd6.conf ... host server2 { ifname "swp1" ; fixed-address 2001:db8::100; } ...
重启
dhcpd6
服务cumulus@switch:~$ sudo systemctl restart dhcpd6.service
故障排除
要显示当前的 DHCP 服务器设置,请为 IPv4 运行 nv show service dhcp-server
命令,或为 IPv6 运行 nv show service dhcp-server6
命令
cumulus@leaf01:mgmt:~$ nv show service dhcp-server
Summary
--------- ------------------
+ default interface: "swp1
default pool: 10.1.10.0/24
default static: server1
DHCP 服务器确定 DHCP 请求是中继 DHCP 请求还是非中继 DHCP 请求。运行以下命令以查看 DHCP 请求
cumulus@server02:~$ sudo tail /var/log/syslog | grep dhcpd
2016-12-05T19:03:35.379633+00:00 server02 dhcpd: Relay-forward message from 2001:db8:101::1 port 547, link address 2001:db8:101::1, peer address fe80::4638:39ff:fe00:3
2016-12-05T19:03:35.380081+00:00 server02 dhcpd: Advertise NA: address 2001:db8::110 to client with duid 00:01:00:01:1f:d8:75:3a:44:38:39:00:00:03 iaid = 956301315 valid for 600 seconds
2016-12-05T19:03:35.380470+00:00 server02 dhcpd: Sending Relay-reply to 2001:db8:101::1 port 547
注意事项
在网桥端口上接收并发送到 CPU 进行处理的 DHCP 数据包会导致接口上的 RX_DROP 计数器递增。