随着封锁的严重,通往外面世界的路越来越少。从另一角度看,封锁推动了相关技术的发展。目前流行的开源相关技术包括Shadowsocks(SS)、ShadowsocksR(SSR)、V2Ray、WireGuard等,直接服务终端用户的VPN和代理产品更是数不胜数。
对于有技术基础的同学,我一直建议且践行自行搭建服务器这条路,主要出于以下几点考虑:
- ExpressVPN, NordVPN等产品并不比自建便宜,速度上也无太多优势;
- 国内许多产品常有跑路或不可用的情况发生,相比之下vps厂商跑路更少;
- 万一对方服务器记录访问日志,请喝茶一请一个准;
- 自建服务器能全方面锻炼你的网络、系统管理、英文等多方面能力。
大体上看,自建服务器分为三步:1. 购买海外服务器;2. 部署好服务端;3. 下载客户端,连接上网。第一步本人写过“一些vps商家整理”可供参考;第二步“再谈科学上网”,用文中两三条命令即可部署好SS服务端。本文针对第三步进行讨论:获取科学上网必须用到的客户端。
电脑(PC端)、安卓和苹果电脑(MacOS)系统的特点是,只有一人有安装包,就能分享给其他人安装和使用,所以很难封杀。鉴于此,本站为以上系统找SS和SSR客户端的用户提供下载通道:Shadowsocks客户端和ShadowsocksR/SSR 客户端。
相比之下ios系统比较麻烦,因为绝大部分应用必须通过应用商店(app store)下载。苹果爸爸在应用审核等许多方面比较强势,但在国内也只能乖乖听话,所以国内id很难下载到(免费的)网络代理客户端。
对于ios系统,可以通过以下几种方式获取客户端:
- 使用境外的apple id下载,比如香港、台湾、美国等地区的ID。如果没有境外苹果id怎么办?找朋友借、自己全程用海外ip注册,或者从淘宝上购买apple id。淘宝上购买一个海外id只要十几块钱,如果只是想租用下载某个应用,大概一块钱一次,都不算贵;
- 系统越狱,安装其他人提供的ipa包。自ios11以来,公开的越狱手段几乎没有,这条路基本不通了;
- 有开发者账号的人,重签名他人提供的ipa包后安装。比如本人在”构建自己的iOS网络代理客户端“
等文中贴出打包好的ipa下载链接; - 有技术实力的,自己编译安装。示例可参考”构建自己的iOS网络代理客户端“
一文。
其他平台一种客户端就足够,因为ios下载应用的特点,ios上可供选择的客户端很多。比较知名且目前可下载免费使用的SS/SSR客户端包括:FastSocks、NetShuttle(网际飞梭)、Potatso Lite、Sockswitch、ShadowLink、Mume、Brook、Surge、ConnectSPro。付费的也有更多,例如Potasto 2、Shadowrocket、Wingy。当然你应该也知道,有了境外id,同样能够下载wireguard、v2ray等工具的客户端。
对于Linux系统用户,客户端下载和使用无需多言,毕竟是高玩群体。
Shadowsocks客户端
Shadowsocks(SS)
客户端是使用Shadowsocks
方式科学上网必不可少的工具。由于国内的限制,科学上网需要使用Shadowsocks
客户端,而下载Shadowsocks
客户端又需要用代理翻墙,这是一个死循环…
本站提供Windows
(PC/电脑)、Android
(安卓)、MacOS
(苹果电脑)系统的Shadowsocks
客户端下载,方便用Shadowsocks
方式进行科学上网的网民。因Windows
平台下官方版会出现大量“HTTP Auto Proxy Detection Worker Process”进程的bug,本人对其进行了修复并提供修复版。除此之外的客户端均来自Shadowsocks
官方网站。如果你使用修复版遇到问题,请在本页面留言。其他版本遇到的问题,请联系官方人员。
Windows
客户端:下载4.1.5修复版 下载官方4.1.5版
Android
客户端: ShadowSocks 4.7.2
MacOS
客户端: ShadowsocksX-NG 1.8.2
iOS
(iPhone/iPad)客户端:打开App Store,搜索“FastSocks/Potatso Lite/Mume VPN/NetShuttle”
等。如果你有MacOS设备和开发者账号,可以考虑“构建自己的ShadowSocks客户端”。
ShadowsocksR/SSR 客户端
本人在 “系统出现大量HTTP Auto Proxy Detection Worker Process” 一文中对Windows上的异常现象进行了研究,并给出了Shadowsocks
的解决方案。ShadowsocksR/SSR
的Windows客户端亦存在此问题,应友请求,拷贝了最新版的代码并进行修复和编译。
此外本人顺道整理了Windows
(PC/电脑)、Android
(安卓)、MacOS
(苹果电脑)系统的ShadowsocksR/SSR
客户端,一并给出,方便使用ShadowsocksR/SSR
客户端科学上网的网友。如果你使用本人修复的Windows版本,使用过程中遇到问题,请直接留言。其他版本遇到的问题请直接联系官方人员。
Android
客户端: ShadowSocks 3.5.4
MacOS
客户端: ShadowsocksX-NG 1.4.4-r8
iOS
(iPhone/iPad)客户端:打开App Store,搜索“FastSocks/Potatso Lite/Mume VPN/NetShuttle”
等。如果你有MacOS设备和开发者账号,可以考虑“构建自己的Shadowsocks客户端”。
构建自己的ShadowSocks客户端
本文说的网络代理客户端指ShadowSocks(R)客户端,用途你懂的。
本文写作时的环境:MacOS High Sierra 10.13.6,Xcode版本9.4.1,Swift版本4.1.2,所用代码的commitID: 318a5e1
本文所用的XCode工程文件夹已经上传至网盘:https://pan.baidu.com/s/190N2_ElBWGzxtpL-Hx_d1A
如果构建过程中遇到其他问题,请参考本人对问题整理的文章:构建Potatso问题集锦及解决方案
前提条件
构建iOS设备的自用客户端(Potatso),需要两个前提条件:
- 一台装有XCode的MacOS设备;
- 一个可用的苹果开发者账号。
构建步骤
1. 安装Cocospods
如果已安装,请略过此步。
- 更新系统的gem版本:打开终端,输入:
sudo gem update --system
; - 设置国内gem源:
gem sources --list
输出为https://gems.ruby-china.org/
请略过此步;否则先删除官方源再添加gems国内源:gem sources --remove https://rubygems.org/; gem sources --add https://gems.ruby-china.org/
; - 安装Cocospods:
sudo gem install cocoapods
。
2. 构建Potatso
Potatso
的作者(icodesign)公开了源代码,而后由于部分人的滥用导致作者删除代码且第二版不再开源。本文使用的Potatso客户端的代码来自icodesign
及haxpor等人。
构建Potatso的步骤如下:
- 克隆代码:
git clone https://github.com/haxpor/Potatso.git
; - 更新子模块:
cd Potatso; git submodule update --init
; - 安装依赖:打开
Podfile
,将第一行改成:source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
(使用清华的CocoaPods源),然后运行pod install --verbose
; - 使用XCode打开
Potatso.xcworkspace
; - 更改
Potatso
及PacketTunnel
、TodayWidget
两个子项目的Bundle ID
,例如本人分别改成:potatso.tlanyan.me
、potatso.tlanyan.me.PacketTunnel
和potatso.tlanyan.me.TodayWidget
; - 更改
Potatso
及PacketTunnel
、TodayWidget
两个子项目Capabilities
中的App Group
和Keychain Sharing
的Group:在”App Groups”中删除原有的group.io.wasin.potatso
,新增自己的group,例如:”group.potatso.tlanyan.me”;在”Keychain Sharing”中输入自己的group ID; - 打开”Potatso.m”文件,将
shareGroupIdentifier
函数的返回值改成自己的group id; - 在Potatso项目的
BuildSettings
中找Code Signing Entitlements
,将”xxxx.entitlements”删除; - 将iPhone等iOS设备连接到电脑,目标选择新接入的设备,点击左上角的“build and run”按钮,Xcode会编译并安装App,然后启动。
一切顺利的话,iOS设备上的客户端能正常使用,接下来可以安装到多个设备上,也可以打包成ipa用iTunes安装到其他已注册设备。软件截图如下:
请记住用途为自用,请不要商业使用或者将应用发布到App Store上(并收费)。
可能遇到的问题
本人构建过程中遇到的主要问题是Cocoapods依赖安装。执行pod install
,前面一切顺利,到libYAML
会出现问题:
Installing LibYAML (0.1.4)
[!] Error installing LibYAML
[!] /usr/bin/curl -f -L -o /var/folders/dj/ljst94xx47l7fn3wz4q9bwsw0000gn/T/d20180822-4467-1cotycr/file.tgz http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz --create-dirs --netrc-optional --retry 2
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (7) Failed to connect to pyyaml.org port 80: Connection refused
根据提示libYAML官网的80端口关闭了,将http替换成https发现可以正常下载。libYAML官网这仅支持https,连301跳转机会都不给的骚操作顿时让我有点小蛋疼。用grep搜索工程,没发现可以把http改成https的配置文件存在;对Cocoapods不熟,libYAML的地址不知是否从云端下载下来;打开Podfile.lock
,将版本从”0.1.4″改成其他的,依赖又出问题;无奈之下先将文件下载下来,将其放到”/var/folders/dj/ljst94xx47l7fn3wz4q9bwsw0000gn/T/d20180822-4467-1cotycr/”目录下并改名为”file.tgz”,再次运行pod install --verbose
,发现路径每次都不一样,非常蛋疼。
最后的解决方案是采用网络劫持:
- 新开一个终端,进入root模式:
sudo -i
; - 创建download/libyaml目录,将下载的文件复制到文件夹:
mkdir -p download/libyaml; mv /Users/tlanyan/Downloads/yaml-0.1.4.tar.gz download/libyaml/
; - 将pyyaml.org域名解析指向本地:vim编辑
/etc/hosts
文件,增加一行:127.0.0.1 pyyaml.org
; - 用Python启动一个静态web服务器,监听80端口:
python -m SimpleHTTPServer 80
。
以root身份设置好监听后,在原来终端继续pod install --verbose
,问题解决。
除了依赖问题,其他问题主要是以Bundle ID/group ID的问题,请根据错误提示修改。
有关Potatso
Potatso的作者是icodesign
,祭奠死去的 Potatso 1为作者对Potatso的自述,建议每一个使用Potatso代码的人都看看。
Github上搜”Potatso”,最匹配排名第一的仓库持有者是haxpor(Wasin Thonkaew)。其在仓库README的第一位置建议使用代码的人查看ADHERE_LICENSE.md中的内容。简单来说就是不要直接复制源码然后发布到App Store上,具体来讲haxpor的希望是:
其他
本人常用的客户端是SsrConnectPro
,可惜不管全局还是系统代理,都无法使用TG。后来用了WaterDrop
,使用TG无忧。遗憾的是前两周WaterDrop
抽风,连接服务器后又立马断开,原因未知。想着重装一下就好了,就将其卸载掉。打开App Store搜索发现软件不见踪影,上网查方知已经下架(其他区也下架),只好寻找替代品。在App Store下载了多个客户端,能上外网的很多,用得了Telegram的很少。这顿时让我有种危机感:要是这些软件下架了,我该怎么在iOS上(尤其是新设备)访问外网、使用TG呢?
解决办法之一是做一个自己的客户端,这样就永远不会下架。本人比较幸运,从闲下来找代码以及编译并测试使用正常,总共花了几个小时(主要时间是解决Cocospods的依赖安装)。上网查了一圈,貌似没有相关教程,于是有了此文。
本人从未用过Swift,无法对客户端功能进行修改,类似问题请勿咨询本人。如果可以,请购买Potatso 2
支持原作者,或者给haxpor等人捐赠。
感谢阅读!
参考
- https://github.com/haxpor/Potatso
- https://www.jianshu.com/p/1711e131987d
- https://sspai.com/post/38909
- https://coolshell.cn/articles/1480.html
- https://cloud.tencent.com/developer/article/1072481
- https://mirror.tuna.tsinghua.edu.cn/help/CocoaPods/