【翻墙节点自建 Shadowsocks篇】AEAD 2022抗审查加密隧道搭建教程
Shadowsocks是中国知名度最高的反审查协议,至今已有11年历史,开创者clowwindy在2015年退出了开发,由社区接手。目前,Shadowsocks的维护人员大部分都不再是中国人,已经成为了国际性质的项目。Shadowsocks有数十种分支与组合,我只介绍AEAD 2022,也就是目前最安全的Shadowsocks方案之一。
在开始教程之前,我了解到很多人更倾向于Trojan和Naiveproxy这样的基于TLS的代理协议,Hysteria 2这种QUIC类协议也很流行,但小白入门还是Shadowsocks最好,它简单、快捷且在正确配置下仍具备抗封锁能力。如果一开始就玩TLS类和Hysteria 2,你可能会面临更多的问题且需要更多时间来解决。
首先,在开始之前我假设你生活在中国大陆境内。基于这个前提,你需要一台中国大陆能访问的服务器,本帖发布日期正逢黑色星期五,也是选购服务器的好时机。要匿名购买服务器请寻找支持加密货币的商家,例如buyvm支持XMR,而racknerd支持BTC等,但不支持XMR。商家的背景也值得调查,避免dogyun等支人主机商,这类主机商一般漠视隐私且不允许匿名购买。确认主机商背景不亲共、注册地点靠谱后,就可以选择想要的配置和机房了。一般翻墙节点重视流量和带宽大小,CPU一般不至于连SS都跑不动,而内存512M都够了。机房地点需要自行根据自家地区和运营商来选择,也需要测试,一般要交学费才能了解。若想避雷,买racknerd黑色星期五最便宜的那款10$/年即可,选择圣何塞(San Jose)机房。虽然这么便宜的机器线路质量当然很一般,但足够便宜且稳定,适合低预算入门。
为了统一环境,机器的操作系统请安装Debian 12或Debian 11,安装后你可能会对发过来的邮件不知所措,此时若你是Windows系统则需要SSH客户端来连接,下载PuTTY即可(注意避开钓鱼网站),若是Linux或MacOS,打开终端输入ssh 用户名@ip地址 即可连接。服务商的邮件一般会提供连接所需的IP、用户名和密码等信息,若未提供用户名,一般是root。在这一步遇到困难的话请参阅服务商提供的文档。
成功登入后,先切换为root用户(如果不是)
再改拥塞控制算法为BBR(假设你是Debian11和12)
再输入以下命令应用
再输入以下命令安装服务端sing-box
安装成功后,输入以下命令删除默认配置,且编辑一个新的配置:
虽然只需要对默认的配置文件进行很少的改动,但为了方便小白,教程将会采用以下配置好的模板,只需要修改密码。
除非你知道自己在干什么,否则请仅替换密码部分,且保持"network": "tcp"和"multiplex"字段不变,这两者是缓解封锁的关键。这两者的作用是在服务端禁用UDP,且开启多路复用。在服务端启用UDP可能导致被封锁,多路复用则有助于缓解特征,且能降低延迟。密码部分请使用以下命令生成,注意不能随便写,随便写会报错。
输出结果即为生成的密码,替换配置文件内的相关字段即可,例如
这个密码需要保存且不能泄露,客户端也需要使用一样的密码。在自己电脑上修改配置示例中的密码后,将整个配置一字不差地复制,粘贴(在PuTTY里是右键粘贴)到服务器的编辑器里,然后按Ctrl+X再输入y确认,按Enter保存。想自己写配置,文本编辑器必不可少。如果你的电脑还没有一个文本编辑器,推荐使用Notepad++或VS Code,记事本和nano非常难用,但如果你不愿意下载,也可以继续使用记事本和nano。完成后,输入
检查配置是否正确,输出结果应与刚刚粘贴进去的配置吻合。若吻合,则可以输入以下命令开启sing-box
接下来输入以下命令检查sing-box是否正常运行
如果没有出现报错,而是出现了如tcp listening ::8080之类的正常运行字样,则可以进入客户端配置了。
由于服务端是sing-box且开启了多路复用,为了确保最佳兼容性(sing-box的多路复用不属于shadowsocks标准),客户端也需要使用sing-box。iOS和MacOS用户直接在App Store下载,Android用户在Google Play下载。这些应用商店钓鱼软件居多,下载时请注意不要下到钓鱼软件。正牌sing-box没有广告和应用内购买,开发者为Sager Networks。Linux用户安装方式和服务端一样。Windows则需要自行在GitHub下载可执行文件(exe),通常是amd64架构,例如sing-box-1.6.5-windows-amd64.zip。
客户端配置稍微复杂一些,但也提供一个粘贴即用的配置示例。
这份配置文件配置为TUN Layer4代理,即代理所有网络流量,非socks5/http layer7代理。路由规则配置为中国直连,DNS不泄露。
在iOS,MacOS和Android端仅需创建空配置文件(删除默认配置)并粘贴即可,然后选择该配置并打开VPN。在Windows端需要解压之前的可执行文件和geosite.db到一个空文件夹(假设文件夹在桌面,重命名为sing-box),并新建一个文件config.json,粘贴所有内容进去保存。然后按Win+X打开终端(管理员),输入
然后输入
即可启动。此时应该能代理你的网络流量了。
本文尽量把每个步骤都讲一下以方便小白,对于熟练使用Linux的会显得很啰嗦,见谅。下一篇可能会讲讲Hysteria 2协议。
本文基于sing-box官方文档
在开始教程之前,我了解到很多人更倾向于Trojan和Naiveproxy这样的基于TLS的代理协议,Hysteria 2这种QUIC类协议也很流行,但小白入门还是Shadowsocks最好,它简单、快捷且在正确配置下仍具备抗封锁能力。如果一开始就玩TLS类和Hysteria 2,你可能会面临更多的问题且需要更多时间来解决。
首先,在开始之前我假设你生活在中国大陆境内。基于这个前提,你需要一台中国大陆能访问的服务器,本帖发布日期正逢黑色星期五,也是选购服务器的好时机。要匿名购买服务器请寻找支持加密货币的商家,例如buyvm支持XMR,而racknerd支持BTC等,但不支持XMR。商家的背景也值得调查,避免dogyun等支人主机商,这类主机商一般漠视隐私且不允许匿名购买。确认主机商背景不亲共、注册地点靠谱后,就可以选择想要的配置和机房了。一般翻墙节点重视流量和带宽大小,CPU一般不至于连SS都跑不动,而内存512M都够了。机房地点需要自行根据自家地区和运营商来选择,也需要测试,一般要交学费才能了解。若想避雷,买racknerd黑色星期五最便宜的那款10$/年即可,选择圣何塞(San Jose)机房。虽然这么便宜的机器线路质量当然很一般,但足够便宜且稳定,适合低预算入门。
为了统一环境,机器的操作系统请安装Debian 12或Debian 11,安装后你可能会对发过来的邮件不知所措,此时若你是Windows系统则需要SSH客户端来连接,下载PuTTY即可(注意避开钓鱼网站),若是Linux或MacOS,打开终端输入ssh 用户名@ip地址 即可连接。服务商的邮件一般会提供连接所需的IP、用户名和密码等信息,若未提供用户名,一般是root。在这一步遇到困难的话请参阅服务商提供的文档。
成功登入后,先切换为root用户(如果不是)
sudo -i
再改拥塞控制算法为BBR(假设你是Debian11和12)
echo -e "net.core.default_qdisc=fq\r\nnet.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
再输入以下命令应用
sysctl -p
再输入以下命令安装服务端sing-box
bash <(curl -fsSL https://sing-box.app/deb-install.sh)
安装成功后,输入以下命令删除默认配置,且编辑一个新的配置:
rm -rf /etc/sing-box/config.json && nano /etc/sing-box/config.json
虽然只需要对默认的配置文件进行很少的改动,但为了方便小白,教程将会采用以下配置好的模板,只需要修改密码。
{
"inbounds": [
{
"type": "shadowsocks",
"listen": "::",
"listen_port": 8080,
"method": "2022-blake3-chacha20-poly1305",
"password": "替换成你的密码",
"network": "tcp",
"multiplex": {
"enabled": true
}
}
]
}除非你知道自己在干什么,否则请仅替换密码部分,且保持"network": "tcp"和"multiplex"字段不变,这两者是缓解封锁的关键。这两者的作用是在服务端禁用UDP,且开启多路复用。在服务端启用UDP可能导致被封锁,多路复用则有助于缓解特征,且能降低延迟。密码部分请使用以下命令生成,注意不能随便写,随便写会报错。
openssl rand -base64 32
输出结果即为生成的密码,替换配置文件内的相关字段即可,例如
"password": "NECS8kb9soYf1kKGhbM5Fy4D2WSAdy44GJkh+6cWIwo=",
这个密码需要保存且不能泄露,客户端也需要使用一样的密码。在自己电脑上修改配置示例中的密码后,将整个配置一字不差地复制,粘贴(在PuTTY里是右键粘贴)到服务器的编辑器里,然后按Ctrl+X再输入y确认,按Enter保存。想自己写配置,文本编辑器必不可少。如果你的电脑还没有一个文本编辑器,推荐使用Notepad++或VS Code,记事本和nano非常难用,但如果你不愿意下载,也可以继续使用记事本和nano。完成后,输入
cat /etc/sing-box/config.json
检查配置是否正确,输出结果应与刚刚粘贴进去的配置吻合。若吻合,则可以输入以下命令开启sing-box
systemctl enable sing-box --now && systemctl restart sing-box
接下来输入以下命令检查sing-box是否正常运行
systemctl status sing-box
如果没有出现报错,而是出现了如tcp listening ::8080之类的正常运行字样,则可以进入客户端配置了。
由于服务端是sing-box且开启了多路复用,为了确保最佳兼容性(sing-box的多路复用不属于shadowsocks标准),客户端也需要使用sing-box。iOS和MacOS用户直接在App Store下载,Android用户在Google Play下载。这些应用商店钓鱼软件居多,下载时请注意不要下到钓鱼软件。正牌sing-box没有广告和应用内购买,开发者为Sager Networks。Linux用户安装方式和服务端一样。Windows则需要自行在GitHub下载可执行文件(exe),通常是amd64架构,例如sing-box-1.6.5-windows-amd64.zip。
客户端配置稍微复杂一些,但也提供一个粘贴即用的配置示例。
{
"dns": {
"servers": [
{
"tag": "google",
"address": "tls://8.8.8.8"
},
{
"tag": "local",
"address": "223.5.5.5",
"detour": "direct"
}
],
"rules": [
{
"outbound": "direct",
"server": "local"
},
{
"outbound": "proxy",
"server": "google"
}
],
"strategy": "ipv4_only"
},
"inbounds": [
{
"type": "tun",
"inet4_address": "172.19.0.1/30",
"auto_route": true,
"stack":"gVisor",
"sniff": true
}
],
"outbounds": [
{
"type": "shadowsocks",
"tag": "proxy",
"server": "替换为服务器IP",
"server_port": 8080,
"method" :"2022-blake3-chacha20-poly1305",
"password": "替换为自己的密码",
"multiplex": {
"enabled": true
}
},
{
"type": "block",
"tag": "block"
},
{
"type": "dns",
"tag": "dns-out"
},
{
"type": "direct",
"tag": "direct"
}
],
"route": {
"rules": [
{
"protocol": "dns",
"outbound": "dns-out"
},
{
"geosite": "cn",
"outbound": "direct"
},
{
"geoip": "cn",
"outbound": "direct"
}
],
"auto_detect_interface": true,
"final": "proxy"
}
}这份配置文件配置为TUN Layer4代理,即代理所有网络流量,非socks5/http layer7代理。路由规则配置为中国直连,DNS不泄露。
在iOS,MacOS和Android端仅需创建空配置文件(删除默认配置)并粘贴即可,然后选择该配置并打开VPN。在Windows端需要解压之前的可执行文件和geosite.db到一个空文件夹(假设文件夹在桌面,重命名为sing-box),并新建一个文件config.json,粘贴所有内容进去保存。然后按Win+X打开终端(管理员),输入
cd ~/Desktop/sing-box
然后输入
./sing-box run -c config.json
即可启动。此时应该能代理你的网络流量了。
本文尽量把每个步骤都讲一下以方便小白,对于熟练使用Linux的会显得很啰嗦,见谅。下一篇可能会讲讲Hysteria 2协议。
本文基于sing-box官方文档
23 个评论
>>(packet-tunnel) error: start service: Get "https:/...
客户端出错吗?看样子是下载geoip.db出了问题,移除分流部分试试(下面是全局不分流的配置)
{
"dns": {
"servers": [
{
"tag": "google",
"address": "tls://8.8.8.8"
}
],
"strategy": "ipv4_only"
},
"inbounds": [
{
"type": "tun",
"inet4_address": "172.19.0.1/30",
"auto_route": true,
"stack":"gVisor",
"sniff": true
}
],
"outbounds": [
{
"type": "shadowsocks",
"tag": "proxy",
"server": "替换为服务器IP",
"server_port": 8080,
"method" :"2022-blake3-chacha20-poly1305",
"password": "替换为自己的密码",
"multiplex": {
"enabled": true
}
},
{
"type": "block",
"tag": "block"
},
{
"type": "dns",
"tag": "dns-out"
},
{
"type": "direct",
"tag": "direct"
}
],
"route": {
"rules": [
{
"protocol": "dns",
"outbound": "dns-out"
}
],
"auto_detect_interface": true,
"final": "proxy"
}
}
好长啊,看不懂呢,后面咋操作
>>(packet-tunnel) error: start service: initialize i...
"stack":"gVisor",换成
"stack":"mixed",或
"stack":"system",试试
>>感谢!俺两个都试了,这下客户端没有报错。不过,好像两个都无法联网。Sing-box客户端的dashb...
服务端输入systemctl status sing-box看看有没有接收到传入连接,如果什么都没有说明没连上服务器,需要排查客户端和服务器的连通性,例如端口是否放行(可能需要在服务商的控制台开放),IP和密码是否正确等
>>感谢!俺两个都试了,这下客户端没有报错。不过,好像两个都无法联网。Sing-box客户端的dashb...
在安卓端还可以用NB4A https://github.com/MatsuriDayo/NekoBoxForAndroid
Nekobox For Android使用sing-box,但提供图形化界面,可能更适合用做客户端
如果服务器运行确定是正常的,客户端实在不会配置还可以用v2rayNG和Shadowrocket等图形化客户端,这些比sing-box手写配置简单得多,但核心不同可能会导致多路复用等功能不正常。
>>Active: active (running) since Sun 2023-11-19 11:1...
客户端和服务端的输出日志看看?涉及到隐私的信息可以匿名化再发
>>谢谢!客户端日志dns: exchange failed for firefox.settings ...
"address": "tls://8.8.8.8"改成"address": "udp://8.8.8.8"试试,还不行的话客户端把multiplex关掉,那里true改为false
>>"address": "tls://8.8.8.8"改成"address": "udp://8.8....
大神我过几天也买一个,到时候麻烦你帮我看看,谢谢啦
现在基本上不太可能靠单一协议翻墙了吧,SS很容易被GFW从而导致你服务器被封,会先封你端口,你换了以后不多久就会封IP,一样要学习,我建议还是使用能对抗SNI白名单过滤的xray的reality或者sing-box的shadowtls。
我只有一条忠告: 电脑或手机不要直连机场, 我这个月搬家重部署翻墙方案的时候偷了个懒直接在windows下直连机场, 结果之前好好的服务器没几天就被墙了
现在还是乖乖在局域网内搭个原生ss-rust client跳板机, 然后windows用nekoray走socks5连到跳板机, 这样就算windows下面有什么软件检测到nekoray/sing-box并上报了也不知道你真实连接的机场地址, 就算在windows上装国产软件也没什么问题, 前提是局域网内要安全可控
现在还是乖乖在局域网内搭个原生ss-rust client跳板机, 然后windows用nekoray走socks5连到跳板机, 这样就算windows下面有什么软件检测到nekoray/sing-box并上报了也不知道你真实连接的机场地址, 就算在windows上装国产软件也没什么问题, 前提是局域网内要安全可控
>>现在基本上不太可能靠单一协议翻墙了吧,SS很容易被GFW从而导致你服务器被封,会先封你端口,你换了以...
SS是搭建最简单的协议,被墙的原因有论文分析:https://gfw.report/publications/usenixsecurity23/en/
sing-box的multiplex和禁用udp有助于缓解,如果让SS都没建明白的小白去搭建reality或shadowtls,出的问题还会更多,至少需要先把ss跑起来再研究其它协议。