On this page... (hide)
- 1. 服务器端软件选择
- 2. 客户端软件推荐
- 2.1 Mac
- 2.2 Windows
- 2.3 Linux
- 2.4 iPhone(iOS)
- 2.5 Android
- 3. 一些其他奇怪的问题
- 3.1 ipv6 不兼容问题
- 4. 怎样跟 VPN 一起用
- 4.1 配置 OpenVPN
- 4.2 让 OpenVPN 穿隧道
- 4.3 需要小心的一些操作
- 4.4 检查网络状态的一些工具
- 5. 其他可能用不上的参考内容
- 5.1 关于 IKEv2 服务架设
- 5.2 其他翻墙的可能方案
- 5.3 关于加强服务器安全
官网是 shadowsocks ,算是一个信息汇聚中心。
1. 服务器端软件选择
为了使用防御力相对较好的 chacha20-ietf-poly1305 传输加密协议,当前推荐选用的 ShadowSocks 服务器端实现是 shadowsocks-libev 。
- shadowsocks-libev 在 Debian 下可以直接在 Debian Backports 中找到安装包,而且这个安装包会自动创建对应的系统服务实现后台运行。具体安装过程参考 Install from repository 。
- shadowsocks-libev 在老版本 Ubuntu 下的安装参考:Install Shadowsocks-libev + simple-obfs on Ubuntu 16.04
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 代理,再配合相关浏览器插件,就能方便地控制对国内外网站的代理自动切换规则(手工加入新网站的操作比较方便)。
- Windows 8 配置 shadowsocks 轻松实现科学上网图文教程:这篇教程以接管系统全局代理、对国内外网站自动切换的方式,进行了详细配置步骤的讲解,适合新手入门时参考。
- 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 的日志似乎默认放在
上面文章里也详细介绍了如何在不同的操作系统上配置 OpenVPN 客户端。
- 其中 iOS 的客户端推荐的是 OpenVPN Connect 。这个 App 在中国区不允许上线,所以需要注册一个非中国区的 Apple ID ,把商店切换到比如美国区去下载。
- 大致按照 在中国能用美国appstore下载应用吗? 的方法进行注册。
- 其中 PC 端打开美国区 Apple ID 注册的网页地址是 https://appleid.apple.com/us/
- 之后还不行的话,参考 如何在注册一个美国区Apple ID时绕过绑定信用卡这一环节?
- 仍然搞不定的话,参考 appstore切换国家和地区时支付方式没有“无”这个选项导致无法切换,怎么解决?
- 大致按照 在中国能用美国appstore下载应用吗? 的方法进行注册。
- iOS 上的 OpenVPN Connect 需要改设置,改成用 tcp 封包才能成功连接。
4.2 让 OpenVPN 穿隧道
如果自己使用,那么在本机成功配置好 ShadowSocks 客户端之后,按照 Connect to OpenVPN over Shadowsocks 的说明,修改 .ovpn 文件,让 OpenVPN 客户端通过本地 socks5 隧道工作就行了。
- 更详细版本的说明,可以参考 How to tunnel OpenVPN over shadowsocks with ExpressVPN
如果还需要给别人使用(比如公司内部需要),那么就得配置一台国内的 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
- 不知道是不是还需要在 .ovpn 文件里加
另外,ShadowSocks 和 kcptun 的所有客户端和服务器端,都可以交给 Supervisor 实现自动启动、自动监管。
4.3 需要小心的一些操作
小心所有的防火墙设置,有可能导致配好的服务跑不通。
- iptables 操作参考 iptables 添加,删除,查看,修改
- 有的 Ubuntu 服务器用的是 UFW 防火墙,其操作参考 在 Ubuntu 中用 UFW 配置防火墙
- 阿里云的 ECS 主机还有自己的网络安全组设置,相当于也是一道防火墙,具体在阿里云的网页端控制台里可以找到和检查设置。
4.4 检查网络状态的一些工具
- 比较准的一个 IP 查询工具:IP 相关数据信息
- 检查当前 DNS 状态的工具:DNS leak test
5. 其他可能用不上的参考内容
5.1 关于 IKEv2 服务架设
可参考 How to Set Up an IKEv2 VPN Server with StrongSwan on Ubuntu 16.04 来架设一个 IKEv2 的 VPN 服务,但我实践下来,数据包能出去,可似乎没法解决 DNS 污染的问题,没法用。
- 按上文在阿里云配置之后,用户名、密码认证总是失败。参考 阿里云 ubuntu16.04上如何搭建IPSec服务 配置 XAUTH 认证是可以成功的。
- IKEv2 配置好之后,让海外流量自动转发到翻墙代理,其 iptables 路由设置可以参考 阿里云搭建strongswan VPN 国内外分流中转到shadowsocks 。
5.2 其他翻墙的可能方案
Outline 基于 ShadowSocks 协议做了自己的方便易用的解决方案,其简要介绍可以参考 谷歌母公司推新服务 Outline,一键部署 VPN。
可能是路由器上实现透明代理的方法:ss/ssr/v2ray/socks5 透明代理。