![在 Linux 上设置有状态 DHCPv6](https://linux22.com/image/663864/%E5%9C%A8%20Linux%20%E4%B8%8A%E8%AE%BE%E7%BD%AE%E6%9C%89%E7%8A%B6%E6%80%81%20DHCPv6.png)
我想在我的本地网络上为 IPv6 设置一个 DHCP 服务器,用于发布地址和其他信息(如 DNS/NTP 等)。我从我的 ISP 获得了 IPv6 前缀,我将在后续代码片段中将其称为 <prefix>。
我使用 isc-dhcp-server。在 /etc/dhcpd.conf 下我有
option dhcp6.name-servers <prefix>::2;
option dhcp6.info-refresh-time 21600;
subnet6 <prefix>::/64 {
range6 <prefix>::1 2<prefix>::ffff:ffff;
}
eth0 接口(连接到路由器)在 /etc/networking/interfaces 文件中静态配置:
iface eth0 inet6 static
address <prefix>::2
netmask 64
客户端装有带网络管理器的 Ubuntu 14.04 LTS,并通过 wlan0 接口绑定到路由器(路由器充当接入点)。在 Ubuntu 网络管理器的 GUI 配置下,从 IPv6 选项卡中,我选择“方法:自动,仅 DHCP”(因此我希望客户端有状态 DHCPv6 配置 - 它应该获得一个超出上述定义范围的 ipv6 地址)。
但是,这并没有发生。 ifconfig 暗示客户端是使用无状态方法配置的(配置的 ipv6 地址具有客户端 wlan0 HW-Address 编码)
我怀疑路由器设置了错误的广告标志。但我无法配置路由器,因为它是由 ISP 提供的。我该怎么办?有什么建议吗?
答案1
简而言之:我认为 DHCP 服务器在错误的接口上监听。
长答案: 假设您从 ISP 获得前缀 2001:DB8:1234::/48。此外,我们假设您的路由器有两个网络接口:eth0(上行链路到 ISP)和 wlan0(用于客户端)。如果您现在配置 DHCPv6 服务器,请执行以下操作:
subnet6 2001:DB8:1234::/64 {
range6 2001:DB8:1234::10 2001:DB8:1234::ffff:ffff;
}
然后在启动 DHCP 服务器后,它将查找服务器上配置在 2001:DB8:1234::/64 范围内的接口,并在这些接口上监听 DHCP 请求。
这意味着必须配置服务器接口
- eth0 带 IP不是在 2001:DB8:1234::/64 范围内(例如 2001:DB8:1234:1::2/64)
- wlan0 的 IP 在 2001:DB8:1234::/64 范围内(例如 2001:DB8:1234::2/64)
此外,您还应使用一些调试输出来启动服务器,以测试请求是否来自客户端。对于 ISC dhcpd,您可以使用“-d -f”选项,例如
/usr/sbin/dhcpd -6 -cf /etc/dhcp/dhcpd.conf -pf /var/run/dhcpd.pid -f -d