说实话,RouterOS的IPv6双栈配置我在v6时代就想过要写,一直拖到v7.6才真正系统折腾完。主要原因倒不是难,而是网上资料太散了,有人告诉你只要加一条dhcp-client,有人说必须把防火墙全放行,还有人卡在光猫桥接那一步死活拨不上号。这次我把完整流程按“光猫桥接 + RouterOS v7.6 拨号 + IPv6 PD前缀委派 + LAN侧ND通告”整体过了一遍,从零到客户端正常拿到公网IPv6地址,差不多就是5分钟的配置量(前提是光猫已经改桥接)。
这篇文章适合家里是移动/电信/联通宽带、手上有RouterOS设备(比如RB750Gr3、RB4011、hAP ax系列都行)、想彻底搞明白IPv6双栈而不是只抄一条命令的折腾党。最近不少应用也在往IPv6上靠,比如夸克网盘、PS5远程串流这类场景,公网IPv6能通不通会直接影响使用体验。下面会把方案选型、核心原理、实操命令、常见坑一次讲清楚。
1. 动手前必须想清楚的3件事
1.1 光猫桥接为什么是IPv6双栈的地基
很多人问我,光猫不改桥接,直接用RouterOS做二级路由,能不能拿到IPv6?答案是可以,但限制很多。家用光猫默认是路由模式,它自己会做一次PPPoE拨号,运营商只分配给光猫一个公网IPv4和一个IPv6前缀。你在后面接RouterOS,RouterOS拿到的只是私有地址,IPv4要再做一次NAT,IPv6要想让内网设备拿到真正的公网地址,得看光猫的“IPv6透传”功能是否正常。我实测过几款不同品牌的光猫,IPv6透传的兼容性相当看人品,有的设备透传后内网拿到的还是NAT66的私有地址,有的干脆RA报文发不出去。
所以更干净的做法是:光猫改桥接,由RouterOS直接承担PPPoE拨号工作。这样RouterOS就是网络出口设备,IPv4不需要二级NAT,IPv6可以直接通过DHCPv6-PD申请运营商下发的前缀,再通过ND协议把地址通告给内网设备。整个网络的地址结构一目了然,排查问题也方便得多。
改桥接要登录光猫的超级管理员界面,普通用户账号是不行的。常见品牌如华为、中兴、创维(热词里的创维SK-D740S就是典型型号)、烽火,超管入口基本都是光猫的IP加特定用户名密码。各地情况不太一样,最靠谱的渠道是联系宽带装维师傅要超级密码,不要自己去爆破,光猫后台多次错误登录会被锁。改桥接时最重要的是记住原来的VLAN ID和PPPoE账号密码,VLAN ID一般在“宽带设置”里的Internet连接里能看到,比如有些地区移动给的是41,电信给的是101,这个值不同地区差异很大,忘记录后面RouterOS拨号肯定失败。
1.2 确认你的宽带IPv6下发方式
光猫桥接之后,RouterOS要通过PPPoE拨号,拨号成功后再向运营商申请IPv6前缀。目前国内三大运营商的家宽普遍支持DHCPv6-PD(前缀委派),也就是运营商不是单独给你一个IPv6地址,而是给你一整段前缀,让你自己再划分给内网设备用。家用场景常见分配大小有/60或/64,也有部分地区给/56。前缀长度直接影响你能划分出多少个子网,/64只能划一个子网,/60能划16个,/56能划256个。对普通家庭来说/64也够用,但如果你有多个VLAN或者想给不同场景分不同网段,/60以上会更舒服。
在开工之前,先用电脑直连光猫桥接后的WAN口,手动拨号测一下你能不能正常拿到IPv4和IPv6地址。Windows下可以用系统自带的PPPoE拨号,如果这种原生态方式能拿IPv6,那说明运营商侧没问题,问题只会出在RouterOS配置上。如果原生态方式都不行,先联系运营商确认你的宽带套餐是否开通了IPv6权限,别在RouterOS上瞎折腾。
1.3 RouterOS v7.6的IPv6开关与版本准备
RouterOS从v7开始,IPv6的支持已经有了质的提升,尤其是v7.6前后,DHCPv6客户端对PD前缀的处理、ND通告的稳定性都比较成熟。如果你还在用v6老版本,强烈建议先升级到v7.6以上再开始,v6和v7的IPv6命令格式差别不小,网上很多旧教程在v7上执行会直接报错。
进入系统后,先确认IPv6功能没有被全局关闭。默认情况下RouterOS是启用IPv6的,但保险起见执行一下:
/ipv6 settings print /ipv6 settings set disable-ipv6=no看到disable-ipv6=no就说明IPv6协议栈已经跑起来了。另外提醒一下,RouterOS的IPv6是独立的一套防火墙、独立的路由表、独立的邻居缓存,和IPv4完全分开。很多人配置完IPv6后发现内外网不通,就是因为只放行了IPv4防火墙,IPv6防火墙的默认策略是drop,把转发流量全部拦死了。
2. IPv6双栈配置的核心细节与选型
2.1 SLAAC、DHCPv6和前缀委派到底什么关系
IPv6不像IPv4那样靠DHCP分配地址这么单一,它有几套机制:SLAAC(无状态地址自动配置)是路由器周期性地发送RA(路由通告)报文,终端设备收到后自己根据前缀和网卡MAC生成IPv6地址;DHCPv6则更像传统DHCP,有状态地分配地址;而DHCPv6-PD是专门用于路由器向上游申请前缀的机制。
在家庭双栈场景里,这三者的关系是:RouterOS通过PPPoE拨号后,用DHCPv6客户端向上游申请前缀,拿到PD前缀后,再在LAN口配置一个IPv6地址,开启ND的advertise功能,向内网设备发送RA报文。内网设备收到RA之后,会用RouterOS通告的前缀自己生成IPv6地址,这就是SLAAC。整个过程不需要在内网单独跑DHCPv6服务,终端也能正常获取公网IPv6地址,只是DNS信息有时候还要靠RA报文里的RDNSS字段下发,或者手动指定,这一点后面会细说。
理解这个流程后,你就知道常见配置误区在哪了:很多人以为要给LAN口手动配一个公网IPv6地址,其实不用。LAN口地址是从PD前缀池里自动取用的,你只需要告诉RouterOS“我要在哪个桥接接口上做ND通告”,它会自动从池子里取出第一个/64子网使用。
2.2 RouterOS的地址池自动分配比你想的智能
RouterOS v7.6的DHCPv6客户端支持把上游下发的前缀池化,然后用from-pool参数让特定接口从这个池子里自动分配地址。配置的时候,你先给DHCPv6客户端指定一个池子名字,比如ipv6-pool,再在桥接接口上添加地址时指定from-pool=ipv6-pool,并填一个接口地址,比如::1/64。
这里有个关键参数:pool-prefix-length。它决定RouterOS从PD前缀里给LAN侧分配多大的子网。举个例子,运营商给了/60前缀,你想在LAN侧拿到一个/64子网,就把pool-prefix-length设为64,RouterOS会自动切分出16个/64子网中的一个给LAN接口。如果你家里有多个VLAN,希望每个VLAN都拿到独立的/64子网,就可以多建几个地址条目,RouterOS会自动从池子里分配不同段,这对于想跑多VLAN家庭组网的人来说非常实用。
2.3 DNS选型与浏览器卡顿的关系
IPv6配置好后,很多人遇到一个诡异问题:“手机显示拿到了IPv6地址,但打开网页反而变卡了,经常转圈。”这个问题我在热词里也看到了,基本可以锁定在DNS上。RA报文虽然可以携带RDNSS字段,把路由器自身作为DNS服务器下发给终端,但RouterOS的DNS转发器默认只监听IPv4,它不会自动把IPv6查询转发给上游的IPv6 DNS。终端拿到IPv6地址后,系统会优先尝试AAAA记录(IPv6地址记录)解析,如果DNS服务器不会处理或者超时,浏览器就会在等待中卡住。
解决思路很直接:在内网客户端上手动指定一组可用的公共IPv6 DNS,或者在RouterOS上把DNS服务配置成支持双栈。比如腾讯的IPv6公共DNS是2402:4e00::,阿里的是2400:3200::1,在RouterOS里可以设置:
/ip dns set servers=2402:4e00::,2400:3200::1有些宽带搭配运营商自己的DNS其实也不慢,但公共DNS在稳定性上更可控。关于浏览器卡顿,我后面第4节还会专门展开。
2.4 IPv6防火墙必须单独放行
RouterOS的IPv6防火墙是独立于IPv4的,命令入口是/ipv6 firewall。默认策略很严格,input链和forward链基本都是drop,所以即便你拿到了地址、配了ND,如果防火墙不放行,内网终端仍然无法ping通外网IPv6地址。
至少要做到三点:input链放行ICMPv6(ND协议等可靠性依赖它)和已建立连接,forward链放行已建立连接和ICMPv6,再放行DHCPv6客户端使用的UDP 546端口。至于要不要放行新建立的出站连接,看你的需求,如果只是让内网设备正常访问外网,通常需要在forward链放行connection-state=new的出站流量,或者干脆给LAN侧接口放行。
3. 实操过程全记录:从光猫桥接到双栈通网
3.1 光猫桥接实操要点
这一步虽然不发生在RouterOS上,但它是后面一切的基础。以常见的创维SK-D740S为例:先用超级管理员账号登录光猫后台,找到“网络”或“宽带设置”,页面上会列出Internet连接条目。确认当前连接模式是“Route(路由)”,记录下它的VLAN ID,然后把模式改成“Bridge(桥接)”,绑定LAN1口,保存重启。
注意几个细节:桥接后光猫的Wi-Fi功能通常就废了,LAN口接路由器,光猫自身不再分配IP地址。另外有些地区的光猫会把宽带账号的MAC地址绑定在OLT侧,你换RouterOS拨号后如果一直651错误拨不上,先试一下克隆原光猫的MAC地址到RouterOS的PPPoE接口上。这个坑在热词“光猫改桥接mac地址”里也有人提到,确实存在。
RouterOS侧拨号配置我建议直接命令行,方便核对:
/interface pppoe-client add name=pppoe-out1 interface=ether1 user='宽带账号' password='宽带密码' add-default-route=yes default-route-distance=1 use-ipv6=yes这里的use-ipv6=yes是关键词,不加的话,PPPoE拨号后IPv6协议栈不会自动跑到这个接口上去。拨号成功后,/interface pppoe-client monitor pppoe-out1确认拿到IPv4地址。
3.2 DHCPv6客户端申请PD前缀
拨号有了,接着给RouterOS加上IPv6的前缀请求:
/ipv6 dhcp-client add interface=pppoe-out1 pool-name=ipv6-pool request=prefix use-peer-dns=yes pool-prefix-length=64这里request=prefix表示只申请前缀,不要地址;use-peer-dns=yes表示从上游获取DNS,不过国内运营商的IPv6 DNS有时候并不好用,拿不到也没关系,后面手动指定即可。执行后,用print看状态:
/ipv6 dhcp-client print detail如果status=bound,说明获取成功。这时候你会在路由表里看到一条通往pppoe-out1的直连路由,前缀是你申请到的PD前缀,比如240e:xxxx:xxxx::/60。
3.3 LAN侧ND通告与地址自动分配
现在把PD前缀分给局域网。假设LAN口桥接接口名是bridge,执行:
/ipv6 address add address=::1/64 from-pool=ipv6-pool interface=bridge advertise=yes这条命令的含义是:从ipv6-pool池中自动取一个/64子网,给bridge接口配上子网前缀::1地址,并启用该接口的RA广告。终端设备接进来后,收到RA就会自己生成一个216-bit前缀 + 64-bit接口标识的公网IPv6地址。
再确认一下prefix长度配置。如果你希望RouterOS自动规划lan侧前缀,而你申请的是/60,那么上面命令里的/64基本是固定的——因为LAN侧至少需要/64才能启用SLAAC。实际上RouterOS会自动从/60池子里挑一个/64段,你不用担心冲突。
验证接口地址:
/ipv6 address print /ipv6 nd print3.4 防火墙放行规则配置
配置IPv6防火墙,建议直接复制我这份基础模板,然后按需微调:
/ipv6 firewall filter add chain=input action=accept protocol=icmpv6 comment="allow ICMPv6" add chain=input action=accept connection-state=established,related comment="allow established" add chain=input action=accept protocol=udp dst-port=546 comment="allow DHCPv6 client" add chain=input action=accept in-interface=bridge comment="allow from LAN" add chain=input action=drop in-interface=pppoe-out1 comment="drop WAN input" add chain=forward action=accept in-interface=bridge comment="allow LAN forward" add chain=forward action=accept connection-state=established,related comment="allow forward established" add chain=forward action=accept protocol=icmpv6 comment="allow forward ICMPv6" add chain=forward action=drop in-interface=pppoe-out1 connection-state=new comment="drop new WAN forward"这里我没有放行所有从WAN进来的转发新连接,避免把内网服务完全裸奔到公网上。如果后面想开某些服务(比如PS5远程串流),再单独针对端口放行。ICMPv6一定要放行,IPv6的邻居发现、重复地址检测、路径MTU发现全都依赖它,不放行即使地址到了也不通。
3.5 验证双栈是否真的通了
配置完成后,在RouterOS上先做一轮自检:
/ping 2400:3200::1 /ping 2402:4e00::能ping通阿里或腾讯的IPv6地址,说明WAN侧IPv6通道已经建立。然后在电脑或手机上断开Wi-Fi重新连接,确保重新收到RA报文,再用系统命令查看是否获取到IPv6地址:
- Windows:
ipconfig,看“IPv6地址”是否为240e/2408/2409等公网前缀 - macOS:
ifconfig en0或系统偏好设置里看IPv6地址 - Android:设置-状态信息,能看到IPv6地址
同时用浏览器打开www.test-ipv6.com,如果评分里IPv6能过,IPv4能过,才算真正的双栈工作正常。也可以直接访问一个纯IPv6站点,比如ipv6.baidu.com,通不通一目了然。
4. 有IPv6地址却用不了?常见问题与排查实录
4.1 客户端能看到地址,但外网ping不通
这个现象实在太典型了,热词里“有ipv6地址但是不能使用”说的就是它。原因通常有三个。第一个是RA报文没把默认路由下发给终端,检查RouterOS的/ipv6 route print,确认存在一条::/0经pppoe-out1的默认路由,没有的话检查DHCPv6客户端是否正常bound。第二个是防火墙forward链默认drop,这个最普遍,需要保证你的IPv6防火墙放行了LAN侧转发的new、established、related流量。第三是终端自己的IPv6扩展隐私地址策略问题,Windows下可以执行netsh interface ipv6 show prefixpolicies,确认::ffff:0:0/96排在::/0前面,否则系统会优先用IPv4,看起来像IPv6不能用。
4.2 开启IPv6后浏览器反而变卡
这个坑我实际遇到过,配好IPv6的第一天,打开B站明显比纯IPv4时候慢,后来定位到是DNS的AAAA记录解析超时。浏览器拿到域名后会先查IPv6地址,如果系统配置的DNS服务器无法应答AAAA查询,必须等到超时才会尝试IPv4。解决办法是:把内网终端的DNS手动指到一个响应快的IPv6地址,比如腾讯2402:4e00::;如果是RouterOS自己下发DNS,确保/ip dns里同时配了IPv4和IPv6的DNS,并且内网设备不要用RouterOS的IPv4地址作为唯一DNS。你也可以在Windows下用netsh interface ipv6 show prefixpolicies查看前缀策略,把IPv4优先策略调高,优先走IPv4,但这只是绕路方案,最好还是把DNS修好。
4.3 光猫桥接后IPv4正常、IPv6没有任何动静
这种局面通常出在桥接模式没改干净,或者PPPoE拨号时没有启用IPv6。先说接口检查:登录光猫确认Internet连接的封装模式确实变成了“桥接”,而不是“路由+桥接混合”。有些光猫有个“IPv6透传”开关,桥接后如果还开着,反而会干扰RouterOS正常发起DHCPv6请求,建议关掉。RouterOS侧检查use-ipv6是否在PPPoE接口上开启了,我遇到过有人漏了这一步,IPv4怎么拨怎么有,IPv6就是不出前缀。如果前两项都正常,试着重启PPPoE接口,重新触发一次IPv6协商,运营商经常有会话状态残留,重新拨号能解决多数奇怪问题。
4.4 光猫改桥接后掉线或网速波动
改桥接后如果频繁掉线,大概率是光猫侧TR069远程管理在搞鬼,运营商可能会定期下发配置重置桥接设置。解决办法是,在光猫后台找到“远程管理”相关选项,把TR069的周期上报关掉,或者干脆删掉TR069连接。另一个常见问题是光猫和RouterOS的MTU不一致,PPPoE常规MTU是1492,如果桥接后某些网页打不开,检查一下RouterOS的PPPoE接口MTU是否被手动改过。还有个热词提到的“光猫改桥接mac地址”,如果运营商绑定过MAC,换路由器拨号就会出现拨号成功但几秒钟掉线的情况,克隆旧设备MAC就能解决。
4.5 常见问题速查表
| 表现 | 可能原因 | 排查与解决 |
|---|---|---|
| 设备拿到IPv6地址但ping不通外网 | IPv6防火墙forward链drop或默认路由缺失 | 检查/ipv6 route print和/ipv6 firewall filter |
| 浏览器卡顿、部分网站加载慢 | DNS AAAA查询超时 | 手动给终端指定2402:4e00::等IPv6 DNS,或调整前缀策略 |
| RouterOS有PD前缀但LAN口没地址 | advertise=no或from-pool未指定 | 确认/ipv6 address print,补上advertise=yes |
| PPPoE拨号成功但IPv6不生效 | PPPoE接口漏配use-ipv6=yes | 编辑pppoe-client配置,加入该参数后重启接口 |
| 改桥接后经常掉线 | 光猫TR069远程管理重置 | 在光猫后台关闭TR069上报,或删除TR069连接 |
| 拨号成功但几秒断线 | 运营商绑定光猫MAC | 在RouterOS PPPoE接口克隆原光猫MAC |
4.6 实操中的几个独家避坑技巧
最后补几个不太容易在文档里看到的心得。一是测试IPv6连通性的时候,尽量先把电脑用网线直连RouterOS的LAN口,不要走Wi-Fi,尤其不要用苹果手机的个人热点模式去测,设备的私密MAC地址和IPv6隐私扩展会影响判断。二是RouterOS升级后IPv6配置不会丢,但部分版本的防火墙默认行为可能有调整,升级完务必检查一遍/ipv6 firewall filter的状态。三是如果你的宽带拿到了/60前缀,LAN侧只有一个/64子网用不完,可以考虑单独划一个VLAN给IoT设备,后续想调整组网也更灵活,配置方法就是在/interface bridge vlan加VLAN,然后重复一遍/ipv6 address add from-pool的操作,地址会自动从池子里选一个不同段。
我个人在实际操作中的体会是,RouterOS的IPv6配置本身并不复杂,真正的复杂度全在“别人家”的设备干扰上——光猫、运营商绑定、终端DNS策略,每一个环节都可能卡人一下。如果你现在是IPv4用的好好的,想上IPv6,建议先看一遍这篇文章里的排查表再动手,至少能少走两三个弯路。这波配置完成后,如果你的宽带支持,公网IPv6地址就能稳定分配给家里每一台设备了。接下来可以玩的花样还挺多的,比如给内网NAS配一个固定后缀的IPv6地址,出门在外直接通过IPv6访问,不需要端口映射;或者像热词里提到的PS5远程串流,IPv6地址天然就是全网唯一的公网地址,串流体验会比走中转服务器顺畅得多。配置这东西,搞通一次后就简单了。