阿里云ECS通过HE隧道获取IPv6:完整安装指南
一、工作原理:HE 隧道的 4 个 IP 与双向通信机制
在开始配置之前,理解 HE 隧道的通信机制是成功部署的关键。一条完整的 HE 隧道会分配给你 4 个 IP 地址,它们各自承担不同的角色:
| IP 地址 | 示例值 | 归属于谁 | 角色定义 |
|---|---|---|---|
| Server IPv4 Address | 216.218.221.6 | HE 隧道服务器 | 隧道的 IPv4 对端。ECS 通过协议 41 将封装后的 IPv6 包发往这个地址。 |
| Client IPv4 Address | 1.2.3.4 | 你的 ECS(公网 IP) | 隧道在 HE 侧记录的公网 IPv4 标识,用于身份验证和隧道绑定。 |
| Server IPv6 Address | 2001:470:18:4eb::1 | HE 隧道服务器 | 隧道的 IPv6 网关。ECS 上所有出站 IPv6 流量的下一跳都指向它。 |
| Client IPv6 Address | 2001: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 资源时:
- ECS 构造 IPv6 数据包,源地址为
Client IPv6,目的地址为目标的公网 IPv6 地址(如2001:4860:4860::8888)。 - ECS 查询本地 IPv6 路由表,发现默认路由
::/0指向Server IPv6(即 HE 隧道服务器的 IPv6 地址),于是将Server IPv6确定为该数据包的“下一跳”。 - ECS 根据隧道配置(
ip tunnel add ... remote Server IPv4),将整个 IPv6 数据包封装进一个外层 IPv4 包中,外层目的地址设为Server IPv4。 - 封装后的 IPv4 包通过公网 IPv4 互联网送达 HE 隧道服务器。
- 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 时:
- 外界主机构造 IPv6 数据包,目的地址为
Client IPv6(即2001:470:18:4eb::2)。该地址属于 HE 持有的全球 IPv6 地址段(2001:470::/32)。 - 该数据包在公网 IPv6 互联网上,依据 BGP 路由逐跳转发,最终必然到达 HE 的骨干网入口。
- HE 的边界路由器接收到目的地址为
2001:470:18:4eb::2的数据包后,查询其内部的地址分配数据库,发现该地址正通过一条隧道分配给Client IPv4(即 ECS 的公网 IPv4 地址)。 - HE 隧道服务器将 IPv6 数据包封装进外层 IPv4 包中,外层源地址为
Server IPv4,目的地址为Client IPv4,通过协议 41 经公网 IPv4 互联网发送给 ECS。 - 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 延迟较高、路径更长的根本原因。
二、准备工作
在开始配置前,需要完成以下两项准备:
- 注册 HE Tunnel Broker 账号:访问 https://www.tunnelbroker.net/ 完成注册。注册过程中需要填写邮箱、地址等信息,部分公共邮箱可能被系统限制,可尝试更换邮箱或使用域名邮箱。电话号码需按
+86.13800138000格式填写。 - 确认 ECS 网络环境:HE 隧道要求 ECS 拥有公网 IPv4 地址,且该地址能被 HE 服务器访问。阿里云 VPC 网络下的 ECS 默认具备此条件。在 HE 网站创建隧道时,需要填入 ECS 的公网 IPv4 地址进行验证。
三、在 HE 网站创建隧道
- 登录 HE Tunnel Broker 后,点击左侧菜单的 Create Regular Tunnel。
- 在 IPv4 Endpoint (Your side) 字段中,填入 ECS 实例的公网 IPv4 地址(注意不是内网 IP)。HE 会向该地址发送验证请求,确认其可达性。
- 在 Available Tunnel Servers 列表中,选择一个隧道节点。选择原则是地理位置尽可能接近 ECS 所在区域(如阿里云国内地域可选香港、日本节点,需注意香港节点可能因路由绕行导致延迟反而较高,建议通过实际 ping 值判断)。一般建议选择 Fremont, CA, US 节点,该节点对国内线路相对友好。
- 点击 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 上通用:
- 编辑系统控制文件
/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 - 执行
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 无响应
按以下顺序排查:
- 检查安全组是否放行协议 41:这是最常见的故障点。在阿里云控制台确认入方向规则已添加。
- 检查
local参数是否填了内网 IP:若误填公网 IP,ping6会报no route to host或Network is unreachable。 - 检查隧道接口状态:
ip link show he-ipv6应显示UP。 - 检查路由表:
ip route show | grep he-ipv6应显示默认路由指向Server IPv6。
7.3 重置隧道配置
如需重新配置隧道,先删除现有隧道再重新创建:
ip tunnel del he-ipv6
八、应用场景
HE 隧道方案可用于以下典型场景:
- Web 服务 IPv6 支持:在 Nginx 配置中添加
listen [::]:80;,使网站同时监听 IPv4 和 IPv6。 - 域名 AAAA 记录:将域名的 AAAA 记录解析到
Client IPv6,使网站可通过 IPv6 被访问。 - iOS App 审核:苹果 App Store 要求应用在 IPv6-only 网络环境下能正常工作,HE 隧道是满足该审核条件的常用方案。
- 开发和测试:为开发者提供 IPv6 测试环境,验证应用在纯 IPv6 网络下的兼容性。
总结
HE 6in4 隧道方案为阿里云 ECS 提供了一条免费的 IPv6 接入路径。其核心流程可概括为:在 HE 网站注册并创建隧道 → 开启 ECS 的 IPv6 功能 → 使用 ECS 内网 IP 配置隧道接口 → 在阿里云安全组中放行协议 41。
其中,“使用内网 IP 作为 local 参数” 和 “安全组放行协议 41” 是阿里云环境下配置成功与否的两个决定性因素。理解 4 个 IP 地址的各自角色以及双向通信的查找机制,有助于在遇到问题时快速定位故障点,而非盲目重复配置步骤。