【翻墙节点自建 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用户(如果不是)
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官方文档
8
分享 2023-11-19

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很容易被GFW从而导致你服务器被封,会先封你端口,你换了以...


SS是搭建最简单的协议,被墙的原因有论文分析:https://gfw.report/publications/usenixsecurity23/en/
sing-box的multiplex和禁用udp有助于缓解,如果让SS都没建明白的小白去搭建reality或shadowtls,出的问题还会更多,至少需要先把ss跑起来再研究其它协议。
>>SS是搭建最简单的协议,被墙的原因有论文分析:https://gfw.report/publicat...


你说的是对的,希望能有更多人出来看看
>>感谢耐心解答!俺看看


试试"tls://8.8.4.4"、"tls://9.9.9.10"、"tls://1.0.0.1",这软件逻辑好怪,发往DNS服务器的包要过隧道,根本没必要在连接前检查。

要发言请先登录注册

要发言请先登录注册