梅林固件 插件安装方法

cd /tmp
wget --no-check-certificate --timeout=15 https://raw.githubusercontent.com/koolshare/koolshare.github.io/acelan_softcenter_ui/shadowsocks/shadowsocks.tar.gz
tar -zxvf /tmp/shadowsocks.tar.gz
chmod +x /tmp/shadowsocks/install.sh
sh /tmp/shadowsocks/install.sh

https://github.com/koolshare/koolshare.github.io/tree/acelan_softcenter_ui/shadowsocks/history

如果你需要更新历史版本,这里以 4.1.3版本为例:(需要更新其它版本,只需要自行更改版本号,所有历史版本存档目录:https://github.com/koolshare/koolshare.github.io/tree/acelan_softcenter_ui/shadowsocks/history)

cd /tmp
wget --no-check-certificate https://github.com/hq450/fancyss_history_package/raw/master/fancyss_arm/shadowsocks_4.1.3.tar.gz
mv shadowsocks_4.1.3.tar.gz shadowsocks.tar.gz
tar -zxvf /tmp/shadowsocks.tar.gz
chmod +x /tmp/shadowsocks/install.sh
sh /tmp/shadowsocks/install.sh
  • 加密,推荐使用 AEAD 加密,以下是四种 AEAD 加密方式
aes-128-gcm
aes-192-gcm
aes-256-gcm
chacha20-ietf-poly1305
  • 混淆方式,主要分为 tls、http 两种,相比 http,tls 更具优势,但支持 Shadowsocks-libev 的 tls 混淆客户端较少
  • *混淆域名,使用混淆时伪装的域名,一般选择大型企业、流量出入较大、CDN 等未被墙的域名作为混淆域名 (如伪装的特定端口下的 IP 或域名来免流),常用的混淆域名有这些
cloudfront.com
cloudflare.com
itunes.apple.com
www.icloud.com
s.mzstatic.com
ajax.microsoft.com
apps.bdimg.com

优化

  • TCP Fast Open
    主要通过第一次 TCP 握手后服务器产生 Cookie 作为后续 TCP 连接的认证信息,客户端通过 TCP 再次连接到服务器时,可以在 SYN 报文携带数据 (RFC793),降低了握手频率,可避免恶意攻击并大幅降低网络延迟 (参考)。下面介绍如何开启这一功能
echo "net.ipv4.tcp_fastopen = 3" >> /etc/sysctl.conf
# 运行以上命令,设置 IPv4 下的 TFO 默认为开启状态
sysctl -e -p
# 运行以上命令,应用配置
  • 改善 TCP 拥塞算法
    HTTP 协议在传输层使用 TCP 协议,TCP 丢包重传机制算法的不同会大幅影响科学上网速度;更换 TCP 拥塞算法需要使用命令 nano /etc/sysctl.conf 编辑系统配置文件,并定位到 net.ipv4.tcp_congestion_control = 这一行 (若没有请手动添加),其后接的算法主要有 cubic、hybla、bbr 等,修改完成后使用命令 sysctl -e -p 应用配置;下面是相关算法的简单介绍
cubic  # 由 bic 算法衍化而来,适用于低丢包率网络
hybla  # 卫星链路使用的算法,适用于高延迟,高丢包率的网络
bbr    # 由 Google 开源的算法,适用于低延迟,较低丢包率的网络 (需要手动配置*)
  • 配置 Google BBR

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

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 应用

net.core.default_qdisc = fq
将网络拥塞队列算法设置为性能和延迟最佳的 fq_codel

  • 内核优化
    使用命令 nano sysctl.conf 编辑并在末尾加入如下代码,对系统进程及内存分配进行优化,保存并使用命令 sysctl -e -p 应用
fs.file-max = 1024000
# 系统所有进程一共可以打开的句柄数 (bytes)
kernel.msgmnb = 65536
# 进程通讯消息队列的最大字节数 (bytes)
kernel.msgmax = 65536
# 进程通讯消息队列单条数据最大的长度 (bytes)
kernel.shmmax = 68719476736
# 内核允许的最大共享内存大小 (bytes)
kernel.shmall = 4294967296
# 任意时间内系统可以使用的共享内存总量 (bytes)

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

*                soft    nofile           512000
# 用户档案警告体积大小 (bytes)
*                hard    nofile          1024000
# 用户档案最大体积大小 (bytes)
  • TCP 的各种优化
    涉及内核控制,TCP 包大小,TCP 转发,连接超时等优化,代码的简单释义已在其下方注明;使用命令 nano sysctl.conf 编辑并写入如下代码,保存并使用命令 sysctl -e -p 应用
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 的正常访问

Shadowsocks-libev 服务端 一键盘部署

sudo wget https://raw.githubusercontent.com/Unbinilium/Twist/master/twist -O twist.sh && chmod -x twist.sh
# 运行以上命令,下载自动脚本 (shell) 并赋予权限
bash twist.sh
# 运行以上命令,开始搭建服务端;若需自定义*,在运行这条命令之前请先参照下方说明③
nano twist.sh
# 运行以上命令进行编辑自定义参数
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 加速,详见优化

fs.file-max = 51200
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.netdev_max_backlog = 250000
net.core.somaxconn = 4096
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_mem = 25600 51200 102400
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mtu_probing = 1
net.core.default_qdisc=fq