跳至正文
老丹的足迹 —— 代码写给机器,游记写给自己,感悟写给时间
老丹的足迹 老丹的足迹
老丹的足迹 老丹的足迹
  • 首页
  • 示例页面
  • 首页
  • 示例页面
老丹的足迹 老丹的足迹
老丹的足迹 老丹的足迹
  • 首页
  • 示例页面
  • 首页
  • 示例页面

阿里云ECS通过HE隧道获取IPv6:完整安装指南

一、工作原理:HE 隧道的 4 个 IP 与双向通信机制

在开始配置之前,理解 HE 隧道的通信机制是成功部署的关键。一条完整的 HE 隧道会分配给你 4 个 IP 地址,它们各自承担不同的角色:

IP 地址示例值归属于谁角色定义
Server IPv4 Address216.218.221.6HE 隧道服务器隧道的 IPv4 对端。ECS 通过协议 41 将封装后的 IPv6 包发往这个地址。
Client IPv4 Address1.2.3.4你的 ECS(公网 IP)隧道在 HE 侧记录的公网 IPv4 标识,用于身份验证和隧道绑定。
Server IPv6 Address2001:470:18:4eb::1HE 隧道服务器隧道的 IPv6 网关。ECS 上所有出站 IPv6 流量的下一跳都指向它。
Client IPv6 Address2001:470:18:4eb::2你的 ECS(配置在网卡上)分配给 ECS 的公网 IPv6 地址,供外界通过 IPv6 直接访问。

这 4 个 IP 实质上构建了 两条独立的通信路径:

  • 底层承载层(IPv4 over 公网):依赖 Server IPv4 和 Client IPv4,通过协议 41 传输封装后的 IPv6 数据。这一层使得 ECS 和 HE 服务器能在纯 IPv4 互联网上交换 IPv6 数据包。
  • 上层内容层(IPv6 路由):依赖 Server IPv6(网关)和 Client IPv6(ECS 自身地址),承载真正的 IPv6 通信内容。

理解这两层的划分后,还需要进一步弄清 双向通信的查找机制,这也是初次接触 HE 隧道时最常遇到的认知盲区。

1.1 出站方向:ECS 主动访问 IPv6 互联网

当 ECS 执行 ping6 ipv6.google.com 或 curl -6 访问外部 IPv6 资源时:

  1. ECS 构造 IPv6 数据包,源地址为 Client IPv6,目的地址为目标的公网 IPv6 地址(如 2001:4860:4860::8888)。
  2. ECS 查询本地 IPv6 路由表,发现默认路由 ::/0 指向 Server IPv6(即 HE 隧道服务器的 IPv6 地址),于是将 Server IPv6 确定为该数据包的“下一跳”。
  3. ECS 根据隧道配置(ip tunnel add ... remote Server IPv4),将整个 IPv6 数据包封装进一个外层 IPv4 包中,外层目的地址设为 Server IPv4。
  4. 封装后的 IPv4 包通过公网 IPv4 互联网送达 HE 隧道服务器。
  5. HE 服务器剥去外层 IPv4 报头,还原出原始 IPv6 包,然后作为普通 IPv6 路由器将其转发到公网 IPv6 互联网,最终到达目标服务器。

关键理解:出站方向中,“如何找到 Server IPv6”的答案由 ECS 本地的 路由表 决定。配置隧道时执行的 ip route add ::/0 via Server IPv6 dev he-ipv6 正是建立这条路由规则。

1.2 入站方向:外界通过 IPv6 访问 ECS

