[ RouterOS 折腾手记 ] 9.RouterOS配置IPv6

0.前景提要
在之前的文章的,RouterOS 已经可以使用 IPv4 网络正常上网。
在 RouterOS v7.4 到 v7.5 这几个版本中,Mikrotik 官方对 IPv6 相关功能做了许多优化,是时候来配置 IPv6 网络了。
根据 Mikrotik 官方文档,目前 RouterOS 能比较好的支持以 SLAAC
方式来配置 IPv6 ,而 DHCPv6 暂时只支持通告前缀信息,而不能分发地址。
而且经过我的测试,如果把公网 IPv6 前缀信息通告到内网设备(即让内网设备直接具有公网 IPv6 地址),当 PPPoE 重新拨号或其他原因导致该公网 IPv6 前缀发生变化时,内网设备虽然也能同步获取新的公网 IPv6 地址,但此时 RouterOS 的 IPv6 路由表已经自动刷新,导致新旧公网 IPv6 地址并存的内网设备无法通过 IPv6 正常上网,只能通过重启该内网设备的网卡,让该内网设备刷新公网 IPv6 地址(等价于去掉旧的公网 IPv6 地址),才能恢复 IPv6 的网络访问。
根据抓取 RouterOS 和 OpenWrt 的 ICMPv6
相关包可以发现,RouterOS 的 Neighbor Discovery
功能目前不支持通告 ICMPv6 Option
为 Type: Route Information (24)
的信息。而且 OpenWrt 在公网 IPv6 前缀发生变化时,除了会通告新的 IPv6 路由信息外,也会在系统 IPv6 路由表中新增路由条目,而旧的 IPv6 条目并不会删除,直到 OpenWrt 系统重启。
总体而言, OpenWrt 对 IPv6 的支持就目前来说是好于 RouterOS 的,毕竟现在 OpenWrt 对 DHCPv6 也有良好的支持。
1.获取IPv6前缀
在之前的文章《4.系统参数调整》中,我们曾关闭了 IPv6 相关功能,此时需要将其打开。
打开 Winbox 并点击左侧导航 IPv6
菜单的子菜单 Settings
。
取消勾选 Disable IPv6
,并将 Max Neighbor Entries
参数(相当于 ARP 表最大条目数)修改为合适的数值,演示为 1024
:

点击左侧导航 IPv6
菜单的子菜单 DHCP Client
,点击“添加”按钮:


说明:
对于 Add Default Route
参数,官方建议是无需勾选。
也没有相关的 RFC 文档说明 DHCPv6 Client
需要添加默认路由,此处存在该设置应该是 RouterOS 独特的 “快捷设置” 方法。
经过测试,该选项勾选与否均不影响后续的设置以及 IPv6 的网络访问;同时也无法解决公网 IPv6 前缀变化后,内网设备具有旧公网 IPv6 地址而无法上网的问题。
DHCPv6 Client
创建完成后,如果正确获取到了 IPv6 前缀信息,将如图所示:

如果未获取到前缀信息,需要让 PPPoE 重新拨号。
如果重新拨号后,仍未获取 IPv6 的前缀信息,那么可能运营商并未提供 IPv6 接入的能力。
2.设置接口IPv6地址
在给内部接口设置公网 IPv6 地址时,拨号的接口 pppoe-out1
是 无需 分配公网 IPv6 地址的。
只需要给内网的网桥接口 bridge1
分配一个公网 IPv6 地址,并附加一个私有 ULA IPv6 地址即可。
说明:
当前 RouterOS IPv6 还未设置防火墙,给内部接口分配公网 IPv6 之后,RouterOS 相当于已经与公网互联。
如果当前 RouterOS 有不完善的安全设置(比如使用了弱登录密码),系统存在被入侵的风险。
因此建议先关闭 DHCPv6 Client
,直到 RouterOS IPv6 防火墙等内容设置完成后,再将其打开。
2.1.给网桥接口分配公网IPv6地址
点击 Winbox 左侧导航 IPv6
菜单的子菜单 Addresses
,点击“添加”按钮:


2.2.给网桥接口分配私有IPv6地址
根据 RFC-4193 中给出的定义,IPv6 的私有地址 ULA 前缀为 FC00::/7
。
该前缀包含 FC00::/8
和 FD00::/8
两个部分,严格意义上 ULA 目前应该使用 FD00::/8
。
方便起见,本文使用 FC00::/7
作为演示。
在实际使用场景下,建议使用类似 RFC4193 IPv6 Generator 的工具来生成符合规范的 ULA 地址。
工具地址:https://cd34.com/rfc4193/
该工具只需要输入接口(例如 RouterOS 的 bridge1
)的 MAC 地址即可,演示如下:

得到符合规范的 ULA 为:

回到 Winbox ,再次点击“添加”按钮:


DHCPv6 Client
正确获取 IPv6 前缀,并且内部网桥 bridge1
两个 IPv6 地址均添加完成后,如图所示:

