有状态DHCPv6、无状态SLAAC.note
·重要的选项:
# 1、 ipv6 nd managed-config-flag //将 m选项设置为 1
m选项,默认为 0,表示对客户端使用本地的无状态化地址配置(SLAAC)
当 m选项被设置为 1时,表示使用DHCPv6 来分配IP地址
如果DHCP服务器在本地就无需启用m选项也能够获取到IP地址,但是还是建议开启,因为 m选项为 0时,接口状态显示是使用无状态SLAAC进行地址分配,如果 m选项为 1,接口状态显示是使用DHCP进行地址分配(o选项也是同理)【使用命令:show ipv6 interface g0/0 | sec Hosts 查看】
# 2、 ipv6 nd other-config-flag //将 o选项设置为 1
o选项,默认为 0,表示不允许客户端去向其它DHCP服务器获取 DHCP其它选项(如 DNS、域名 等)
当 o选项设置为 1时,表示允许客户端向其它 DHCP服务器获取 其它选项(如 DNS 等)
如果DHCP服务器在本地就无需启用 o选项
可以这样理解:
如果使用的是 SLAAC分配IP地址,就无需开启 m选项,如果 使用的是 SLAAC来分配 DNS服务器地址,也无需开启 o选项;
但是如果使用的是 DHCP来分配IP地址,就需要开启 m选项,如果使用的是 DHCP来分配 DNS、域名等选项,则需要开启 o选项。一、配置 无状态 DHCPv6(SLAAC):
1、配置使用 SLAAC分配 IP地址、DNS服务器地址:
(1)Cisco 路由器配置:
·方式一:在 SLAAC 中直接指定 DNS服务器地址:
interface g0/0
ipv6 enable //会自动生成一个 Link-local 地址
ipv6 address 2000:ABCD:ABCD:1000::254/64 //如果要使用 SLAAC 分配地址,那么至少都需要 /64位掩码,否则地址范围不够SLAAC进行分配,会导致无法分配
ipv6 nd ra dns server 2000:abcd:abcd::1 //(可选)指定 DNS服务器地址
exit
ipv6 unicast-routing //开启IPv6路由功能后,就会发送 ra消息,就能够自动使用 SLAAC分配地址
## 配置完成默认使用本地的 Link-local 地址作为客户端的网关
·方式二:使用 DHCPv6 分配 DNS 地址:
·配置 DHCPv6 地址池:
ipv6 dhcp pool IPV6POOL-A
dns-server 2000:abcd:abcd:1000::1
domain-name ccna-StatefulDHCPv6.com·在接口中引用 DHCPv6:
interface G0/0
ipv6 dhcp server IPV6POOL-A
# do show run int g0/0
(2)客户端获取地址:
不需要开启 o 选项,因为这是在本地进行获取,只有获取其它服务器的 DHCP选项,才需要开启 o选项。
2.1、Windows 客户端能够直接进行获取:
ipconfig /renew6获取成功:

2.1.1、如果 Windows获取到了 临时地址,需要将其关闭,否则只能够ping通该临时地址,无法 ping通获取到的全局单播地址:

关闭临时地址:
# cmd
netsh interface ipv6 set privacy state=disabled
然后在 ncpa.cpl 中重启网卡即可2.2、Linux 客户端获取 SLAAC的地址 需要修改 interfaces 配置文件:
vim /etc/network/interfaces
需要将接口选项设置为 auto,才能够获取 SLAAC分配的地址。
获取成功:

