前两天在网上看到消息,说出现了一款可以合法翻墙的浏览器,叫酷鸟。浏览器加个插件甚至预置插件便利用户跨越中国防火墙这事儿不稀罕,稀罕离奇的是网传的它的前置定语——国内首家合法翻墙。虽说相关的信息后来大多被删除,但事件给我留下的感觉却相当的诡异。其一,中国官方很长时间内并不承认有国家级的防火墙,并且也暧昧的界定翻墙为违法行为,那么翻墙又如何能够“合法”的进行?其二,以中国大陆当下的政经环境,偷偷的打枪已然胆战心惊,可却有人主动戴上高帽就怕别人不晓得它就是下一秒钟要押上戏台被批斗的反革命?其三,消息在网上的“爆款”实在是过快,似乎有明显的人为推动炒作手法,其后又莫明的发生消息被删除、酷鸟被消声……加上网上有人分析指出酷鸟实际带有后门,令我基本确信背后更可能是有关力量想推动数据收集与机器学习,以便不久的将来能够更精准的堆砌奥威尔式柏林墙。
看到有网友把酷鸟等同类浏览工具比喻成官办青楼,我哑然而笑。国进民退自非小民之力可挽回,但工作和生活之中所需却让我觉得必须正视一些可能的前景,官办青楼尚且被临时打烊,遍地私家少年总得自己学会怎么找到相好的吧,况且自己能够随时追新(的版本和获取更多的适时特性)。于是乎,在摸着秋水逸冰宣布离去、不再更新维护的Shadowsocks一键安装包石头的基础上,用一台Bandwagon Host VPS实施了一路艰难的探索,并将建设成就记录下来供狐(同)朋(仁)狗(志)友(士)们参考。
要在中国大陆探索不合法的灯红酒绿场所,靠高(尚)(道)德(导航)是没用的,只能自我寻觅(编译)。考虑到有这类需求的大多都不“拖家带口”,大多在小内存、有资源限制的主机上编译,这里就以圈内向来有着资源友好名声的Debian 8 (Jessie)为例说一下整个编译流程。如此,一旦将来官楼遍地,私以为,狗友们还能艰苦奋斗而自(支)力(犁)更(根)生(盛),让私会莺莺的张生有最新的梯子。
简单说来,这次编译安装Shadowsocks的不便因素一是资源限制,主机内存小、CPU占用不能过高;二是要安装最新版本,必须下载新版源代码自己编译,而非以一键安装包或预安装包形式进行。
采用Debian 8系统,好处是:
- 它目前仍处于“服役期”,且与另一款主流发行版Ubuntu同宗,适用面较宽
- 安装源里用于编译所需的软件较红帽子系的CentOS 6新得多,更好的应付当前的编译需求
- 编译所需的关键依赖包除了Mbed TLS之外,基本上都可由Debian DPA提供,稳定性和资源占用有优势
根据目前仍在持续维护的Shadowsocks-libev的官方说明,编译前需要几个主要的软件包(依赖包),其中最重要的两个分别是libmbedtls、libsodium,后者可通过DEB.SURY.ORG获取,而前者只能手工编译了。
第一步,在干净的Debian 8系统中以管理员身份登录系统,先新增源库并安装必要的软件工具
1 2 3 4 5 6 7 8 9 10 11
| apt-get -y install apt-transport-https lsb-release ca-certificates wget
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
apt-get update
apt-get install -y --no-install-recommends gettext build-essential autoconf libtool libpcre3-dev libev-dev libc-ares-dev automake libsodium-dev
wget -O - https://tls.mbed.org/download/mbedtls-2.16.3-gpl.tgz | tar xvz && cd mbedtls-2.16.3 && make SHARED=1 && make DESTDIR=/usr install && ldconfig
|
第二步,正式安装Shadowsocks-libev
1 2 3 4 5 6 7
| wget -O - https://github.com/shadowsocks/shadowsocks-libev/releases/download/v3.3.3/shadowsocks-libev-3.3.3.tar.gz | tar xvz cd shadowsocks-libev-3.3.3
./configure --disable-documentation
make && make install
|
第三步,进行安装后期工作。这一步涉及到软件的自启动文件、软件的配置文件等,直接借用teddysun的轮子而不从头编写了。因大多低配主机为压低成本,CPU不包含用于高阶加密的AES指令集,Shadowsocks-libev配置文件的加密方式如默认,可采用chacha20-ietf-poly1305,相比于AES系的aes-256-gcm更合适。如已知CPU启用了AES指令集,则加密方式选择“硬解压”的aes-256-gcm在多数情形下更有效率和优势。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| wget -O /etc/init.d/shadowsocks https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-libev-debian && chmod +x /etc/init.d/shadowsocks
mkdir /etc/shadowsocks-libev cat > /etc/shadowsocks-libev/config.json<<-EOF { "server":"0.0.0.0", "server_port":此处填写服务器端的端口号如12345, "password":"此处填写连接用的密码", "timeout":300, "user":"nobody", "method":"此处填写加密方式,比如aes-128-cfb、aes-256-gcm、chacha20-ietf-poly1305等", "fast_open":false, "nameserver":"8.8.8.8", "mode":"tcp_and_udp" } EOF
/etc/init.d/shadowsocks start && /etc/init.d/shadowsocks status
systemctl restart shadowsocks && systemctl status shadowsocks
|
第四步(可选),设定服务器防火墙。Debian 8的用户大多使用UFW或iptables这两款防火墙,使用后者,则建议搭配一个防火墙规则保存软件,以便系统重启后原规则立即生效。这里以iptables为例(完整的配置说明见个人网站iptables的几条简单设置一文),相关命令行如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| apt install -y debconf-utils
debconf-set-selections <<< 'iptables-persistent iptables-persistent/autosave_v4 boolean true' debconf-set-selections <<< 'iptables-persistent iptables-persistent/autosave_v6 boolean true'
apt install iptables iptables-persistent
iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p tcp --dport $(cat /etc/ssh/sshd_config | grep 'Port\ [0-9]\{2,5\}' | cut -d ' ' -f 2) -j ACCEPT iptables -A INPUT -p tcp --dport 12345 -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -P INPUT DROP && iptables -P OUTPUT ACCEPT && iptables -P FORWARD DROP
iptables-save > /etc/iptables/rules.v4 && ip6tables-save > /etc/iptables/rules.v6
|
至此,手工的编译工作结束,试了一下效果,还不错。