跳到正文
Lutong's Homepage

华为H3C实战 | 第16章 IPv6 基础配置与地址自动配置

📚 本系列共 43 篇(第 16 / 43 篇) · 第二卷 路由与广域网篇 —— 让数据找到路

← 上一篇:第 15 章 PPP 与 PPPoE  下一篇:第 17 章 ACL 与路由策略 →


本章导读:IPv4 地址像 8 位老式电话号码,早发完了,只能靠 NAT 搞"一栋楼一个总机"。IPv6 把地址扩到 128 位,顺便改了地址自动配置、去掉了广播。但写法和邻居发现全变了,新手的坑也跟着换了地方。

本章结构:

  • 16.1 功能原理与业务场景 —— 冒号十六进制的写法与两条简写规矩(省前导 0、双冒号只能用一次)、地址分类与"不再有广播"
  • 16.2 华为设备配置详解 —— 双栈 + SLAAC + 静态路由完整模板、为什么要 ipv6 enable 两次、SLAAC 还是 DHCPv6 先选对路线、IPv6 地址规划四步、DHCPv6 与 OSPFv3 骨架、IPv6 ACL
  • 16.3 H3C 设备配置详解 —— H3C 侧差别逐条对照
  • 16.4 命令对照表 —— 两家并排
  • 16.5 配置验证 —— display ipv6 interface brief、display ipv6 neighbors,附一份可以打印贴墙的验收清单
  • 16.6 排错与故障树 —— IPv6 独有的"自动配置分支":PC 没有 fe80:: → 有 fe80 但拿不到全局地址(查 RA 是否被抑制)→ 有地址但上不了网(查 IPv6 默认路由和 DNS)
  • 16.7 新手踩坑 —— RA 抑制、双冒号写两次
  • 16.8 本章小结 —— 要点清单 + 自测题

重点提示:IPv6 排错的眼睛是 fe80:: 链路本地地址——连它都没有,说明 IPv6 在终端侧就没开,后面全是白查,这是 16.6 第 1 问。终端有地址但上不了网,先看有没有 ipv6 route-static :: 0 默认路由和 IPv6 DNS,NAT 那套经验在这里不直接适用。 关联章节:IPv4 的地址与路由基础见第 10 章;OSPFv2 的机制见第 11 章(OSPFv3 的差别在 16.2.6 单独记了三条);IS-IS 单进程双栈见第 13.2.4 节;IPv6 ACL 与路由策略见第 17 章。

16.1 功能原理与业务场景

16.1.1 这功能是干嘛的(通俗版)

IPv4 的地址像老式电话号码:8 位数字、位数固定,全球总共 43 亿个。二十年前够用,现在手机、电脑、摄像头、电视、冰箱全都要上网,号码早就发完了。为了让更多人能同时上线,我们发明了 NAT——一栋楼共用一个总机号,屋里的人往再用分机。

IPv6(Internet Protocol Version 6)[27] 相当于把电话号码从 8 位扩到了 40 位(128 位二进制)。扩完之后,每粒沙子都能分到一个全球唯一的地址,“分机"这套麻烦事理论上就不需要了。但 IPv6 不只是"号码变长"这么简单,它顺手改了好几个地方:地址是自动配置的(不用 DHCP 也能拿到)、没有广播(不再有"全网喊话”)、报文头更简洁(转发更快)、而且把安全机制(IPsec)写进了标准里。

打个比方:IPv4 像一栋老小区,门牌号不够用,只能搞"每栋楼一个总机、内部分机";IPv6 像新建的智慧公寓,每个房间都有全球唯一门牌,快递直接送到门口,不用再经过总机转。

16.1.2 在网络里怎么落地(设计视角)

先把 IPv6 地址的写法讲清楚。128 位很难写,所以用冒号十六进制表示:每 16 位一段、一共 8 段,每段写成 4 位十六进制。比如:

  2001:0db8:0000:0000:0000:0000:0000:0001

这么长没人愿意敲,于是有两条简写规矩:一是每段开头的 0 可以省(上面写成 2001:db8:0:0:0:0:0:1);二是连续的全 0 段可以用一对双冒号 :: 代替,但一个地址里只能用一次(上面写成 2001:db8::1)。

下面这张表把常见地址类型一次列全,这是配置前必须记住的:

地址类型 前缀 作用 类比
全球单播地址(GUA) 2000::/3(常见 2001: 开头) 全球可路由的公网地址 身份证号
链路本地地址(LLA) fe80::/10 只在同一链路内有效,自动生成 工位号(只在公司内有用)
唯一本地地址(ULA) fc00::/7 私网地址,类似 IPv4 的 10.0.0.0/8 内部分机号
组播地址 ff00::/8 一对多通信,取代广播 群里@所有人
环回地址 ::1/128 本机自测 127.0.0.1
未指定地址 ::/128 地址未配置时占位 0.0.0.0

链路本地地址(LLA)是 IPv6 的心脏。每个启用了 IPv6 的接口都会自动生成一个 fe80::/10 的地址,不需要人配。它的作用有三个:邻居发现(NDP)用它通信、路由协议(OSPFv3、IS-IS)用它建邻居、自动配置(SLAAC)用它找网关。一个接口可以没有全球单播地址,但一定会有链路本地地址——看到 fe80:: 不要以为是配错了,那是正常的。因为每个接口都有,所以跨接口通信时必须指定"从哪个接口出去"(% 加接口名,如 fe80::1%GigabitEthernet0/0/1)。

邻居发现协议(NDP,Neighbor Discovery Protocol)[20] 是 IPv6 里的多面手,它用 ICMPv6 报文实现了 IPv4 里 ARP + ICMP 路由器发现 + 地址自动配置的全部功能。核心是四个报文:

