官网是 shadowsocks ,算是一个信息汇聚中心。

1.  服务器端软件选择

为了使用防御力相对较好的 chacha20-ietf-poly1305 传输加密协议,当前推荐选用的 ShadowSocks 服务器端实现是 shadowsocks-libev

shadowsocks Python 带有的传输加密已经过时,不推荐使用。不过其很多设置优化方法可以参考。例如把一个进程配置成自启动的服务,可参考 用 Supervisor 运行 Shadowsocks

在 OpenVZ 主机上也用过 shadowsocks-libuv ,特别省资源,但支持的传输加密协议似乎也已经落伍了。

1.1  关于服务器端的保护

ShadowSocks 服务地址是很容易整个被墙掉的,所以除了选用比较靠谱的传输加密协议之外,还可以考虑以下这些办法:

  • 最基本的一种保护方法是把 Shadowsocks 换成非标准的服务端口。
  • 可以考虑组合使用 obfsproxy 再多做一层网络层混淆。
    • ShadowsocksR 等第三方服务器端实现自带了流量混淆功能,但是在维护水平、安全性等方面还有不少争议。

1.2  关于服务器端加速

理论上,有挺多设置调优可做。除此之外,还有以下这些思路可以参考:

  • 套一层 kcptun,用带宽浪费来换取网络延迟的大幅改善。实测对网络游戏和视频直播都有十分明显的疗效。
    • 需要服务器的带宽有一定基础,才能换取丢包率和响应速度的改善。
    • 网络游戏等需要快速响应的应用,可以尝试 kcptun 的以下参数,感觉效果不错(参考自:给网络游戏加速,什么样的参数更好呢?):
      kcptun-server -t 目标IP地址:目标端口 -l kcptun服务器监听IP:kcptun服务器监听端口 --key kcptun秘钥 --crypt aes-128 --mode manual --nocomp --datashard 5 --parityshard 5 --mtu 256 --sndwnd 256 --rcvwnd 1024 --dscp 46 --nodelay 1 --interval 10 --resend 1 --nc 1
  • 有时候持续大流量的 udp 传输(比如看视频)会被干扰或受到 QoS 限制,导致断线,这时可以试试用 udp2raw-tunnel 把 kcptun 再包一层,变成 tcp 传输。
  • 可以考虑 使用 HAProxy 加速 Shadowsocks

2.  客户端软件推荐

2.1  Mac

Mac 上客户端推荐 ShadowsocksX-NG ,其自带 kcptun 支持,相当方便。(M1 上可能运行不太正常,得找为 M1 专门编译的版本,而且似乎 kcptun 插件的问题没解决。)

  • M1 芯片上最好还是使用 ClashX,虽然配置比较复杂,但功能强大稳定性好。

2.2  Windows

Win 上客户端使用 Shadowsocks for Windows

  • 右键点它的系统通知栏小图标可以激活随系统自动启动。
  • 如果不勾选“启用系统代理选项”,那么就不会自动接管操作系统全局代理,只是在本机提供一个 socks5 代理,再配合相关浏览器插件,就能方便地控制对国内外网站的代理自动切换规则(手工加入新网站的操作比较方便)。
  • Win 下的 kcptun 得安装自己的独立客户端,目前没发现捆绑支持 kcptun 的 ShadowSocks 客户端。

2.3  Linux

Linux 下,命令行模式可以直接用 shadowsocks Python 自带的 sslocal 指令,其命令行参数含义与 ssserver 指令一致。

2.4  iPhone(iOS)

iPhone 上在 Cydia 搜 shadowsocks 就能找到 MobileShadowSocks 这个客户端,只能在越狱后使用。

  • 不越狱的话可以用 Surge 实现同样功能,但软件要收费,配置也稍微复杂些。
    • 国内的 App Store 经常把翻墙代理软件下线,所以到底什么客户端能用,得经常搜一搜……

2.5  Android

Android 上在 Play 商店里搜 shadowsocks 就能找到 Shadowsocks for Android 这个客户端,无论是否 root 都能用。

3.  一些其他奇怪的问题

3.1  ipv6 不兼容问题

