随着我国相关法律条款的日益完善,本自乱象丛生的 VPN 市场如今已渐渐被控制,使用传统协议 (IKEIPSecPPTP …) 的科学上网方式也变得更加困难;加上第三方服务商的不透明性,不稳定性,使得第三方科学上网的安全性 (如 MITM …),速度体验让人堪忧…

故本文将详细介绍如何创造一个安全快速的个人科学上网服务环境;涉及服务端的选择,搭建、优化、安全性加强和客户端的选择,以达到更好的科学上网体验;适合有一定知识的 Linux 用户和善于使用搜索引擎的小白阅读…

(仅供参考,请在法律范围内使用该教程,如有违反法律规定,作者概不负责)

VPS 服务商的选择

VPS 服务商的选择将直接影响你的科学上网体验,下面提供一些参考建议,提供商均安全可靠且有一定知名度;在获得一个 VPS 实例之前,你可能需要先注册好相关账号并准备一张具有国际支付功能的信用卡 (Visa、MasterCard …)

  • Google Cloud Computing Engine (推荐)
    需要一个 Google 账号,初次注册可以获得300$有效期为一年的使用卷,最低配置使用一年几乎免费;建议选择 Asia 机房 (IP Location:Mountain View),速度和稳定性极佳,但不支持 IPv6 (不使用负载均衡的情况下)

  • AWS EC2
    需要一个 Amazon 账号,初次注册可以获得一年的 Free Trial 权限,出入站流量各 15GB/月;建议选择 Tokyo 机房 (IP Location:Tokyo),稳定性极佳,速度尚可,支持 IPv6 (需设置 VPC

  • Vultr
    账号注册简易(可以使用 PayPal 付款,无需信用卡),初次注册仅送 50GB Block Storage,但费用廉价;建议选择5$套餐,包括 1TB Bandwidth/月,建议选择 Tokyo 机房 (IP Location::Tokyo),速度一般,稳定性尚可,支持 IPv6

  • Linode
    账号注册简易,初次注册无优惠,费用廉价,建议选择5$套餐,包括 1TB Bandwidth/月,建议选择 Tokyo 机房 (IP Location:Tokyo),速度极佳,稳定性一般 (由于曾经某些人的滥用,导致 IP 极易被 Ban),支持 IPv6

  • Lightsail
    需要一个 Amazon 账号,由 AWS 推出,初次注册无优惠,费用廉价配置一般,建议选择5$套餐,包括 500GB Bandwidth/月,建议选择 Tokyo 机房 (IP Location:Tokyo),速度一般,稳定性极佳,不支持 IPv6

  • Digital Ocean
    账号注册简易,初次注册无优惠,费用廉价,建议选择5$套餐,包括 1TB Bandwidth/月,建议选择 Singapore 机房 (IP Location:Singapore),速度一般,稳定性极佳,支持 IPv6

  • Azure
    需要一个 Microsoft 帐户,初次注册可获得300$有效期为三个月的试用卷;长期使用价格昂贵,建议选择 Japan East/West 机房 (IP Location:Japan),速度和稳定性极佳,支持 IPv6

*云服务平台的质量随时都在变化,以上仅供参考

科学上网服务端搭建

搭建 Shadowsocks-libev 服务器

Q1.为什么使用 Shadowsocks 协议?

相比传统的 VPN (IKE、IPSec、PPTP …),Shadowsocks 协议具有更好的灵活性和隐蔽性,且搭建相对简单,因此可以拥有相对传统 VPN 更快的速度和更高的稳定性;另对比 V2Ray 这种科学上网的集合体,Shadowsocks 在服务端更加轻量,单一协议完善程度更高;在移动端有更丰富的客户端选择,兼容性和灵活性更优。关于 Shadowsocks 的协议特点,原理及弱点的更多讨论,可以在这里稍做了解,本文不对此长篇大论

Q2.为什么使用 Shadowsock-libev 服务端?

相比原版 Shadowsocks (Python),libev (C#) 版本提供了更多的特性支持;而关于ShadowsocksR (Python),Shadowsocks-libev 率先支持 AEAD 加密,并向 ShadowsocksR 学习引进了 ObfsSimple-Obfs,但与前者原理有所不同),且提供稳定的周期性更新;关于未来,ShadowsocksR 更倾向于 none 加密策略,而 Shadowsocks-libev 则倾向于传统的加密策略,两者有不同的侧重点 (ShadowsocksR 更侧重消除特征以避免被检测识别,而 Shadowsocks-libev 则追求更高的安全性),综合起来并无优劣之分

*2017年7月28日,ShadowsocksR团队正式解散

  1. 以 root 权限运行命令

    初次连接到实例,一般需要获取 root 权限 (非 root 用户的情况下),获取方法如下

    1
    2
    3
    4
    sudo passwd root
    # 运行以上命令,重设 root 用户密码
    su
    # 运行以上命令,使用重设后的 root 密码登录
  2. 开始搭建 Shadowsocks-libev 服务端

    自行搭建

  3. 自定义 Shadowsocks-libev 服务端*

    在使用默认的配置安装完毕后,对安装后的配置文件进行编辑,编辑命令如下

    1
    2
    vim /etc/shadowsocks-libev/config.json
    # 运行以上命令,对其安装后的运行参数进行编辑自定义(语法为 json 标准格式)

    参数如下,详见 [Shadowsocks-libev Wiki]( Shadowsocks-libev Wiki “Shadowsocks-libev Wiki”)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    SSLOCAL="[\"[::0]\",\"0.0.0.0\"]"
    # Shadowsocks 的默认监听地址,默认为任何 IPv6 或 IPv4 地址
    PORT="443"
    # Shadowsocks 使用的端口,建议使用 443 (HTTPS)
    LOACL="127.0.0.1"
    # 本地监听地址!
    LOCALPORT="1080"
    # 本地监听端口!
    PASSWORD=""
    # 加密使用的密码,留空将会自动生成,切忌简单密码
    DNS="8.8.8.8"
    # 默认使用 Google Public DNS 服务器
    TIMEOUT="600"
    # 未使用的连接超时自动断开,单位 (s)
    METHOD="chacha20-ietf-poly1305"
    # 加密方式,详见加密*
    OBFS="tls"
    # 混淆方式,详见混淆*
    OBFSHOST="mzstatic.com"
    # 混淆域名,详见混淆*
    WORKERS="1024"
    # 服务使用的线程数,更高的线程数可以提高加解密速度
    FWS="enable"
    # 伪装成网站服务器,避免被检测
    ABB="enable"
    # 利用 fail2ban 自动 Ban 掉向服务器发送恶意数据的 IP
    BBR="enable"
    # 安装 Google-BBR 加速

    完成编辑后需重启 Shadowsocks-libev 应用配置,命令如下

    1
    2
    /etc/init.d/shadowsocks restart
    # 运行以上命令重启通过 Shadowsocks-libev 服务端

    *加密,推荐使用 AEAD 加密,以下是四种 AEAD 加密方式

    1
    2
    3
    4
    aes-128-gcm
    aes-192-gcm
    aes-256-gcm
    chacha20-ietf-poly1305

    以及几种常用的 OTA 加密方式 (OTA 加密一定程度上可以加快加密速度并降低 CPU 使用率,但较前者安全性更低且有明显缺陷)

    1
    2
    3
    rc4-md5
    aes-128-cfb
    aes-128-ctr

    *混淆方式,主要分为 tlshttp 两种,相比 httptls 更具优势,但支持 Shadowsocks-libev 的 tls 混淆客户端较少

    *混淆域名,使用混淆时伪装的域名,一般选择大型企业、流量出入较大、CDN 等未被墙的域名作为混淆域名 (如伪装的特定端口下的 IP 或域名来免流),常用的混淆域名有这些

    1
    2
    3
    4
    5
    6
    7
    cloudfront.com
    cloudflare.com
    itunes.apple.com
    www.icloud.com
    s.mzstatic.com
    ajax.microsoft.com
    apps.bdimg.com

优化

  1. TCP Fast Open

    主要通过第一次 TCP 握手后服务器产生 Cookie 作为后续 TCP 连接的认证信息,客户端通过 TCP 再次连接到服务器时,可以在 SYN 报文携带数据 (RFC793),降低了握手频率,可避免恶意攻击并大幅降低网络延迟 (参考)。下面介绍如何开启这一功能

    1
    2
    3
    4
    echo "net.ipv4.tcp_fastopen = 3" >> /etc/sysctl.conf
    # 运行以上命令,设置 IPv4 下的 TFO 默认为开启状态
    sysctl -e -p
    # 运行以上命令,应用配置
  2. 改善 TCP 拥塞算法

    HTTP 协议在传输层使用 TCP 协议,TCP 丢包重传机制算法的不同会大幅影响科学上网速度;更换 TCP 拥塞算法需要使用命令 vim /etc/sysctl.conf 编辑系统配置文件,并定位到 net.ipv4.tcp_congestion_control = 这一行 (若没有请手动添加),其后接的算法主要有 cubichyblabbr 等,修改完成后使用命令 sysctl -e -p 应用配置;下面是相关算法的简单介绍

    1
    2
    3
    cubic  # 由 bic 算法衍化而来,适用于低丢包率网络
    hybla # 卫星链路使用的算法,适用于高延迟,高丢包率的网络
    bbr # 由 Google 开源的算法,适用于低延迟,较低丢包率的网络 (需要手动配置*)

    *配置 Google BBR

    开始配置 BBR 之前,确保你的内核版本 > 4.8.x (使用命令 uname -a 查看),若低于最低版本,请先更新你的内核 (Ubuntu);若要更新内核,请先使用命令 vim updatekernel.sh 新建脚本,将下面的代码复制粘贴到脚本内并保存

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    KERNELVER="$(wget -qO- http://kernel.ubuntu.com/~kernel-ppa/mainline/ | awk -F'\"v' '/v[4-9]./{print $2}' | cut -d/ -f1 | grep -v -  | sort -V | tail -1)"
    # 获取最新的 Linux Kernel 版本
    SYSTYPE="$(dpkg --print-architecture)"
    # 获取系统平台信息
    [ "$SYSTYPE" = "amd64" ] && KERNEL="$(wget -qO- http://kernel.ubuntu.com/~kernel-ppa/mainline/v${KERNELVER}/ | grep "linux-image" | grep "generic" | awk -F'\">' '/amd64.deb/{print $2}' | cut -d'<' -f1 | head -1)"
    [ "$SYSTYPE" = "i386" ] && KERNEL="$(wget -qO- http://kernel.ubuntu.com/~kernel-ppa/mainline/v${KERNELVER}/ | grep "linux-image" | grep "generic" | awk -F'\">' '/i386.deb/{print $2}' | cut -d'<' -f1 | head -1)"
    [ "$SYSTYPE" = "armhf" ] && KERNEL="$(wget -qO- http://kernel.ubuntu.com/~kernel-ppa/mainline/v${KERNELVER}/ | grep "linux-image" | grep "generic" | awk -F'\">' '/armhf.deb/{print $2}' | cut -d'<' -f1 | head -1)"
    [ "$SYSTYPE" = "arm64" ] && KERNEL="$(wget -qO- http://kernel.ubuntu.com/~kernel-ppa/mainline/v${KERNELVER}/ | grep "linux-image" | grep "generic" | awk -F'\">' '/arm64.deb/{print $2}' | cut -d'<' -f1 | head -1)"
    [ "$SYSTYPE" = "ppc64el" ] && KERNEL="$(wget -qO- http://kernel.ubuntu.com/~kernel-ppa/mainline/v${KERNELVER}/ | grep "linux-image" | grep "generic" | awk -F'\">' '/ppc64el.deb/{print $2}' | cut -d'<' -f1 | head -1)"
    [ "$SYSTYPE" = "s390x" ] && KERNEL="$(wget -qO- http://kernel.ubuntu.com/~kernel-ppa/mainline/v${KERNELVER}/ | grep "linux-image" | grep "generic" | awk -F'\">' '/s390x.deb/{print $2}' | cut -d'<' -f1 | head -1)"
    # 获取对应平台 Kernel 包的文件名
    wget -t 3 -T 30 -nv -O "$KERNEL" "http://kernel.ubuntu.com/~kernel-ppa/mainline/v${KERNELVER}/${KERNEL}"
    # 下载对应的 Kernel
    dpkg -i $KERNEL
    # 安装下载好的 Kernel
    rm -f $KERNEL
    # 清理下载文件
    update-grub
    # 更新启动菜单

    然后使用命令 chmod -x updatekernel.sh && bash updatekernel.sh 给予脚本运行权限并运行脚本来更新内核

    若无需更新内核,则先将拥塞控制算法填写为 bbr,再添加以下代码保存并使用命令 sysctl -e -p 应用

    1
    2
    net.core.default_qdisc = fq
    # 将网络拥塞队列算法设置为性能和延迟最佳的 fq_codel
  3. 内核优化

    使用命令 vim sysctl.conf 编辑并在末尾加入如下代码,对系统进程及内存分配进行优化,保存并使用命令 sysctl -e -p 应用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    fs.file-max = 1024000
    # 系统所有进程一共可以打开的句柄数 (bytes)
    kernel.msgmnb = 65536
    # 进程通讯消息队列的最大字节数 (bytes)
    kernel.msgmax = 65536
    # 进程通讯消息队列单条数据最大的长度 (bytes)
    kernel.shmmax = 68719476736
    # 内核允许的最大共享内存大小 (bytes)
    kernel.shmall = 4294967296
    # 任意时间内系统可以使用的共享内存总量 (bytes)

    使用命令 vim /etc/security/limits.conf 编辑和写入如下代码,限制用户档案的体积大小,提高系统稳定性,完成后保存

    1
    2
    3
    4
    *                soft    nofile           512000
    # 用户档案警告体积大小 (bytes)
    * hard nofile 1024000
    # 用户档案最大体积大小 (bytes)
  4. TCP 的优化

    涉及内核控制,TCP 包大小,TCP 转发,连接超时等优化,代码的简单释义已在其下方注明;使用命令 vim sysctl.conf 编辑并写入如下代码,保存并使用命令 sysctl -e -p 应用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    net.core.rmem_max = 12582912
    # 设置内核接收 Socket 的最大长度 (bytes)
    net.core.wmem_max = 12582912
    # 设置内核发送 Socket 的最大长度 (bytes)
    net.ipv4.tcp_rmem = 10240 87380 12582912
    # 设置 TCP Socket 接收长度的最小值,预留值,最大值 (bytes)
    net.ipv4.tcp_wmem = 10240 87380 12582912
    # 设置 TCP Socket 发送长度的最小值,预留值,最大值 (bytes)
    net.ipv4.ip_forward = 1
    # 开启所有网络设备的 IPv4 流量转发,用于支持 IPv4 的正常访问
    net.ipv4.tcp_syncookies = 1
    # 开启 SYN Cookie,用于防范 SYN 队列溢出后可能收到的攻击
    net.ipv4.tcp_tw_reuse = 1
    # 允许将等待中的 Socket 重新用于新的 TCP 连接,提高 TCP 性能
    net.ipv4.tcp_tw_recycle = 0
    # 禁止将等待中的 Socket 快速回收,提高 TCP 的稳定性
    net.ipv4.tcp_fin_timeout = 30
    # 设置客户端断开 Sockets 连接后 TCP 在 FIN 等待状态的实际 (s),保证性能
    net.ipv4.tcp_keepalive_time = 1200
    # 设置 TCP 发送 keepalive 数据包的频率,影响 TCP 链接保留时间 (s),保证性能
    net.ipv4.tcp_mtu_probing = 1
    # 开启 TCP 层的 MTU 主动探测,提高网络速度
    net.ipv4.conf.all.accept_source_route = 1
    net.ipv4.conf.default.accept_source_route = 1
    # 允许接收 IPv4 环境下带有路由信息的数据包,保证安全性
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv4.conf.default.accept_redirects = 0
    # 拒绝接收来自 IPv4 的 ICMP 重定向消息,保证安全性
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.send_redirects = 0
    net.ipv4.conf.lo.send_redirects = 0
    # 禁止发送在 IPv4 下的 ICMP 重定向消息,保证安全性
    net.ipv4.conf.all.rp_filter = 0
    net.ipv4.conf.default.rp_filter = 0
    net.ipv4.conf.lo.rp_filter = 0
    # 关闭反向路径回溯进行源地址验证 (RFC1812),提高性能
    net.ipv4.icmp_echo_ignore_broadcasts = 1
    # 忽略所有 ICMP ECHO 请求的广播,保证安全性
    net.ipv4.icmp_ignore_bogus_error_responses = 1
    # 忽略违背 RFC1122 标准的伪造广播帧,保证安全性
    net.ipv6.conf.all.accept_source_route = 1
    net.ipv6.conf.default.accept_source_route = 1
    # 允许接收 IPv6 环境下带有路由信息的数据包,保证安全性
    net.ipv6.conf.all.accept_redirects = 0
    net.ipv6.conf.default.accept_redirects = 0
    # 禁止接收来自 IPv6 下的 ICMPv6 重定向消息,保证安全性
    net.ipv6.conf.all.autoconf = 1
    # 开启自动设定本地连接地址,用于支持 IPv6 地址的正常分配
    net.ipv6.conf.all.forwarding = 1
    # 开启所有网络设备的 IPv6 流量转发,用于支持 IPv6 的正常访问
  5. 使用 m2crypto 加速加解密 (Python 服务端)

    1
    2
    3
    4
    apt-get install build-essential python3-dev python-dev python-pip libssl-dev swig
    # 运行以上命令,安装支持库
    pip install m2crypto
    # 运行以上命令,安装 m2crypto
  6. 使用 Kcptun 加速 (会影响 TCP Fast Open 的正常工作,请自行取舍)

    1
    2
    echo "$(dpkg --print-architecture)"
    # 运行以上命令,查看 Linux 硬件版本

    这里获取最新的预编译版本 Kcptun (Go) 下载地址 (注意选择相应的 Linux 系统版本)

    1
    2
    3
    4
    5
    6
    wget [获取的下载地址]
    # 运行以上命令,下载预编译版本 Kcptun
    tar -zxvf [下载后的文件名]
    # 运行以上命令,解压预编译文件
    ./[解压后的文件名] -t "[服务器目标IPv4]:[Kcptun目标端口]" -l ":[Kcptun监听端口]"
    # 运行以上命令启动 Kcptun,具体配置请参考官方 README*

    *kcptun/README 官方文档

安全

  1. Web Server 的伪装 (使用 TCP80 或TCP 443 为端口的 Shadowsocks 服务器效果更佳)

    可以使用 Apache 来构建一个网站服务器,用于隐藏 Shadowsocks 服务器的特征,防止 Shadowsocks 服务器被运营商或防火墙的主动探测发现;使用以下命令配置 Apache 服务器

    1
    2
    3
    4
    apt-get -y install apache2
    # 运行以上命令,安装 Apache 服务
    service apache2 start
    # 运行以上命令,启动 Apache 服务*

    *若在 TCP80 端口开放或 Shadowsocks 已经连接的状况下在浏览器中输入服务器的 IP 并访问,出现 It’s works! 即为成功配置 Apache Server ;关于安全性加强,请参考②封禁恶意访问 IP

    *究其根本,使用较新的 AEAD 流加密更加有效,以上方法仅在某种层面具有一定的效果

  2. 封禁恶意访问 IP

    使用 fail2ban 来阻止恶意的 SSH 和 Apache Web Server 攻击者,主要是解决潜在的用户攻击者 (比如那些有权限连接到你的 Shadowsocks 服务器的设备可能会绕开实例的外部防火墙,因此单纯配置 Firewall 并不是完全有用的);首先使用以下命令安装 fail2ban

    1
    2
    apt-get -y install fail2ban
    # 运行以上命令,安装 fail2ban

    使用命令 vim /etc/fail2ban/jail.local 按情况添加以下部分代码并保存来配置 fail2ban 规则,首先是 SSH 规则代码

    1
    2
    3
    4
    5
    [ssh-iptables]
    enabled = true
    filter = sshd
    action = iptables[name=SSH, port=ssh, protocol=tcp]
    logpath = /var/log/auth.log

    *若开启了 Apache Web Server 伪装,还须添加如下代码保证 Web Server 的安全

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    [apache-tcpwrapper]
    enabled = true
    filter = apache-auth
    action = hostdeny
    logpath = /var/log/httpd/error_log

    [apache-badbots]
    enabled = true
    filter = apache-badbots
    action = iptables-multiport[name=BadBots, pory="http,https"]
    logpath = /var/log/httpd/access_log

    [apache-shorewall]
    enabled = true
    filter = apache-noscript
    action = shorewall
    logpath = /var/log/httpd/error_log

    使用 Shadowsocks 或 ShadowsocksR 自带的 autoban.py 来禁止恶意的 Shadowsocks 攻击 (仅限 Python 服务端,开始前请确保你拥有 Python 环境);首先找到你的 Shadowsocks(R) 安装路径,请使用命令 cd 进入目录和 ls 显示目录下文件或其它方式找到其安装路径,并按照如下步骤安装 Supervisor (用于运行 Autoban)

    1
    2
    apt-get -y install supervisor
    # 安装 Supervisor 任务管理,用于后台运行 autoban.py

    使用命令 vim /etc/supervisor/conf.d/autoban.conf 创建 supervisor 配置文件,输入如下代码并保存

    1
    2
    3
    4
    5
    [program:autoban]
    command=python autoban.py < /var/log/shadowsocks.log
    directory=[Shadowsocks(R) 安装路径]/utils
    autorestart=true
    user=root

    使用如下命令启动 Supervisor 及 Autoban (关于 Autoban 的更多信息请参考这里

    1
    2
    3
    4
    service supervisor start
    # 运行以上命令,启动 Supervisor 服务
    supervisorctl reload
    # 运行以上命令,重加载 Autoban 计划

客户端的选择

以下主要介绍各个平台的 GUI Based 客户端,仅供参考 (Simple-Obfs 为 Shadowsocks-libev 的混淆标准,不支持 Simple-Obfs 并不意味着不支持 ShadowsocksR 的 Obfs-Plugin 混淆标准;此处评价仅从 Shadowsocks-libev 的角度出发,请勿误解)

MacOS

  • ShadowsocksX-NG
    免费且功能强大的客户端,支持 AEAD,Kcptun,UDP,不支持任何混淆或 TCP Fast Open,稳定性一般

  • Surge
    价格昂贵的网络调试工具,支持 AEAD,TCP Fast Open,同时支持 Simple-Obfs 的 http 混淆 (tls 适配中),稳定性极佳

Windows

  • Shadowsocks-windows
    免费易用的官方客户端,支持 AEAD,UDP,TCP Fast Open 还在测试中,但不支持 Simple-Obfs,稳定性极佳

  • Shadowsocks-qt5
    免费易用的跨平台客户端,但目前不支持 AEAD,TCP Fast Open 和 Simple-Obfs,稳定性一般

Linux

  • Shadowsocks-qt5
    免费易用的跨平台客户端,但目前不支持 AEAD,TCP Fast Open 和 Simple-Obfs,稳定性一般

  • Avege
    免费易用的跨平台客户端,主要适配 ShadowsocksR (与 Shadowsocks-libev 兼容),不支持 AEAD,TCP Fast Open 和 Simple-Obfs,稳定性一般

iOS

  • Shadowrocket
    目前最强大的Shadowsocks (R) 付费客户端之一,支持 AEAD,ObfsPlugin,可自定义规则,稳定性一般

  • Potatso 2
    方便易用的付费客户端,支持 AEAD,Obfs-Plugin,UDP可自定义规则,稳定性一般

  • Surge
    昂贵的网络调试工具,支持 AEAD,TCP Fast Open,Simple-Obfs,MitM 可自定义规则,稳定性极佳

Android

  • Shadowsocks
    免费开源的官方客户端,支持 AEAD,TCP Fast Open,Simple-Obfs,Kcptun,UDP,TCP Fast Open (需要 root 权限),功能十分全面,但稳定性一般

OpenWRT

  • OpenWRT-Shadowsocks
    开源的官方客户端,支持 AEAD,TCP Fast Open,Simple-Obfs,UDP;配合 ChinaDNSluci-app-shadowsocks (GUI) 使用 (官方 Wiki,稳定性一般。其中 ChinaDNS,luci-app-shadowsocks 一般可直接在路由器 管理界面>软件 (Software) *中安装,后者依赖两个包 iptablesipset;若有 Shadowsocks-libev 缺失情况,可参照命令安装

*命令安装

这里获取最新预编译 .ipk 地址,使用 Telnet 或 SSH 连接到你的路由,使用以下命令进行安装

1
2
3
4
5
6
opkg install wget
# 运行以上命令安装 wget 服务,用于下载 .ipk 到路由器
wget [获取的.ipk地址]
# 运行以上命令下载 .ipk 到路由;下载前应注意路由器 CPU 型号,确保选择了正确的 .ipk
dpkg -i [下载后的.ipk路径或名称]
# 运行以上命令安装客户端

写在最后

引用一句 clowwindy 的话:

往往不需要政府造墙,网民也会自发造墙