报文 全称 干什么 IPv4 里的对应物
RS 路由器请求 主机问"这网里有路由器吗" 无(IPv4 没这个)
RA 路由器通告 路由器周期性宣告自己,带回前缀、网关、标志位 无(DHCP 靠 option)
NS 邻居请求 问"某个地址是谁的"(地址解析)+ 重复地址检测 ARP 请求
NA 邻居通告 回答"是我的" ARP 应答

NDP 里还有两个必须知道的概念。一个是重复地址检测(DAD):主机在正式使用一个地址之前,会先发一个 NS 问"有人用这个地址吗",如果没人回 NA 才敢用。所以 IPv6 设备刚配好地址时会有一个短暂的"tentative(试验)“状态,这个状态下的地址不能用于通信——display ipv6 interface 里看到 tentative 不要慌,等几秒就好。另一个是路由器通告里带的标志位:M(Managed)标志表示"地址用 DHCPv6 分配”,O(Other)标志表示"其他参数用 DHCPv6 分配"。这两个标志位是 SLAAC 与 DHCPv6 混合模式的开关,配错会出现"终端拿到了地址但没法解析域名"这种半通不通的状态。

无状态地址自动配置(SLAAC)。主机开机后先给自己生成一个 fe80:: 的链路本地地址,然后发 RS,路由器回 RA。RA 里带一个前缀(比如 2001:db8:10::/64),主机拿这个前缀 + 自己的接口标识,拼成自己的全球单播地址。整个过程没有 DHCP 服务器参与,所以叫"无状态"(服务器不记谁用了哪个地址)。

动态主机配置协议版本 6(DHCPv6) 是另一条路。它可以给主机分配地址,也可以只分配 DNS 等参数(无状态 DHCPv6)。实际部署里常见"SLAAC 分配地址 + DHCPv6 分配 DNS"的混合模式,因为 RA 里能带的前缀信息有限。

双栈是最现实的迁移方案。一台设备同时开 IPv4 和 IPv6,两套协议互不干扰,各跑各的路由。双栈不是"过渡技术",而是长期存在的部署形态——绝大多数企业网未来十年都是双栈。

IPv6 的报文头变化值得单独说一段,因为它解释了很多"为什么 IPv6 更快、但要小心什么"的问题。IPv4 的报文头有 13 个字段、可变长(带选项时 60 字节);IPv6 把报文头精简到 8 个字段、固定 40 字节,去掉了校验和、去掉了分片字段(分片交给扩展头)、去掉了选项(交给扩展头)。带来的后果是:

第一,路由器转发更快,因为不用逐跳校验、头定长好处理。第二,中间路由器不分片,这是个大变化——IPv4 允许路径上任何设备分片,IPv6 只允许源端分片,所以路径 MTU 发现成了刚需。第三,没有广播,同一个广播域里不再有"所有人同时收到"的报文,全改成组播,这直接简化了二层网络的设计。

下图是一个典型的双栈+SLAAC 组网,把本章要配的东西一次画全:

                 上游路由器(双栈)
                 10.200.1.2 / 2001:db8:100::2
                        |
                        | Vlanif100: 10.200.1.1 / 2001:db8:100::1
                [三层交换机 HUAWEI]
                        | Vlanif10: 192.168.10.1 / 2001:db8:10::1
                        |
            +-----------+-----------+
            |                       |
        PC-A(双栈)              PC-B(纯 IPv4)
     192.168.10.100            192.168.10.101
     2001:db8:10::a(SLAAC 得到)

这张图里要特别注意 PC-A 的地址是"自动得到"的:交换机在 Vlanif10 上发 RA、RA 里带 2001:db8:10::/64,PC-A 拿这个前缀拼上自己的接口标识就成了。所以交换机上那个 undo ipv6 nd ra halt 是整条链路的开关,这一行不通,PC-A 就只有 fe80:: 地址。

IPv6 与 IPv4 共存时最容易忽视的三件事。第一,DNS 优先级。现在很多站点同时有 A 记录和 AAAA 记录,终端会优先用 IPv6,如果 IPv6 路径不通,表现为"网页打开很慢最后才用 IPv4 打开"。这不是 IPv6 配错了,是 DNS 返回了 IPv6 但走不通。第二,两套路由表的独立性。IPv4 默认路由和 IPv6 默认路由是两张表,配了一个不代表另一个;一台主机双栈时,IPv4 的网关和 IPv6 的网关可以是不同的设备。第三,ACL 与安全策略要写两遍。IPv4 的包过滤规则完全不作用于 IPv6 报文,防火墙上的"内网禁止访问某服务"如果只写了 IPv4,IPv6 那条路是敞开的——这是等保检查里非常常见的一处漏洞。

适用版本:华为 VRP V200R019 及以上(S5700/AR6000 系列);H3C Comware V7(R2610 及以上)。

16.2 华为设备配置详解

16.2.1 命令行基础速览(本章会用到的那几条)

IPv6 在华为设备上是全局开关 + 接口开关两级结构,这一点最容易忘:全局不 ipv6 打开,接口上配什么都不生效。

用途 华为命令 视图
全局启用 IPv6 ipv6 系统视图
接口启用 IPv6 ipv6 enable 接口视图
配地址 ipv6 address 2001:db8:10::1 64 接口视图
配链路本地地址 ipv6 address fe80::1 link-local 接口视图
配 EUI-64 自动生成主机位 ipv6 address 2001:db8:10:: 64 eui-64 接口视图
接口发 RA undo ipv6 nd ra halt 接口视图
静态路由 ipv6 route-static 2001:db8:20:: 64 2001:db8:10::2 系统视图
ACL acl ipv6 number 3000 系统视图
状态检查 display ipv6 interface 任意视图

