DHCP 服务器

DHCP 服务器自动提供和分配 IP 地址以及其他网络参数给客户端设备。它依赖于 DHCP 来响应来自客户端的广播请求。

如果您打算在 VRF(包括 管理 VRF)中运行 dhcpd 服务,请按照这些步骤操作。

基本配置

本节向您展示如何使用以下拓扑配置 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 和 server1server2 的静态 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> 命令。

  1. 在文本编辑器中,编辑 /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;
...
  1. 编辑 /etc/default/isc-dhcp-server 配置文件,以便 DHCP 服务器在系统启动时启动。这是一个示例配置

    cumulus@switch:~$ sudo nano /etc/default/isc-dhcp-server
    DHCPD_CONF="-cf /etc/dhcp/dhcpd.conf"
    

    INTERFACES="swp1"

  2. 启用并启动 dhcpd 服务

    cumulus@switch:~$ sudo systemctl enable dhcpd.service
    cumulus@switch:~$ sudo systemctl start dhcpd.service
    
  1. 在文本编辑器中,编辑 /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;
...
  1. 编辑 /etc/default/isc-dhcp-server6 文件,以便 DHCP 服务器在系统启动时启动。这是一个示例配置

    cumulus@switch:~$ sudo nano /etc/default/isc-dhcp-server6
    DHCPD_CONF="-cf /etc/dhcp/dhcpd6.conf"
    

    INTERFACES="swp1"

  2. 启用并启动 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
  1. 编辑 /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;
           }
    }
    
  2. 重启 dhcpd 服务

    cumulus@switch:~$ sudo systemctl restart dhcpd.service
    
  1. 编辑 /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;
       }
    }
    
  2. 重启 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
  1. 编辑 /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;
           }
    }
    
  2. 重启 dhcpd 服务

    cumulus@switch:~$ sudo systemctl restart dhcpd.service
    
  1. 编辑 /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;
       }
    }
    
  2. 重启 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
  1. 编辑 /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;
    }
}
   ...
  1. 重启 dhcpd 服务

    cumulus@switch:~$ sudo systemctl restart dhcpd.service
    
  1. 编辑 /etc/dhcp/dhcpd6.conf 文件以添加接口和 IP 地址

    cumulus@switch:~$ sudo nano /etc/dhcp/dhcpd6.conf
    ...
    host server2 {
        ifname "swp1" ;
        fixed-address 2001:db8::100;
    }
    ...
    
  2. 重启 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 计数器递增。