通过代理访问 Google ,会经常碰到搜索跳转到 ipv6.google.com/sorry/IndexRedirect ,并要求输入验证码的状况 。参考 在 Debian 下禁用 ipv6 的方法 ,禁用服务器端的 ipv6 支持之后,代理就不会再访问 Google 的 ipv6 地址了。

4.  怎样跟 VPN 一起用

ShadowSocks 其实不是 VPN ,只是一个 tcp/udp 隧道。然而有些情况下不得不使用 VPN ,把客户端所有的流量转发出去。为了避免被封协议,就需要采取 Connect to OpenVPN over Shadowsocks

4.1  配置 OpenVPN

主要部分参考 How To Set Up an OpenVPN Server on Ubuntu 16.04 ,在国外 vps 上配置一个 OpenVPN Server。

  • 文章的第一条评论里提供了一个自动脚本实现安装配置步骤,所以不一定非得按文章内容一点一点手动调……脚本在 https://github.com/Nyr/openvpn-install
  • 需要把 OpenVPN 服务器设置成 tcp 模式,并且我选了 443 端口。
    • 可以考虑在 /etc/openvpn/server.conf 加上 tcp-nodelay 参数,通常可以有效改善 tcp 模式的网络延迟。
  • 基本服务配完后,最好先拿客户端直连测一测(避免配置文件笔误导致服务运行不正常)。然而跨境连 VPN 很有可能本身就连不通,这时可以临时买一个海外的 vps 搭一个 Linux 客户端来做测试。
  • 考虑一下 OpenVPN 服务要不要设置 duplicate-cn 参数。如果不开这个,同一个用户证书只同时允许在一台设备上登陆(新登陆的设备会把之前连接的其他客户端踢下去)。
    • OpenVPN 的日志似乎默认放在
       grep VPN /var/log/syslog

上面文章里也详细介绍了如何在不同的操作系统上配置 OpenVPN 客户端。

4.2  让 OpenVPN 穿隧道

如果自己使用,那么在本机成功配置好 ShadowSocks 客户端之后,按照 Connect to OpenVPN over Shadowsocks 的说明,修改 .ovpn 文件,让 OpenVPN 客户端通过本地 socks5 隧道工作就行了。

如果还需要给别人使用(比如公司内部需要),那么就得配置一台国内的 vps 做中转(比如用阿里云)。

  • 在国外的 OpenVPN 服务器上配置一个 ShadowSocks 服务器端。
  • 在国内机房配置一个 ShadowSocks 的客户端,用 ss-tunnel 指令把国外的 OpenVPN 服务端口(可能必须得是 tcp 端口)映射到国内机房的服务器上。
    • 如果要提高网络响应速度,可以用 kcptun 把 ShadowSocks 隧道再封装一下。
  • 修改 .ovpn 文件,把 keyremote OpenVPN服务器地址 OpenVPN服务器端口 改成 keyremote ShadowSocks客户端公网地址 OpenVPN服务器端口 ,这样就能让 OpenVPN 客户端调用国内机房的 ShadowSocks 隧道了。
    • 不知道是不是还需要在 .ovpn 文件里加
       route SHADOWSOCKS_SERVER_IP 255.255.255.255 net_gateway

另外,ShadowSocks 和 kcptun 的所有客户端和服务器端,都可以交给 Supervisor 实现自动启动、自动监管。

4.3  需要小心的一些操作

小心所有的防火墙设置,有可能导致配好的服务跑不通。

4.4  检查网络状态的一些工具

5.  其他可能用不上的参考内容

5.1  关于 IKEv2 服务架设

可参考 How to Set Up an IKEv2 VPN Server with StrongSwan on Ubuntu 16.04 来架设一个 IKEv2 的 VPN 服务,但我实践下来,数据包能出去,可似乎没法解决 DNS 污染的问题,没法用。

5.2  其他翻墙的可能方案

Outline 基于 ShadowSocks 协议做了自己的方便易用的解决方案,其简要介绍可以参考 谷歌母公司推新服务 Outline,一键部署 VPN

可能是路由器上实现透明代理的方法:ss/ssr/v2ray/socks5 透明代理

5.3  关于加强服务器安全

GlossyBlue theme adapted by David Gilbert
Powered by PmWiki