16.2.2 完整配置模板:双栈 + SLAAC + 静态路由

场景:一台 S5735-L24T4S-A1 三层交换机做网关,Vlanif10 是用户网段 192.168.10.0/24 与 2001:db8:10::/64,Vlanif100 是上行互联 10.200.1.0/30 与 2001:db8:100::/64,上游路由器的 IPv6 地址是 2001:db8:100::2。要求内网 PC 能通过 SLAAC 自动拿到 IPv6 地址。

# 进入系统视图
system-view
sysname HUAWEI

# 全局启用 IPv6,这一步不做后面都白配
ipv6

# 用户网关接口:同时配 IPv4 与 IPv6(双栈)
vlan 10
 quit
interface Vlanif 10
 ip address 192.168.10.1 255.255.255.0
 ipv6 enable
 ipv6 address 2001:db8:10::1 64
 quit

# 上行互联接口
vlan 100
 quit
interface Vlanif 100
 ip address 10.200.1.1 255.255.255.252
 ipv6 enable
 ipv6 address 2001:db8:100::1 64
 quit

# 用户接口打开 RA 通告,PC 才能 SLAAC 拿地址
# RA 是周期性发送的,默认可能被抑制,先确认状态
interface Vlanif 10
 undo ipv6 nd ra halt
 quit

# IPv6 默认路由指向上游
ipv6 route-static :: 0 2001:db8:100::2

# 把它们接入物理口(交换机需要把口划进 VLAN)
interface GigabitEthernet0/0/1
 port link-type access
 port default vlan 10
 quit

save

16.2.3 逐行讲解

命令 作用 新手常填错的地方
ipv6 全局启用 IPv6 协议栈 漏了这条,接口上 ipv6 enable 会直接报错
ipv6 enable 接口启用 IPv6 接口必须单独开,全局开了不代表接口开了
ipv6 address 2001:db8:10::1 64 配全球单播地址 掩码写位数不是点分十进制,写 255.255.255.0 会报错
ipv6 address fe80::1 link-local 手工指定链路本地地址 不写 link-local 关键字会被当成全球地址,报"地址冲突"
ipv6 address :: 64 eui-64 按 MAC 自动生成主机位 前缀部分必须写全,只写 :: 一个冒号会报错
undo ipv6 nd ra halt 允许接口发 RA 默认抑制 RA,不打开 PC 收不到前缀,SLAAC 失败
ipv6 route-static :: 0 2001:db8:100::2 IPv6 默认路由 :: 0 就是 ::/0,别写成 0.0.0.0 0.0.0.0
acl ipv6 number 3000 建 IPv6 ACL IPv6 的 ACL 必须用 acl ipv6 开头,普通 ACL 不认 IPv6 报文

为什么要 ipv6 enable 两次。这是华为设备最常见的"配了不生效"的原因。全局的 ipv6 是打开了协议栈,但每个接口还要单独声明"我也要参与 IPv6"。好处是只给需要的接口开,坏处是新手经常漏。判断方法:display ipv6 interface brief 里如果某个口没有 fe80:: 地址,就是没开。

16.2.4 SLAAC 还是 DHCPv6:先选对路线

IPv6 的地址分配有两条路,选错了后面全是返工。先说结论:绝大多数企业用户网段用 SLAAC,需要精细控制的场景才上 DHCPv6,两者也可以混合用。

对比项 SLAAC(无状态) DHCPv6(有状态)
配置复杂度 路由器发 RA 即可,零服务器成本 要建地址池、维护租约、考虑高可用
地址可控性 地址由终端自己拼,不好指定 可精确分配、可绑定 MAC、可回收
服务器记录 不记录谁用了哪个地址 有租约表,可审计
额外参数下发 RA 能带的内容有限 可下发 DNS、域名等丰富参数
终端兼容性 几乎所有系统都支持 部分老旧系统支持不完整
典型场景 办公终端、员工手机 打印机、监控、需要固定资产台账的设备

有一个折中方案叫无状态 DHCPv6:地址还是 SLAAC 拿,DHCPv6 只下发 DNS 等参数。配置上就是 RA 里标记"地址用 SLAAC,其他参数找 DHCPv6",然后 DHCPv6 池里只配 dns-server。实践中最省事,推荐作为默认选型。

为什么 SLAAC 的地址"不好控"。因为地址 = 前缀(RA 给的)+ 接口标识(终端自己生成)。接口标识可能是 EUI-64(由 MAC 算出来),也可能是随机值(隐私扩展,现代系统默认)。所以你在服务器上看到一台 PC 的 IPv6 地址,第二天它可能变了——这就是很多"IPv6 下的访问控制"做不下去的原因。要控就得用 DHCPv6 的静态绑定,或者干脆用"MAC 白名单"而不是 IP。

16.2.5 IPv6 地址规划怎么做

IPv6 的地址空间大得几乎用不完,于是很多人以为"随便配就行"。恰恰相反,地址空间越大越需要规划,否则三年后没人记得 2001:db8:a3f2:17::/64 是哪个楼哪个部门的。下面是一套能直接照搬的企业 IPv6 规划方法。

第一步:确定拿到的是哪个段。运营商通常会给企业分配一个 /48(有的给 /56),这是你的总前缀。假设拿到 2001:db8:abcd::/48,那么它有 16 位可以自己划分,也就是 65536 个 /64 子网。

第二步:按"层级 + 用途"划分位段。一个实用的划法是:

