记录 RouterOS 配置 IPv6 的过程。
最近入手了一台 MikroTik 路由器,遂借此机会体验一下 ROS 上的 IPv6 配置过程。
由于硬件限制,本次使用的 ROS 为 RouterOS v7
。
以下内容在 v7.1 rc5
~ v7.1.1 Stable
上测试有效。
一个小故事
张三是一个极度缺乏安全感的人。
曾经,住公寓一定选择上门拜访的朋友需要由楼下管理员蒙住眼睛带到门口那种。
如今张三想搬到大一点的地方住,却担心自己的具体住处被朋友们知道。
于是张三想到一个办法:
他买下了一整个小区,将所有别墅的地下打通,出门拜访别人的时候从某一套别墅出入,他人拜访自己的时候在另一套别墅会面,每隔一段时间后变换。
向 IPv6 过渡
IPv4 网络中,由于地址匮乏,大家都躲在数层 NAT 地址转换后边。
外部访问需要逐层「管理员」带路,外部访客并不知道自己在「公寓」里的具体位置。
在 IPv4 时代,人们期待自己能住进独栋别墅,拥有公网地址方便与他人互相链接。
而 IPv6 时代,尽管每一粒沙子都能拥有自己公网地址了,隐私保护却愈发重要。
于是,像张三一样,既想拥有独立门户,又想藏木于林。
人们将「地址」的分配换成了「前缀」分配,前缀不可变更,后缀随意更改。
而可变更的后缀数量比整个 IPv4 的地址数量还要高出几十个数量级。
因此,为实现足够的隐私保护,在 IPv6 中有两种网络拓扑方式:
- 与 IPv4 类似,大家躲在同一个公网地址后边;
- 像张三一样,每个人拥有一段公网地址,随机使用;
第一种类型,称作 NAT66,即 IPv6 向 IPv6 的网络地址转换。
第二种类型,称作 **Prefix Distribution (PD)**,即前缀分配。
确定接入方式
IPv6 和 IPv4 下直接 DHCP 或 PPPoE 直接获取单一地址不同,获取的是一个地址前缀,加之 IPv6 从草案到行业事实标准尚未完全明朗,目前的地址分配方式百花齐放。
多数情况下,用户仅有私网 NAT IPv4 网络时,通常通过 DHCPv6 有状态方式获取 IPv6 Native 地址接入网络。但由于实际拓扑和设备存在差异,具体每个设备的接入方式略有不同。
一般而言,直接使用 ROS 桥接进行拨号可以选择的接入方式最为丰富。
可以的话,请联系客服或安装师傅更换为桥接拨号。
受限于 ROS 系统,要确定具体接入方式,直接打开 ROS 的 DHCPv6 Client 是最快的。
首先,将 Interface 选择为连接光猫的以太网口,对于桥接拨号选手选择 PPPoE 接口。
然后尝试只选择 Request
选项下的 address
/prefix
或两者同时选上,接着按下 Apply
。
此时如果右下的 Status
提示 bound
,则说明这一接入选择是可用的。
若三种选法都没有反应,可以尝试勾上 Use Interface DUID
,这对于某些 ISP 是必要的。
此时检查 Status 标签,记下 Prefix 地址最后 /
后的数字,这是 ROS 得到的前缀长度。
并按照对应的 Requests
方式,判断应该使用的接入方式:
address
方式:使用 NAT66 接入prefix
方式:若前缀长度大于 64,使用 NAT66 接入;若前缀长度小于 64,可使用 PD 或 NAT66address+prefix
方式:同prefix
方式
注意:
前缀长度限制了标准情况可以接入的设备总数。
IPv6 下每个设备至少要分配一个 /64
的地址块,例如前缀长度为 60 则只够供 16 个设备使用。
若前缀长度不足够使用,为确保安全应建议使用 NAT66。
NAT66 接入
- 启用 IPv6 - DHCP Client,Requests 类型选择 address;
- 设置一个供内网使用的 IPv6 私有地址池,可以分配足够多的
/64
地址块,例如fefe::/56
; - 为 ROS 添加内网 IPv6 地址,并设置宣告;
- 启用 IPv6 - DHCP Server,设置地址池为第一步建立的地址池;
- 重启接入路由设备的网卡,检查是否分配到第一步设置前缀的地址,而非
fe80:
开头的地址。
DHCP-PD 接入
- 启用 IPv6 - DHCP Client,Requests 类型选择 prefix,设置 pool name;
- 启用 IPv6 - DHCP Server,设置地址池为第一步设置的地址池;
- 重启接入路由设备的网卡,检查是否分配到第一步设置前缀的地址,而非
fe80:
开头的地址。
Tips
当使用光猫进行拨号时,ROS 得到的 IPv6 地址过期时间可能比实际更长。
此时无法通过 IPv6 访问网络,但 ROS 依然没有向光猫申请新地址。
其中一个办法是使用计划任务定时指向脚本,检测网络连通性并自动重启 DHCP Client 客户端。
具体脚本如下:
# Auto renew IPv6 Address
# AliDNS
:global checkip 2400:3200::
:global successcount
:global dorenew false
# Check connectivity
:log info "Start checking IPv6 connectivity..."
:set successcount [/ping $checkip count=5]
:log info ("Success ping count = " . $successcount . ".")
:if ($successcount = 0) do={:set $dorenew true}
# Renew IPv6
:if ($dorenew = true) do={
:log info "Restarting DHCPv6..."
/ipv6 dhcp-client enable PPPoE
}