ip -6 route add 添加静态路由未生效,根本原因是目标接口未启用ipv6或网关不可达;需确认接口有scope global地址、网关在直连子网且能响应邻居发现,且永久配置须按系统规范写入netplan yaml或route6-文件。

ip -6 route add 添加静态路由时为什么没生效
常见现象是命令执行无报错,但 ping6 仍不通、ip -6 route show 里也看不到新加的路由。根本原因通常是目标接口未启用 IPv6 或网关不可达。
必须先确认:目标接口(如 eth0)已启用且配置了有效的 IPv6 地址;网关地址(如 2001:db8::ff)在该接口所在子网内,且能被链路层解析(即对方在线且响应邻居发现)。
- 检查接口状态:
ip -6 addr show dev eth0,确保有scope global地址 - 验证网关连通性:
ping6 -c 2 2001:db8::ff,失败则说明路由无法落地 - 注意前缀长度:添加默认路由用
default via 2001:db8::ff dev eth0,不是0.0.0.0/0
永久保存 IPv6 静态路由(Netplan 系统)
Netplan 不直接支持 ip -6 route 的持久化,必须写入 YAML 配置文件。关键点是:路由必须和接口绑定,且不能遗漏 on-link 标志(当网关不在直连子网时才需显式指定)。
示例:为 eth0 添加去往 2001:db8:100::/64 的静态路由,下一跳是 2001:db8::1:
network:
version: 2
ethernets:
eth0:
routes:
- to: 2001:db8:100::/64
via: 2001:db8::1
on-link: true # 仅当网关非直连时必须设为 true
addresses: [2001:db8::100/64]
执行 sudo netplan apply 后,路由会自动加载并随系统重启保留。
永久保存 IPv6 静态路由(RHEL/CentOS 系统)
RHEL 系列通过 /etc/sysconfig/network-scripts/route6-<interface></interface> 文件管理 IPv6 路由,格式与 IPv4 的 route-<interface></interface> 类似,但每行只写一条路由。
例如,在 /etc/sysconfig/network-scripts/route6-eth0 中写入:
2001:db8:200::/64 via 2001:db8::2 dev eth0 default via 2001:db8::ff dev eth0
注意:
- 文件名必须严格匹配接口名,如
route6-eth0,否则不加载 -
via后只能是 IPv6 地址,不能是主机名 - 重启网络服务后才生效:
sudo systemctl restart network
删除或修改已有 IPv6 路由的常见陷阱
用 ip -6 route del 删除路由时,参数必须和添加时完全一致,包括 dev 和 via,否则报错 RTNETLINK answers: No such process。
例如,曾用以下命令添加:
sudo ip -6 route add 2001:db8:300::/64 via 2001:db8::3 dev eth0
那么删除时也必须写全:
sudo ip -6 route del 2001:db8:300::/64 via 2001:db8::3 dev eth0
漏掉 dev eth0 或写成 dev ens33 都会失败。永久配置的路由,必须同步修改对应配置文件,否则 netplan apply 或 systemctl restart network 会把旧路由重新加回来。