位段(在前缀之后) 位数 含义 例子
第 1 段 4 位 园区/楼栋 1 号楼 = 1,2 号楼 = 2
第 2 段 4 位 楼层 3 楼 = 3
第 3 段 8 位 VLAN/部门 财务 VLAN 10 = 0a
剩余 剩余位 预留 未来扩展

按这套规则,1 号楼 3 楼财务 VLAN 10 的网段就是 2001:db8:abcd:130a::/64。一眼能看出位置,这就是规划的价值。

第三步:给每类地址定规矩。建议定五条硬规矩:一是所有用户网段一律用 /64,因为 SLAAC 规定前缀长度必须是 64,用别的长度 SLAAC 直接失效;二是互联链路用 /64 或点对点的 /127,/127 省地址但要确认设备支持;三是环回口每台设备给一个 /128,统一用某个规律编号;四是服务器区单独一段,便于写 ACL;五是留出扩展段,别把 65536 个 /64 一次用完。

第四步:规划路由协议。IPv6 的 IGP 用 OSPFv3 或 IS-IS(双栈场景 IS-IS 一个进程同时带 IPv4 与 IPv6,比 OSPF 两套进程省事)。外部路由用 BGP4+(BGP 的 IPv6 地址族)。记住 IPv4 和 IPv6 是两套路由,要分别配。

16.2.6 华为 DHCPv6 与 OSPFv3 配置骨架

SLAAC 只能给主机分配"由前缀+接口标识拼出来"的地址,控制不了具体分哪个。如果要精确分配(比如给打印机固定地址),或者要下发 DNS,就得上 DHCPv6。华为的 DHCPv6 配置骨架是:

# 全局启用 DHCPv6 与 DHCP(部分版本需要先 dhcp enable)
dhcp enable

# 创建 DHCPv6 地址池
dhcpv6 pool V6_POOL
 address prefix 2001:db8:10::/64
 dns-server 2001:db8:100::53
 excluded-address 2001:db8:10::1
 quit

# 在用户网关接口上应用地址池
interface Vlanif 10
 dhcpv6 server pool V6_POOL
 quit

OSPFv3 与 OSPFv2 是两个独立进程、独立配置,可以同时跑。要点是OSPFv3 靠链路本地地址建邻居,所以每个参与接口必须有 fe80:: 地址,区域号与进程号的配法与 OSPFv2 类似但命令是 ospfv3:

# 启动 OSPFv3 进程并配 Router-ID(点分十进制,与 IPv4 一样)
ospfv3 1
 router-id 10.200.1.1
 quit

# 在接口上使能并指定区域
interface Vlanif 10
 ospfv3 1 area 0
 quit
interface Vlanif 100
 ospfv3 1 area 0
 quit

⚠ 版本差异:DHCPv6 地址池视图下的命令在不同 VRP 版本里有 address prefix 与 network 两种写法,excluded-address 的支持程度也不同;OSPFv3 在部分老版本是 ipv6 router ospf 1 的老命令风格。

OSPFv3 的写法已核实:H3C 官方《11-OSPFv3配置》给出的命令是——启动进程 ospfv3 [ process-id | vpn-instance vpn-instance-name ] *(系统视图),接口使能 ospfv3 process-id area area-id [ instance instance-id ](接口视图)。也就是说本站写的 ospfv3 1 + 接口 ospfv3 1 area 0 结构与官方一致,H3C 侧已确认;华为 VRP V200R0xx 采用同名 ospfv3 风格(旧的 ipv6 router ospf 属更早版本)。 出处:H3C 11-OSPFv3配置 、H3C 10-OSPFv3命令 、H3C 11-OSPFv3命令 华为 DHCPv6 池命令已核实(官方命令参考原文):

命令 官方命令格式 视图
建池 dhcpv6 pool pool-name 系统视图
分配地址前缀 address prefix [ prefix-name ] ipv6-prefix/ipv6-prefix-length [ eui-64 ] [ life-time { valid-lifetime | infinite } { preferred-lifetime | infinite } ] IPv6 地址池视图
排除地址 excluded-address [ prefix-name ] start-ipv6-address [ to end-ipv6-address ] IPv6 地址池视图

两点修正与提醒:

  1. 池里分配地址用 address prefix,不是 network。本章模板写的 address prefix 2001:db8:10::/64 与官方格式一致(官方格式是 ipv6-prefix/ipv6-prefix-length 斜杠写法)。
  2. excluded-address 确实可用,格式是 excluded-address 起始地址 [ to 结束地址 ]。

出处:NetEngine AR1000V V300R021 命令参考 · DHCPv6 配置命令 (dhcpv6 pool、address prefix、excluded-address 命令格式原文)

OSPFv3 与 OSPFv2 的差别值得单独记三条。第一,OSPFv3 靠链路本地地址建邻居,所以每个参与接口必须有 fe80:: 地址,这也是为什么"全局开 IPv6 → 接口开 IPv6"这两步不能省。第二,OSPFv3 的 network 命令不再用来宣告网段,而是直接在接口上 ospfv3 1 area 0 使能,网段信息由接口地址自动带出——这与 OSPFv2 在 area 0 视图里写 network x.x.x.x 反掩码 的思路完全不同,从 OSPFv2 迁移过来的人最容易在这里犯错。第三,Router-ID 仍然是 32 位点分十进制(跟 IPv4 格式一样),因为 OSPFv3 的 Router-ID 字段没改,所以配的时候仍然写 router-id 10.200.1.1 这种形式。

16.2.7 IPv6 ACL 配置

IPv6 的 ACL 与 IPv4 分开,必须用 acl ipv6 声明,规则里的 source / destination 后面的地址是 IPv6 格式,掩码写前缀长度:

# 创建 IPv6 高级 ACL
acl ipv6 number 3000

 # 只放行 2001:db8:10::/64 访问 2001:db8:20::/64 的 443 端口
 rule 5 permit tcp source 2001:db8:10::/64 destination 2001:db8:20::/64 destination-port eq 443

 # 拒绝其余到服务器段的访问
 rule 10 deny ipv6 source 2001:db8:10::/64 destination 2001:db8:20::/64

 # 兜底放行
 rule 20 permit ipv6
 quit

# 接口上调用
interface Vlanif 10
 traffic-filter inbound acl ipv6 3000
 quit

注意两个细节:一是 IPv6 的"任意地址"写 any 或 ::/0,不写 0.0.0.0;二是 traffic-filter 后面要跟 acl ipv6 关键字,只写 acl 3000 会去匹配 IPv4 ACL。

16.3 H3C 设备配置详解

H3C Comware V7 的 IPv6 配置与华为结构一致,但有一个关键差异:H3C 在部分型号上需要先 ipv6 全局启用,而在交换机的部分版本里 IPv6 转发能力可能受 license 或型号限制,部署前必须确认。

# 进入系统视图
system-view
sysname H3C

# 全局启用 IPv6
ipv6

# 用户网关接口,双栈
vlan 10
 quit
interface Vlan-interface 10
 ip address 192.168.10.1 255.255.255.0
 ipv6 address 2001:db8:10::1/64
 undo ipv6 nd ra halt
 quit

# 上行互联
vlan 100
 quit
interface Vlan-interface 100
 ip address 10.200.1.1 255.255.255.252
 ipv6 address 2001:db8:100::1/64
 quit

# IPv6 默认路由
ipv6 route-static :: 0 2001:db8:100::2

save force

H3C 与华为的第一个大差异:地址掩码的写法。H3C 的 ipv6 address 后面是斜杠加前缀长度(2001:db8:10::1/64),华为是空格加位数(2001:db8:10::1 64)。这是抄配置时最容易出错的地方,华为的写法拿到 H3C 上会直接报错。

第二个差异:链路本地地址的写法。H3C 用 ipv6 address auto link-local 让系统自动生成,或者手工指定 ipv6 address fe80::1 link-local。华为的 eui-64 关键字在 H3C 里对应 ipv6 address 2001:db8:10::/64 eui-64。

第三个差异:RA 使能。H3C 用 undo ipv6 nd ra halt 打开 RA,与华为命令相同。但 H3C 还有 ipv6 nd ra interval 等调节参数,实际部署时建议显式配置,避免使用默认的较长周期。

H3C 的 DHCPv6:

# 启用 DHCPv6 服务
dhcp enable

# 创建 DHCPv6 地址池
ipv6 dhcp pool V6_POOL
 address prefix 2001:db8:10::/64
 dns-server 2001:db8:100::53
 quit

# 接口上应用
interface Vlan-interface 10
 ipv6 dhcp server V6_POOL
 quit

H3C 的 OSPFv3:

# 启动 OSPFv3 进程
ospfv3 1
 router-id 10.200.1.1
 quit

# 接口使能
interface Vlan-interface 10
 ospfv3 1 area 0
 quit

H3C 的 IPv6 ACL:

# 创建 IPv6 高级 ACL,H3C 用 acl ipv6 advanced
acl ipv6 advanced 3000
 rule 5 permit tcp source 2001:db8:10::/64 destination 2001:db8:20::/64 destination-port eq 443
 rule 10 deny ipv6 source 2001:db8:10::/64 destination 2001:db8:20::/64
 rule 20 permit ipv6
 quit

interface Vlan-interface 10
 packet-filter ipv6 3000 inbound
 quit

⚠ 版本差异:H3C 的 acl ipv6 advanced 3000 与 acl ipv6 number 3000 都可用,早期版本只认后者;接口调用时 packet-filter ipv6 的 ipv6 关键字部分版本可省,但显式写更稳妥。

16.3.1 H3C 侧的差别逐条对照

把上面 H3C 的配置与华为逐行对照,差异其实只有几处,但每一处都足以让"抄来的配置跑不起来":

项目 华为写法 H3C 写法 抄错的后果
地址掩码 ipv6 address 2001:db8:10::1 64 ipv6 address 2001:db8:10::1/64 H3C 上直接语法错误
接口启用 必须先 ipv6 enable 配地址即启用 华为上漏了 enable,地址配了但不生效
VLAN 接口名 Vlanif 10 Vlan-interface 10 命令不识别
DHCPv6 池视图 dhcpv6 pool X ipv6 dhcp pool X 视图名不同,敲进去没反应
ACL 视图 acl ipv6 number 3000 acl ipv6 advanced 3000 建出来的 ACL 类型可能不对
ACL 调用 traffic-filter inbound acl ipv6 3000 packet-filter ipv6 3000 inbound 关键字顺序完全反了
RA 使能 undo ipv6 nd ra halt undo ipv6 nd ra halt 两家相同,这一行反而容易记对

为什么两家的"启用"逻辑不一样。华为是"全局开关 + 接口开关"两级,H3C 是"配地址就启用"。前者严谨但啰嗦,后者省事但容易让人忘记全局 ipv6 那一行。实际排错时,看到华为设备"地址配了不生效",第一反应就应该是查全局 ipv6 和接口 ipv6 enable。

H3C 的 RA 抑制为什么要单独强调。H3C 的交换机有些型号默认就是"RA 抑制",也就是配了地址、PC 却拿不到 SLAAC 地址。这一条两家命令一样,但 H3C 上更容易踩,因为 H3C 的接口在配了地址之后"看起来一切都对",只有 PC 那边没地址,排查时很容易怀疑 PC 而不是交换机。判断办法是在交换机上 display ipv6 interface Vlan-interface 10,看输出里 RA 那一行的状态,如果是 suppressed 就是这个问题。

16.4 华为 / H3C 命令对照表

功能 华为(VRP) H3C(Comware V7) 差异说明
全局启用 ipv6 ipv6 相同
接口启用 ipv6 enable ipv6 address ... 即隐式启用 H3C 配了地址就启用,华为要显式 enable
配地址 ipv6 address 2001:db8:10::1 64 ipv6 address 2001:db8:10::1/64 掩码写法不同
链路本地 ipv6 address fe80::1 link-local ipv6 address fe80::1 link-local 相同
EUI-64 ipv6 address :: 64 eui-64 ipv6 address 2001:db8:10::/64 eui-64 写法略差
RA 使能 undo ipv6 nd ra halt undo ipv6 nd ra halt 相同
静态路由 ipv6 route-static :: 0 <下一跳> ipv6 route-static :: 0 <下一跳> 相同
DHCPv6 池 dhcpv6 pool X → address prefix ... ipv6 dhcp pool X → address prefix ... 视图名不同
OSPFv3 ospfv3 1 + 接口 ospfv3 1 area 0 ospfv3 1 + 接口 ospfv3 1 area 0 基本相同
IPv6 ACL acl ipv6 number 3000 acl ipv6 advanced 3000 视图名不同
ACL 调用 traffic-filter inbound acl ipv6 3000 packet-filter ipv6 3000 inbound 命令名不同
查看地址 display ipv6 interface display ipv6 interface 相同

16.5 配置验证

IPv6 的验证比 IPv4 多一层,因为地址是"自动生成"的,必须先确认自动生成的部分对不对。

第一步,确认接口拿到了链路本地地址。这是 IPv6 工作的基础:

display ipv6 interface brief

期望每个启用了 IPv6 的接口都有 fe80:: 地址:

Vlanif10                [Up]
    IPv6 Address : 2001:db8:10::1
    Link-local Address : FE80::2E0:FCFF:FE12:3456

如果某个接口没有 Link-local 地址,说明该接口没启用 IPv6,回到 ipv6 enable 那一步。

第二步,确认地址与邻居。用 display ipv6 interface Vlanif10 看详细信息,重点看 ND Reachable 和 ND Stale 的邻居数:

display ipv6 interface Vlanif10
display ipv6 neighbors

期望 display ipv6 neighbors 里能看到内网 PC 的地址与 MAC 的对应关系。如果 PC 有 IPv6 地址但邻居表里没有,说明二层不通或 PC 没发 NS。

第三步,确认 RA 有没有发出去。PC 能不能 SLAAC 拿地址,取决于 RA:

display ipv6 interface Vlanif10

期望输出里看到类似 RA Interval: 600s 和 RA Suppress: No(或 Unsolicited RA: enable)。如果 RA 被抑制,PC 收不到前缀,只能拿到 fe80:: 地址。

第四步,看 IPv6 路由表:

display ipv6 routing-table

期望能看到直连的 2001:db8:10::/64、2001:db8:100::/64 和一条静态默认路由 ::/0:

Destination  : ::                     PrefixLength : 0
NextHop      : 2001:db8:100::2       Preference   : 60
Protocol     : Static

第五步,端到端测试。IPv6 的 ping 命令与 IPv4 不同,要用 ping ipv6:

ping ipv6 2001:db8:100::2

H3C 侧验证命令基本一致:

display ipv6 interface brief
display ipv6 neighbors
display ipv6 routing-table
ping ipv6 2001:db8:100::2

16.5.1 一份可以打印出来贴墙的验收清单

IPv6 部署验收最忌讳"看到 PC 有地址就以为成了"。地址只是第一层,DNS、MTU、ACL、IPv4 兼容都要一项项过。下面这份清单按顺序打勾,全部通过才叫交付:

序号 验证项 用什么命令看 通过标准
1 全局与接口启用 display ipv6 interface brief 每个目标口都有 fe80::
2 地址配置 display ipv6 interface Vlanif10 GUA 与前缀正确
3 RA 已发送 display ipv6 interface Vlanif10 RA 未被抑制
4 终端拿到地址 终端上 ipconfig / ip -6 addr 有 2001:db8:10:: 开头的地址
5 邻居解析正常 display ipv6 neighbors 能看到终端的地址与 MAC
6 路由表完整 display ipv6 routing-table 含直连网段与默认路由
7 网关可达 ping ipv6 <网关> 通
8 出网可达 ping ipv6 <上游> 通
9 DNS 可用 终端上 nslookup 域名 能解析出 IPv6 地址
10 大包不丢 ping ipv6 -s 1400 <目的> 通(验证 MTU 没问题)
11 IPv6 ACL 生效 display acl ipv6 all 匹配计数增长
12 IPv4 未被影响 ping IPv4 地址 通(双栈场景必测)

第 10 项特别值得说明。大包测试是 IPv6 排查里最容易被跳过、但最能暴露问题的一步。因为 IPv6 中间不分片,一旦路径 MTU 某处偏小、而 ICMPv6 Packet Too Big 又被安全策略挡了,表现就是"网页能开、下载卡住、视频转圈"。用 ping ipv6 -s 1400 这种带载荷的测试,能一次测出这条链路的实际可用 MTU 天花板。

16.6 排错与故障树

IPv6 的故障树与 IPv4 有相似之处,但多了一个"自动配置"分支,这是 IPv6 独有的:

