DHCPv6服务器怎么配置?

DHCPv6 的两种模式

在开始配置前,必须理解DHCPv6的两种工作模式,这决定了客户端如何获取地址和其他信息:

1、有状态 (Stateful)

地址分配客户端从DHCPv6服务器获取IPv6地址、租约时间等信息。

其他配置同时从服务器获取DNS服务器、域名等其他信息。

类似IPv4的DHCP工作方式与大家熟知的IPv4 DHCP非常相似。

对应标志位路由器通告中的M (Managed) 标志位设置为1

2、无状态 (Stateless)

地址分配客户端从DHCPv6服务器获取IPv6地址,它们使用从路由器发送的路由器通告 中获取的前缀,通过SLAAC 自行生成地址。

其他配置仅从DHCPv6服务器获取DNS服务器、域名等其他信息。

对应标志位路由器通告中的O (Other) 标志位设置为1

方案一:在 Linux 上使用 ISC DHCP Server (dhcpd)

ISC DHCP 是功能最全、最灵活的DHCP服务器之一。

步骤 1:安装软件包

在基于 Debian/Ubuntu 的系统上:

sudo apt update
sudo apt install isc-dhcp-server

在基于 RHEL/CentOS/Rocky 的系统上:

sudo dnf install dhcp-server
或者使用 yum
sudo yum install dhcp

步骤 2:配置/etc/dhcp/dhcpd6.conf

这是主要的配置文件,你需要根据你的网络情况进行修改。

示例:有状态 DHCPv6 配置

假设你的网络前缀是2001:db8:1234::/64,你想要分配的地址范围是2001:db8:1234::10002001:db8:1234::2000

sudo nano /etc/dhcp/dhcpd6.conf
设置全局参数
default-lease-time 600; # 默认租约时间(秒)
max-lease-time 7200;    # 最大租约时间(秒)
authoritative;          # 声明此服务器是该网络的权威服务器
定义一个子网
subnet6 2001:db8:1234::/64 {
    # 分配给客户端的地址范围
    range6 2001:db8:1234::1000 2001:db8:1234::2000;
    # 设置DNS服务器和域名
    option dhcp6.name-servers 2001:db8:1234::1, 2001:4860:4860::8888;
    option dhcp6.domain-search "example.com";
    # 如果需要,可以设置固定的主机绑定(类似于IPv4的静态分配)
    # host special-client {
    #   host-identifier option dhcp6.client-id 00:01:00:01:27:71:4e:fa:00:0c:29:aa:bb:cc;
    #   fixed-address6 2001:db8:1234::babe;
    # }
}

示例:无状态 DHCPv6 配置

如果你只想让DHCPv6服务器分发DNS信息,而不分配地址。

subnet6 2001:db8:1234::/64 {
    # 不定义 range6,即不分配地址
    # 只提供其他配置信息
    option dhcp6.name-servers 2001:db8:1234::1, 2001:4860:4860::8888;
    option dhcp6.domain-search "example.com";
    # 无状态模式的关键设置
    option dhcp6.info-refresh-time 1800; # 客户端刷新信息的时间间隔
}

步骤 3:指定监听的网络接口

编辑/etc/default/isc-dhcp-server (Debian/Ubuntu) 或/etc/dhcp/dhcpd.conf (RHEL) 来告诉服务器在哪个接口上提供DHCPv6服务。

Debian/Ubuntu:

sudo nano /etc/default/isc-dhcp-server

找到INTERFACESv6 行并修改:

INTERFACESv6="ens18" # 将 ens18 替换为你的实际接口名,如 eth0, enp0s3 等

RHEL/CentOS:

配置文件通常是/etc/sysconfig/dhcpd

sudo nano /etc/sysconfig/dhcpd
DHCPDARGS="-6 ens18" # 将 ens18 替换为你的实际接口名

步骤 4:启动并启用服务

重启服务(或启动)
sudo systemctl restart isc-dhcp-server.service
设置开机自启
sudo systemctl enable isc-dhcp-server.service
检查服务状态,确保它正在运行
sudo systemctl status isc-dhcp-server.service

步骤 5:配置路由器通告

在你的网络网关(可能是同一个Linux服务器或路由器)上,你需要配置radvd 来发送路由器通告。

1、 安装 radvd:

    sudo apt install radvd

2、 配置/etc/radvd.conf

对于有状态 DHCPv6(客户端从DHCPv6获取地址):

    interface ens18 {
        AdvSendAdvert on;
        prefix 2001:db8:1234::/64 {
            AdvOnLink on;
            AdvAutonomous off; # 关键:关闭自主地址配置,强制使用DHCPv6获取地址
        };
        AdvManagedFlag on; # 关键:M标志位设为1,表示“使用有状态DHCPv6”
    };

对于无状态 DHCPv6(客户端自己生成地址,从DHCPv6获取DNS):

    interface ens18 {
        AdvSendAdvert on;
        prefix 2001:db8:1234::/64 {
            AdvOnLink on;
            AdvAutonomous on; # 关键:开启自主地址配置,使用SLAAC
        };
        AdvOtherConfigFlag on; # 关键:O标志位设为1,表示“从DHCPv6获取其他配置”
    };

3、 启动 radvd:

    sudo systemctl restart radvd
    sudo systemctl enable radvd

方案二:在路由器/防火墙上配置(以 OPNsense 为例)

大多数现代路由器和防火墙都提供了图形化界面来配置DHCPv6,这通常更简单。

1、登录管理界面:通过浏览器登录你的路由器/防火墙管理界面(如 OPNsense, pfSense, OpenWrt等)。

2、导航到DHCPv6设置:通常在服务 ->DHCPv6 ->[接口] 或类似路径下。

3、配置模式

路由器通告设置为Managed(有状态)或Assisted(无状态,对应O 标志位)。

DHCPv6范围在有状态下,设置一个要分配的IPv6地址范围(例如::1000::2000)。

4、设置其他选项:填写要下发的DNS服务器、搜索域等。

5、保存并应用:保存配置后,服务通常会立即生效。

故障排除

1、检查服务状态sudo systemctl status isc-dhcp-server

2、查看日志sudo journalctl -u isc-dhcp-server -f 或查看/var/log/syslog

3、客户端测试:在客户端上,使用ip a 查看是否获取到IPv6地址,使用systemd-resolve --statuscat /etc/resolv.conf 查看是否获取到DNS。

4、防火墙:确保服务器的防火墙放行了UDP 546UDP 547 端口。

5、路由器通告标志位:最常见的问题,确保MO 标志位的设置与你的DHCPv6模式匹配。

希望这份详细的指南能帮助你成功配置DHCPv6服务器!

文章摘自:https://idc.huochengrm.cn/fwq/17862.html

评论