menu Chancel's blog
rss_feed
Chancel's blog
有善始者实繁,能克终者盖寡。

使用Shadowsocks-libev实现网络隧道

作者:Chancel Yang, 创建:2022-02-01, 字数:2084, 已阅:93, 最后更新:2022-02-01

这篇文章更新于 805 天前,文中部分信息可能失效,请自行甄别无效内容。

Shadowsocks作为网络隧道部署在公司,在项目紧急时快速使用公司的网络环境来开发调试非常翻遍

网上大部分资料都是使用pip的第三方包来安装Shadowsocks服务端

Bash
pip3 install shadowsocks

在使用Linux作为主力机开发的情况下,运行方式非常不优雅

Bash
/home/chancel/.local/bin/sslocal -c /etc/shadowsocks/shadowsocks.json

如果碰巧还做Python开发的话,Pyenv的全局版本管理也很容易遇到sslocal无法启动的问题

还有烦人的旧版本openssl.py兼容性问题(此问题通过修改openssl.py替换cleanup为reset即可解决)

Bash
AttributeError: /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup

如果采用Shadowsocks-libev二进制部署,则没有这么多烦恼,运行也优雅许多

下面以Ubuntu1804安装服务端,Manjaro安装客户端安装作为示例

首先是Ubuntu1804安装Shadowsocks-libev

Bash
sudo apt install shadowsocks-libev

Ubuntu1804的配置文件如下

Bash
sudo cat /etc/shadowsocks-server.json

# 输出如下
{
        "server_port": 42938,
        "password": "8796be9677fbcd806624e9481179f131",
        "method": "rc4-md5",
        "timeout":300,
        "fast_open":false
}

其运行方法如下

Bash
/usr/bin/ss-server -c /etc/shadowsocks-server.json

后台守护进程安装配置文件(可选)

INI
[program:shadowsocks-server]
command=/usr/bin/ss-server -c /etc/shadowsocks-server.json
stopsignal=INT
autostart=true
autorestart=true
startsecs=3
stderr_logfile=/var/log/supervisor/shadowsocks-server-stdout.log
stdout_logfile=/var/log/supervisor/shadowsocks-server-stderr.log
user=apps

接下来开始安装客户端

Manjaro客户端安装Shadowsocks-libev与服务端无异,都是从仓库安装

Bash
sudo pacman -S shadowsocks-libev

Manjaro客户端配置文件如下

Bash
sudo cat /etc/shadowsocks-client.json

# 输出如下
{
        "server": "103.103.103.103",
        "local_address": "0.0.0.0",
        "local_port": 1080,
        "workers": 4,
        "server_port": 42938,
        "password": "8796be9677fbcd806624e9481179f131",
        "method": "rc4-md5"
}

客户端运行方法如下

Bash
/usr/bin/ss-local -c /etc/shadowsocks-client.json

后台守护进程安装配置文件(可选)

INI
[program:shadowsocks-client]
command=/usr/bin/ss-local -c /etc/shadowsocks/shadowsocks-client.json
stopsignal=INT
autostart=true
autorestart=true
startsecs=3
stderr_logfile=/var/log/supervisor/shadowsocks-client-stdout.log
stdout_logfile=/var/log/supervisor/shadowsocks-client-stderr.log
user=apps

[[replyMessage== null?"发表评论":"发表评论 @ " + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageResponse.total]])

还没有可以显示的留言...
[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[getEnviron(messageItem.m_environ)]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[getEnviron(messageItem.m_environ)]]