PC 拿不到 IPv6 地址
 ├─ 1. PC 自己有没有 fe80:: 地址?
 │   ├─ 没有 → PC 侧 IPv6 未启用(Windows 在网卡属性里勾选)
 │   └─ 有 → 继续
 ├─ 2. PC 有没有发 RS?路由器有没有回 RA?
 │   ├─ 路由器接口 RA 被抑制 → undo ipv6 nd ra halt
 │   ├─ 路由器接口没配 IPv6 地址 → ipv6 address
 │   └─ 二层有隔离(端口隔离/ACL 挡了 ICMPv6)→ 查端口配置
 ├─ 3. 拿到地址但上不了网?
 │   ├─ 没有 IPv6 默认路由 → ipv6 route-static :: 0
 │   ├─ DNS 只有 IPv4 → 配 DHCPv6 下发 IPv6 DNS
 │   └─ 上游没开 IPv6 → 逐跳 ping ipv6 定位
 └─ 4. 双栈下 IPv6 能通、IPv4 反而不通?
     ├─ ACL 误伤 IPv4(acl ipv6 与 acl 混用)
     └─ 路由优先级变化导致 IPv4 走错路径
症状 可能原因 排查命令
接口配了地址但没生效 全局 ipv6 没开 display ipv6 interface brief
PC 只拿到 fe80:: 地址 RA 被抑制 / 接口没配前缀 display ipv6 interface Vlanif10
PC 完全没 IPv6 二层隔离策略挡了 ICMPv6 display current-configuration
ping ipv6 不通但邻居表有 上游没配回程路由 tracert ipv6
DHCPv6 分不到地址 池没用接口绑定 / 池网段不符 display dhcpv6 pool
IPv6 ACL 不生效 用了 IPv4 的 acl number 而非 acl ipv6 display acl ipv6 all
现象 紧跟着要看的第二件东西 常见结论
接口有 GUA 但终端没地址 RA 状态 RA 被抑制,补 undo ipv6 nd ra halt
终端有地址但 DNS 不通 DHCPv6 / RA 的 DNS 参数 没下发 IPv6 DNS,终端拿不到 AAAA 解析
网关 ping 通、外网不通 display ipv6 routing-table 缺默认路由
外网能 ping 不能大文件 路径 MTU ICMPv6 Packet Too Big 被挡
IPv6 全通、IPv4 断了 IPv4 的 ACL 与路由 双栈策略误伤,分离两栈再查

两个 IPv6 特有的坑。第一个是 ICMPv6 不能被一刀切禁掉。IPv4 时代大家习惯"安全策略里屏蔽所有 ICMP",但 IPv6 的 NDP、PMTUD、RA 全靠 ICMPv6,把 ICMPv6 全禁了,IPv6 直接瘫痪。正确的做法是放行 ICMPv6 的关键类型(RS、RA、NS、NA、Packet Too Big),只屏蔽 echo 类。

第二个是 MTU 与分片。IPv6 的标准 MTU 是 1280 以上,而且中间路由器不分片(IPv4 是可以中途分片的),分片只能由源端做。所以路径 MTU 发现(PMTUD)在 IPv6 里更重要,而 PMTUD 依赖 ICMPv6 的 Packet Too Big 报文——又回到了上一条:不能禁 ICMPv6。

三个现场案例,把故障树走一遍。

案例一:PC 完全拿不到 IPv6 地址,只有一个 fe80::。这是 SLAAC 失败的标准症状。按故障树走:先看交换机接口有没有前缀地址(display ipv6 interface Vlanif10 要有 2001:db8:10::1/64),再看 RA 有没有发(输出里 RA Suppress 应为 No 或等价状态)。九成的情况是第二项:接口地址配了、但 undo ipv6 nd ra halt 没敲。这个坑之所以常见,是因为"配了地址"给人的心理暗示是"应该能用了",而 RA 是一行独立的命令,漏了也不报错。

案例二:PC 拿到了 IPv6 地址,但 ping 不通外网。先看 PC 的默认网关是否存在(IPv6 里叫默认路由),Windows 上 ipconfig 能看到"默认网关"一行,Linux 上 ip -6 route 看有没有 default via fe80::...。如果没有,说明 RA 里没带网关信息——RA 是由路由器发出的,只要路由器接口在发 RA,通常会自动带上自己的链路本地地址作为网关。所以更可能的原因是上游没通:交换机上的 ipv6 route-static :: 0 没配,或者配了但下一跳不可达。用 tracert ipv6 逐跳定位最快。

案例三:双栈上线后,IPv4 也不通了。这个案例最吓人,但原因往往很简单:一是 ACL 在调用时用了 traffic-filter inbound acl 3000(IPv4)却想拦 IPv6,反过来也可能误伤;二是 vlanif 上 IPv4 和 IPv6 共用一个接口,某个方向的策略把两套都影响到了;三是运维改了接口的 ipv6 enable 或者加了一条 IPv6 路由,导致 IPv4 流量被 ICMPv6 相关策略波及。排查原则:双栈出问题先分离两栈,用纯 IPv4 与纯 IPv6 的 ping 分别测,确认是哪一栈断,不要混在一起看。

一段可以照做的双栈迁移路线。企业从纯 IPv4 到双栈,建议按下面五步走,每一步都可回退:

第一步,先让骨干能跑 IPv6。核心与出口设备开 IPv6、配地址、配默认路由,但不给用户网段开 RA。这一步只验证"设备之间能通",对用户无影响。

第二步,给一台管理机开 IPv6,验证到核心的连通性。这一步验证"端到端路径"。

第三步,给出口做 IPv6 的 NAT66 或直接分配 GUA。如果运营商只给了 IPv4 地址,IPv6 可以先只在内网用 ULA 跑(fc00::/7),不接外网。