当外界的 IPv6 主机(如另一台服务器或手机)访问 ECS 的 Client IPv6 时:

  1. 外界主机构造 IPv6 数据包,目的地址为 Client IPv6(即 2001:470:18:4eb::2)。该地址属于 HE 持有的全球 IPv6 地址段(2001:470::/32)。
  2. 该数据包在公网 IPv6 互联网上,依据 BGP 路由逐跳转发,最终必然到达 HE 的骨干网入口。
  3. HE 的边界路由器接收到目的地址为 2001:470:18:4eb::2 的数据包后,查询其内部的地址分配数据库,发现该地址正通过一条隧道分配给 Client IPv4(即 ECS 的公网 IPv4 地址)。
  4. HE 隧道服务器将 IPv6 数据包封装进外层 IPv4 包中,外层源地址为 Server IPv4,目的地址为 Client IPv4,通过协议 41 经公网 IPv4 互联网发送给 ECS。
  5. ECS 收到后,内核中的 sit(Simple Internet Transition)隧道驱动剥去外层 IPv4 报头,还原出原始 IPv6 包,交给上层协议栈处理。

关键理解:入站方向中,外界主机完全不需要知道 Server IPv6 的存在——它只需将数据包发往 Client IPv6,全球 IPv6 路由系统和 HE 的内部数据库会共同完成“查找”和“转交”的工作。

一句话总结双向机制:

  • 出站:ECS 根据本地路由规则,主动查找 Server IPv6 作为网关,并通过 Server IPv4 发送封装数据。
  • 入站:HE 根据其内部地址分配数据库,自动查找 Client IPv6 对应的隧道和 Client IPv4,完成数据转交。

这一机制与原生 IPv6 的区别在于:原生 IPv6 的入站流量直接由阿里云网络路由到 ECS,而 HE 隧道模式下,入站流量必须首先经过 HE 的网络,再由 HE 通过 IPv4 隧道转交给 ECS。这也是 HE 隧道相比原生 IPv6 延迟较高、路径更长的根本原因。

二、准备工作

在开始配置前,需要完成以下两项准备:

  1. 注册 HE Tunnel Broker 账号:访问 https://www.tunnelbroker.net/ 完成注册。注册过程中需要填写邮箱、地址等信息,部分公共邮箱可能被系统限制,可尝试更换邮箱或使用域名邮箱。电话号码需按 +86.13800138000 格式填写。
  2. 确认 ECS 网络环境:HE 隧道要求 ECS 拥有公网 IPv4 地址,且该地址能被 HE 服务器访问。阿里云 VPC 网络下的 ECS 默认具备此条件。在 HE 网站创建隧道时,需要填入 ECS 的公网 IPv4 地址进行验证。

三、在 HE 网站创建隧道

  1. 登录 HE Tunnel Broker 后,点击左侧菜单的 Create Regular Tunnel。
  2. 在 IPv4 Endpoint (Your side) 字段中,填入 ECS 实例的公网 IPv4 地址(注意不是内网 IP)。HE 会向该地址发送验证请求,确认其可达性。
  3. 在 Available Tunnel Servers 列表中,选择一个隧道节点。选择原则是地理位置尽可能接近 ECS 所在区域(如阿里云国内地域可选香港、日本节点,需注意香港节点可能因路由绕行导致延迟反而较高,建议通过实际 ping 值判断)。一般建议选择 Fremont, CA, US 节点,该节点对国内线路相对友好。
  4. 点击 Create Tunnel 生成隧道。创建成功后,页面会显示完整的隧道参数,请记录以下四项信息:
    • Server IPv4 Address(HE 隧道服务器的 IPv4)
    • Server IPv6 Address(HE 隧道服务器的 IPv6,作为网关)
    • Client IPv6 Address(分配给 ECS 的 IPv6 地址)
    • Client IPv4 Address(你的 ECS 公网 IP,HE 已记录)

四、在 ECS 上启用 IPv6 功能

阿里云官方镜像默认禁用 IPv6,需要手动开启。以下步骤在 CentOS 和 Ubuntu 上通用:

  1. 编辑系统控制文件 /etc/sysctl.conf,确保以下三项配置的值为 0(0 表示启用 IPv6): net.ipv6.conf.all.disable_ipv6 = 0 net.ipv6.conf.default.disable_ipv6 = 0 net.ipv6.conf.lo.disable_ipv6 = 0
  2. 执行 sysctl -p 使配置生效。若执行后 ping6 localhost 仍失败,建议重启 ECS 以确保所有 IPv6 相关模块完全加载。

五、配置隧道接口

