shadowsocks build with asyncio , also support many user in one port
Project description
aioshadowsocks
用 asyncio 重写 shadowsocks
视频安装教程
使用
- 安装
pip install aioshadowsocks
- 多用户配置
aioshadowsocks 将json作为配置文件, 会读取当前目录下 userconfigs.json 作为默认的配置文件
{
"users": [
{
"user_id": 1,
"port": 2345,
"method": "none",
"password": "hellotheworld1",
"transfer": 104857600,
"speed_limit": 0
},
{
"user_id": 2,
"port": 2346,
"method": "chacha20-ietf-poly1305",
"password": "hellotheworld2",
"transfer": 104857600,
"speed_limit": 384000
}
]
}
同时也支持从http服务器读取配置文件,这时需要注入环境变量 SS_API_ENDPOINT 作为读取配置的api地址
- 注入环境变量
export SS_API_ENDPOINT="https://xxx/com"
- 启动ss服务器
aioss run_ss_server
Docker Version
- install docker
curl -sSL https://get.docker.com/ | sh
- install docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- apply executable permissions
sudo chmod +x /usr/local/bin/docker-compose
- run server
docker-compose up
为什么要重写shadowsocks
主要想通过这个项目的推进来深入了解 asyncio
另外我的一个项目: django-sspanel 依赖 shadowsocksr
但该项目已经停止开发了,所以决定重新造个轮子
主要功能
- tcp/udp 代理
- 流量统计
- 速率控制
- 开放了grpc接口(类似ss-manager)
- 单端口多用户(利用AEAD加密在不破坏协议的情况下实现)
- prometheus/grafana metrics监控 (dashboard在项目的static/grafana/文件夹下)
监控dashboard
性能测试
Shadowsocks本身是一个IO密集行的应用,但是由于加入了AEAD加密,使得SS本身变成了CPU密集行的应用 而Python本身是不太适合CPU密集的场景的,所以在AEAD模式中的表现不佳 PS: 当然,其实是我代码写的烂,python不背锅
- Steam-Cipher-None(不加密 高IO)
- AEAD-Cipher-CHACHA-20(加密 高CPU)
rpc proto
syntax = "proto3";
package aioshadowsocks;
// REQ
message UserIdReq { int32 user_id = 1; }
message PortReq { int32 port = 1; }
message UserReq {
int32 user_id = 1;
int32 port = 2;
string method = 3;
string password = 4;
bool enable = 5;
}
// RES
message Empty {}
message User {
int32 user_id = 1;
int32 port = 2;
string method = 3;
string password = 4;
bool enable = 5;
int32 speed_limit = 6;
int32 access_order = 7;
bool need_sync = 8;
repeated string ip_list = 9;
int32 tcp_conn_num = 10;
int64 upload_traffic = 11;
int64 download_traffic = 12;
}
// service
service ss {
rpc CreateUser(UserReq) returns (User) {}
rpc UpdateUser(UserReq) returns (User) {}
rpc GetUser(UserIdReq) returns (User) {}
rpc DeleteUser(UserIdReq) returns (Empty) {}
}
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aioshadowsocks-0.1.8.tar.gz.
File metadata
- Download URL: aioshadowsocks-0.1.8.tar.gz
- Upload date:
- Size: 38.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.8 CPython/3.9.2 Darwin/21.1.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
44ec1f43edbc60895cb8169b1a0fede0763d2ffd77e94255506e55da1f7dfdba
|
|
| MD5 |
42cdc310b034fecc8f25a776dd3b6c15
|
|
| BLAKE2b-256 |
c730f74829a7aef3dc0f67e3ca2eace1f7dec0cb7231464e98af52cb1750c0ea
|
File details
Details for the file aioshadowsocks-0.1.8-py3-none-any.whl.
File metadata
- Download URL: aioshadowsocks-0.1.8-py3-none-any.whl
- Upload date:
- Size: 53.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.8 CPython/3.9.2 Darwin/21.1.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
62cdaef404036dae333f29101c2e2c4d66306748b5b35b535e124eb13089e91e
|
|
| MD5 |
4b555e2c731ccbfdfd0a80a960ef5105
|
|
| BLAKE2b-256 |
89ee84002d857646c7ec7a13aef53c9591f6438c67f287f79e43c0cb7e79cc6f
|