如今我这样科学上网

Unbinilium
Jul 22, 2017 · 31 min read

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

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

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

VPS服务商的选择

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

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

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

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

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

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

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

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

科学上网服务端搭建

❶建立实例

在确定好你所选择的服务商后,你需要建立一个用于提供科学上网服务的实例。建立实例时尽量按照自己的需求来选择实例配置,一般情况下共享的1vCPU和1GB内存就足够了;另外需要注意一下几点,以确保你能够正常连接并使用你的实例

①实例的出入站规则(Firewall)

入站规则:

TCP 22 Your IP
#默认的SSH端口,用于连接到你的实例,应允许你的IP可以访问
TCP [443] Anywhere* or Your IP
#这里是Shadowsocks使用的端口,推荐使用443(HTTPS),应确保任意IP或你自己的IP有访问权限
UDP [443] Anywhere* or Your IP
#若开启Shadowsocks的UDP转发,请开启此端口,此端口配置应与其TCP的端口号和访问权限相同

出站规则:

All Traffic Anywhere*
#允许你的实例向任何IP发送流量,保证可以正常访问网络

*此处的Anywhere通常会显示为0.0.0.0/0;::/0

②实例的系统类型

使用Linux;如UbuntuDebian…建议使用Ubuntu 15.x-17.x,较新的发行版系统可以获得更多的特性支持及更好的安全性

③实例的网络设置,IP及连接方式

为了实例的安全性,建议开启实例的Private Network(如果有);确定实例至少拥有一个Public IPv4地址,并开启IPv6支持(若有需要);连接到实例需要使用SSH,应查看实例的IP和用户名,密码或密钥(需要下载),并将其妥善保管

❷连接到实例

  • MacOS&Linux

使用自带的Terminal进行连接

ssh -i [YourCert.pem] [Username]@[ServerIP]
#通过密钥+用户名+IP进行连接,YoutCert.pem若不在执行目录下需要标明路径
ssh [ServerIP]
#通过密码+用户名+IP进行连接,按照提示输入用户名的密码
  • Windows

使用PuTTY进行连接,若是.pem为后缀的密钥验证,需用PuTTYgen转换为.ppk为后缀的密钥才可以连接,详见AWS提供的文档

  • iOS&Android

使用SSH第三方客户端进行登录,如Prompt2Termius(支持多平台且免费)等

❸搭建Shadowsocks-libev服务器

Q1.为什么使用Shadowsocks协议?

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

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

相比原版Shadowsocks,libev(c#)版本提供了更多的特性支持;而关于ShadowsocksR(Python),Shadowsocks-libev率先支持AEAD Cipher,并向ShadowsocksR学习引进了Obfs(Simple-Obfs),且提供稳定的周期性更新;长远来看,ShadowsocksR更倾向于向none加密化和Obfs化发展,而Shadowsocks-libev则倾向于向强化Cipher的方向发展,两者有不同的侧重点。简单来说,ShadowsocksR更侧重消除特征以更好穿过GFW,而Shadowsocks-libev则追求更高的安全性,综合起来并无优劣之分

①以root权限运行命令

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

sudo passwd root
#运行以上命令,重设root用户密码
su
#运行以上命令,使用重设后的root密码登录

②开始搭建Shadowsocks-libev服务端

可以选择使用笔者写的Script(Twist)进行搭建或自行搭建(可参考❻疑难解答的Q8回答*),这里主要介绍前者

sudo wget https://raw.githubusercontent.com/Unbinilium/Twist/master/twist -O twist.sh && chmod -x twist.sh
#运行以上命令,下载自动脚本(shell)并赋予权限
bash twist.sh
#运行以上命令,开始搭建服务端;若需自定义*,在运行这条命令之前请先参照下方说明③

③自定义Shadowsocks-libev服务端*

若在安装之前,可以先直接编辑下载后的twist.sh后再安装,编辑命令如下

nano twist.sh
#运行以上命令进行编辑

在编辑界面定位到function shadowsocksconfig(){以下至}前的内容,编辑""内的参数,下面是关于参数的简单介绍(说明中未标出及说明后面带有"!"号的是不建议修改的参数)

SSLOCAL="[\"[::0]\",\"0.0.0.0\"]"
#Shadowsocks的默认监听地址,默认为任何IPv6或IPv4地址
PORT="443"
#Shadowsocks使用的端口,建议使用443(HTTPS)
LOACL="127.0.0.1"
#本地监听地址!
LOCALPORT="1080"
#本地监听端口!
PASSWORD=""
#加密使用的密码,留空将会自动生成,切忌简单密码
TIMEOUT="600"
#未使用的连接超时自动断开,单位(s)
METHOD="chacha20-ietf-poly1305"
#加密方式,详见加密*
OBFS="tls"
#混淆方式,详见混淆*
OBFSHOST="github.com"
#混淆域名,详见混淆*
WORKERS="1024"
#服务使用的线程数,更高的线程数可以提高加解密速度
FWS="enable"
#伪装成网站服务器,避免被检测
ABB="enable"
#利用fail2ban自动Ban掉向服务器发送恶意数据的IP
BBR="enable"
#是否安装Google-BBR加速,详见优化❹*

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

twist custom
#运行以上命令,对""内的参数进行编辑

其中大部分参数与twish.sh中的自定义参数含义相同,详见Shadowsocks-libev Wiki,完成编辑后需重启Shadowsocks-libev应用配置,命令如下

twist restart
#运行以上命令重启通过Twist搭建的Shadowsocks-libev服务端

*加密,以下是四种常见的AEAD Cipher,相较OTA Cipher而言AEAD Cipher极大降低了被主动探测的风险,故推荐使用AEAD Cipher

aes-128-gcm
aes-192-gcm
aes-256-gcm
chacha20-ietf-poly1305

以及几种常用的OTA Cipher方式

rc4-md5
aes-128-cfb
aes-128-ctr

关于AEAD Cipher的选择,需要注意的是,虽然ARM早在2015就收购了Shadowsocks-libev依赖的加密库之一mbed tls,但至今mbed tls并未对ARMv8做出实质性的优化,导致AES GCM系Cipher在较新的64位移动设备上性能低下。相关的几种Cipher测试数据如下(From Blankwonder)

AEAD&OTA Cipher performance test

*混淆方式,主要分为tls,http两种,相比httptls更具隐蔽性

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

cloudfront.com
cloudflare.com
itunes.apple.com
www.icloud.com
ajax.microsoft.com
apps.bdimg.com

❹优化*(使用Twist脚本搭建不需要进行①-④步,已自动完成优化;主要面向ShadowsocksR和其它Shadowsocks版本的用户)

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_rmem = 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的正常访问

⑤使用m2crypto加速加解密(Python服务端)

apt-get install build-essential python3-dev python-dev python-pip libssl-dev swig
#运行以上命令,安装支持库
pip install m2crypto
#运行以上命令,安装m2crypto

⑥使用Kcptun加速(会影响TCP Fast Open的正常工作,请自行取舍)

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

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

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

*kcptun/README

❺安全*(使用Twist脚本搭建不需要进行配置,部分内容已自动完成配置;主要面向ShadowsocksR和其它Shadowsocks版本的用户)

①Web Server的伪装(使用TCP80或TCP443为端口的Shadowsocks服务器效果更佳)

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

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

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

②封禁恶意访问IP

⒈使用fail2ban来阻止恶意的SSH和Apache Web Server攻击者,主要是解决潜在的用户攻击者(那些有权限连接到你的Shadowsocks的人,因此配置Firewall并不是完全有用的);首先使用以下命令安装fail2ban

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

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

[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
logpath = /var/log/secure

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

[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)安装路径,请自行或使用其它方式找到其安装路径,并按照如下步骤安装Supervisor并自动运行autoban.py

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

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

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

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

service supervisor start
#运行以上命令,启动Supervisor服务
supervisorctl reload
#运行以上命令,重加载autoban计划

❻疑难解答

若在安装或优化过程中遇到问题,请先根据提示使用搜索引擎查找;若寻觅无果,可在开源项目的issues中寻找,所使用的开源项目有:Shadowsocks-libevsimple-obfsmbedtlslibsodiumTwist等…也可以在评论中讨论,在下为一只高三的学生狗,不一定有能力或有时间为大家解答,请理解下面则针对一些常见问题进行说明

Q1.如何确定我是否成功更新了内核?

运行命令dpkg -l | grep linux-image显示当前已经安装的内核

Q2.如何确定是否成功开启了BBR加速?

运行命令lsmod | grep bbr后若显示内容中有tcp_bbr则为开启成功

Q3.使用ping6 google.com返回network is unreachable怎么解决?

首先确定你的实例至少拥有一个v6的PubilcIP,再执行以下步骤

ip link
#运行以上命令,查看当前活动的网络设备
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
#运行以上命令,开启全部IPv6转发
echo "net.ipv6.conf.[附着有PublicIP的网络设备名称*].accept_ra = 2" >> /etc/sysctl.conf
#运行以上命令,开启附着有PublicIP的网络设备的IPv6路由广播
sysctl -e -p
#运行以上命令应用配置

*附着有PublicIP的网络设备名称一般为eth0,eth+,ens3,ens+,

Q4.使用AWS EC2如何向实例附着一个IPv6地址?

请参照AWS的官方文档设置VPC(须有一定的英语基础)

Q5.关闭Twist的FWS功能搭建后或使用其它版本的Shadowsocks时Obfs发生端口冲突怎么办?

通过使用nano [配置文件路径]命令编辑配置文件来解决问题(使用Twist搭建的配置文件路径为/etc/shadowsocks-libev/config.json,使用其它脚本搭建的服务端请在README.md中寻找相关信息)

1.通过修改"server_port":,这一行的端口号(1-65535)改变端口并重启服务端*

2.通过把"plugin_opts":"",这一行中的obfs-host改为failover来改变Obfs工作方式来解决问题;若这一行中无obfs-host则向其中添加failover即可(注意使用;号将参数分隔);最后请重启服务端*(仅限Shadowsocks(libev)用户)

*重启服务端:由于不同的脚本搭建的服务端重启方式不同,若服务端支持自动启动,则直接执行命令reboot重启实例更为简单;或请参考搭建时所用脚本的README.md自行重启

Q6.使用fail2ban或autoban.py不小心Ban了自己怎么办?

首先SSH连接到你的服务器(如果SSH被Ban的话需要更换一个没被Ban的IP),然后使用以下命令移除被Ban的IP

iptables -L
#运行以上命令,显示所有的iptables规则,并找到你要解Ban的chain-name和IP
iptables -D [被BanIP的chain-name] [被Ban的IP] -j REJECT
#手动补充运行以上命令,解除屏蔽

Q7.我如何确认Supervisor的autoban.py任务已经成功运行?

运行命令supervisorctl tail -f autoban stderr查看Supervisor的日志,若无报错即为成功运行

Q8.Shadowsocks有哪些进阶使用?(请合法使用)

1.使用ss-panelshadowsocks-manager进行Web管理界面配置并接入支付宝商家API可以实现提供付费服务从用户获利

2.使用obfs来通过将自己的网络流量伪装成一些特殊域名或IP的请求以绕开运营商或防火墙的监视及封锁(原版Shadowsocks及其libev分支可能需要自行配置simple-obfs)

3.使用HAproxy转发Shadowsocks服务器流量以隐藏主服务器的真实IP

4.使用ShadowDNS将Shadowsocks服务器用于转发DNS解析

Q9.我如何安装其它版本的Shadowsocks?

使用Github寻找搭建脚本(如Teddysun写的全版本搭建脚本),按照README或Wiki自行搭建

Q10.使用Twist脚本配置的服务端如何更新或卸载?

bash twist.sh update
#在twist.sh所在目录运行这条命令获取更新
bash twist.sh uninstall
#在twist.sh所在目录运行这条命令卸载服务

客户端的选择

以下主要介绍各个平台的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混淆,稳定性极佳

  • 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

A.BIG.T

十分强大的付费客户端,支持AEAD,Kcptun,Domain TLS,Obfs-Plugin,可自定义规则,稳定性一般

Potatso 2 & Potatso Lite

方便易用的付费客户端,支持AEAD,Obfs-Plugin,可自定义规则,稳定性一般(官方Manual)

Surge

昂贵的网络调试工具,支持AEAD,TCP Fast Open,Simple-Obfs,可自定义,稳定性极佳(官方Manual)

  • Android

Shadowsocks

强大的官方客户端,支持AEAD,TCP Fast Open,Obfs,Kcptun,稳定性一般

  • OpenWRT

OpenWRT-Shadowsocks(Windows Mobile,ChromeOS的科学上网方式)

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

*命令安装

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

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

写在最后

撰写这篇文章仅为了分享一下自己的一些经验,希望对有需要的人有所帮助;投笔颇少,顺手写完,表达上的不准确,内容上的不完整和逻辑上的不清晰还请谅解,如有错误欢迎指正;使用科学上网的同时,也应该明确科学上网的真正意义,以及明白为什么会有GFW的原因,许多时候我们并没有属于自己的思考,一并打着“闭关锁国”口号的推墙分子又是如何?墙不在了我们的生活会变得更好吗?这些都是我们没有能力回答的问题,即便有所经历,拿一些事实来分析也往往会断章取义,故希望大家可以理智对待GFW存在的事实以及今后科学上网所要面临的种种困难;最后再引用一句clowwindy的话:

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

Unbinilium

Written by

~\(≧▽≦)/~

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade