搭建shadowsocks服务
前言
由于国内恶劣的网络环境,作为一名频繁访问外网的Web开发者,不得不自建一个VPN服务,以下简单介绍Shadowsocks的搭建过程。
单纯的ss流量会迅速被gfw识别到并屏蔽,因此使用ss时需要增加obfs用以混淆欺骗gfw,可以极大程度减小被屏蔽的风险。当然,如果你用的是比较出名的服务器供应商,如bandwagon的服务器,那么被屏蔽的机会也很大。
服务端使用的一键安装脚本twist由于开发者已经放弃维护长时间,目前只有参考作用,如果你有耐心,也可以自己修改后再使用,也就跟下面的服务端搭建教程一样。搞完是真的累,太渣了,太需要提高自己的编程水平,写一个一体化的软件包才行
服务端
twist脚本
服务端使用的是twist脚本,里面集成了Shadowsocks+simple-obfs+fail2ban以及相关依赖包,使用shell编写,感兴趣的可以看看源代码,下载地址如下
| 1 | https://github.com/forestbat/Twist | 
下载后,脚本添加执行权限
| 1 | chmod +x twist | 
切换到root账户,twist执行需要
| 1 | su - root | 
修改twist
twist文件里面有一些软件需要删掉/更换,有些则需要手动安装,先手动执行一遍twist脚本./twist install,确认有哪些错误,然后选择执行下面的命令
- 修改dependenciesinstall函数
| 1 | # 不同的系统不一样,不要全改 | 
- 修改sslibevinstall函数
| 1 | # github的包命名改了,解压后变成了libsodium-stable | 
或者删掉libsodium这段,直接手动编译安装,如下
| 1 | wget https://github.com/jedisct1/libsodium/releases/download/1.0.19-RELEASE/libsodium-1.0.19.tar.gz | 
- 修改sslibevinstall函数
| 1 | # 在 tar zxf ${ssobfsver}.tar.gz 这一行后面修改添加代码,因为obfs也有很长时间没有更新,导致在新的编译器下报错 | 
- 修改sslibevinstallerr、sslibevinstall函数
| 1 | # sslibevinstallerr函数如下 | 
安装完毕
执行修改后的twist脚本
| 1 | ./twist install | 
如果twist安装成功,此时命令行下将会展示ss服务的二维码以及url,手机端可以用小火箭扫描,桌面端可以复制url导入
客户端
安装软件
| 1 | # obfs混淆ss流量;privoxy将http流量转换为socks5流量 | 
ss配置
修改ss配置,配置文件可以是/etc/shadowsocks-libev/config.json,也可以是/etc/shadowsocks-libev/config-obfs.json
| 1 | sudo vi /etc/shadowsocks-libev/config.json | 
按下方模板配置:
| 1 | { | 
执行下面的命令,确认软件可正常运行
| 1 | # 查看输出确认无异常报错 | 
修改systemd配置文件
| 1 | sudo vi /usr/lib/systemd/system/shadowsocks-libev.service | 
将ss-server改为ss-local,因为我们修改的是shadowsocks-libev.service,配置文件就是config.json,这里就不需要再修改什么
| 1 | # This file is part of shadowsocks-libev. | 
重启ss服务
| 1 | sudo systemctl daemon-reload | 
privoxy配置
修改配置文件/etc/privoxy/config
| 1 | sudo vi /etc/privoxy/config | 
修改listen-address,因为有时我会将地址共享出来给局域网其他设备使用,所以我一般会将127.0.0.1改为0.0.0.0。在末尾添加forward-socks5指令,将所有http流量转发到1080端口
| 1 | listen-address 0.0.0.0:8118 | 
重启privoxy服务
| 1 | sudo systemctl restart privoxy | 
防火墙开放8118端口访问(可选,如果没有打算给局域网内的其他机器使用就不要打开)
| 1 | sudo ufw allow 8118/tcp | 
最后验证
配置环境变量http_proxy以及https_proxy,访问外网地址,只要有html数据流输出即可
| 1 | export http_proxy=http://127.0.0.1:8118;export https_proxy=http://127.0.0.1:8118; | 
参考文档
Twist脚本github地址
Debian11下编译安装Shadowsocks-libev
Linux中使用ShadowSocks+Privoxy代理