ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

RouterOS v7.6 IPv6双栈配置实战:从光猫桥接到公网访问

RouterOS v7.6 IPv6双栈配置实战:从光猫桥接到公网访问 “又折腾网络了”最近好几个朋友来问我RouterOS怎么配IPv6尤其是家里换了千兆宽带之后总觉得花了钱没享受到应有的体验。确实现在运营商普遍不给公网IPv4了给的基本都是大内网地址想从外面连回家里看个NAS、连个摄像头难上加难。IPv6就不一样了全球唯一公网地址直接一步到位。不过话说回来RouterOS的IPv6配置跟IPv4完全是两套逻辑默认关得严严实实确实劝退了不少人。这篇文章我就拿RouterOS v7.6版本为例把从光猫桥接到IPv6双栈落地的完整链路跑一遍。整个过程不用改代码、不用装插件纯图形界面加少量命令就能搞定理论上5分钟能跑通IPv6前提是你得把准备工作做对。我尽量把每一步为什么要这么做的原因也讲清楚这样换到其他硬件平台、其他版本固件你也能自己推导出该配什么而不是只会抄作业。适合家里有软路由、喜欢折腾MikroTik设备、或者刚入手RB5009/RB4011这类机型的朋友参考。1. 方案选型与整体思路拆解1.1 为什么非要做IPv6双栈现在的宽带环境纯IPv4已经是过去式了。IPv6双栈的意思是设备同时拥有IPv4和IPv6两种地址两种协议栈并行工作。日常上网走IPv4访问IPv6资源时自动走IPv6无缝切换。你可能会问IPv4用得好好的折腾IPv6干啥三个字公网。运营商分配给家庭宽带的IPv4地址绝大多数是经过NAT转换的私网地址你家里的设备对互联网来说就是个隐形人。想从公司连回家里NAS要么搞内网穿透要么用各种中转服务延迟高、不稳定、还得花钱。IPv6地址资源充足运营商可以直接分配一个全球唯一的公网地址段到你家家里的每台设备都能拥有独立公网IP点对点直连这才是真正的互联网体验。再一个很多资源已经IPv6化了。国内主流视频平台、网盘、甚至不少游戏服务器都支持IPv6访问。双栈配好之后某些场景下访问速度确实有感知提升尤其是高峰期IPv6出口带宽往往比IPv4更宽裕。说白了IP协议升级是大势所趋早配早舒服。1.2 为什么选择RouterOS v7.6作为主路由RouterOS是MikroTik设备的路由器系统v7系列相比老v6最核心的变化是把内核升级到了Linux对IPv6的支持完善了很多BGP、VRF这些高级功能也下放了。v7.6这个版本属于v7迭代里相对成熟稳定的一个分支IPv6的DHCPv6-PD客户端、路由通告RA、DHCPv6服务器这些基础组件跑起来都没什么毛病。MikroTik设备对IPv6的定义很有意思默认安装之后IPv6协议栈是关闭的你得先把它打开不然所有IPv6配置项都是灰的。而且它的IPv6防火墙默认是空规则策略这一点跟IPv4完全不一样。IPv4那边有个默认的FastTrack和NAT规则帮你兜底IPv6这边你打开防火墙包一级页面里面干干净净什么都没有意味着所有IPv6数据包都会被默认接受这既是自由也是风险后面配置防火墙时得自己把门看住。另一个选RouterOS的理由是它足够灵活。光猫桥接之后PPPoE拨号直接由RouterOS完成IPv6前缀的获取、下发、路由通告全部能自定义不会像有些家用路由器那样给你个半残废IPv6有地址却没路由或者只给终端一个地址但外网根本不通。1.3 双栈配置的核心链路与架构规划整个双栈方案链路是这样的光猫改成桥接模式由RouterOS直接PPPoE拨号获得IPv4公网地址同时通过DHCPv6-PD前缀委派向运营商申请一个IPv6地址段。拿到这个段之后RouterOS再通过路由通告RA和DHCPv6服务器把地址分给局域网里的所有设备。终端设备自动获取IPv6全局地址通过RouterOS转发上网。一句话概括光猫退位路由器掌控一切。“桥接模式”这个词需要展开一下光猫默认是路由模式它自己拨号、自己分配IP相当于你家里已经有一个路由器了再串一个路由器就形成了双层NAT很多功能会受限。把光猫改成桥接就是让它变成一根透明管道只做光电信号转换把拨号权交还给你的主路由器。这个架构的好处是所有网络策略在RouterOS一台设备上集中管理IPv4和IPv6并行不悖互不干扰也比较符合现代家庭网络“薄汇聚、厚核心”的设计思路。2. 动手前的关键准备光猫桥接与信息摸底2.1 光猫改桥接的标准操作流程光猫改桥接是老生常谈但每次都会有人卡在这一步。目前国内运营商的光猫普遍可以通过超级管理员账号进入管理后台在“网络-宽带设置”界面下修改连接模式。不同品牌光猫界面差异比较大有的叫“路由模式”有的叫“PPPoE”有的叫“桥接”你找带有“Internet”或“TR069”标识的链接配置项就行。操作前千万记得备份光猫原有配置尤其是PPPoE拨号账号和密码。改桥接之前可以在光猫的“状态-PPPoE”信息里找到拨号用户ID密码通常是加密显示的拿不到的话直接打运营商客服要或者找装维师傅要超级密码和拨号密码一般都会给。这里有个小技巧如果你之前是光猫拨号路由器自动获取IP上网那么拨号密码大概率是写在光猫配置里的改完桥接后原配置会丢失不提前把账号密码抄下来桥接完只能干瞪眼。超级管理员密码每个品牌不一样网络上能搜到很多但有可能被运营商改掉。试不出来就老老实实找装维师傅要态度好一点基本都能拿到。拿到后进入光猫后台找到Internet连接把连接模式从“Route”改成“Bridge”绑定LAN1口一般千兆口优先保存重启。改完光猫自带的WiFi和DHCP功能就失效了这时候赶紧把电脑网线插到RouterOS的LAN口上进入RouterOS配置拨号。注意有些地区的光猫即使改了桥接TR069仍然可能被运营商后台远程修改配置。如果后续发现问题比如拨号掉线、网速变慢检查一下光猫后台连接列表必要时直接把TR069连接删除或禁用前提是你已经通过其他方式拿到了拨号信息。2.2 光猫桥接与路由器拨号的前置排查很多人在光猫改桥接之后第一步就卡住路由器PPPoE拨号一直拨不上红灯狂闪。这通常是几个原因造成的。首先确认光猫的Internet连接是否真的改成了桥接有的光猫有多个连接保留了一个路由模式的Internet连接Bridge和Route同时存在数据互抢必然拨号失败。你要把所有带Internet字样的连接全部改为桥接或者删除多余的路由模式连接。其次检查PPPoE账号密码是否完全正确。这里有个坑光猫默认拨号的用户名可能是“宽带账号区域”比如“1234567890ah”这个“”之后的后缀必须完整保留不能只填前面的数字。密码如果是动态随机密码需要拨打客服电话重新获取。在RouterOS里配置PPPoE客户端时要在接口列表选择WAN口对应的以太网接口服务名字段可以留空默认即可。再一个就是VLAN ID的问题。部分地区光猫桥接后PPPoE需要携带特定VLAN Tag才能拨号成功。这个VLAN ID在光猫后台能看到通常是一个4位数字比如100、101之类。如果直接在RouterOS拨号失败尝试在PPPoE接口所在物理接口上创建一个VLAN接口把VLAN ID填进去再把这个VLAN接口绑定为PPPoE的接口就能解决。这招对付电信的光猫尤其管用。2.3 验证运营商IPv6开通情况与地址获取方式光猫桥接、PPPoE拨号都搞定之后先别急着配置IPv6先用一条命令确认运营商到底给不给你IPv6前缀。在RouterOS终端执行/ipv6 dhcp-client print如果能看到一个client条目状态是bound绑定了一个前缀Prefix恭喜你运营商IPv6已经通了后面就是分发给内网设备的事。如果这个列表是空的或者状态显示error说明PPPoE拨号虽然成功了但运营商没有给你下发IPv6前缀。这有可能是你的宽带套餐本身没开通IPv6也可能是光猫里还有残留配置拦截了DHCPv6请求。这时先用自己的电脑直接拔掉RouterOS用电脑PPPoE拨号测试一次拨号成功后观察网卡是否获取到了IPv6地址。如果能获取说明线路没问题问题出在RouterOS的DHCPv6客户端配置上如果电脑拨号都拿不到IPv6那就得联系运营商开通了。实际经验中大部分家庭宽带都已经默认开通IPv6拿不到的少数情况多出现在某些老旧接入设备上重启光猫和路由往往就能解决。3. RouterOS v7.6 IPv6双栈配置完整实操3.1 IPv6基础概念与RouterOS对应配置项映射开始实际操作之前花两分钟把一个基础概念理顺IPv6地址细分为三种类型。一是链路本地地址Link-Local前缀是fe80::/10自动生成只在同一物理链路上使用相当于小区内部的门牌号二是全局单播地址Global Unicast AddressGUA前缀是2000::/3这就是你设备的公网身份三是唯一本地地址Unique Local AddressULA前缀是fc00::/7相当于IPv4时代的私网地址。RouterOS v7的IPv6配置核心就三块首先要用命令启用IPv6协议栈然后配置DHCPv6客户端从运营商侧请求前缀最后配置本地接口的IPv6地址和路由通告把地址分发给内网。这三步做好双栈基本就通了。还有一个概念叫DUIDDHCP Unique Identifier这是RouterOS作为DHCP客户端时的唯一标识运营商有时候会把它和宽带账号绑定如果你换了路由器导致IPv6获取失败可以尝试在DHCPv6客户端配置里修改DUID类型比如改成LLT链路本地时间或LL仅链路本地看哪个能成功。这一步很邪门会直接影响能不能拿到前缀但又是最多人不知道的排错点。3.2 启用IPv6协议栈并配置DHCPv6-PD前缀获取RouterOS v7安装完成后IPv6模块默认是关闭的需要先打开。在终端里执行/ipv6 settings set disable-ipv6no然后启用PPPoE接口假设已经配置好PPPoE拨号接口名通常叫pppoe-out1查看接口状态确认IPv4已经拨上/interface pppoe-client monitor pppoe-out1看到status是established说明拨号成功。接下来就是核心步骤配置IPv6 DHCP客户端让它请求运营商下发的前缀。/ipv6 dhcp-client add interfacepppoe-out1 pool-nameipv6-pool requestprefix use-peer-dnsno这条命令看着简单里面有几个参数值得展开说说。interface就是拨号成功的PPPoE接口pool-name是给将来的IPv6地址池起个名字后续给内网分配地址要用requestprefix是明确让客户端去请求前缀委派PD这个字段必须指定成prefix如果不指定客户端只会去请求地址而不是前缀就无法实现整个LAN分配IPv6了use-peer-dnsno是告诉路由器不要用运营商下发的IPv6 DNS因为我更习惯用国内公共DNS这个可选。执行完之后再次查看DHCPv6客户端状态/ipv6 dhcp-client print detail重点看Status列显示bound说明已经绑定了前缀后面的Prefix列会显示类似于240e:1234:5678:9000::/60这样的地址段段的大小可能是/60或/56这就是你整个局域网拥有的公网IPv6地址池。运营商不同给的前缀长度也不一样电信通常是/60或/56移动有些给/64这些都够用。注意这里有个很关键的细节如果运营商给的前缀是/64而你又想给LAN划分多个子网可能不够分。但家用场景下/64的地址空间是1.8×10^19个IP给自己家里所有设备分配绰绰有余不用纠结这个问题。如果你想要更细致的VLAN划分可以跟运营商申请更大前缀不过这是后话。3.3 LAN口IPv6地址分配与路由通告RA配置路由器拿到了前缀接下来就要把它分给内网设备了。这里有两种方式有状态DHCPv6和无状态SLAACRA。家用场景强烈推荐用SLAACRA组合也就是路由器通过RA路由通告告知内网设备“我这有一个IPv6前缀你自己根据MAC地址生成完整地址就行”。这种方式配置简单内网设备基本都原生支持Android设备更是只支持SLAAC你要是不开RA安卓手机永远拿不到IPv6地址。RouterOS里这一步操作非常顺滑先用上一节创建的IPv6地址池直接给LAN接口分配全局地址并开启通告/ipv6 address add from-poolipv6-pool interfacebridge1 advertiseyes这里的bridge1是你的LAN网桥接口如果你的LAN不叫这个名换成你实际的接口名。from-pool表示路由器自动从地址池中取出一个IPv6地址作为自身LAN口地址advertiseyes会自动在对应的桥接接口上启用RA路由通告。执行完之后查看是否有全局IPv6地址/ipv6 address print正常情况下你应该能看到两个地址一个是fe80开头的link-local地址另一个是240e或2408等开头的全局单播地址。内网电脑连上之后理论上已经能自动获取到IPv6地址了。不过很多终端设备不会立刻刷新网络状态Windows可以执行ipconfig /renew6手机可以关闭再打开WiFi等几秒再看。如果你希望内网设备能通过IPv6去访问互联网还需要保证路由器自身具备转发能力这个默认是开启的。可以在终端里看一眼/ipv6 settings print确认forward字段数值是yes。同时检查一下路由表应该有一条default route指向pppoe-out1接口/ipv6 route print这条默认路由是DHCPv6客户端拿到前缀之后自动生成的一般不需要手动添加。3.4 IPv6防火墙规则与转发策略配置这一步是多数人最容易忽略、也是最大的坑。RouterOS v7的IPv6防火墙默认是空的等于所有IPv6报文放行这在安全性上是完全不可接受的。而且更隐蔽的一个问题是如果防火墙全开ICMPv6会被放行这看似方便调试但会给内网设备带来风险。正确的做法是建立一套跟IPv4防火墙类似的基础安全规则。参考下面的规则集按顺序执行# 允许已建立的连接和相关的ICMPv6如ping回显、邻居发现 /ipv6 firewall filter add chaininput connection-stateestablished,related actionaccept # 允许ICMPv6协议IPv6本身依赖ICMPv6工作不能像IPv4那样封锁 /ipv6 firewall filter add chaininput protocolicmpv6 actionaccept # 允许DHCPv6客户端流量UDP 546/547端口用于获取IPv6地址和前缀 /ipv6 firewall filter add chaininput protocoludp dst-port546 actionaccept /ipv6 firewall filter add chaininput protocoludp dst-port547 actionaccept # 允许来自内网网段的IPv6访问路由器 /ipv6 firewall filter add chaininput src-addressfc00::/7 actionaccept /ipv6 firewall filter add chaininput src-addressfe80::/10 actionaccept # 其余input数据包丢弃 /ipv6 firewall filter add chaininput actiondrop # 转发链规则允许已建立的连接通过 /ipv6 firewall filter add chainforward connection-stateestablished,related actionaccept # 转发链默认丢弃防止内网设备被外部任意访问 /ipv6 firewall filter add chainforward actiondrop简单解释一下为什么这些规则是必须的。IPv6没有ARP协议它依赖ICMPv6的邻居发现NDP来解析MAC地址所以不能像IPv4那样把ICMP全封了否则内网设备之间都无法通信。protocolicmpv6这条规则必不可少而且要注意顺序防火墙规则是按顺序匹配的accept规则要放在drop规则前面否则先被drop规则匹配到就直接丢弃了后面的规则形同虚设。forward链的规则决定了内网设备如何访问外部IPv6网络。established,related允许已经建立的连接返回数据这是有状态防火墙的基础。最后加一条actiondrop作为兜底这样外部主动发起的IPv6连接比如有人扫描你的公网IPv6端口就无法进入内网设备了。如果你后面有端口映射、内网穿透需求再针对特定端口添加放行规则即可。注意防火墙规则配置完后一定要先在路由器上测试外网连接是否正常。在RouterOS终端里执行/ping 2400:3200::1或/ping 2402:4e00::能ping通说明出站转发没问题。然后在内网电脑上测试ping 2400:3200::1返回正常说明整条链路已经通了。3.5 IPv6 DNS配置与终端连通性验证IPv6地址配好之后DNS也得跟上不然输入域名解析不了照样打不开网页。RouterOS的DNS模块同时支持IPv4和IPv6但要注意如果你的PPPoE拨号没有下发IPv6 DNS这在很多运营商那里是常态那IPv6域名解析会走系统默认的IPv4 DNS这没关系解析出来的A记录和AAAA记录都能正常返回。不过我还是推荐统一使用国内公共DNS解析速度快且更稳定。在RouterOS里配置DNS服务/ip dns set servers223.5.5.5,119.29.29.29,2400:3200::1,2402:4e00::前面两个是阿里和腾讯的IPv4 DNS后面两个是腾讯和阿里的IPv6 DNS。这里有个细节如果RouterOS开启了allow-remote-requestsLAN设备可以把路由器当DNS中继来用就不用每台设备单独配DNS了。在Winbox的“IP-DNS”菜单里勾选“Allow Remote Requests”即可。全部配置完成后做一次完整验证。在Windows电脑上执行ipconfig看以太网适配器信息里是否出现了IPv6地址如果显示“已启用”并且有一个240e:或2408:开头的地址说明下发了。再执行ping -6 2400:3200::1延迟正常说明IPv6公网连通没问题。最后打开 browser 访问test-ipv6.com看到10/10分恭喜你这个双栈就算真正满了。如果分数偏低检查是IPv4问题还是IPv6问题页面会明确提示。4. 常见问题与排查技巧实录4.1 光猫桥接后IPv4正常但IPv6一直获取不到前缀这个现象很普遍IPv4拨号秒成功IPv6前缀始终拿不到DHCPv6客户端状态显示error。排查思路是这样的先确认运营商线路本身是否开了IPv6这个上面已经说过了用电脑直连光猫拨号测一次。如果电脑能拿到那就把问题锁定在RouterOS的DHCPv6客户端配置上。我遇到的案例中最高频的原因是DUID问题和VLAN问题交互作用。RouterOS的DHCPv6客户端默认DUID类型为LLT基于链路本地地址时间戳某些运营商的局端设备对这个DUID比较敏感表现为第一次能获取断线重拨后就再也拿不到。解决办法是手动修改DUID类型/ipv6 dhcp-client set [find] duid-typeduid-ll改成LL类型后重新拨号大概率就能恢复。另一个隐蔽的坑是VLAN在光猫桥接场景下PPPoE拨号是跑在一个VLAN接口上的如果DHCPv6客户端绑定的是原始物理接口而不是那个VLAN接口IPv6永远获取不到。检查一下DHCPv6客户端绑定的接口是否和PPPoE客户端绑定的接口一致必须一致。4.2 内网设备有IPv6地址但外网无法访问设备已经拿到了240e开头的IPv6地址但不管是ping外网还是浏览器访问统统不通。按照经验这种问题八成出在RA配置或者防火墙转发规则上。先检查RouterOS本身ping外网IPv6是否通。如果不通问题在路由器上游检查IPv6默认路由是否存在、PPPoE接口的IPv6链路本地地址是否正常。如果路由器通、内网设备不通先确认RA有没有发下去。在RouterOS里执行/ipv6 nd print看看bridge1接口的RA参数advertise字段要是有“no”说明路由器根本没通知内网设备“我是你们的路由”。手工开启/ipv6 nd set [find interfacebridge1] advertiseyes还有一种情况是终端设备的IPv6防火墙拦截了ICMPv6的回显请求。Windows防火墙默认会拦截来自公网的ping你觉得“不通”但实际上连接可能已经建立了用浏览器访问IPv6测试站能打开就说明没问题。遇到这种情况不用慌用netsh interface ipv6 show prefixpolicies检查一下本机的路由优先级再不行就检查目标网站是否真的提供了IPv6地址。4.3 开启IPv6后浏览器卡顿、部分网站打不开这个问题的根源通常在于IPv4/IPv6双栈选路策略。如果浏览器优先解析AAAA记录IPv6域名的记录类型而你的IPv6链路质量差、丢包率高就会表现为网页卡顿、图片加载不出来。很多人误以为是网络慢其实是IPv6路径质量差导致的。排查方法很直接先用ipconfig /all看终端获取的IPv6 DNS是否配置正确再用ping -6测试几个IPv6站点的延迟和丢包率。如果确认IPv6质量差可以暂时把系统DNS解析优先级调回来让浏览器优先走IPv4。Windows下用netsh interface ipv6 show prefixpolicies看默认策略如果IPv6的优先级高于IPv4可以手动调整。但更根本的做法是联系运营商反馈IPv6质量或者在RouterOS的防火墙上对特定目标地址段强制走IPv4。实际使用中运营商的IPv6链路通常是收敛的这种卡顿现象多见于刚开通IPv6的地区过段时间会自然缓解。4.4 设备获取的IPv6地址频繁变化导致端口映射失效有公网IPv6最爽的就是可以从外网直连家里的设备但前提是你得知道设备的IPv6地址。SLAAC生成的IPv6地址如果运营商重新分配前缀地址段会整体变化就算前缀不变终端的隐私扩展Privacy Extensions机制也会定期更换接口标识部分导致地址不稳定。这在Windows和iOS设备上尤其明显。解决方案有两个层面。第一给需要固定IPv6地址的设备比如NAS、监控、Home Assistant在RouterOS里做静态DHCPv6租约把MAC地址和期望的IPv6地址绑定。这样即使前缀变了设备在RouterOS的DHCPv6服务器里依然能拿到固定的后缀地址变化频率大大降低。第二层面如果你搞了DDNS动态域名解析要选择同时支持AAAA记录更新的服务商并且在RouterOS里配置脚本在检测到前缀变化后自动更新DDNS。RouterOS v7的脚本引擎可以写个事件触发脚本监听DHCPv6客户端的status变化拿到新前缀后通过API调用DDNS服务商更新记录。这个属于进阶玩法但确实能根治地址变化问题。4.5 部分设备无法获取IPv6地址特别老的设备老旧的物联网设备、智能家居产品经常出现这个问题。原因五花八门有的是设备只支持IPv4根本不支持IPv6协议栈这种属于硬件能力限制无解只能继续走IPv4。有的是设备支持IPv6但默认关闭需要到设备设置里手动打开。还有一类比较特殊某些设备的DHCPv6客户端实现有bug它只发送DHCPv6请求但听到RA之后不会应用SLAAC地址。解决办法是在RouterOS里同时开启DHCPv6服务器用有状态方式给这类设备分配地址。配置DHCPv6服务器要用到前面创建的地址池/ipv6 dhcp-server add namedhcpv6-lan interfacebridge1 address-poolipv6-pool lease-time12h开启DHCPv6服务器后整个LAN是两套方案并行的大多数设备走SLAAC少数顽固分子走DHCPv6反正地址池足够大互不冲突。几个特殊设备折腾不出来就直接放弃给它们手动设置一个静态IPv6地址绑定到MAC上也不是不行。最后的经验之谈折腾了这么多年的路由器我越来越觉得配置IPv6本身不难难的是理解它背后的运行逻辑。IPv4时代你习惯了“私有地址NAT上网”这套模式到了IPv6整个世界都变了没有NAT、没有私网地址的概念每个设备都直接暴露在公网上除非你自己加防火墙。你可能需要花点时间适应比起去抄别人的规则命令先搞清楚“为什么”再动手配遇到问题才能靠逻辑推理对错而不是靠试错碰运气。最后再提醒一句如果配完IPv6发现ping不通了、网页打不开了别急着回滚配置先把路由器重启一遍、光猫重启一遍很多时候是因为运营商局端设备缓存了旧的DHCPv6状态重启就能触发重新下发。这个顺序一定要先做比排查半天配置都管用。后面我还会继续分享RouterOS v7其他功能模块的玩法欢迎交流。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进