2、配置 SLAAC分配 IP地址,DNS服务器地址 由 DHCPv6 分配(RDNSS):
(1)配置 DHCPv6 分配 DNS地址:
·使用 Debian 配置 DHCPv6:
·配置 IP地址:
vim /etc/network/interfaces
·配置监听网卡:
vim /etc/default/isc-dhcp-server
·配置 dhcpv6,分配 DNS 服务器地址:
apt install -y isc-dhcp-server
vim /etc/dhcp/dhcpd.conf
# 与IPv4的dhcp一样,注意至少需要有一条 subnet6 来定义 /etc/default/isc-dhcp-server 中监听的网卡的网段,否则启动会报错。
·重启服务:
systemctl restart isc-dhcp-server(2)路由器上启用 SLAAC:
ipv6 unicast-routing
interface g0/0
ipv6 address 2000:ABCD:ABCD:1000::254/64
# do show run int g0/0
(3)客户端上 获取IP地址:
3.1、不开启 o选项,测试获取:
可以看到,此时只获取了地址,但是 却获取不到分配的 DNS地址:

配置路由器 将 o 选项设置 为 1:
int g0/0
ipv6 nd other-config-flag
# do show run int g0/0
客户端再次尝试获取IP地址:
获取成功

二、配置 有状态 DHCPv6:
·先在接口中开启 m选项:
修改前,查看:
show ipv6 interface g0/0 | sec Hosts
进行修改:
R1(config)#int g0/0
R1(config-if)#ipv6 nd managed-config-flag
# do show run int g0/0
修改后进行查看:
show ipv6 interface g0/0 | sec Hosts
1、使用 Cisco路由器 配置DHCPv6:

在接口中引用:
R1(config-if)#ipv6 dhcp server IPV6POOL-A
R1(config-if)#ipv6 nd managed-config-flag //不开启m选项也不影响客户端获取IP地址(因为DHCP服务器在本机),但是还是建议开启,因为这样接口的状态就会变成有状态DHCP,而不是默认的无状态DHCP
ipv6 nd prefix 2000:abcd:abcd:1000::/64 no-advertise //关闭前缀通告(这样客户端就不会获取到SLAAC的地址)
# do show run int g0/0
·客户端上获取IP地址:
如果没有关闭前缀通告,客户端就会获取到SLAAC的地址

如果关闭了nd前缀通告,就只会获取到dhcpv6的地址:

2、在 Debian 上 配置 DHCPv6:
(1)配置 DHCPv6:
vim /etc/dhcp/dhcpd6.conf
(2)客户端上获取地址:

三、抑制 SLAAC(不使用 SLAAC分配地址,只使用DHCPv6):
配置:

# 不通告ipv6前缀到RA消息中(推荐)
int g0/0
ipv6 nd prefix 2001:db8:abcd:a::/64 no-advertise
# 抑制RA消息(不推荐)不建议抑制RA消息,因为客户端会通告RA消息获取网关,如果抑制了RA消息,就会导致客户端没有网关
int g0/0
ipv6 nd ra suppress all //测试了一下,是否敲这条都能够抑制
ipv6 nd managed-config-flag 
(抑制RA消息会导致客户端没有网关)

四、配置 DHCP 代理:
# 只需要在连接客户端的接口敲上一条:
interface g0/0
ipv6 dhcp relay destination 2001:abcd::1
ipv6 dhcp relay destination [DHCP服务器地址] 附件一、windows 11 客户端刷新 IPv6地址:
Windows 11 客户端有时获取到了 IPv6 地址之后,无论如何重启网卡,都无法将其消掉,会严重影响实验
先 shutdown 路由连接客户端的接口:

然后在 Windows上重启 网卡:

最后 启动路由器接口:

附件二、Windows使用 SLAAC获取地址时,默认不会使用MAC地址进行获取(因为Windows默认启用了使用随机的标识符来生成IPv6地址)
# 关闭 随机标识符,使用 MAC地址来生成IP地址:
netsh interface ipv6 set global randomizeidentifiers=disabled配置前查看IP地址:(是采用随机的方式生成的)

配置后查看IP地址:(根据MAC地址生成)

附件三、Windows 关闭临时地址
关闭临时地址:
# cmd
netsh interface ipv6 set privacy state=disabled
然后在 ncpa.cpl 中重启网卡即可附件四、使用 Cisco Packet Tracer 查看 配置参考模板:

复制路径:

打开刚刚复制的路径:


这里就有很多配置参考:
