基本效果

  • 在本地有IPv6网络的情况下,使用IPv6网络访问互联网(对校园网来说,不产生IPv4流量)。
  • 在本地有IPv6网络的情况下,设置迅雷等下载工具使用shadowsocks代理,下载速度达到100Mbps。
  • 在本地只有IPv4网络的情况下,可以访问所有IPv6网站。
  • 在本地只有IPv4网络的情况下,设置迅雷等下载工具使用shadowsocks代理,下载速度达到本地最大带宽。

前提条件

  • 双栈(同时支持IPv4和IPv6)服务器。
  • 若希望本地使用IPv6连上服务器,需确认本地具备IPv6网络。

配置服务器IPv6地址

配置

这里DigitalOcean的VPS为例:

创建或修改好后在DigitalOcean此Droplet的控制面板Setting中显示的Public IPv6 Address即为此VPS的IPv6地址。这里还是要强调一下,IPv6地址后的/64一般情况下都不需要。

测试

如果本地有IPv6网络的话,ping自己的IPv6地址应该就能ping通了。如Windows下ping 2001:4860:0:2001::68,macOS下ping6 2001:4860:0:2001::68

服务器端搭建shadowsocks

搭建shadowsocks服务器可以参考如下“我写的”或“秋水逸冰”任一即可。

我写的

参考Ubuntu 16.04下Shadowsocks服务器端安装及优化

注意修改config.json中的必要参数,注意server参数需要设定为"::"才能使用IPv6

  • 启动shadowsocks:sudo systemctl start shadowsocks-server
  • 设置开机启动Shadowsocks:sudo systemctl enable shadowsocks-server

秋水逸冰

秋水逸冰提供了一键安装shadowsocks的脚本,相对来说更方便,参考Shadowsocks Python版一键安装脚本

注意修改config.json中的必要参数,注意server参数需要设定为"::"才能使用IPv6

  • 启动shadowsocks:/etc/init.d/shadowsocks start

示例config.json

{
    "server":"::",
    "server_port":8388,
    "local_address": "127.0.0.1",
    "local_port":1080,
    "password":"mypassword",
    "timeout":300,
    "method":"aes-256-cfb",
    "fast_open": false
}

本地使用shadowsocks客户端

下载客户端

Windows版本下载页:Releases · shadowsocks/shadowsocks-windows

macOS版本下载页:Releases · shadowsocks/ShadowsocksX-NG

客户端配置

客户端点选“添加服务器”,填写“地址”、“端口”、“加密方法”和“密码”即可。其中“端口”、“加密方法”和“密码”与前面设置的服务器配置相同。

因为服务器支持IPv4和IPv6双栈,所以客户端实际可以配置两个服务器参数,其仅有“地址”不相同。对于IPv4,填写服务器的IPv4地址;对于IPv6,填写服务器的IPv6地址(不需要[],末尾不需要/64)。

测试

为了保险起见,客户端选择IPv4服务器。

  • Windows:选择“启用系统代理”;选择“PAC”,“从List更新本地PAC”。如果连接正常的话过几秒钟就会提示PAC更新成功。这时将“系统代理模式”设置为“PAC模式”。
  • macOS:选择“从GFW list更新PAC”。如果连接正常的话过几秒钟就会提示PAC更新成功。这时勾选“PAC自动模式”。

打开浏览器,访问www.google.com或www.youtube.com,正常情况下可以很快打开。

然后设置客户端中服务器为IPv6地址的,同样访问上述网站,若都能很快正常打开,则shadowsocks配置成功。

应用

浏览器翻墙

在PAC模式下,访问一般网站会直接访问,而访问被墙掉的网站则会走shadowsocks;如果需要全部走shadowsocks的话,只需要将shadowsocks客户端设置为全局模式即可。

如果你希望让浏览器(而非客户端)控制上网模式,请参考使用SwitchyOmega(Chrome)。

IPv4访问IPv6网站

因为服务器端开通了IPv6,所以即使shadowsocks使用的IPv4,即本地计算机通过IPv4连接服务器,仍然是可以访问IPv6网站的;这里可以试试访问http://bt.byr.cn/,应该能很快打开。

若不能打开,可尝试将shadowsocks客户端设置为“全局模式”,即所有访问全部经过shadowsocks。

迅雷下载加速

实际上,将shadowsocks客户端设置为“全局模式”就已经可以实现迅雷下载了,但效果并不理想。

正确的方法是在迅雷的“系统设置”->“高级设置”->“代理设置”中“添加”代理。

代理名称随便填,服务器填写本地地址,如127.0.0.1,端口填写本地端口,如1080,类型选择Socks5;然后点击测试,测试成功点击确定。

然后在“代理设置”中将除“迅雷服务器连接”外的其他连接都设置为使用代理(“迅雷服务器连接”保持为“直接连接”),后点击“应用代理”,然后“确定”即可。

这时就可以随便下个大点的文件测试速度了,当然下载资源来自国外最好了,在shadowsocks配置为ipv6时,下载速度一般在10M/s以上。