这是整个安装过程中最容易出错的步骤,需要特别注意参数的正确性。

5.1 关键注意事项:使用 ECS 的内网 IP

HE 网站提供的配置示例中,local 参数默认填写的是 ECS 的公网 IP。但在阿里云 VPC 网络环境下,必须将 local 替换为 ECS 的内网 IP。

原因在于:阿里云 VPC 网络通过 NAT 网关实现公网访问,ECS 自身的网络栈只识别内网 IP。隧道配置中的 local 参数指定的是数据包从哪个本地 IP 发出,必须填写 ECS 网卡上实际存在的 IP 地址(即内网 IP),否则隧道接口无法正确绑定。

可通过 ifconfig 或 ip addr 查看 ECS 的内网 IP(通常为 172.x.x.x 或 10.x.x.x)。

5.2 临时生效配置(用于测试)

以下命令中的 <HE服务器IPv4>、<ECS内网IP>、<Client IPv6地址>、<Server IPv6地址> 均需替换为实际值:

# 创建隧道接口(使用 sit 模式)
ip tunnel add he-ipv6 mode sit remote <HE服务器IPv4> local <ECS内网IP> ttl 255

# 启用隧道接口
ip link set he-ipv6 up

# 分配 Client IPv6 地址
ip addr add <Client IPv6地址>/64 dev he-ipv6

# 添加默认路由,将所有 IPv6 流量指向 Server IPv6 网关
ip route add ::/0 via <Server IPv6地址> dev he-ipv6

执行完成后,用 ping6 ipv6.baidu.com 或 ping6 2001:4860:4860::8888 测试连通性。

5.3 持久化配置(重启后保持)

若需重启后隧道自动恢复,可在 /etc/network/interfaces(Ubuntu)或 /etc/sysconfig/network-scripts/(CentOS)中添加配置。Ubuntu 示例配置如下:

auto he-ipv6
iface he-ipv6 inet6 v4tunnel
    address <Client IPv6地址>
    netmask 64
    remote <HE服务器IPv4>
    local <ECS内网IP>
    ttl 255
    gateway <Server IPv6地址>

六、安全组与防火墙配置

隧道通信依赖协议 41(IPv6-in-IPv4 封装),必须在阿里云安全组和服务器内部防火墙中同时放行。

6.1 阿里云安全组配置

在 ECS 实例关联的安全组中,为入方向添加一条规则:

配置项填写内容
授权策略允许
协议类型全部协议(或“全部GRE”,两者等价于放行协议 41)
端口范围-1/-1(协议 41 无端口概念)
授权对象<HE服务器IPv4>/32(仅允许 HE 隧道服务器,不建议填 0.0.0.0/0)
优先级1

注意:若安全组界面只有 TCP/UDP 选项而没有“全部协议”,则该安全组类型不支持放行协议 41(如阿里云轻量应用服务器的防火墙即存在此限制),HE 隧道方案将无法使用。

6.2 服务器内部防火墙

若系统启用了 UFW(Ubuntu)或 firewalld(CentOS),需额外放行协议 41:

# Ubuntu UFW(UFW 对协议号的支持有限,建议直接用 iptables)
iptables -I INPUT -p 41 -s <HE服务器IPv4> -j ACCEPT
iptables -I OUTPUT -p 41 -d <HE服务器IPv4> -j ACCEPT

# CentOS firewalld
firewall-cmd --add-protocol=41 --permanent
firewall-cmd --reload

6.3 配置 IPv6 DNS

编辑 /etc/resolv.conf,添加 IPv6 DNS 服务器:

nameserver 2001:4860:4860::8888   # Google IPv6 DNS
nameserver 2001:4860:4860::8844

或使用国内公共 IPv6 DNS:240c::6666、240c::6644。

七、常见问题与维护

7.1 隧道不稳定或外网无法访问

HE 隧道依赖公网 IPv4 路由,可能因网络波动导致 HE 侧认为隧道处于非活跃状态。可在 ECS 上设置定时任务,定期发起 IPv6 请求以维持隧道活跃:

# crontab -e 添加以下行,每分钟 ping 一次
*/1 * * * * /bin/ping6 -c 1 -W 1 ipv6.baidu.com > /dev/null 2>&1

7.2 ping6 无响应

按以下顺序排查:

  1. 检查安全组是否放行协议 41:这是最常见的故障点。在阿里云控制台确认入方向规则已添加。
  2. 检查 local 参数是否填了内网 IP:若误填公网 IP,ping6 会报 no route to host 或 Network is unreachable。
  3. 检查隧道接口状态:ip link show he-ipv6 应显示 UP。
  4. 检查路由表:ip route show | grep he-ipv6 应显示默认路由指向 Server IPv6。

7.3 重置隧道配置

如需重新配置隧道,先删除现有隧道再重新创建:

ip tunnel del he-ipv6

八、应用场景

HE 隧道方案可用于以下典型场景:

  1. Web 服务 IPv6 支持:在 Nginx 配置中添加 listen [::]:80;,使网站同时监听 IPv4 和 IPv6。
  2. 域名 AAAA 记录:将域名的 AAAA 记录解析到 Client IPv6,使网站可通过 IPv6 被访问。
  3. iOS App 审核:苹果 App Store 要求应用在 IPv6-only 网络环境下能正常工作,HE 隧道是满足该审核条件的常用方案。
  4. 开发和测试:为开发者提供 IPv6 测试环境,验证应用在纯 IPv6 网络下的兼容性。

总结

HE 6in4 隧道方案为阿里云 ECS 提供了一条免费的 IPv6 接入路径。其核心流程可概括为:在 HE 网站注册并创建隧道 → 开启 ECS 的 IPv6 功能 → 使用 ECS 内网 IP 配置隧道接口 → 在阿里云安全组中放行协议 41。

其中,“使用内网 IP 作为 local 参数” 和 “安全组放行协议 41” 是阿里云环境下配置成功与否的两个决定性因素。理解 4 个 IP 地址的各自角色以及双向通信的查找机制,有助于在遇到问题时快速定位故障点,而非盲目重复配置步骤。

作者

老丹

关注我
其他文章
上一个

深入解析Snap:Linux世界的“全能软件包”

下一个

使用Nginx反向代理+Apache构建高性能目录列表服务

关于博主

    老丹是一名C/C++后台开发工程师,信奉“无抽象不设计,无性能不生产”。

  • 技术栈:Modern C++、Linux环境编程、多线程/并发、网络编程等。
  • 信条:能用constexpr解决的问题绝不拖到运行时,能靠RAII避免的泄漏绝不写析构。
  • 正在填坑:从解封装到渲染的C++全链路实现,正在驯服FFmpeg与H.264/H.265。
  • 输出原则:这里的每一段代码都经过-Wall -Wextra -Werror -O2的洗礼。

近期文章

  • Ubuntu 防火墙迁移指南:从 UFW 到 firewalld 的完整实践 2026年9月12日
  • Nano 编辑器完全操作指南:从入门到熟练 2026年9月12日
  • SSCG:让自签名证书不再“危险”的生成工具 2026年9月12日
  • Ubuntu Samba 服务安装与配置完全指南 2026年9月12日
  • 从零开始:用 Docker 部署 Jellyfin 并启用英特尔核显硬件加速 2026年9月11日

文章分类

  • C/C++开发 (22)
  • Docker容器 (5)
  • Linux工具包 (17)
  • Linux服务配置 (50)
  • Linux系统 (16)
  • OpenWrt路由 (3)
  • Shell脚本 (3)
  • 代码管理 (1)
  • 安防技术 (4)
  • 数据安全 (36)
  • 未分类 (1)
  • 网络协议 (25)
  • 计算机理论 (23)
  • 音视频技术 (5)
联系我们:📍 地址:中国·广东省深圳市   |   ✉️ 邮箱:support@tanglinux.com   |   💬 QQ:870866607
版权所有:老丹的足迹粤ICP备2026061170号-1       公安备案图标 粤公网安备44030002013274号