本文主要参考了kangzj的《你的网站「IPv6 Ready」了吗?》一文,在他提供的步骤上做了一点改进,在diaHosting的VPS上试验成功。
本文假设你已经会常用的SSH操作(新手推荐使用WinSCP)。

步骤:

  • 注册免费的HE IPv6 Tunnel Broker.
    注册地址:http://tunnelbroker.net/,点击 Register 即可注册。

  • 添加Tunnel
    点击左侧 Create Regular Tunnel
    image
    IPv4 endpoint 填入你 VPS 的 IP 地址,HE会根据你的浏览器的IP地址帮你选择服务器,但并不一定是最好的,你要根据你的VPS的地理位置,选择服务器的地址,我购买的是Los Angel的VPS,于是我选择了Los Angel, CA, US的服务器,点击「Override」可选择服务器。
    image
    再点击「Submit」,即可建立Tunnel。

  • VPS上的设置
    回到HE IPv6 Tunnel Broker的首页,点击刚刚建立的Tunnel,会有这个Tunnel的详细信息:
    image
    可以看到,HE给你分配了/64的IPv6地址,也就是你有2的64次方个地址,这辈子都用不完,哈哈。在详细信息的下面,有一个设置你VPS的方法,点击「Show Config」就会出来设置方法:

    1
    2
    3
    4
    5
    6
    modprobe ipv6
    ip tunnel add he-ipv6 mode sit remote 66.220.18.42 local xxx.xxx.xxx.xxx ttl 255
    ip link set he-ipv6 up
    ip addr add 2001:470:c:662::2/64 dev he-ipv6
    ip route add ::/0 dev he-ipv6
    ip -f inet6 addr

    he默认添加形如 2001:db8:aaaa:aaaa::2/64 地址 你也可以添加更多的地址,如要添加 2001:470:c:662::3/64 只需增加一行命令

    1
    ip addr add 2001:470:c:662::3/64 dev he-ipv6
  • 服务器程序设置

a. Apache (如果你用的diaHosting的默认带Kloxo面板设置,那么服务器是Lighttpd,请在Kloxo面板中找到程序切换,将Lighttpd切换成Apache)

i. 修改配置
默认装机的Apache版本已经支持ipv6,只需要修改httpd.conf文件即可。打开 /etc/httpd/conf/httpd.conf,查找 Listen 80;,在后面增加一句
Listen [::]:80;;相应地在文件末尾找到<virtualhost>; 一节,修改为<virtualhost *:80>;。其余 uncomment 并按照你的站点的配置修改即可。

ii. 测试配置

1
/usr/local/bin/apachectl -configtest

iii. 如果没有报错,重启apache即可

1
service httpd restart

b. nginx

i. 运行 /usr/local/nginx/sbin/nginx -V 观察一下有没有 --with-ipv6, 一般是没有的,此时需要重新下载并编译nginx:

1
2
3
4
5
wget http://nginx.org/download/nginx-0.8.50.tar.gz
tar -xvzf nginx-0.8.50.tar.gz
cd nginx-0.8.50
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-ipv6
make && make install

ii. 修改nginx配置
进入/usr/local/nginx/conf/nginx.conf,搜索Listen 80;, 在后面增加一句

1
Listen [::]:80 default ipv6only=on;

上面一句是我和kangzj教程最大的不同的地方,用kangzj的方法,在多站点配置中会导致问题。如果你还有SSL server块,同样,搜索 Listen 443;,在后面增加一句,注意ipv6only=on中不能加空格

1
Listen [::]:443 default ipv6only=on;

这样,SSL也可以运行在ipv6环境下了。

注意,如果你的VPS上设置了多个站点,请务必保证其余站点的Listen配置与之相同,最好不要改成 Listen ip:80; 形式,否则容易冲突,各站点如果不同IP请在DNS处调节。

iii. 停掉目前的nginx,启用新编译的nginx:

1
2
killall -g nginx
/usr/local/nginx/sbin/nginx

参数g在你开启了nginx多进程时是必要的。

  • DNS设置
    在你的域名DNS处增加AAAA Record即可,目前主流的DNS都已经支持ipv6(如he,DNSPod等)