3.配置ND服务
3.1.配置ND前缀设置
点击 Winbox 左侧导航 IPv6
菜单的子菜单 ND
。
在 Neighbor Discovery
对话框中切换到 Prefixes
选项卡,点击 Default
按钮。
根据 Systemd.Network 中的描述:
Preferred and valid lifetimes for the prefix measured in seconds.
PreferredLifetimeSec= defaults to 1800 seconds (30 minutes) and
ValidLifetimeSec= defaults to 3600 seconds (one hour).
经过一段时间的测试,将 Preferred Lifetime
设置为 1
小时,将 Valid Lifetime
设置为 2
小时较为可靠。


这里可以看到一个标记为 D
的 Prefix fc00::/64
,表示该条目为动态自动生成的。
3.2.配置ND通告
在 Neighbor Discovery
对话框中切换到 Interfaces
选项卡。
鼠标 单击 Interface
为 all
的条目,并将其“禁用”:

点击“添加”按钮:


如果内网环境中没有自建 DNS 服务器,则可以将 DNS Servers
参数设置为 fc00::1
,与 bridge1
的 ULA IPv6 地址相同。
注意:
如果内网中有自建 DNS 服务器,则需要将 DNS Servers
参数设置为内网 DNS 服务器的 IPv6 地址。
假设内网 DNS 服务器分别为 fc00::2
、 fc00::3
,则 ND 配置如下:

ND
配置完成后,如图所示:

4.配置系统DNS
启用 IPv6 后,需要给 RouterOS 指定上游 IPv6 的 DNS 服务器地址。
点击 Winbox 左侧导航 IP
菜单的子菜单 DNS
,并修改参数:

在 Servers
处增加国内知名的 DNS 服务提供商的 IPv6 地址。
腾讯云 DNSPod 的 IPv6 地址为:2402:4e00::
和 2402:4e00:1::
。
阿里云 AliDNS 的 IPv6 地址为:2400:3200::1
和 2400:3200:baba::1
。
注意:
如果内网中有自建 DNS 服务器,则需要将 Servers
参数设置为内网 DNS 服务器的 IPv6 地址。
假设内网 DNS 服务器分别为 fc00::2
、 fc00::3
,则 DNS 配置如下:

5.配置IPv6防火墙
与之前文章《2.配置防火墙和流量整形》中类似,IPv6 的防火墙的配置同样涉及 address-list
、filter
、nat
、mangle
、raw
等内容。
依然建议复制防火墙配置命令,一次性全部粘贴到终端工具中进行 “一键配置” 。
需要注意的是,防火墙配置命令中的部分 IPv6 地址,需要根据实际情况进行调整。
例如,若内网自建 DNS 的 IPv6 地址为 fc00::2
、 fc00::3
,则需要修改 address-list
表中的 local_dns_ipv6
参数。
若需使用 NAT66 的方式来访问外部 IPv6 网络,请在 nat
表中启用第一条防火墙规则。
由于防火墙的配置命令很长,我放在本篇教程的结尾处,以便复制。
IPv6 防火墙配置完成后,回到 Winbox,点击左侧导航 IPv6
菜单的子菜单 Firewall
并查看防火墙各个选项卡中内容:

确认防火墙条目与命令中的条目一致后,便可启用 IPv6 的 DHCPv6 Client
,建议重启一次 RouterOS。
重启内网设备的网卡,检查是否获取了 ULA 地址:

Windows11 IPv6 连接处会显示 “Internet” ,表示此时 Windows 是可以访问 IPv6 网络的。
可以通过这个网站来进行测试 IPv6 Test ,至此,RouterOS 的 IPv6 配置已经完成。
IPv6 Test 地址:https://master.test-ipv6.com
6.命令行配置RouterOS
经过这段时间对 RouterOS 各类基础配置的整理,发现即使是熟练使用 Winbox 来配置,也需要消耗大量的时间。
因此我这里整理了一份纯命令行配置 RouterOS CHR 版本 的脚本,请查阅文件:
Gitee 同步地址:
https://gitee.com/callmer/routeros_toss_notes/blob/master/src/shortcut/fox_ros_chr_shortcut.conf
对于 RouterOS 原生硬件 配置脚本,例如 RB750Gr3 ,请参考文件:
Gitee 同步地址:
https://gitee.com/callmer/routeros_toss_notes/blob/master/src/shortcut/fox_ros_rb750gr3_shortcut.conf
脚本包含了 RouterOS 配置 IPv4、IPv6 的绝大部分内容,剩下的配置项在该文件中也有说明,希望能够减少大家初始化配置 RouterOS 的时间 :) 。

IPv6 防火墙设置代码,注意替换命令中的部分 IPv6 地址参数,将以下命令一次性全部粘贴到终端工具中即可:
如果该段代码不好复制,请查阅我 Gitee 上的同步更新仓库。