1. 从一个真实运维场景说起为什么要做IPv4到IPv6的隧道很多做网络运维的朋友都遇到过这种局面公司核心网络还在跑IPv4但上级单位或者合作方已经开始要求IPv6接入新采购的服务器、新开通的专线都默认双栈甚至纯IPv6。你手上这台神州数码Digital China的交换机或者路由器配置手册翻了好几遍IPv4部分闭着眼睛都能敲一到IPv6过渡技术就有点拿不准——尤其是隧道这块配错了轻则不通重则把原有IPv4业务也带崩。这篇文章要聊的就是在神州数码网络设备上配置IPv4到IPv6隧道这件事。说白了就是让原本只能跑IPv4的两端通过一条“隧道”把IPv6的数据包封装进去传过去到了对端再解封装还原成IPv6。它解决的核心问题是在IPv6网络还没有全面铺开、中间链路只支持IPv4的情况下如何让两个IPv6孤岛互通。适合谁看有一定网络基础、手上有神州数码设备、正在做IPv6改造或者过渡方案落地的运维工程师和网络管理员。我先说一个反直觉的结论隧道配置本身并不难难的是你想清楚用哪种隧道、隧道两端地址怎么规划、以及怎么保证隧道起来之后不影响现有IPv4转发。我见过太多人一上来就敲命令结果隧道是up了但业务不通排查半天发现是路由没指对或者ACL把协议号挡了。所以这篇内容我会把“为什么这么配”讲透而不是只丢一堆命令给你抄。另外提前说明不同型号的神州数码设备比如DCN系列交换机、路由器在命令语法上会有细微差异有的大力支持tunnel接口有的需要用ipv6 tunnel相关命令。我下面给出的配置以常见的通用语法为主你在实际设备上敲之前建议先用?补全确认一下当前版本支持的命令形式。这是从业者的基本习惯别嫌麻烦。2. 隧道技术的选型逻辑6to4、ISATAP还是手工隧道在动手之前必须先做技术选型。IPv4到IPv6的过渡隧道不是只有一种选错了后面全是坑。我按实际运维中最常见的三种来拆解告诉你什么场景该用哪个。2.1 手工配置隧道最稳但最费人力手工隧道Manual Tunnel是最基础也最可控的一种。它的原理很简单在两台设备的隧道接口上分别指定对方的IPv4地址作为隧道源和目的相当于在两个IPv4端点之间拉了一条点对点的虚拟链路IPv6包被整个封装进IPv4包里传输。它的优点是确定性极强两端地址写死路由清晰排查问题的时候一眼就能看出流量走向。缺点也明显如果有N个IPv6孤岛要互通理论上需要N×(N-1)/2条隧道规模一大运维量爆炸。所以手工隧道适合什么场景两个固定的站点之间互通比如总部和某个分支机构的IPv6网络对接或者你和某个合作方之间点对点联调。这种场景下数量少、关系固定手工配置反而最省心。2.2 6to4隧道适合公网IPv4地址的场景6to4是一种自动隧道它把IPv6前缀和IPv4地址做了映射2002:IPv4地址::/48。也就是说只要你的设备有一个公网IPv4地址就能自动推导出对应的IPv6前缀不需要手工指定对端。它的好处是自动化程度高不需要逐条配置对端。但限制也很硬必须要有公网可路由的IPv4地址内网私有地址玩不转而且6to4依赖中继路由器Relay Router才能访问原生IPv6网络实际部署中中继的可用性和性能都不太可控。我的经验是6to4在实验环境或者临时互通场景下可以用生产环境慎用。尤其是神州数码设备上6to4的配置虽然不复杂但一旦中继出问题排查链路会拉得很长。2.3 ISATAP隧道内网环境下的过渡利器ISATAPIntra-Site Automatic Tunnel Addressing Protocol是专门为站点内部设计的过渡技术。它把IPv4地址嵌入到IPv6接口标识符的低32位格式是::0:5EFE:IPv4地址或者::200:5EFE:IPv4地址。这样在同一个IPv4域内主机或者设备之间可以自动建立隧道。ISATAP最大的价值在于你不需要公网IPv4地址内网私有地址也能用。它通过Potential Router潜在路由器来发现隧道端点配置量比手工隧道小很多。适合企业内网逐步从IPv4向IPv6迁移的过渡期。但它也有坑ISATAP的地址格式比较特殊很多防火墙和ACL默认不认识这种流量协议号是41IPv6封装的包容易被拦。而且不同厂商对ISATAP的实现细节有差异互通性需要实测。2.4 三种隧道方式的对比与选型建议我把关键维度整理成一张表方便你对照自己的场景做决定对比维度手工隧道6to4隧道ISATAP隧道配置复杂度高逐条配低自动推导中需配Potential Router对IPv4地址要求任意可路由地址必须公网IPv4内网私有地址可用适用规模少量固定站点中等规模站点内部互通性好依赖中继厂商实现有差异生产环境推荐度高低中选型建议很直接点对点固定互通选手工隧道内网大规模过渡评估ISATAP6to4除非有特殊需求否则别上生产。下面我以手工隧道为主线展开配置因为它是其他隧道的基础理解了手工隧道其他几种的原理也就通了。3. 神州数码设备上的手工隧道配置全流程这一章是核心实操部分。我按“规划—配置—验证”的顺序来讲每一步都告诉你为什么这么做。3.1 配置前的地址规划与检查清单动手之前先把这几件事确认清楚能省掉后面80%的排查时间隧道源地址本端设备的IPv4接口地址必须是路由可达的。隧道目的地址对端设备的IPv4接口地址同样要可达。隧道接口的IPv6地址两端要在同一个IPv6网段内比如2001:db8:1::1/64和2001:db8:1::2/64。底层IPv4路由确保本端能ping通对端的IPv4地址这是隧道能up的前提。协议号41是否被放行IPv6封装在IPv4里IP协议号是41中间如果有防火墙或者ACL必须放行。提示协议号41这个点特别容易被忽略。我遇到过隧道接口显示up但IPv6 ping不通的情况最后查出来是中间链路的ACL只放行了TCP/UDP/ICMP把协议41给挡了。配置前先确认这条链路上没有类似的过滤策略。地址规划上还有一个经验隧道接口的IPv6地址建议单独规划一个网段不要和现有IPv6业务网段混用。这样后面做路由和排查的时候边界清晰不会互相干扰。3.2 隧道接口的创建与关键参数配置神州数码设备上创建隧道接口通用命令形式大致如下具体以设备实际支持为准# 进入全局配置模式 configure terminal # 创建隧道接口 interface tunnel 0 # 配置隧道模式为手工IPv6隧道 tunnel mode ipv6ip # 指定隧道源IPv4地址本端 tunnel source 192.0.2.1 # 指定隧道目的IPv4地址对端 tunnel destination 198.51.100.1 # 配置隧道接口的IPv6地址 ipv6 address 2001:db8:1::1/64 # 启用IPv6 ipv6 enable # 退出接口 exit逐条解释一下关键参数tunnel mode ipv6ip这一句是灵魂它告诉设备这个隧道接口承载的是IPv6 over IPv4的封装。不同版本可能写成tunnel mode ipv6ip manual或者类似形式用?确认。tunnel source和tunnel destination就是隧道的两个端点。这里有个细节source最好写具体的接口地址而不是接口名虽然有些设备支持写接口但写死地址在排查时更直观也避免接口地址变化导致隧道中断。ipv6 address给隧道接口配一个IPv6地址这个地址是对端ping测试和路由下一跳要用的。两端必须在同一网段否则隧道起来了IPv6也不通。3.3 隧道起来之后的路由怎么指隧道接口up只是第一步真正让业务流量走隧道还得靠路由。这里分两种情况情况一静态路由。如果你只是想让某个IPv6网段通过对端走直接指静态路由ipv6 route 2001:db8:100::/64 tunnel 0意思是去往2001:db8:100::/64的IPv6流量从tunnel 0出去。对端也要配一条回程路由指向它自己的隧道接口。情况二动态路由。如果两端要交换的IPv6网段比较多建议在隧道接口上跑OSPFv3或者BGP。隧道接口本身就是一个三层接口跑路由协议和普通接口没区别。但要注意动态路由的邻居关系是建立在隧道之上的隧道不稳定会直接导致路由震荡。所以生产环境里隧道底层链路的稳定性要重点保障。我个人的习惯是小规模用静态路由清晰可控大规模或者需要冗余的用动态路由但一定要配路由过滤和稳定性保护。别一上来就全动态出了问题连流量从哪走的都看不出来。3.4 配置验证从底层到应用的逐层检查配完之后别急着说“好了”按这个顺序逐层验证底层IPv4连通性ping 198.51.100.1确认隧道目的地址可达。隧道接口状态show interface tunnel 0看协议状态是不是up。隧道两端IPv6互通ping ipv6 2001:db8:1::2这是隧道本身通不通的直接证据。业务网段互通从隧道一侧的业务网段ping对侧业务网段验证路由是否正确。抓包确认封装如果前面都通但业务有问题在底层接口抓包确认IPv6包被正确封装成了IPv4协议号41。这个逐层验证的思路很重要它把“不通”这个大问题拆成了几个小问题每一层都能独立判断排查效率高很多。我见过有人一上来就ping业务地址不通就懵了其实按层次拆开问题往往就卡在某一层。4. 那些配置手册不会告诉你的踩坑实录这一章是我最想分享的部分。手册只会告诉你命令怎么敲但实际环境里的坑都是踩出来的。4.1 隧道up了但IPv6不通协议号41被拦的排查过程前面提过协议号41这里展开讲一个完整的排查链路。现象隧道接口状态up底层IPv4能ping通但隧道两端的IPv6地址互相ping不通。排查步骤第一步确认隧道接口配置无误source和destination地址没写反。第二步在底层物理接口上抓包看有没有协议号41的包发出。如果本端发了但对端没收到问题在中间链路。第三步检查中间所有三层设备的ACL重点看有没有deny ip之类的规则把非TCP/UDP流量挡了。很多默认ACL只放行常见协议协议41不在其中。第四步放行协议41后重新测试。这个坑的本质是IPv6 over IPv4的封装流量在中间设备看来是“陌生协议”默认策略往往会拦截。所以任何隧道配置都要把中间链路的过滤策略纳入检查范围。4.2 隧道源地址选错导致的“时通时断”另一个经典坑隧道source写了一个不是本设备直连的地址或者写了一个会变化的接口地址比如DHCP获取的地址。结果就是隧道有时候通有时候不通。原因在于隧道封装的时候源地址是作为外层IPv4包的源地址使用的。如果这个地址不是本设备实际出接口的地址回程流量可能被丢弃或者走错路径。尤其是多出口的环境源地址选错会导致回程不对称。解决办法隧道source一定要写本设备上稳定、直连、且对端路由可达的接口地址。如果是拨号或者动态地址环境考虑用Loopback接口地址作为隧道源前提是这个Loopback地址在底层IPv4网络里是可达的。4.3 MTU和分片大包过不去的小细节隧道封装会增加额外的IPv4头部20字节这意味着隧道接口的可用MTU比底层接口小。如果底层MTU是1500隧道接口实际能承载的IPv6包就不到1500。现象小包ping通大包比如1500字节ping不通或者TCP业务能建连但传大文件卡死。解决思路调整隧道接口的MTU比如设成1400给封装留出余量。或者在两端设备上配置TCP MSS clamping让TCP协商的MSS小一点避免分片。interface tunnel 0 mtu 1400 ipv6 mtu 1400注意MTU这个值不是越小越好太小会影响传输效率。一般底层1500的情况下隧道接口设1400到1440之间比较稳妥。具体值要结合你的实际链路测试。4.4 隧道与现有IPv4业务的相互影响最后一个坑也是最需要警惕的隧道配置影响了原有IPv4业务。可能的原因有几个一是隧道接口的创建改变了设备的转发表项二是隧道流量占用了底层带宽三是路由配置不当把原本走IPv4的流量引到了隧道上。我的建议是隧道配置尽量在业务低峰期做配完之后重点观察原有IPv4业务的延迟和丢包情况。如果设备支持给隧道流量做个QoS限速避免它挤占正常业务带宽。另外路由一定要精确别用默认路由把流量全引到隧道里。5. 隧道方案的扩展与长期演进思路隧道是过渡手段不是终极方案。配好之后心里要有一张演进路线图。5.1 从隧道到双栈的平滑迁移隧道解决的是“现在就要通”的问题但长期来看双栈IPv4和IPv6同时跑才是更干净的架构。当你的底层链路和设备都支持IPv6之后就可以逐步把隧道上的业务迁移到原生IPv6链路上。迁移的思路是先在关键设备上启用IPv6配置原生IPv6地址和路由然后把隧道上的静态路由或者动态路由邻居逐步切换到原生接口。这个过程可以灰度进行先迁非核心业务验证稳定后再迁核心业务。5.2 隧道方案的监控与日常维护要点隧道配好不是一劳永逸日常监控要盯这几个点隧道接口状态up/down变化要告警。底层IPv4链路质量隧道依赖底层底层抖动隧道就抖动。隧道流量和错误计数show interface tunnel 0里的错误计数能反映封装解封装的问题。协议41流量的放行策略如果中间链路策略有变更要重新确认协议41没被误拦。我一般会在监控系统里给隧道接口单独建一个视图把状态、流量、错误计数放在一起看这样一眼就能判断隧道健康度。5.3 什么情况下应该放弃隧道改用其他方案最后说个实在话隧道不是万能的有些场景下硬上隧道反而添乱。如果你的两个站点之间本来就有条件跑原生IPv6比如运营商已经支持IPv6专线那就别折腾隧道了直接上双栈或者纯IPv6架构更简单维护成本更低。如果隧道两端的设备性能有限封装解封装会消耗CPU流量一大就成瓶颈这种情况也要评估是不是换设备或者换方案。还有一种情况隧道数量太多管理复杂度超过收益。这时候应该考虑用集中式的过渡网关而不是在每个设备上零散配隧道。说到底技术选型要服务于业务和运维成本而不是为了用某个技术而用。隧道是个好工具但要用在对的场景里。我在实际项目里配过的隧道不算少最大的体会就是配置本身半小时能搞定但把地址规划、路由设计、过滤策略、MTU这些周边问题想清楚才是真正花时间的地方。每次配隧道之前我都会先在纸上把两端地址、路由走向、中间链路策略画一遍确认没有遗漏再动手。这个习惯帮我省了无数次返工。如果你也在做类似的过渡方案不妨试试这个笨办法比敲完命令再排查要快得多。