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

考虑以下拓扑:

R1 从 ISP 网关 fe80::1:1 获得前缀 2001:db8::/62,并向 CE1 与 CE2 委派 /64 前缀,两台客户路由器各自在 LAN 上使用 ::1/64

  • 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。