利用IPv4+隧道访问IPv6网络
最近从RamHost收到邮件说服务器即将开启IPv6支持,届时就可以通过IPv6来访问本站了。但是学校的网络不支持IPv6,于是想到了用6to4 Tunnel来让网络支持IPv6。
在http://en.wikipedia.org/wiki/List_of_IPv6_tunnel_brokers上面看了下,世界范围内的6to4有三家,Freenet6、HE(Hurricane Electric)和SixXS。以前听说过HE和SixXS,于是打算从这两个入手。但是注册了HE之后发现HE不支持内网IP的网络,要求必须有公网的静态IP,本人的学校使用了NAT所以不能用。
SixXS支持AYIYA(http://en.wikipedia.org/wiki/AYIYA),AYIYA可以通过UDP/TCP/SCTP把包传送出去,因而可以绕过NAT的限制。
使用SixXS的服务是免费的,需要的只是注册帐号而已。访问http://www.sixxs.net/signup/create/注册帐号,这个过程是人工审核的,所以请耐心等待。我的帐号通过认证花了大概1天半左右。
注册成功后登录http://www.sixxs.net/home/,输入他们发给你的用户名和帐号,点左边的“Request Tunnel”,就会让你选择网络类型,推荐用AYIYA,因为这个对于大多数的内网用户都有效。选择一个离你最近的Server,其他的按实际情况填写提交申请。这个过程也是人工审核的,一般2~3小时后就会有结果。
收到他们发送的Approval之后就可以下载AICCU(Automatic IPv6 Connectivity Client Utility)了。因为我用的是Win7 x64,必须使用x64版本的TAP Driver(tap901),而AICCU只有03/15/08以后的版本才支持最新的tap901,所以只能用console version。这个console version还需要一个配置文件:http://www.sixxs.net/archive/sixxs/aiccu/aiccu.conf,一并下载下来。
如果有TAP driver的话直接跳下一步,否则到OpenVPN的网站上下载OpenVPN 2.14,安装时只选择TAP Driver就可以了。AICCU带的那个老是装不上去,不知道为什么。
打开下载的aiccu.conf,修改用户名和密码(SixXS发过来的那个),ipv6_interface改成TAP Device对应的名称(比如”Local Area Connection”),verbose改成true,Tunnel ID改成相应的。然后执行如下命令:
netsh interface ipv6 6to4 set state disabled
netsh interface ipv6 isatap set state disabled
netsh interface ipv6 set teredo disabled
关掉其他的tunnel,以防万一。
很重要的一步:
netsh int ipv6 add address "Local Area Connection" 2002:81a8:102::
否则Vista/Win7不会在虚拟的网卡(TAP)上面解析IPv6地址。这大概是Vista/Win7的一个Bug,当IPv6的interface只分配了回环/Teredo地址的时候,DNS Client就只查询域名的A(IPv4)记录,不查询AAAA(IPv6)。所以说需要手动分配个地址。而这个地址2002:81a8:102::包含两个部分,前面的2002是6to4的保留地址,后面32位是相应IPv4地址转换成16进制,81a8:102实际上就是129.168.1.2。(网上说这个是192.168.1.2,怀疑是不是16进制换算错了)
在SixXS上问了一下,Jeroen不推荐使用这个方法,而是在注册表里面修改:
HKLM\SYSTEM\CurrentControlSet\Services\DNS\CacheParameters
,添加DWORD值AddrConfigControl
,值为0。
开始不知道这个,结果AICCU的测试全部通过,ping6和tracert6返回结果都正常,但是就是不能访问IPv6的网站,网络状态也是no internet access。
这时候可以执行aiccu.exe start了,另开一个窗口试试nslookup -type=AAAA ipv6.google.com,成功的话应该有类似如下输出:
Server: dkndc03.fas.lcl
Address: 172.16.23.18
Non-authoritative answer:
Name: ipv6.l.google.com
Address: 2001:4860:800f::67
Aliases: ipv6.google.com
否则的话,检查前面的设置是否有误,如果确认没有问题的话换个本地连接的DNS试试。有些DNS不解析ipv6地址。
全部正常的话就可以访问http://www.kame.net进行测试了。如果IPv6正常运行的话应该有个在动的海龟:
下面的文字也应该是“Dancing kame by atelier momonga”。
最后一步:把AICCU做成服务开机自动启动。我从Windows Server 2003 Resource Kit Tools(http://www.microsoft.com/Downloads/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd)提取了srvany.exe和instsrv.exe,用来安装服务。
执行instsrv 6to4tunnel C:\Windows\SysWOW64\srvany.exe
来安装服务,然后打开regedit,转到HKLM\SYSTEM\CurrentControlSet\Services\6to4Tunnel
,新建一个子键Parameters
,里面新建字符串Application
,值改成C:\Window\sysWOW64\aiccu.exe start
就行了。路径取决于放这些文件的位置。
关掉所有的aiccu进程,执行net start 6to4tunnel
,等待1~2分钟后访问http://www.kame.net,海龟在动的话就成功了。
不清楚国内使用IPv6能不能绕过GFW,欢迎报告测试结果。
PS:SixXS支持通过https来连接服务器,这样的话通讯应该不会被GFW拦截。AICCU貌似是自动尝试能否通过TLS连接的,所以应该不用打开aiccu.conf里面的requiretls
。