Shadowrocket使用SS

既然 Shadowrocket使用SSH 无法 越过长城 ,并且对 iOS 不友好。那么,放弃直接使用SSH Tunnel,改用 shadowsocks (SS)。

备注

GitHub: alireza0/x-ui 提供了流行的 x-ui 可视化面板,一键生成小火箭支持的节点。

不过,本文使用简便的 Docker 方式来直接运行

Shadowsocks服务端

我的VPS采用了 Alpine Linux ,所以先完成服务器端 Alpine Linux Docker

  • 在服务器上运行SS容器:

在Docker中运行shadowsocks
docker run -d \
  --name ss-server \
  -p 443:443 \
  -p 443:443/udp \
  --restart always \
  shadowsocks/shadowsocks-libev \
  ss-server -s 0.0.0.0 -p 443 \
  -k mypassword -m aes-256-gcm

参数说明:

  • 运行 ss-server 参数 -p 443 是指定容器内服务进层监听在443端口,该参数可以按照需求进行调整

  • 运行 ss-server 参数 -m aes-256-gcm 指定了 aes-256-gcm 算法: 现代的 AEAD 加密簇。它不仅加密数据,还包含一个身份验证标签(Tag),用于防止“主动探测”攻击

Shadowsocks客户端

iOS客户端可以直接从AppStore安装 Shadowrocket ,配置方法非常简洁

  • 点击 + 添加一个 本地节点

  • 选择 Shadowsocks 类型,然后依次填写 地址 , 端口 , 密码 等:

    • 端口设置 443 对应上述 Shadowsocks 服务器的服务端口

    • 算法选择对应 Shadowsocks 服务器使用的算法 aes-256-gcm

    • 混淆保持默认不要设置,原因是 aes-256-gcm 属于 AEAD 加密,本身就免疫GFW的"主动探测",并且在小流量下就像一串无意义的二级制流(当前很多传统的混淆方式特征陈旧,反而更容易被识别)

    • TCP快速打开(TCP Fast Open, TF)) 需要服务端配合(见下文优化)

    • UDP转发: 必须开启 Shadowsocks 协议本身支持 TCP 和 UDP。开启此选项后,手机上的 UDP 流量(如 DNS 查询、语音通话数据、即时游戏包)会通过 SS 隧道发送。

    • UDP Over TCP (UDP 隧道): 一种“伪装”技术。它把原本的 UDP 数据包强行封装在 TCP 协议里面进行传输。默认关闭,除非 UDP 极度不稳定。该选项开启会带来严重的延迟叠加(TCP 的三次握手和确认机制会显著拖慢 UDP 的实时性)。

    • 代理通过 保持默认的 本地节点

../../../../_images/ss_config.png

备注

最上一层有一个 全局路由 ,保持默认的 配置 就可以: 根据配置文件规则转发流量。

这个设置相当于内置的PAC,也就是国内流量默认直连,只有被GFW屏蔽的网站按照规则通过SS转发给加密VPN通道,这是最高效的一个配置

服务器端TFO优化(TCP快速打开)

  • 在服务器端执行以下命令开启内核的TFO特性:

启用TFO
# 检查内核参数,若为 3 则表示已开启
sysctl net.ipv4.tcp_fastopen
# 若不是,可临时开启:
sysctl -w net.ipv4.tcp_fastopen=3