DHCPv6 Client
RouterOS DHCPv6 客户端会向 DHCPv6 服务器请求 IPv6 地址与委派前缀(DHCPv6-PD),将收到的前缀加入 IPv6 池,并可在状态变化时运行脚本。
DHCPv6 客户端
子菜单: /ipv6/dhcp-client
DHCPv6 客户端从 DHCPv6 服务器请求 IPv6 配置。它通常运行在面向 ISP 的接口上,用于获取供本地网络使用的前缀。request 属性决定客户端请求的内容,一个客户端可以同时请求多项:
prefix:委派前缀(DHCPv6-PD)。客户端会把收到的前缀加入动态 IPv6 池(pool-name),你可以从该池向本地接口分配地址,并向主机通告。池的生命周期跟随委派前缀,并在客户端每次续租时延长。address:一个 IPv6 地址。客户端会把它作为动态 /128 地址添加到接口上。info:仅请求其他设置(例如 DNS 服务器),不请求地址或前缀。
收到的 DNS 服务器会供路由器的 DNS 解析器使用(use-peer-dns)。DHCPv6 不提供默认网关,但客户端可通过 add-default-route 添加指向 DHCPv6 服务器的默认路由。
客户端使用路由器的 DUID(路由器的 DHCPv6 服务器也使用同一 DUID)以及基于客户端运行接口的 IAID(Identity Association Identifier,身份关联标识)来标识自身。DHCPv6 与 IPv4 DHCP 的区别请参阅 DHCP 概念。
配置示例
简单 DHCPv6 客户端
本示例请求一个前缀,并将其加入用于分发 /64 前缀的 IPv6 池:
/ipv6/dhcp-client/add request=prefix pool-name=test-ipv6 pool-prefix-length=64 interface=ether13
客户端绑定后,会显示收到前缀及其到期时间:
[admin@MikroTik] > /ipv6/dhcp-client/print
Columns: INTERFACE, STATUS, REQUEST, PREFIX
# INTERFACE STATUS REQUEST PREFIX
0 ether13 bound prefix 2001:db8:7501:ff04::/62, 2d23h11m53s
该前缀也会加入动态池,其生命周期与前缀一致:
[admin@MikroTik] > /ipv6/pool/print
Flags: D - DYNAMIC
Columns: NAME, PREFIX, PREFIX-LENGTH, ACTUAL-PREFIX, VALID-LIFETIME, PREFERRED-LIFETIME
# NAME PREFIX PREFIX-LENGTH ACTUAL-PREFIX VALID-LIFETIME PREFERRED-LIFETIME
0 D test-ipv6 2001:db8:7501:ff04::/62 64 2001:db8:7501:ff04::/62 2d23h11m53s 2d15h59m53s
现在可以从该池向其他接口分配地址,如下例所示。
使用收到的前缀进行本地 RA
考虑以下拓扑:

- ISP 将前缀 2001:DB8::/62 路由到路由器 R1。
- 路由器 R1 运行 DHCPv6 服务器,向客户路由器 CE1 与 CE2 委派 /64 前缀。
- CE1 与 CE2 上的 DHCP 客户端从 DHCP 服务器(R1)收到委派的 /64 前缀。
- 客户路由器使用收到的前缀在本地接口上配置 RA。
配置
R1
/ipv6/route
add gateway=fe80::1:1%to-ISP
/ipv6/pool
add name=myPool prefix=2001:db8::/62 prefix-length=64
/ipv6/dhcp-server
add prefix-pool=myPool disabled=no interface=to-CE-routers lease-time=3m name=server1
CE1
/ipv6/dhcp-client
add interface=to-R1 request=prefix pool-name=my-ipv6
/ipv6/address
add address=::1/64 from-pool=my-ipv6 interface=to-clients advertise=yes
CE2
/ipv6/dhcp-client
add interface=to-R1 request=prefix pool-name=my-ipv6
/ipv6/address/add address=::1/64 from-pool=my-ipv6 interface=to-clients advertise=yes
检查状态
检查每台 CE 路由器都收到了各自的前缀。
在服务器上:
[admin@R1] /ipv6/dhcp-server/binding> print
Flags: X - disabled, D - dynamic
# ADDRESS DUID IAID SERVER STATUS
1 D 2001:db8:0:1::/64 0019d1393536 566 server1 bound
2 D 2001:db8:0:2::/64 0019d1393535 565 server1 bound
在客户端上:
[admin@CE1] /ipv6/dhcp-client> print
Flags: D - dynamic, X - disabled, I - invalid
# INTERFACE STATUS REQUEST PREFIX
0 to-R1 bound prefix 2001:db8:0:1::/64
[admin@CE1] /ipv6/dhcp-client> /ipv6/pool/print
Flags: D - dynamic
# NAME PREFIX PREFIX-LENGTH
0 D my-ipv6 2001:db8:0:1::/64 64
池中的地址已添加到 LAN 接口:
[admin@CE1] /ipv6/address> print
Flags: X - disabled, I - invalid, D - dynamic, G - global, L - link-local
# ADDRESS FROM-POOL INTERFACE ADVERTISE
0 G 2001:db8:0:1::1/64 my-ipv6 to-clients yes
...
池使用情况显示有一个地址占用了池的一部分:
[admin@CE1] /ipv6/pool/used> print
POOL PREFIX OWNER INFO
my-ipv6 2001:db8:0:1::/64 Address to-clients
属性
DHCPv6 客户端的全部属性、状态值与命令(包括脚本可用的变量)请参阅 /ipv6/dhcp-client CLI 参考。以下行为需要额外说明。
服务器发起的续租
当 allow-reconfigure=yes 时,客户端接受 DHCPv6 服务器发来的 Reconfigure 消息,并在收到后立即续租。启用了 use-reconfigure=yes 的 RouterOS DHCPv6 服务器会在自身设置(例如租期)变化时主动发送此类消息,使客户端无需等待续租时间即可采用新设置。
IAID
要确定将使用的 IAID,请把 DHCP 客户端所在接口的内部 ID 从十六进制转换为十进制。
例如,DHCP 客户端运行在接口 PPPoE-out1 上。使用以下命令获取内部 ID:
[admin@t36] /interface> :put [find name="pppoe-out1"]
*15
将十六进制值 15 转换为十进制后得到 IAID=21。要使用不同的 IAID,请为地址设置 custom-iana-id,为前缀设置 custom-iapd-id。