IPv6 在实践中多使用 GUA 地址。对于多运营商环境,我们一般不会为客户端分配多个运营商的 IPv6 地址,需要给用户分配一个相对固定的地址,并通过出口网关类设备来调度用户使用哪家运营商出网。
在一些厂商中,这个功能被称为“前缀替换”,实际上这也是一种 NAT。RouteOS 没有明确的给出这个功能,但是可以通过 IPv6 Firewall 中的 netmap NAT 来实现这个功能。
配置如下:
1 2 3 4 5 6 7 8 9
| /ipv6 pool add name=pool_v6_local prefix=2a05:dfc1:7111:1a::/64 prefix-length=64 /ipv6 address add address=::1 from-pool=pool_v6_local interface=br_main /ipv6 firewall nat add action=netmap chain=srcnat out-interface=pppoe-cmnet-out src-address=\ 2a05:dfc1:7111:1a::/64 to-address=2409:0000:31b3:1cd0::/64 add action=netmap chain=srcnat dst-address=2409:0000:31b2:8e50::/64 \ in-interface=pppoe-cmnet-out to-address=2a05:dfc1:7111:1a::/64
|
如果你是家宽,或者动态 DHCPv6 获取前缀的用户,可以使用下面的配置,动态更新 NAT 策略。
请配置在 DHCPv6 Client Advanced 的 Script 中:
1 2 3 4 5 6 7
| :log info "CMNET triggers DHCPv6 update"; :local cmnetDhcp6Prefix [/ipv6/pool/get [find name="pool_v6_cmnet"] prefix]; :log info "[DEBUG] CMNET obtains IPv6 prefix: $cmnetDhcp6Prefix"; :local cmnetPrefix [:pick "$cmnetDhcp6Prefix" 0 ([:len "$cmnetDhcp6Prefix"] - 3)] /ipv6/firewall/nat/set dst-address="$cmnetPrefix/64" [find chain=dstnat action=netmap in-interface="pppoe-cmnet-out"]; /ipv6/firewall/nat/set to-address="$cmnetPrefix/64" [find chain=srcnat action=netmap out-interface="pppoe-cmnet-out"]; :log info "CMNET NETMAP update completed";
|
题外话:对于 AS209574 网络定义,以下两段地址为 GUA 私用,不对公网路由,如果你想尝试 GUA 地址的相关实验,可从这两段地址中任选。
1 2
| 2a05:dfc1:7111::/48 2a05:dfc1:7112::/48
|