报错说明内核虽加载ipv6模块但隧道功能未启用或配置冲突,必须重启系统;需检查并启用ipv6协议栈、修正/etc/sysctl.conf和/etc/modprobe.d/等配置、确认local为公网ipv4地址、正确设置路由及dns。

ip tunnel add 命令执行失败、rtnetlink answers: operation not supported 报错,说明内核虽加载了 IPv6 模块,但隧道功能未真正启用或配置冲突——**必须重启系统,仅 service network restart 无效**。
检查并强制启用 IPv6 协议栈
很多旧版 Linux(如 CentOS 6/7 早期镜像、阿里云 AliOS 2.6.32 内核)默认禁用 IPv6,且禁用方式不止一处,漏掉任一环节都会导致隧道创建失败。
-
/etc/sysctl.conf中三处必须设为0:net.ipv6.conf.all.disable_ipv6、net.ipv6.conf.default.disable_ipv6、net.ipv6.conf.lo.disable_ipv6 -
/etc/modprobe.d/下的disable_ipv6.conf或dist.conf文件里若有alias net-pf-10 off或alias ipv6 off,必须注释或删除 -
/etc/sysconfig/network中确保NETWORKING_IPV6=yes(注意不是networking_ipv6=yes,大小写和下划线位置敏感) - 执行
sysctl -p生效后,仍需运行modprobe ipv6确认模块已载入(无输出即成功)
创建 SIT 隧道时的关键参数校验
使用 Hurricane Electric 的 Tunnelbroker 创建隧道后,其提供的 Linux-route2 示例命令中,local 参数必须填你服务器的公网 IPv4 地址,不是内网地址,也不是 0.0.0.0;remote 是 HE 分配的隧道端点 IPv4,不可改动。
- 错误示例:
ip tunnel add he-ipv6 mode sit remote 216.218.221.6 local 192.168.1.100→local用了私有地址,必然失败 - 正确写法:
ip tunnel add he-ipv6 mode sit remote 216.218.221.6 local 114.55.106.92 ttl 255(以实际公网 IP 为准) - 创建后必须立即执行
ip link set he-ipv6 up,否则后续ip addr add会报operation not supported - HE 分配的 /64 子网地址要完整带前缀长度,例如
2001:470:18:a26::2/64,少写/64会导致路由异常
路由与持久化配置的坑
隧道接口 he-ipv6 默认不随系统启动加载,且 ip route add ::/0 dev he-ipv6 这条默认路由在某些内核版本(如 2.6.32)上会因策略路由缺失而静默失败。
- 临时生效:执行完隧道创建后,按顺序运行:
ip link set he-ipv6 up→ip -6 addr add 2001:470:18:a26::2/64 dev he-ipv6→ip -6 route add ::/0 via 2001:470:18:a26::1 dev he-ipv6(注意是via网关,不是dev) - 永久生效:不能只靠
/etc/rc.local,推荐写 systemd service 或使用发行版网络脚本(CentOS 6/7 可在/etc/sysconfig/network-scripts/ifcfg-he-ipv6中定义) - 验证是否真通:用
ping6 -c 3 2001:470:0:76::1(HE 的隧道端点 IPv6)比ping6 ipv6.google.com更可靠,后者依赖 DNS 和中间链路
DNS 与应用层支持别漏掉
即使隧道跑通,curl 或浏览器仍可能无法解析域名,因为系统默认不查 IPv6 DNS,且部分服务(如 Nginx)需显式监听 IPv6 地址。
-
/etc/resolv.conf中追加至少一个 IPv6 DNS:nameserver 2001:4860:4860::8888(Google)或nameserver 2001:da8:202:10::37(清华) - Nginx 需在
server块中添加:listen [::]:80 ipv6only=on;和listen [::]:443 ssl ipv6only=on;,否则只响应 IPv4 连接 - 防火墙必须放行 IPv6 流量:
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT,且确认ip6tables服务已启用
shutdown -r now 后再验证,才能排除 90% 的“配置明明写了却没用”问题。











