DHCPv6 Server
RouterOS DHCPv6 服务器委派 IPv6 前缀(DHCPv6-PD)并向客户端分配 IPv6 地址,支持静态绑定、RADIUS 与按绑定限速。
DHCPv6 服务器
子菜单: /ipv6/dhcp-server
标准: RFC 8415
DHCPv6 服务器委派 IPv6 前缀(DHCPv6-PD)并向客户端分配 IPv6 地址。它通常运行在向下游路由器分发前缀的路由器上,例如 ISP 的客户路由器。服务器从 prefix-pool 指定的 IPv6 池获取前缀,从 address-pool 指定的 IPv6 池获取地址;地址池的前缀长度必须为 128。绑定也可以是静态绑定,或由 RADIUS 服务器分配。
每个绑定由客户端 DUID 与 IAID 标识。当客户端绑定到前缀后,服务器会通过客户端为该前缀添加动态路由(route-distance),使发往委派前缀的流量到达客户路由器。
多数主机只有在其网络上的路由器通告设置了 managed 标志时,才会通过 DHCPv6 请求地址。RouterOS 的 DHCPv6 服务器与客户端使用相同的 DUID。DHCPv6 工作方式请参阅 DHCP 概念。
配置示例
启用 IPv6 前缀委派
先创建 IPv6 池:
/ipv6/pool/add name=myPool prefix=2001:db8:7501::/60 prefix-length=62
prefix-length=62 表示客户端从 /60 池中获得 /62 前缀。
使用该池添加 DHCPv6 服务器:
/ipv6/dhcp-server/add name=myServer prefix-pool=myPool interface=local
可以使用 RouterOS DHCPv6 客户端测试服务器,或像本例一样在 Linux 主机上使用 wide-dhcpv6 客户端:
-
安装 wide-dhcpv6-client。
-
配置
/etc/wide-dhcpv6/dhcp6c.conf,在 eth2 上请求前缀,并从该前缀为 eth3 编号:interface eth2{ send ia-pd 0; }; id-assoc pd { prefix-interface eth3{ sla-id 1; sla-len 2; }; }; -
运行客户端:
sudo dhcp6c -d -D -f eth2 -
检查 eth3 是否从委派前缀获得地址。
服务器会显示绑定。若要每次都为该客户端提供相同前缀,请将绑定设为静态:
[admin@MikroTik] > /ipv6/dhcp-server/binding/print
Flags: D - DYNAMIC
Columns: ADDRESS, DUID, SERVER, STATUS
# ADDRESS DUID SERVER STATUS
0 D 2001:db8:7501::/62 0x0003000100241d1781f7 myServer bound
[admin@MikroTik] > /ipv6/dhcp-server/binding/make-static 0
服务器还会通过客户端链路本地地址添加到委派前缀的路由:
[admin@MikroTik] > /ipv6/route/print where dst-address=2001:db8:7501::/62
Flags: D - DYNAMIC; A - ACTIVE; d - DHCP
Columns: DST-ADDRESS, GATEWAY, ROUTING-TABLE, DISTANCE
DST-ADDRESS GATEWAY ROUTING-TABLE DISTANCE
DAd 2001:db8:7501::/62 fe80::224:1dff:fe17:81f7%local main 1
启用 IPv6 地址委派
地址服务器的配置与前缀服务器类似,但使用 address-pool 而非 prefix-pool,且地址池必须分配 /128 前缀。只提供静态绑定的服务器不需要地址池。
[admin@MikroTik] > /ipv6/pool/print detail
Flags: D - dynamic
0 name="myAddressPool" prefix=2001:db8:7501::/120 prefix-length=128
[admin@MikroTik] > /ipv6/dhcp-server/print detail
0 name="myDHCP" interface=ether2 prefix-pool=static-only
address-pool=myAddressPool lease-time=3d rapid-commit=yes use-radius=no
preference=255 dhcp-option="" route-distance=1 use-reconfigure=no
address-lists="" duid="0x00030001b813f4840556"
这已足以服务 RouterOS DHCPv6 客户端等客户端。计算机主机会通过所在网络的路由器通告判断是否使用 DHCPv6。要让主机通过 DHCPv6 请求地址,请在接口的路由器通告中设置 managed address configuration 标志(managed-address-configuration)。此设置无需为 SLAAC 通告前缀:
[admin@MikroTik] > /ipv6/nd/print detail
Flags: X - disabled, I - invalid; * - default
0 interface=ether2 ra-interval=3m20s-10m ra-delay=3s mtu=unspecified
reachable-time=unspecified retransmit-interval=unspecified
ra-lifetime=30m ra-preference=medium hop-limit=unspecified
advertise-mac-address=yes advertise-dns=yes
managed-address-configuration=yes other-configuration=no
启用 managed 标志后,连接到 ether2 的计算机会收到路由器通告,通常会启动 DHCPv6 客户端请求地址。
警告
客户端对该配置的行为可能不同。例如 macOS 会在启动时获得地址,但没有通告前缀时,从睡眠状态恢复后可能不会续租,因为 macOS 没有 SLAAC 地址时不会使用 DHCPv6 客户端。其他客户端可能需要在通告前缀上设置
autonomous=no后才使用 DHCPv6。请根据网络中的客户端调整配置。
属性
DHCPv6 服务器的全部属性请参阅 /ipv6/dhcp-server CLI 参考。以下行为需要额外说明。
服务器发起的续租
启用 use-reconfigure=yes 时,接受 Reconfigure 消息的客户端(例如设置了 allow-reconfigure=yes 的 RouterOS DHCPv6 客户端)会获得 reconfigure key。当服务器的 address-pool、lease-time 或 dhcp-option 变化,或绑定设置变化时,服务器会自动发送 Reconfigure 消息,使客户端立即续租并采用变化。绑定的 send-reconfigure 命令可手动发送一次。
客户端 DNS 条目
启用 add-dns-entries=yes 时,服务器会为每个地址绑定添加动态 DNS 条目(类型 AAAA)。名称由客户端发送的 FQDN 加上 add-dns-entries-suffix(默认 lan)组成,TTL 为租期。前缀绑定不会获得 DNS 条目。
绑定
子菜单: /ipv6/dhcp-server/binding
动态绑定与客户端 DUID 关联,因此 DUID 变化的客户端会获得不同于之前的前缀。静态绑定根据客户端 DUID 与 IAID,为客户端提供固定前缀或地址。全部绑定属性、状态值与命令请参阅 /ipv6/dhcp-server/binding CLI 参考。
限速
可以通过绑定的 rate-limit 属性限制客户端带宽。随后服务器会为该绑定的前缀或地址添加动态简单队列。
警告
队列不适用于 FastTracked 流量。请确保防火墙不会 FastTrack 需要限速的流量。 先将绑定设为静态,然后设置速率:
[admin@MikroTik] > /ipv6/dhcp-server/binding/make-static 0
[admin@MikroTik] > /ipv6/dhcp-server/binding/set 0 rate-limit=10M/10M
[admin@MikroTik] > /queue/simple/print
Flags: X - disabled, I - invalid, D - dynamic
0 D name="dhcp<6c3b6b7c413e fdb4:4de7:a3f8:418c::/66>" target=fdb4:4de7:a3f8:418c::/66 parent=none packet-marks="" priority=8/8
queue=default-small/default-small limit-at=10M/10M max-limit=10M/10M
allow-dual-stack-queue 默认启用,因此同一客户端的 DHCPv6 绑定与 DHCP 租约共享一个动态简单队列。禁用后,服务器会为 IPv6 与 IPv4 分别创建队列。
RADIUS 支持
RADIUS 服务器可使用 Mikrotik-Rate-Limit 属性为每个 DHCPv6 绑定分配速率限制。先让 DHCPv6 服务器使用 RADIUS:
/radius
add address=10.0.0.1 secret=VERYsecret123 service=dhcp
/ipv6/dhcp-server
set dhcp1 use-radius=yes
然后配置 RADIUS 服务器发送该属性。以使用 MySQL 的 FreeRADIUS 为例,为客户端向 radcheck 与 radreply 表添加条目:
INSERT INTO `radcheck` (`username`, `attribute`, `op`, `value`) VALUES
('000c4200d464', 'Auth-Type', ':=', 'Accept');
INSERT INTO `radreply` (`username`, `attribute`, `op`, `value`) VALUES
('000c4200d464', 'Delegated-IPv6-Prefix', '=', 'fdb4:4de7:a3f8:418c::/66'),
('000c4200d464', 'Mikrotik-Rate-Limit', '=', '10M');
只有当服务器将 DHCP 租约与 DHCPv6 绑定识别为同一客户端时,才会创建共享队列:识别依据可以是租约 MAC 地址,或 DHCP 客户端发送基于 DUID 的客户端标识符(RFC 4361)时使用 DUID。DHCPv6 客户端按设备生成 DUID,不一定根据其运行接口的 MAC 地址生成,因此服务器可能创建独立队列。