原理很简单,现在IPv6一般是各大高校免费使用,而IPv6的带宽就是100M,即理论下载速度为12.8M/s;而本地计算机与服务器通过IPv6连接时,一般都是达到最大带宽,服务器再访问IPv4资源时,可以认为带宽是无限大的,所以瓶颈在于教育网IPv6的100M宽带。使用shadowsocks时,代理和直接访问是可以同时工作的,所以理论最大值并不是100M,而是叠加IPv4带宽,如可能达到110M。

同理,如果shadowsocks使用的是ipv4,则显然下载速度能够达到本地下载速度的最大值。

下载IPv6资源

想要下载北邮人的BT资源?这个也没问题。

设置下载工具,如UT的代理:“设置”->“连接”,代理类型选择Socks5,代理IP为127.0.0.1,端口如1080,注意一定要将“对于主机名查询使用代理”,“对于点对点连接使用代理”打钩!

这样下载北邮人上内容时就能够轻轻松松达到本地最大带宽,再也不用受限制于IPv4、IPv6了。

FAQ

PAC更新失败

出现这个问题一般是客户端当前设置的服务器连接不上,尝试使用IPv4地址的服务器,检查本地能否ping通服务器,检查端口号、加密方式和密码是否正确。

被墙的网站仍无法打开

在shadowsocks客户端中选择“显示日志”,查看具体错误信息:

  • 显示诸如远程服务器未相应,考虑ping服务地址,若ping不通则需要排查错误。
  • 显示诸如服务器积极拒绝,则考虑时服务器防火墙问题。对于Ubuntu而言,很有可能时UFW的问题,需要使用ufw disable关闭UFW。

IPv6无法访问六维空间

六维空间似乎对境外地址作了屏蔽,可以试试访问bt.byr.cn

IPv4网站可以访问,但IPv6网站不能访问

如果是六维空间不能访问,参考问题“IPv6无法访问六维空间”

首先需要确定本地使用的shadowsocks在访问网站,访问ip138.com查看显示的IP地址是否是服务器的地址,若为本地IP地址,说明当前的IPv4访问直接走的本地网络,当然也就不能访问IPv6网站了。

如果确实是使用的shadowsocks访问,则尝试ssh连上服务器,ping IPv6网站,判断服务器是否能够访问IPv6网络。

迅雷下载设置IPv6代理,下载速度慢

若下载的是P2P资源,则下载速度慢是正常情况(因P2P依赖上传者实时上传)。

尝试下载来自服务器的资源,如ted.com上的视频,一般情况下可以跑到12M/s。

迅雷下载提示资源出错

将迅雷代理设置中的“迅雷服务器连接”设置为“直接连接”即可。

本地不能通过IPv6连上服务器

首先确定本地有可用的IPv6网络,即本地有如2001开头的IPv6地址,浏览器可以访问[2001:da8:215:4078:250:56ff:fe97:654d](包含左右中括号)。

再确定服务器端配置文件中server字段值为"::"

本地只能通过IPv6连上服务器(IPv4无法连接服务器)

这种问题一般出现在shadowsocks-libev中,这时需要将配置文件中的server字段配置为["::0","0.0.0.0"]

使用shadowsocks后打开网站慢

若本地有IPv4网络,则考虑使用PAC模式,即没被墙的网站直接走本地IPv4网络,被墙的走shadowsocks。

或者尝试在服务器端优化网络连接,参考Ubuntu 16.04下Shadowsocks服务器端安装及优化

有些IPv6网站可以连上,有些连不上

一种可能的原因是某些IPv6网站对IP作了限制,如拒绝境外IP访问。

另一种原因是某些IPv6网站实际是IPv4/IPv6双栈的,即IPv4也可访问,例如ipv6.baidu.com。

uTorrent设置代理后红种

在uTorrent的代理设置中将“对于主机名查询使用代理”,“对于点对点连接使用代理”打钩。

4G蜂窝网络代理打不开网站

蜂窝网络不支持IPv6,所以只能设置连接服务器的IPv4地址。

手机可以使用IPv6连上服务器吗

手机能否通过IPv6连上服务器取决于手机到服务器的整个连接过程是否全部支持IPv6。最主要的地方在一手机到路由器之间,和路由器到服务器之间。

首先路由器本身能够获得IPv6地址,简单来说,插在路由器上的网线直接查到电脑上,电脑要能够直接获得IPv6地址。

其次路由器要支持IPv6,即手机通过WiFi连上路由器后,手机能够自动获得一个如2001开头的IPv6地址。

在家里/使用蜂窝网络可以连上shadowsocks,但在公司/学校就用不了

这个一般是公司/学校封锁了端口(非常用端口或大数字端口),可以尝试将服务器shadowsocks端口修改为如80、443等常用端口号。

Windows下可以用,但到macOS下就不行了

请确认使用的客户端是ShadowsocksX-NG而非ShadowsocksX。

WiFi支持IPv6,但手机无法通过IPv6连上服务器

如果是Android设备的话,受限于设备制造商和Android版本,并不是所有的Android设备都支持IPv6。可以尝试直接访问某些IPv6网站,测试手机是否支持IPv6。

电脑有IPv6网络,可以通过WiFi分享给手机用吗?

电脑通过自身的无线网卡,或USB网卡发射WiFi信号,绝大部分情况都是不支持IPv6的,即手机连上后只有IPv4地址,所以手机并不能直接通过IPv6连上服务器。