用TunnelBroker给AWS绑定IPv6
准备
-
一个AWS虚拟机,本例子是一个ubuntu的。
- 最好有一个__弹性IP__,
- 首先进入EC2控制面板,找到安全组选项,点进去。
-
找到入站规则,添加Rules,添加All ICMP。这是为了地址能够被PING到。
- 申请一个弹性IP(Elastic IP),这个是额外收费的,我的地址是52.5.128.0,绑定到这个机器上。
动机
调整AWS的安全组
运行命令测试:
1 |
$ ping -c 5 52.5.128.0 |
可以ping通。
注册 HE Tunnel
登陆网站
http://tunnelbroker.net/
,填写注册表,注册自己的e-mail,登陆就可以了。登陆以后可以看到这个主页。
点击Create Regular Tunnel就可以创建了。
输入IPv4地址。这个地址填写你的AWS服务器的地址,而不是你自己电脑的地址。
这里我就把刚才的52.5.128.0填写进去,它会告诉你可以建立一个potential tunnel。
下面是选择Tunnel Service。这个选择就因人而异了。
因为我的AWS服务器是放在VA东,我在服务器上ping它这个服务器,Ashburn, VA, US是最快的,平均低于1ms,可以说是快到飞起,所以就选它了。
点击Create Tunnel
选择完成以后,就会完成绑定,给你这么一张表格。
Client IPv4 是你自己的AWS的IPv4的地址。
Client IPv6 是给你的AWS分配的IPv6的地址。
Server IPv4 是Tunnel Server 的IPv4的地址。
Server IPv6 是Tunnel Server 的IPv6的地址。
Routed IP Prefixes 是IPv6的前缀。
(我们知道IPv6的地址是很长的,比较丰富的,全地址是用七个冒号分隔的八个四位16进制数。一般用不完,所以现在随便一分配,就分配给一个前缀,后面还剩下64位自用,就是说你自己可以自己处理这2^64个地址。)
设置Tunnel
绑定Tunnel之后,并不能直接使用,AWS还需要进行一些设置。
不信可以在AWS试一下ping6 命令能否使用,我认为现在应该都是不行的。
自动找到自己的IP地址
建立一个脚本,来输出自己的本地IP(注意这个本地IP是内部IP,并不是127.0.0.1这个回环地址。)
在server上运行如下命令
1 |
sudo vim /usr/local/bin/checkipeth0 |
按下i(Vim的插入),然后把下面的命令粘贴进去。
1 |
|
保存 (按下 ESC , 冒号 , wq )
添加运行权限:
1 |
sudo chmod +x /usr/local/bin/checkipeth0 |
建立 Tunnel Interface
这段代码在服务器启动的时候,建立一个虚拟的tunnel interface。
运行如下命令:
1 |
sudo nano /etc/network/interfaces |
粘贴如下内容:
1 |
auto he-ipv6 |
注意把
$CLIENT_IPV6
和
$SERVER_IPV4
替换成自己的地址。
按下 ESC :wq 保存
最后运行如下命令:
1 |
sudo ifup he-ipv6 |
第一个命令如果出问题了,遇到了“add tunnel sit0 failed: No buffer space available”错误,那多半是因为已经有he-ipv6,那么运行命令 sudo ip tun del he-ipv6就可以了。
参考
ASKUBUNTU
设置静态的IPv6地址到eth0
当设置好了Hurricane Electric tunnel之后,其实已经可以ping通一些东西了,但是如何让AWS通过eth0联通到这个IPv6上呢,需要绑定静态的地址。
1 |
sudo vim /etc/network/interfaces |
1 |
iface eth0 inet6 static |
当然这里的address一定要填写自己的。找到你自己的Routed IPv6 Prefixes,把/64删掉,加上1就可以了。
最重要的文件/etc/network/interface最终形态:
1 |
# This file describes the network interfaces available on your system |
修改好文件以后,运行如下命令:
1 |
sudo /etc/init.d/networking restart |
这样就可以成功完成eth0的设置
保持tunnel常开
tunnel如果不适用可能会自己关掉,所以要弄一个脚本让它常开。最简单的方法就是,过一阵子发送一些ping请求。
1 |
sudo vim /etc/cron.d/he-ipv6 |
1 |
*/2 * * * * nobody ping6 -c 3 -n -q $SERVER_IPV6 > /dev/null |
按下 ESC :wq 保存
测试Tunnel连通性
1 |
sudo tcpdump -vv -i he-ipv6 ip6 |
用本地机器的命令行去ping服务器。
以前是 ping 52.5.128.0 可以通,但是直接没有IPv6的地址,现在IPv6也可以ping通了:
1 |
$ ping6 -c 5 2001:470:7:5bf::2 |
不知道读者有没有发现,ping IPv6地址的延迟更小。
这可能是因为IPv4和IPv6的线路有细微差别吧。
IPv6的地址还是好长一段,很难记忆。尤其是本地地址,我当前的本地地址是2001:da8:201:1203:f812:bdb5:9228:67ed,好长一段。
域名和DNS就是为了应对这种情况发明的,如果当初的人们能够像机器一样瞬间记住那些IPv4地址甚至IPv6地址的话,估计就不会有DNS的发明了。
IPv6的绑定域名和IPv4没有太差区别。IPv4是添加A记录,IPv6是添加一条AAAA记录就可以了。
Preference: