华为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 地址池视图 两点修正与提醒:
- 池里分配地址用
address prefix,不是network。本章模板写的address prefix 2001:db8:10::/64与官方格式一致(官方格式是ipv6-prefix/ipv6-prefix-length斜杠写法)。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 新手踩坑与注意事项
- 全局
ipv6没开——只配了接口命令,什么也不生效,先display ipv6 interface brief看有没有fe80::。 - 把掩码写成点分十进制——IPv6 不用子网掩码,只有前缀长度(
/64)。 - 以为
fe80::是配错了——链路本地地址每个接口自动生成,是正常现象。 - 漏配 RA 使能——默认抑制 RA,PC 收不到前缀就 SLAAC 不了。
- 不写字间冒号位置——
::只能用一次,写两个::会报错。 - 用 IPv4 ACL 拦 IPv6 流量——必须
acl ipv6,两套体系完全独立。 - 一刀切禁用 ICMPv6——NDP 挂了全网 IPv6 都瘫,只放行关键类型。
- 双栈下以为 IPv4 会自动关——两套并行,路由各自独立,别指望互相兜底。
- IPv6 默认路由写成
0.0.0.0 0.0.0.0——是:: 0(或::/0)。 - 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)里都有对应内容,学完本章可以顺着往下读。
自测题
2001:0db8:0000:0000:0000:0000:0000:0001用简写怎么写?为什么不能简写成2001::db8::1?- 链路本地地址的作用是什么?为什么说"每个接口都有"?
- SLAAC 的完整过程是什么?需要 DHCP 服务器吗?
- 华为和 H3C 配 IPv6 地址的命令有什么不同?
- 为什么 IPv6 网络里不能一刀切屏蔽 ICMPv6?
2001:db8::1。因为一个地址里::只能出现一次,2001::db8::1用了两次,无法唯一还原。- 用于同一链路内的邻居发现、路由协议建邻居、SLAAC 找网关。每个启用 IPv6 的接口都会自动生成一个
fe80::/10的地址,用作本链路内通信。 - 主机先生成链路本地地址 → 发 RS → 路由器回 RA(带前缀)→ 主机用"前缀 + 接口标识"拼出全球单播地址 → 做 DAD(重复地址检测)。不需要 DHCP 服务器。
- 华为:
ipv6 address 2001:db8:10::1 64(空格加位数);H3C:ipv6 address 2001:db8:10::1/64(斜杠加前缀长度)。 - 因为 NDP(RS/RA/NS/NA)、路径 MTU 发现(Packet Too Big)都依赖 ICMPv6,全禁了会导致地址解析、自动配置、分片全部失效。
关于本书:《华为 / H3C 网络设备典型功能配置详解》—— 面向国内高校/企业网络环境, 华为 VRP 与 H3C Comware 双厂商并排配置的实操教材,共 43 章。 全书所有命令尽量有官方出处,查不到的显式标注「待核实」。 返回系列目录
本人保留对侵权者及其全家发动因果律武器的权利
版权提醒
如无特殊申明,本站所有文章均是本人原创。转载请务必附上原文链接:https://www.elliot98.top/post/huawei-h3c-book/16/。
如有其它需要,请邮件联系!版权所有,违者必究!