简介:这份文档完整呈现了基于IPv6的中小型企业网络设计与实现方案,适合网络工程师、企业IT运维人员以及高校网络专业学生阅读参考。文档首先剖析IPv6协议的核心机制,包括128位地址空间、简化报头、无状态自动配置及内建安全特性,并与IPv4在地址长度、分片方式、邻居发现等方面进行详细对比,帮助读者理解IPv6的独特优势。随后,针对中小型企业实际需求,重点讲解了双栈、隧道、NAT64等过渡兼容技术,并阐述了核心层、汇聚层、接入层网络架构下的地址规划、设备选型、路由配置与访问控制设计。文档还基于GNS3平台搭建仿真实验环境,通过ICMP协议对网络连通性进行验证,给出了从需求分析、方案设计到仿真测试的完整实施流程。该资源为单个Word文档,大小1.79MB,章节结构清晰,理论与实践并重,目前已有528人学习下载,可作为课程设计、毕业设计或企业IPv6网络改造的实用参考资料。
1. 基于IPv6的中小型企业网设计与实现:为什么设计文档比设备配置更重要
在运营商和云厂商全面提供IPv6接入的背景下,中小型企业网络正在从“有IPv6就行”转向“能用IPv6稳定跑业务”。但多数中小企业还停留在IPv4私网加NAT的旧方案,遇到IPv6改造就直接在核心交换机上敲几条命令,结果VLAN间互访、服务器访问、外网通道到处出问题。基于IPv6的中小型企业网的设计和实现,本质是在动手配置前先确定三件事:IPv6地址段怎么分、路由协议怎么选、边界过渡怎么做。这份设计文档适合三类人:网络工程师、系统集成商,以及需要完成毕业设计或课程作业的网络专业学生。读完你可以画出拓扑、定出地址表,并照着一套可复现的命令完成配置与验证。
2. IPv6地址规划与VLAN映射:一段地址如何铺满三层网络
2.1 需求盘点:先把自己的家底摸清
做IPv6网络设计,第一件事不是画拓扑,而是把企业现状摸清楚。需要确认四类数据:当前有线终端数量、无线终端数量、业务系统服务器台数、未来三年是否新增分支或物联网设备。这些数字直接决定IPv6子网划分粒度。很多企业设计时忘了统计网络打印机、门禁主机和楼宇自控设备,这些设备数量虽然不大,但往往需要独立成段,规划时不留余量,后面到了智能化改造阶段就只能拆了重来。
把“未来三年扩展”单独拿出来问,是因为IPv6的地址池不像IPv4那样紧缺,但也因此更容易被随意规划。中小型企业从运营商拿到一段IPv6地址后,前缀往往是“/64”甚至“/48”。很多人一上来就按每栋楼一个“/64”切死,等第二年加了两路监控子网,发现没有连续段可用了。规划IPv6的关键不是“够不够”,而是“怎么切才留有层次”,这是和IPv4规划最大的区别。
我见过最偷懒的做法,是把IPv4的子网编号原封不动搬进IPv6。比如原来的VLAN 10是192.168.10.0/24,就直接规划成2001:db8:10::/64。表面整齐,实际把IPv6的层次化前缀浪费了。更合理的建模方式,是把前缀的前48位固定为站点号,用第4个十六进制段做VLAN映射,第5、6段保留给设备类型和网段功能,这样一眼能看出地址属于哪个部门、哪个业务,后续写路由聚合和ACL都会省力很多。
以一家100人左右、有办公区、研发区、机房的中小型企业为例,我一般这样定义地址模型:运营商分配前缀为2001:db8:100::/48,每个VLAN分配一个“/64”子网,其中第4段与VLAN编号严格一致。VLAN内再统一把网关放在“::1”,关键网络设备放在“::2”到“::9”,服务器按功能放在“::10”以后的固定段,终端用SLAAC自动生成分配。这样路由表、DHCPv6租约记录和抓包结果都能快速对应到具体业务。
2.2 IPv6子网划分方法与VLAN映射表
IPv6地址128位,写起来一串十六进制,但做设计时真正关心的只有三段:网络前缀、子网ID、接口ID。网络前缀一般由运营商或上级ISP分配,常见是“/48”或“/56”;子网ID由自己划分,用于区分站点的不同VLAN;接口ID是主机部分,由终端自行生成或DHCPv6下发。
中小型企业网建议统一采用“/64”作为子网掩码,原因是SLAAC只认“/64”。如果你精打细算用“/120”甚至“/126”做子网,Windows主机的隐私扩展地址会直接失效,安卓和iOS的终端也会在拿到前缀后拒绝生成地址。这个“省”没有意义,IPv6不是IPv4,不需要通过扣主机位来节约地址。
下表是一个可直接改用的IPv6 VLAN映射模板。原则很简单:子网ID的十进制编号与VLAN号一致,网关统一用“::1”。
| VLAN ID | 用途 | IPv6子网 | 前缀长度 | 网关地址 | 备注 |
|---|---|---|---|---|---|
| 10 | 办公有线终端 | 2001:db8:100:10::/64 | /64 | 2001:db8:100:10::1 | 员工PC、网络打印机 |
| 20 | 无线办公 | 2001:db8:100:20::/64 | /64 | 2001:db8:100:20::1 | AP与BYOD设备 |
| 30 | 服务器区 | 2001:db8:100:30::/64 | /64 | 2001:db8:100:30::1 | 自建业务系统 |
| 40 | 管理网段 | 2001:db8:100:40::/64 | /64 | 2001:db8:100:40::1 | 网络设备管理面 |
| 50 | 访客无线 | 2001:db8:100:50::/64 | /64 | 2001:db8:100:50::1 | 与内网做隔离 |
这套映射的价值在运维阶段才会体现出来。抓到源地址“2001:db8:100:30::15”,不需要查表就知道它在服务器区;写ACL规则时,也只需要针对“2001:db8:100:30::/64”一个前缀做控制。相比IPv4时代“子网表要翻半天才能对应上部门”的情况,效率差别很大。
2.3 地址分配方式:SLAAC、DHCPv6还是有状态/无状态混合
在IPv6中,终端地址获取有三条路:SLAAC、DHCPv6和无状态DHCPv6。SLAAC是终端读取路由器通告(RA)里的前缀和网关信息,自己生成接口ID。优点是零配置、开机即通;缺点是网络侧看不到终端实际生成的地址,出现安全事件时难以追踪。DHCPv6是有状态下发,服务器记录终端DUID和地址的对应关系,便于审计和固定分配;缺点是它依赖RA中的M标志,如果路由器没把M标志置1,终端根本不会发起DHCPv6请求。
不少人在网关设备上把DHCPv6服务器配置好了,却忘了开启RA,结果终端没有拿到任何IPv6地址。这背后的机制是:现代操作系统在无状态网络里优先使用SLAAC,只有RA里明确标记“请用DHCPv6”时,客户端才会从SLAAC切到DHCPv6。换句话说,DHCPv6不能独立工作,它必须和RA配合。设计时如果选了有状态模式,RA和DHCPv6的M/O标志必须一起定好并验证。
我一般推荐的折中方案是:RA的M标志置0,O标志置1,也就是地址通过SLAAC获取,而DNS、域名、NTP等附加参数通过DHCPv6下发。这样做的好处是终端数量膨胀时不用维护大量地址租约,又能把DNS这类关键参数统一指到内网解析器。如果企业对某些特殊终端要求固定地址,比如财务服务器、视频监控平台,就给这些终端单独配置DHCPv6静态绑定的保留地址,其余终端保持无状态SLAAC。
这个混合模式在Windows、macOS、iOS、安卓和鸿蒙上都表现得很稳定,适配成本最低。设计文档里最好把每个VLAN的地址分配方式单独列一列,例如“VLAN 10: 无状态SLAAC + DHCPv6下DNS”“VLAN 30: 有状态DHCPv6固定地址”。等配置阶段执行时,每一行都能直接对应设备命令,不用现场再判断。
3. 路由协议选型与过渡落地:OSPFv3、静态路由与NAT64
3.1 IPv6静态路由与OSPFv3的适用边界
对中小企业来说,路由协议的选择比地址规划更影响后期的排障体验。常见的做法有两种:整网都写静态路由,或者三层设备之间跑OSPFv3。两种方案的分界点不是设备数量,而是链路的变动频率。如果三层设备只有一台核心加一台出口,静态路由三五行就能搞定;但如果网络里有核心层、汇聚层、接入层的完整三层架构,还要接两条运营商线路,静态路由就会变成一张难以维护的网。
IPv4时代我见过很多企业用静态路由跑到十几年,因为IPv4私网拓扑简单、段位少。到了IPv6,由于地址位数长,手写一条静态路由比IPv4更容易出错,特别是在写“2001:db8:100:30::/64”这种前缀时,少写一个冒号段就可能导致路由黑洞。所以我建议,只要超过两台三层设备,就优先考虑OSPFv3。它不是多复杂的技术,却能在链路故障时自动收敛,省去半夜改路由表的麻烦。
OSPFv3和OSPFv2的区别要注意三点:第一,OSPFv3直接跑在IPv6上,协议报文使用链路本地地址作为源地址;第二,OSPFv3不再像OSPFv2那样靠接口IP地址来隐式生成Router ID,必须显式配置Router ID,否则邻居建立不了;第三,OSPFv3的区域划分思想与OSPFv2一致,但命令是在接口下调用OSPFv3进程,不直接在接口上绑定IPv6地址。很多第一次上手的人在这三个点上都会踩坑。
这里给出一个华三/华为风格的最小OSPFv3配置。核心交换机上先配置Router ID,然后启动进程并进入区域0:
# 核心交换机OSPFv3最小配置(华三/华为风格) ospfv3 1 router-id 10.0.0.1 # interface Vlanif10 ipv6 address 2001:db8:100:10::1/64 ospfv3 1 area 0.0.0.0 # interface Vlanif30 ipv6 address 2001:db8:100:30::1/64 ospfv3 1 area 0.0.0.0这段配置的逻辑是:先创建一个OSPFv3进程并指定Router ID,再在需要参与路由的三层VLAN接口上调用该进程,并绑定到区域0。接口下的IPv6地址本身就是网络前缀的来源,OSPFv3会自动把这些前缀宣告进路由域。需要注意,OSPFv3进程号只在本地有意义,邻居两端的进程号可以不同,但区域号和Router ID必须全局唯一。
3.2 双栈落地:VLAN内同时跑IPv4与IPv6
中小企业不可能一夜之间告别IPv4。最稳的落地方式是双栈(Dual Stack):同一个VLAN接口上同时配置IPv4和IPv6地址,终端根据网络条件选择协议栈。双栈的好处是IPv4业务不动,IPv6逐步上线,所有客户端、打印机和服务器都在原有IPv4基础上多获得一条IPv6通路。这是现阶段企业网最推荐的做法,也是各类“设计和实现”课题里最容易被考察的考点。
双栈配置本身不复杂,复杂的是接入终端的选择逻辑。按RFC 6724的建议,终端会优先使用IPv6,只有在IPv6不可达时才回退到IPv4。这意味着只要你把IPv6配好,大部分流量会自然往IPv6上走,不需要在终端侧做任何策略。但如果IPv6路由存在缺口,比如某些VLAN间没宣告IPv6前缀,就会造成终端认为IPv6可用、实际却出不去的情况,表现是“能拿到地址但访问超时”。
所以双栈落地的核心是把IPv6路由和IPv4路由同时铺平。以一台接入交换机为例,VLAN 10的接口配置如下:
# 接入交换机VLAN接口双栈配置(华为/华三风格) interface Vlanif10 ip address 192.168.10.1 255.255.255.0 ipv6 enable ipv6 address 2001:db8:100:10::1/64 ipv6 nd ra enable这段配置中,IPv4地址保持原样,IPv6部分需要手动开启接口的IPv6能力,再配置IPv6地址和RA。IPv6地址配置后,接口默认不会发送RA,只有显式打开“nd ra enable”后,接入终端才能通过SLAAC获得地址和网关信息。很多人口中的“配了IPv6地址但终端没地址”,问题就出在这条命令没有开启。
3.3 边界设备NAT64配置:没有IPv6公网时怎么过渡
如果企业暂时没有拿到IPv6公网前缀,但要先让内网IPv6终端具备访问互联网的能力,常见的做法是NAT64加DNS64。NAT64把IPv6报文转换成IPv4报文,由边界设备代替IPv6终端去访问IPv4互联网,原理上和IPv4的NAT相似,只是转换发生在协议栈层面。对中小型企业来说,这个方案能让内部IPv6子网先用起来,等运营商IPv6链路就绪后再切到纯IPv6出口。
需要说明,NAT64不是双栈的替代方案,它是过渡期方案。双栈解决的是“内网同时存在IPv4和IPv6”,NAT64解决的是“只有IPv6的终端怎么访问IPv4互联网”。设计文档里如果两种方案混在一起写,配置时会非常混乱。我建议的边界架构是:内网VLAN全部双栈,出口保留IPv4,NAT64只作为IPv6访问外部IPv4网络的辅助通道。
下面是华为AR系列路由器上NAT64的参考配置。假设内网IPv6前缀是2001:db8:100::/48,出口IPv4公网地址是203.0.113.10至203.0.113.20:
# 边界路由器NAT64参考配置(华为AR系列) nat64 prefix 2001:db8:64::/96 # nat64 instance trans_1 id 1 address-group 203.0.113.10 203.0.113.20 nat64 outbound acl 3001 # acl number 3001 rule 5 permit ipv6 source 2001:db8:100::/48 # interface GigabitEthernet0/0/0 ipv6 enable ipv6 address 2001:db8:100:1::1/64 # interface GigabitEthernet0/0/1 ip address 203.0.113.1 255.255.255.0这段配置的要点有四个:第一,“nat64 prefix”定义了IPv6侧的转换前缀,IPv6终端访问互联网时使用的目标地址必须落在这个96位前缀内;第二,“nat64 instance”定义了转换实例,里面指定地址池和ACL;第三,ACL决定哪些IPv6源地址允许被转换,务必要用源地址约束到内网前缀,不能放“any”;第四,出方向接口用IPv4地址,入方向接口用IPv6地址。配置完成后,还要在DNS侧搭配DNS64,把IPv4的A记录合成到NAT64前缀内,终端才能通过域名发起访问。
4. 设备侧实现与IPv6安全策略:华三/华为交换机的配置要点
4.1 接入层交换机的IPv6基础配置
到设备配置这一步,首先要做的是让交换机认识IPv6。华三和华为交换机上,部分型号默认关闭IPv6转发能力。如果全局“ipv6”命令没开,或者设备未加载IPv6特性,后面所有IPv6地址和RA配置都会提示不支持或类型不符。这个步骤在文档里容易被当成废话跳过,实际却是现场配置时最常卡住人的地方。
接入层交换机的IPv6配置通常包含四步:开启IPv6能力、创建VLAN并配置三层接口、开启RA、配置DHCPv6或地址分配相关参数。以太网交换机的二层透传本身不需要IPv6,只有在配置VLAN间路由时,接口上才有IPv6地址。如果是纯二层接入交换机,只需要保证VLAN、Trunk和边缘端口正常,IPv6报文会作为普通以太网帧透传,不需要在设备上配置任何IPv6地址。
下面是一个典型的接入交换机配置。假设VLAN 10是办公网,VLAN 20是无线网:
# 华三接入交换机IPv6基础配置 ipv6 # vlan 10 vlan 20 # interface Vlanif10 ipv6 enable ipv6 address 2001:db8:100:10::1/64 ipv6 nd ra enable # interface Vlanif20 ipv6 enable ipv6 address 2001:db8:100:20::1/64 ipv6 nd ra enable这段配置中,全局“ipv6”命令开启IPv6转发;VLAN接口上“ipv6 enable”是让接口具备IPv6处理能力;“ipv6 address”配置本接口的IPv6地址;“ipv6 nd ra enable”开启该接口的RA发送。只有RA开启后,接入终端才会自动获取IPv6地址。注意,如果该VLAN内还有DHCPv6需要下发DNS,还要继续配置DHCPv6服务器的调用,RA和DHCPv6两者是配合关系而不是替代关系。
很多中小企业项目在交付时,只把核心交换机的VLANIF配了IPv6地址,接入交换机全部保持默认。这样做的结果是:终端如果直接接在核心交换机下挂的端口上能拿到地址,接在接入交换机下就什么也拿不到。原因是RA报文不会跨VLAN透传,每个二层域必须有一个三层接口发送RA。所以设计文档里要标明,哪些设备是三层设备、哪些VLANIF由谁负责,否则配置阶段必然出现“有的区域通,有的区域不通”的玄学故障。
4.2 IPv6 ACL:配置细节与ACL“哑火”的排查
IPv6的访问控制列表在写法上和IPv4 ACL类似,但有一个明显差异:IPv6基础协议中,邻居发现(ND)报文是网络能否工作的前提。如果ACL把ICMPv6的ND类报文给拦掉了,轻则新设备无法接入,重则整个VLAN内所有终端同时断网。这是IPv6 ACL最容易“翻车”的地方。
华三交换机上配置IPv6 ACL,建议先定义ACL,再在接口或VLAN下应用。下面的例子控制的是:只允许办公VLAN访问服务器区的443端口,其他访问一律拒绝:
# 华三IPv6 ACL配置示例 acl ipv6 name PROTECT_SERVER rule 5 permit icmpv6 source 2001:db8:100:10::/64 destination 2001:db8:100:30::/64 rule 10 permit tcp source 2001:db8:100:10::/64 destination 2001:db8:100:30::/64 destination-port eq 443 rule 15 deny ipv6 source any destination 2001:db8:100:30::/64 rule 20 permit icmpv6 source any destination any # interface Vlanif10 ipv6 traffic-filter PROTECT_SERVER inbound这条ACL的逻辑是:先放行办公网到服务器区的ICMPv6,保证ping和ND能通;再放行443端口;然后拒绝其他到服务器区的访问;最后放行所有ICMPv6,避免影响邻居发现。需要注意“inbound”方向指的是流量进入接口的方向,应用方向错了,ACL可能完全不生效或者放行了不该放行的流量。
实际配置时还要注意,“rule 20 permit icmpv6”写的是全部ICMPv6放行。如果企业安全要求更高,可以精确放行ND的四类报文:邻居请求(135)、邻居通告(136)、路由器请求(133)、路由器通告(134)。不建议轻易拒绝链路本地地址段“fe80::/10”的流量,因为OSPFv3和ND报文都依赖这个地址段,把它们拦掉后网络会立刻进入“看起来UP,实际上不通”的故障状态。这也是华三IPv6 ACL实验里最常考到的点,很多试卷或实验手册都会故意把ND报文屏蔽掉,让你观察全网瘫痪的现象。
4.3 DHCPv6服务器与SLAAC的协同配置
在小型企业网里,DHCPv6服务器可以由核心交换机或路由器兼任,不需要单独部署一台服务器。华三设备上启用DHCPv6的方式是“ipv6 dhcp server”,先定义地址池,再在VLAN接口上应用。
下面以VLAN 20无线网为例,配置DHCPv6地址池并指定DNS:
# 华三DHCPv6服务器配置 ipv6 dhcp server test network 2001:db8:100:20::/64 excluded-address 2001:db8:100:20::1 dns-server 2400:3200::1 # interface Vlanif20 ipv6 address 2001:db8:100:20::1/64 ipv6 dhcp server apply test这里“network”定义地址池的网段,“excluded-address”排除网关地址,避免重复分配。“dns-server”下发一个可用的IPv6 DNS,如果不填,终端就得不到DNS解析能力。“apply test”是把地址池绑定到接口。要注意,这块只管理DHCPv6的有状态部分,如果想把DNS参数同时下发给通过SLAAC获得地址的终端,还需要在接口上开启RA的O标志,华三对应“ipv6 nd autoconfig other-flag”这条命令。
很多人在配置DHCPv6后,发现终端能拿到地址,但网关时通时不通。原因往往是网关地址本身被分配出去了。IPv6的地址空间很大,但地址池里不会自动跳过网关地址,必须在“excluded-address”里把“::1”排除。还要留意,子网前缀里有“::2”“::3”等固定给网络设备的地址,最好也在地址池里统一排除,避免核心设备地址冲突。
如果企业服务器要求固定IPv6地址,常见做法不是靠DHCPv6的静态绑定,而是直接在服务器网卡上配置静态地址,同时在DHCPv6地址池里把这些地址排除掉。这个“双写”逻辑很重要:服务器静态地址要和DHCPv6地址池互斥,否则同一地址被服务器手动占用、又被DHCPv6分配出去,网络里就会出现地址冲突,表现是一台设备时通时断。设计文档里应该专门列一个“服务器IPv6地址分配表”,把服务器名、IPv6地址、所属VLAN、是否排除在DHCPv6池外都写清楚,避免交付后扯皮。
5. IPv6企业网实现避坑:地址冲突、链路本地地址与ACL哑火
5.1 现象:ping IPv6地址通,访问域名超时
这是IPv6上线后最常见的现象之一。设备从RA拿到了IPv6地址,也能ping通网关和外网IPv6地址,但访问域名时转半天圈,最终超时。原因几乎都在DNS:没有给终端下发IPv6 DNS服务器,或者RA里没带RDNSS选项,DHCPv6的O标志也没有开启,导致终端无法解析域名。
解决方法是先从终端侧确认DNS配置。Windows里执行“ipconfig /all”,Linux执行“cat /etc/resolv.conf”,看有没有IPv6 DNS条目。如果显示的DNS还是IPv4地址,就需要回到VLAN接口,在DHCPv6地址池里补上“dns-server”命令,并开启O标志。这里的要点是,SLAAC只解决地址和网关,不解决DNS;没有O标志,无状态终端就不会去DHCPv6请求DNS。很多设备默认不把DNS放进RA,这也是为什么“ping通但打不开网页”的投诉总在IPv6上线第一周集中爆发。
5.2 现象:终端拿到了IPv6地址,但外网还是不通
终端有IPv6地址,能ping通内网网关,但出不了外网。排查顺序是:先看边界设备有没有默认IPv6路由。很多人在核心交换机上配了内网IPv6地址,边界路由器上却没写“ipv6 route-static :: 0 2001:db8:100:1::1”,导致IPv6报文在内网游荡,到了边界就被丢弃。IPv6的默认路由写法是“::/0”,不是IPv4里那种“0.0.0.0/0”,这一点很容易在配置时下意识写错。
另一起常见原因是边界防火墙默认阻断ICMPv6,且没有放行目标端口。IPv6终端访问互联网时,首先需要能ping通出口网关,如果防火墙把echo-request和echo-reply都拦了,访问体验会非常差,用户会误以为IPv6不通。解决方法是把边界设备的IPv6防火墙策略打开,至少放行ICMPv6的echo和ND报文,再逐条放行业务端口。家用路由器上“关闭IPv6防火墙”的选项,其实也是在处理同样的问题,只是企业级设备把这块放进了安全策略里,不是一键开关而已。
5.3 现象:OSPFv3邻居状态卡在ExStart
三层交换机之间配置OSPFv3后,邻居状态一直起不来,在“ExStart”或“Exchange”之间反复跳。这个现象背后,多半是Router ID冲突或没有显式配置Router ID。OSPFv3不会像OSPFv2那样从物理接口IPv4地址自动取Router ID,必须手动指定。两台设备Router ID相同,或者一台漏配,邻居都会卡住。
解决方法是先执行“display ospfv3 peer”查看本端和对端的Router ID,再确认两端Router ID不同且不是0.0.0.0。确认后在进程视图下修改“router-id”,修改后需要执行“reset ospfv3 process”重新建立邻居。OSPFv3的组播报文还依赖链路本地地址,如果接口上ACL拒绝了“fe80::/10”或组播地址“ff02::5”,也会造成邻居失败,这一条容易被IPv6 ACL经验不足的人忽视。
5.4 现象:IPv6 ACL一挂上,业务网段立刻断网
把IPv6 ACL应用到接口后,整个VLAN的终端突然失联,ping网关都不通。原因是ACL的规则顺序有问题,或者把ICMPv6的ND报文给拒绝了。IPv6终端接入网络时,首先要发送邻居请求来解析网关MAC,如果ACL在入方向上拦掉了ICMPv6 type 135/136,网关收不到邻居请求,终端自然无法通信。
解决方法是重新设计ACL规则顺序:把ICMPv6 ND相关的放行规则放在所有deny规则之前,最少也要放行类型133、134、135、136。放行范围可以精确到链路本地地址段“fe80::/10”。如果是华三设备,建议在ACL开头写“rule 0 permit icmpv6 source fe80::/10 destination fe80::/10”,再写其他业务规则,这样ND报文永远不会被后续的拒绝规则命中。应用ACL后,要先在网关接口上测一次ping,确认设备没有因为ACL方向写反而把自己挡在网段外。
5.5 现象:IPv6前缀隔一段时间就变,老地址全断
有些中小型企业网络接到运营商的光猫或CPE,前缀是动态下发的,比如通过DHCPv6 PD分配。前缀一旦变化,内网所有基于旧前缀的地址和路由全部失效。这个现象在IPv4时代不明显,因为IPv4私网地址是自己定的,跟运营商无关;IPv6则不同,公共前缀掌握在运营商手里。
解决思路是:内网不要直接用运营商下发的动态前缀做编址,而是在出口设备上启用ULA或再做一次上层地址翻译,或者至少确保前缀变化后路由器能自动更新路由表并重发RA。如果企业业务不允许地址变化,就要考虑向运营商申请静态IPv6前缀,并在设计文档中明确提出IP地址规划依赖静态前缀。这个坑在项目交付后才会暴露,属于最典型的“后悔药”型问题,测试时因为前缀稳定看不出来,运行三个月后某天重启光猫,全网IPv6地址全部失效,排查起来非常痛苦。
6. 验证与运维:用一场“30分钟巡检”把IPv6网络状态看清
6.1 巡检脚本与PMTU验证
IPv6网络交付后,我习惯在维护窗口里跑一个简化巡检脚本,把最关键的三项状态一次性打印出来:默认路由、网关连通性、外网连通性。脚本逻辑很简单,但它能把排查故障时的“黑匣子”变成白盒。
#!/bin/bash # 基础IPv6巡检脚本:路由、网关、外网 GATEWAY="2001:db8:100:10::1" REMOTE_DNS="2400:3200::1" echo "== default route ==" ip -6 route show default echo "== ping gateway ==" ping6 -c 2 "$GATEWAY" echo "== ping remote dns ==" ping6 -c 2 "$REMOTE_DNS" echo "== listening v6 ports ==" ss -6 -tlnp | head -20“ip -6 route show default”看边界是否把默认路由注入全网;两条“ping6”分别验证网关和外部DNS;最后一条“ss -6 -tlnp”检查IPv6端口监听,尤其适合确认DHCPv6、DNS等服务是否在IPv6协议栈上正常工作。Windows管理机上可以用“netsh interface ipv6 show route”和“netsh interface ipv6 show prefixpolicies”查看等价信息和前缀选择策略。
除连通性之外,还要关注PMTU黑洞。IPv6路径上不允许设备分片,只能依靠端到端PMTUD。如果路径上某个防火墙把ICMPv6的“Packet Too Big”(type 2)过滤了,大报文就会静默丢失,表现是“小ping通、大ping不通”。验证办法是从1280字节开始逐步加大ping包,某一步超时,就到路径上的设备和ACL中检查type 2放行情况。
6.2 抓包确认ND与DHCPv6交互
如果巡检发现某些终端地址分配异常,抓包是定位最快的办法。在网关侧执行“tcpdump -i eth0 icmp6 and dhcp6”,能看到RA、RS、NS和DHCPv6报文。RA大约200秒发一次,等不及可以在客户端重启网卡手动触发。如果只有RS没有RA,多半是“nd ra enable”没开;如果RA来了但终端没生成地址,多半前缀不是“/64”。
做网络交付这么长时间,我的最深体会是:IPv6不是把IPv4地址换了个进制,它改变的是编址、路由和排障的整个思路。中小型企业网尤其不能靠“敲几条命令试试”的心态去碰,因为IPv6故障延迟出现,一暴露就是全网性的。希望这份设计思路和踩坑记录能帮到你,少走我当初绕过的那些弯路。
本文还有配套的精品资源,点击获取