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

一、背景

如今很多产品,比如 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,全站英文,注册界面可参考下面截图:

signup.jpg

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

apply.jpg

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

ping.jpg

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

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

三、打通 IPv6 隧道

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

edit.jpg

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

client.jpg

如 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] 应该填私网地址。

使 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

5.添加ipv6的dns服务器,在最后添加nameserver 2001:4860:4860::8888,nameserver 2001:4860:4860::8844谷歌的ipv6 dns服务器

# vim /etc/resolv.conf
options timeout:1 attempts:1 rotate
nameserver x.x.x.x
nameserver x.x.x.x
nameserver 2001:4860:4860::8888
nameserver 2001:4860:4860::8844

这时再ping6就正常了

# ping6 -c 5 ipv6.google.com
PING ipv6.google.com(tsa03s01-in-x0e.1e100.net) 56 data bytes
64 bytes from tsa03s01-in-x0e.1e100.net: icmp_seq=1 ttl=55 time=25.5 ms
64 bytes from tsa03s01-in-x0e.1e100.net: icmp_seq=2 ttl=55 time=25.5 ms
64 bytes from tsa03s01-in-x0e.1e100.net: icmp_seq=3 ttl=55 time=33.1 ms
64 bytes from tsa03s01-in-x0e.1e100.net: icmp_seq=4 ttl=55 time=25.5 ms
64 bytes from tsa03s01-in-x0e.1e100.net: icmp_seq=5 ttl=55 time=25.4 ms

--- ipv6.google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4031ms
rtt min/avg/max/mdev = 25.473/27.040/33.180/3.073 ms

6.添加路由

route -A inet6 add ::/0 dev he-ipv6
附录:
附录1.阿里云ecs开启iptables放行6in4流量。

配置的IPv6地址是属于6in4的IPv6隧道地址,当使用6to4或6in4时,你传输的并不是ipv6包,其实是特殊的ipv4包携带ipv6数据。这些包使用的ipv4的protocol 41协议,就如RFC 2473定义的。
When using 6to4, you do not transmit IPv6 packets. Instead, special IPv4 packets are wrapped around IPv6 payloads. These packets have IPv4 protocol 41, as defined by RFC 2473.

所以系统防火墙那边要做的,就是如下:
iptables -t filter -I INPUT -p 41 -j ACCEPT
iptables -t filter -I OUTPUT -p 41 -j ACCEPT


原文地址,图片可以显示 https://www.uulucky.com/show-224057.html


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页