IPv6 连通性分层排障:地址、默认路由与邻居发现

2026-10-11 / 0 评论 / 0 阅读

IPv6 连通性分层排障:地址、默认路由与邻居发现 教程示意图

适用场景

设备已经启用 IPv6,却出现只能访问同网段主机、没有默认路由、重启网卡后偶尔恢复,或 ping -6 报网络不可达时,可以使用这套流程。它适合排查自己管理的 Linux 主机、测试虚拟机和受控实验网络,不需要扫描其他设备,也不会修改地址或路由。若故障发生在唯一远程管理链路上,应先取得虚拟机控制台、服务器带外控制台或现场操作条件。

原理

IPv6 主机通常同时拥有多类地址。以 fe80:: 开头的链路本地地址只能在当前二层链路使用,发送时常要附带接口范围;全局单播地址才可能被路由到其他网络;唯一本地地址用于组织内部通信。看到链路本地地址只能说明接口具备最基本的 IPv6 能力,不能证明主机收到了可路由前缀或默认路由。

IPv6 邻居发现协议使用 ICMPv6 完成路由器发现、前缀发现、地址解析和邻居可达性检测。路由器通告可以让主机学到前缀、默认路由和部分链路参数。它并不是 IPv4 ARP 的简单改名:默认路由器、邻居缓存和地址自动配置彼此关联。若交换网络错误过滤 ICMPv6,主机可能有地址却找不到下一跳。因此,排障顺序应是接口、地址、路由、邻居、端到端,而不是一开始就改 DNS。

准备工作

需要一台安装了 iproute2 和 iputils 的 Linux 主机,并知道哪个接口连接到待查网络。准备一个由你管理且获准测试的 IPv6 目标;不要测试陌生主机。本文中的 2001:db8::/32 只用于文档示意,按标准不应作为真实互联网测试地址。

所有命令均为读取或发送少量 ICMPv6 探测,不会永久修改配置。先记录时间、接口名称和故障现象,便于与交换机、路由器日志对应。

分步骤操作

  1. 查看接口管理状态和链路状态:
ip -br link
ip -br -6 address show

第一条输出中,目标接口应为 UP,物理或虚拟链路通常还会显示 LOWER_UP。第二条列出 IPv6 地址。若只有回环接口,先检查虚拟网卡是否连接、交换机端口是否启用,以及系统是否在内核参数或网络管理器中禁用了 IPv6。

  1. 设置后续命令使用的占位变量:
IFACE='替换为接口名'
TARGET='替换为获准测试的IPv6目标地址'

IFACE 应替换为上一步看到的真实接口名;TARGET 应替换为你管理的真实 IPv6 地址,不要保留说明文字,也不要填域名,以免 DNS 干扰本轮判断。

  1. 单独查看该接口的地址细节:
ip -6 address show dev "$IFACE"

关注 scope link、scope global、tentative 和 deprecated。tentative 表示重复地址检测尚未结束,持续不消失可能是链路或地址冲突问题;deprecated 地址通常不再优先用于新连接。只有 scope link 而没有全局或组织内部前缀时,应检查上游是否发送了路由器通告,或网络是否原本就设计为仅链路本地通信。

  1. 检查 IPv6 路由表:
ip -6 route show
ip -6 route get "$TARGET"

应看到直连前缀和按网络设计存在的 default via 条目。通过路由器通告学到的路由常带有 proto ra。route get 会让内核按真实规则计算到目标应使用的接口、下一跳和源地址,但不会真的发包。若直接返回网络不可达,问题仍在地址或路由层;如果选错接口或源地址,则检查多网卡、策略路由和通告来源。

  1. 从默认路由中复制真实的链路本地网关地址,再设置变量:
GATEWAY='替换为路由表中的链路本地网关地址'
ping -6 -c 4 -I "$IFACE" "$GATEWAY"

GATEWAY 必须来自本机路由输出,通常以 fe80:: 开头;-I 明确指定其所在接口,因为相同形式的链路本地地址可能出现在不同接口范围内。网关不响应普通回显并不必然表示失效,但若同时没有邻居条目或邻居状态失败,便很有诊断价值。

  1. 查看邻居缓存:
ip -6 neighbour show dev "$IFACE"

REACHABLE 表示近期确认可达;STALE 只是缓存需要在下次通信时重新确认,不等于故障;DELAY、PROBE 是检测过程;长期 INCOMPLETE 或 FAILED 表示地址解析没有成功完成。此时重点查二层 VLAN、无线隔离、虚拟交换机连接、网关是否在同一链路,以及 ICMPv6 邻居请求与通告是否被过滤。

  1. 最后测试端到端目标:
ping -6 -c 4 -I "$IFACE" "$TARGET"

如果网关邻居正常而远端失败,再检查上游路由、防火墙、目标主机是否允许回显以及回程路径。回显失败不能单独证明应用失败,可在获得授权后继续测试实际业务端口;但不要跳过前面的路由与邻居证据。

验证方法

健康的基本路径应同时满足:接口为启用状态;地址不长期处于 tentative;存在符合设计的可用地址;到远端目标的 route get 能给出正确出口和源地址;默认路由器在邻居表中不是 FAILED;至少一个获准目标可以完成通信。保存上述只读输出,故障恢复后再次执行并对比,特别关注默认路由是否重新出现、网关邻居状态是否从失败转为可达,以及源地址选择是否改变。

常见错误

直接对链路本地地址执行 ping 却不指定接口,会得到范围不明确或无路由错误。把 STALE 当成坏缓存而立即清空,会丢失现场证据。只有 fe80:: 地址却尝试访问互联网,通常不是 DNS 问题。多网卡主机可能从错误接口选源地址,应以 ip -6 route get 的结果为准。防火墙若笼统阻止全部 ICMPv6,会同时破坏邻居发现、路径 MTU 发现等基础能力,不应照搬“禁 Ping”式 IPv4 策略。虚拟机内配置正确但邻居失败,还要检查虚拟交换机、端口组和物理网络是否真的承载对应 IPv6 链路。

安全与回退

本流程没有添加或删除地址、路由和邻居项,因此无需配置回退。不要为了尝试而执行 ip -6 route flush、清空邻居表或重启远程主机的唯一网卡。若证据指向路由器通告或防火墙策略,应先导出设备配置、确认维护入口,再由网络管理员在明确范围内变更。抓包可能包含设备地址和业务元数据,确有需要时只在本人管理的接口、最短时间和合规存储位置采集。完成排障后清除终端中自行设置的变量,只需退出当前 shell;它们不会写入系统配置。

参考资料与转载说明

本文依据上述公开资料进行中文原创整理,不是逐句翻译,也不替代厂商手册。操作前请核对自己的版本、型号和备份。

评论一下?

OωO
取消