第四步,选一个试点 VLAN 开 RA,让该部门 PC 用 SLAAC 拿地址,观察一周。这一步会暴露真实的终端兼容性问题(有些老打印机、老监控根本不支持 IPv6)。

第五步,逐步推广 + 补 ACL 与安全策略。每推广一个 VLAN,就要同步补一套 IPv6 的 ACL,否则就是"安全策略只保 IPv4"的漏洞。

这条路线的好处是每一步都能回退,且每一步都有一个明确的验收标准(能通、能拿地址、能上网),符合本章反复讲的"分层验证"思路。

16.7 新手踩坑与注意事项

  1. 全局 ipv6 没开——只配了接口命令,什么也不生效,先 display ipv6 interface brief 看有没有 fe80::。
  2. 把掩码写成点分十进制——IPv6 不用子网掩码,只有前缀长度(/64)。
  3. 以为 fe80:: 是配错了——链路本地地址每个接口自动生成,是正常现象。
  4. 漏配 RA 使能——默认抑制 RA,PC 收不到前缀就 SLAAC 不了。
  5. 不写字间冒号位置——:: 只能用一次,写两个 :: 会报错。
  6. 用 IPv4 ACL 拦 IPv6 流量——必须 acl ipv6,两套体系完全独立。
  7. 一刀切禁用 ICMPv6——NDP 挂了全网 IPv6 都瘫,只放行关键类型。
  8. 双栈下以为 IPv4 会自动关——两套并行,路由各自独立,别指望互相兜底。
  9. IPv6 默认路由写成 0.0.0.0 0.0.0.0——是 :: 0(或 ::/0)。
  10. DHCPv6 池配了没绑定——池建了但接口没 dhcpv6 server,PC 分不到地址。

16.8 本章小结

  • IPv6 用 128 位地址,冒号十六进制表示,可省前导 0、可用一次 :: 简写。
  • 链路本地地址 fe80::/10 每接口自动生成,是 NDP、路由协议、SLAAC 的基础,看到它别以为配错。
  • NDP 用 RS/RA/NS/NA 四个 ICMPv6 报文取代了 ARP + 路由器发现。
  • SLAAC 靠 RA 里的前缀自动拼地址;DHCPv6 可以分配地址与 DNS,两者可混合使用。
  • 华为与 H3C 最大差异是地址掩码写法(华为空格位数、H3C 斜杠前缀)与 ACL 视图名。
  • 双栈是长期现实方案;ICMPv6 不能一刀切禁,否则 NDP 与 PMTUD 全废。

一张纸记牢本章。IPv6 的学习路径可以压缩成四句话:地址怎么算(128 位、冒号十六进制、:: 简写一次)、地址有哪些(GUA/LLA/ULA/组播,其中 LLA 每口自动生成)、地址怎么来(SLAAC 靠 RA 带前缀,或 DHCPv6 分配)、怎么通(路由两套独立、ICMPv6 不能禁、掩码写前缀长度)。

配置层面也只剩四行核心:全局 ipv6、接口 ipv6 enable 加地址、网关口 undo ipv6 nd ra halt、出口 ipv6 route-static :: 0。把这四行想明白,本章 90% 的坑都绕过了。

给零基础读者的下一步建议。本章只讲了"IPv6 怎么配通",没讲"IPv6 怎么运维"。真正上线之后,还有三件事要接着学:一是 IPv6 的地址审计(怎么从海量地址里找出违规设备,靠 DHCPv6 租约还是靠交换机邻居表),二是 IPv6 的安全策略(ACL 与防火墙策略要写两遍,这是等保检查的重点),三是 IPv6 的路由协议选型(OSPFv3 与 IS-IS 双栈的取舍)。这三件事分别在第17章(ACL)、第25~26 章(防火墙策略)、第13章(IS-IS)里都有对应内容,学完本章可以顺着往下读。

自测题

  1. 2001:0db8:0000:0000:0000:0000:0000:0001 用简写怎么写?为什么不能简写成 2001::db8::1?
  2. 链路本地地址的作用是什么?为什么说"每个接口都有"?
  3. SLAAC 的完整过程是什么?需要 DHCP 服务器吗?
  4. 华为和 H3C 配 IPv6 地址的命令有什么不同?
  5. 为什么 IPv6 网络里不能一刀切屏蔽 ICMPv6?
  1. 2001:db8::1。因为一个地址里 :: 只能出现一次,2001::db8::1 用了两次,无法唯一还原。
  2. 用于同一链路内的邻居发现、路由协议建邻居、SLAAC 找网关。每个启用 IPv6 的接口都会自动生成一个 fe80::/10 的地址,用作本链路内通信。
  3. 主机先生成链路本地地址 → 发 RS → 路由器回 RA(带前缀)→ 主机用"前缀 + 接口标识"拼出全球单播地址 → 做 DAD(重复地址检测)。不需要 DHCP 服务器。
  4. 华为:ipv6 address 2001:db8:10::1 64(空格加位数);H3C:ipv6 address 2001:db8:10::1/64(斜杠加前缀长度)。
  5. 因为 NDP(RS/RA/NS/NA)、路径 MTU 发现(Packet Too Big)都依赖 ICMPv6,全禁了会导致地址解析、自动配置、分片全部失效。

关于本书:《华为 / H3C 网络设备典型功能配置详解》—— 面向国内高校/企业网络环境, 华为 VRP 与 H3C Comware 双厂商并排配置的实操教材,共 43 章。 全书所有命令尽量有官方出处,查不到的显式标注「待核实」。 返回系列目录