最新消息:

申请 HE.NET IPv6 隧道以使主机支持 IPv6

学习 eben 1282浏览

一、背景

如今很多产品,比如 Apple AppStore,需要 IPv6 地址才能继续开展业务,但是像国内很多如阿里云、华为云等主机商都不支持 IPv6,那么要如何才能支持 IPv6 呢?

二、申请 IPv6 地址

在 IPv6 推行时,为兼容现有的 IPv4 网络,过渡技术 – IPv6 协议隧道方法 应运而生,接下来介绍的由 HE.NET (Hurricane Electric) 推出的免费 IPv6 Tunnel Broker 便是利用这个技术,使仅有 IPv4 的主机支持 IPv6。

经实际测试目前支持的主机包括不限于 阿里云、华为云、微软 Azure、亚马逊 AWS EC2(目前 AWS 已可分配自己的 IPv6,参见《Amazon AWS EC2 如何安装 CentOS7、修改主机名(hostname)、开启 IPv6》)、拥有固定 IP 的家用电脑等。

其注册地址:Register 注册,全站英文,注册界面可参考下面截图:

登录后,点击控制面板左边的 Create Regular Tunnel 开始申请一个 IPv6 地址,界面大致如下:

申请前先确保自己的主机可以 ping 得通,否则无法创建,在 IPv4 Endpoint (Your side) 输入主机 IP:

然后选择离主机近的节点,HE.NET 四大洲都有接入点,但是不能看地址选择,正确的选择应是通过 ping 或 traceroute 来确定,比如 亚洲有新加坡、香港、日本三个接入点,地域上离大陆很近,然而延迟都非常高,并不适合。

创建后点击控制面板左侧的 Main Page,即可看到刚创建的隧道,至此,IPv6 申请完成。

三、打通 IPv6 隧道

点击刚创建的隧道的 Name 进入编辑模式,可以看到申请的 IPv6 地址,若要删除隧道则可以在此点击 Delete Tunnel,在 Client IPv4 Address 可以修改 IP:

点击 Example Configurations,下拉框选择主机的操作系统获取相应的配置代码:

如 Debian/Ubuntu,登录主机命令行,编辑 /etc/network/interfaces(PS:CentOS 是 /etc/sysconfig/network-scripts/ifcfg-eth0 ),将刚才的配置代码复制进来:

$ sudo vim /etc/network/interfaces
.....
auto he-ipv6
iface he-ipv6 inet6 v4tunnel
        address [client ipv6 addr]
        netmask 64
        endpoint [server ipv4 addr]
        local [client ipv4 addr]
        ttl 255
        gateway [server ipv6 addr]

注意,如果主机有私网地址,那么配置里的 [client ipv4 addr] 应该填私网地址。

另外如果系统比较新,可能需要额外安装 ifupdown 软件包。

使 IPv6 生效:

$ sudo ifup he-ipv6

失效则是(不想用了记得删掉刚才的配置,否则重启后还是会自动启用):

$ sudo ifdown he-ipv6

测试一下:

$ ping6 google.com
PING google.com(nrt13s48-in-x0e.1e100.net (2404:6800:4004:80e::200e)) 56 data bytes
64 bytes from nrt13s48-in-x0e.1e100.net (2404:6800:4004:80e::200e): icmp_seq=1 ttl=48 time=30.8 ms
64 bytes from nrt13s48-in-x0e.1e100.net (2404:6800:4004:80e::200e): icmp_seq=2 ttl=48 time=30.7 ms
64 bytes from nrt13s48-in-x0e.1e100.net (2404:6800:4004:80e::200e): icmp_seq=3 ttl=48 time=30.9 ms
64 bytes from nrt13s48-in-x0e.1e100.net (2404:6800:4004:80e::200e): icmp_seq=4 ttl=48 time=30.8 ms
^C
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 30.775/30.839/30.904/0.132 ms
$ curl ipv6.icanhazip.com
2001:470:***

四、排错

按步骤操作还是用不了:

1、配置里的 local x.x.x.x 配置对了吗?
有内网地址必须填内网地址。

2、系统禁用 IPv6 了吗?
主要出现在阿里云 ECS,修改 /etc/sysctl.conf ,将 disable_ipv6 相关字段参数都设为 0,大致是这样的(不同操作系统不同版本可能不同):

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

3、到 server ipv4 addr 通吗?
通过 ping 或 路由跟踪 取最佳节点(PS:国内不选香港、日本、新加坡接入点,延迟比美国还高。)

4、如何设置 IPv6 优先?
默认都是 ipv6 优先,Windows 可以执行以下命令查看:

C:\Windows\System32>netsh int ipv6 show prefix
查询活动状态...

优先顺序    标签   前缀
----------  -----  --------------------------------
        50      0  ::1/128
        40      1  ::/0
        30      1  2002::/16
        20      3  ::/96
        10      4  ::ffff:0:0/96
         5      1  2001::/32

五、配置实例

AWS

AWS 目前在 EC2 中已经全面开放 IPv6 了,但 Amazon Lightsail 中仍然不支持,因此下面以 LightSail 为例。

申请步骤都一样,就不赘述了,参考配置如下(Ubuntu):

root@aws-jp:~# cat /etc/network/interfaces
# ifupdown has been replaced by netplan(5) on this system.  See
# /etc/netplan for current configuration.
# To re-enable ifupdown on this system, you can run:
#    sudo apt install ifupdown
auto he-ipv6
iface he-ipv6 inet6 v4tunnel
        address 分配的 Client IPv6 Address
        netmask 64
        endpoint 选择的 Server IPv4 Address
        local 本地内网地址
        ttl 255
        gateway 分配的 Server IPv6 Address

GCE

GCP 平台自带的防火墙阻止流量通过,无法使用隧道,可以使用自带的负载均衡(需费用)。

Azure

还在研究中。

原文转载自:https://vircloud.net/

转载请注明:落伍老站长 » 申请 HE.NET IPv6 隧道以使主机支持 IPv6