作为全球最大的 IPv6 网络运营商,飓风电气(Hurricane Electric)拥有数量极其庞大的 IPv6 地址,并与数千个 IPv6 网络建立了对等互联。当然最为厚道的是,其利用自身的优势提供了节点繁多的免费 IPv6 隧道服务。

前言

作为一个教育网用户,除了买一台支持 IPv6 的 VPS 来上网冲浪,有时候可能还会遇到这样的问题:已有的 VPS 是否可以加上 IPv6 的翅膀呢?

举例来说,我在购买了一台阿里云香港的轻量服务器,或者购买(白嫖)了 GCP 香港的云服务器,现在我想建立一个私人网盘,对于一个教育网用户来说,IPv6 访问当然是最好的,但是巧的是这两家的 VPS 或轻量都不分配 IPv6 地址……这可怎么办呢?

作为全球最大的 IPv6 网络运营商,HE 给出了答案:Tunnel Broker。

什么是 Tunnel Broker

Tunnel Broker 如字面意思,是一种网络隧道服务,可以通过封装数据包来提供设备间的连通性,其中最常见的就是 IPv6 Tunnel Broker(以下简称 Tunnel Broker)。

大部分的 Tunnel Broker 使用 6in4 协议来封装数据包,也是如字面意思,将 IPv6 数据包封装在 IPv4 数据包中。在维基百科 IPv6隧道中间人列表 页面可以看到,目前仍在运行的 Tunnel Broker 中,HE 不但拥有最多数量的 PoP,还提供最多 5 个免费的隧道。

接下来就来了解一下如何使用 HE 的 Tunnel Broker 服务。

使用 Tunnel Broker

准备工作

使用 HE 的 Tunnel Broker 的前提条件很简单,只需在 HE.net IPv6 Tunnel Broker Registration 注册一个账号即可。

HE Tunnel Broker 注册界面

创建 Tunnel

点击左侧的 Create Regular Tunnel,在 IPv4 Endpoint 中填写你的服务器的 IP 地址,然后在下方选择离你的服务器最近的节点,点击创建即可。

HE Tunnel Broker 创建 Tunnel 界面

此时在 Tunnel Details 界面可以看到详细信息,其中 Client IPv6 Address 就是分配给你的公网 IPv6 地址。

HE Tunnel Broker Tunnel Details 界面

获取配置

在 Tunnel Details 界面的 Example Configurations 标签页选择操作系统,就可以看到相应的配置方法。这里以 Debian 为例,可以看到只需将文本框中的内容粘贴到 /etc/network/interfaces 中即可。

HE Tunnel Broker Example Configurations 界面

需要注意的是,页面下方的说明中提到了在一些大厂的云服务器中很常见的一种情况:服务器分配到的实际 IP 地址并不是服务器的公网 IP(例如公网 IP 为 1.2.3.4,但使用 ifconfig 命令查看却显示 172.16.1.2)。这种情况下,在粘贴配置时需要将 local 后面的 IP 地址修改为服务器的实际 IP 地址(例如 172.16.1.2)。

在云服务器中配置 Tunnel

开启 IPv6

部分厂商提供的云服务器镜像默认是关闭了 IPv6 的(例如阿里云),需要手动修改系统配置文件来开启。以 Debian 为例,编辑 /etc/sysctl.conf,将其中和 IPv6 有关字段的值设置为 0 即可:

net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
net.ipv6.conf.eth0.disable_ipv6 = 0

然后应用配置:

sysctl -p

此时使用 ifconfig 命令就可以看到网卡有了一个 IPv6 链路本地地址:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.39.221  netmask 255.255.192.0  broadcast 172.17.63.255
        inet6 fe80::216:3eff:fe00:2109  prefixlen 64  scopeid 0x20<link>
        ether 00:16:3e:00:21:09  txqueuelen 1000  (Ethernet)
        RX packets 33574372  bytes 5658726074 (5.2 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 26217969  bytes 11529139204 (10.7 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

添加 Tunnel

接下来只需要登录云服务器,将配置内容粘贴到 /etc/network/interfaces 即可。以我在阿里云香港的轻量为例,修改后的配置文件如下:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto he-ipv6
iface he-ipv6 inet6 v4tunnel
	address 2001:470:
	netmask 64
	endpoint 216.
	local 172.
	ttl 255
	gateway 2001:470:

可以看到机器的 IP 地址是使用 DHCP 获取的,并非分配的公网 IP,所以需要修改 local 后的地址。

之后启用 he-ipv6 接口:

ifup he-ipv6

此时再使用 ifconfig 命令就可以看到 he-ipv6 接口了:

he-ipv6: flags=209<UP,POINTOPOINT,RUNNING,NOARP>  mtu 1480
        inet6 fe80::ac11:27dd  prefixlen 64  scopeid 0x20<link>
        inet6 2001:470:            prefixlen 64  scopeid 0x0<global>
        sit  txqueuelen 1000  (IPv6-in-IPv4)
        RX packets 433761  bytes 247586358 (236.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 408948  bytes 54864863 (52.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

如果没有生效可以尝试使用 systemctl restart network 命令重启网络或者直接 reboot

最后,使用 ping6 www.google.com 命令来验证一下服务器是否已经可以访问 IPv6 网络了:

PING www.google.com(hkg12s27-in-x04.1e100.net (2404:6800:4005:81b::2004)) 56 data bytes
64 bytes from hkg12s27-in-x04.1e100.net (2404:6800:4005:81b::2004): icmp_seq=1 ttl=121 time=2.76 ms
64 bytes from hkg12s27-in-x04.1e100.net (2404:6800:4005:81b::2004): icmp_seq=2 ttl=121 time=2.75 ms
64 bytes from hkg12s27-in-x04.1e100.net (2404:6800:4005:81b::2004): icmp_seq=3 ttl=121 time=2.85 ms
64 bytes from hkg12s27-in-x04.1e100.net (2404:6800:4005:81b::2004): icmp_seq=4 ttl=121 time=2.85 ms

维持 Tunnel 连接

如果一段时间内没有流量,Tunnel 会进入休眠状态。可以使用 crontab 命令添加一个计划任务来使 Tunnel 保持激活:

*/10 * * * * ping6 -c 1 www.google.com

参考文章