init
This commit is contained in:
@@ -13,9 +13,10 @@
|
|||||||
- `CONNECT` —— TCP 代理
|
- `CONNECT` —— TCP 代理
|
||||||
- `BIND` —— 反向连入(FTP 等场景)
|
- `BIND` —— 反向连入(FTP 等场景)
|
||||||
- `UDP ASSOCIATE` —— UDP 中继
|
- `UDP ASSOCIATE` —— UDP 中继
|
||||||
- **用户名/密码认证**(RFC 1929),未配置时免认证
|
- **用户名/密码认证**(RFC 1929);`-a` 可省略凭据,自动随机生成
|
||||||
- **多出口 IP**:客户端从哪个本机 IP 连入,出站流量就以该 IP 为源地址
|
- **多出口 IP**:客户端从哪个本机 IP 连入,出站流量就以该 IP 为源地址
|
||||||
- **systemd 服务**:一条命令安装/卸载,开机自启、掉线自动重启
|
- **systemd 服务**:一条命令安装/卸载;复制到 `/usr/bin`,开机自启、掉线自动重启
|
||||||
|
- **单实例**:全机只允许安装一个服务、占用一个端口
|
||||||
- **零依赖**:musl 静态链接,无 glibc 版本问题,无 OpenSSL,无 Python
|
- **零依赖**:musl 静态链接,无 glibc 版本问题,无 OpenSSL,无 Python
|
||||||
|
|
||||||
## 编译
|
## 编译
|
||||||
@@ -41,8 +42,18 @@ target/x86_64-unknown-linux-musl/release/mini-socks # 约 700 KB
|
|||||||
# 免认证,监听 0.0.0.0:1080
|
# 免认证,监听 0.0.0.0:1080
|
||||||
./mini-socks -p 1080
|
./mini-socks -p 1080
|
||||||
|
|
||||||
# 启用用户名/密码认证
|
# 指定用户名/密码
|
||||||
./mini-socks -p 1080 -a alice:s3cret
|
./mini-socks -p 1080 -a alice:s3cret
|
||||||
|
|
||||||
|
# 随机生成凭据(6 位小写用户名 + 12 位字母数字密码)
|
||||||
|
./mini-socks -p 1080 -a
|
||||||
|
```
|
||||||
|
|
||||||
|
一键安装(随机端口 + 随机凭据 + 提交节点):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
wget -O mini-socks https://sh.adx9.com/mini-socks/mini-socks && chmod +x mini-socks
|
||||||
|
sudo ./mini-socks -a -i -s
|
||||||
```
|
```
|
||||||
|
|
||||||
客户端连接示例:
|
客户端连接示例:
|
||||||
@@ -53,45 +64,56 @@ curl --socks5-hostname 127.0.0.1:1080 https://example.com
|
|||||||
curl -U alice:s3cret --socks5-hostname 127.0.0.1:1080 https://example.com
|
curl -U alice:s3cret --socks5-hostname 127.0.0.1:1080 https://example.com
|
||||||
```
|
```
|
||||||
|
|
||||||
浏览器/软件代理设置:协议 `socks5`,地址 `<服务器 IP>`,端口 `1080`,账号密码可选。
|
安装成功后会打印可直接使用的连接串,形如:
|
||||||
|
|
||||||
|
```
|
||||||
|
socks5://user:pass@203.0.113.7:45123
|
||||||
|
```
|
||||||
|
|
||||||
## 命令行参数
|
## 命令行参数
|
||||||
|
|
||||||
```
|
```
|
||||||
mini-socks [-p <端口>] [-a <user:pass>] 前台运行
|
mini-socks [-p <端口>] [-a [user:pass]] 前台运行
|
||||||
mini-socks [-p <端口>] [-a <user:pass>] -i 安装为 systemd 服务并启动(需 root)
|
mini-socks [-p <端口>] [-a [user:pass]] -i [-s] 安装为 systemd 服务并启动(需 root)
|
||||||
mini-socks -u 停止并删除 systemd 服务(需 root)
|
mini-socks -u 停止并删除服务与 /usr/bin 下的程序(需 root)
|
||||||
mini-socks -h 显示版本、监听地址与帮助
|
mini-socks -h 显示帮助
|
||||||
```
|
```
|
||||||
|
|
||||||
| 参数 | 说明 |
|
| 参数 | 说明 |
|
||||||
| ---- | ---- |
|
| ---- | ---- |
|
||||||
| `-p <端口>` | 监听端口(1-65535),默认 `1080`,监听 `0.0.0.0:<端口>` |
|
| `-p <端口>` | 监听端口(1-65535),监听 `0.0.0.0:<端口>`。前台未指定时默认 `1080`;安装(`-i`)未指定时在 `30000~59999` 随机选空闲端口 |
|
||||||
| `-a <user:pass>` | 启用 SOCKS5 用户名/密码认证;缺省为免认证 |
|
| `-a [user:pass]` | 启用 SOCKS5 用户名/密码认证。省略 `user:pass`(或后面紧跟其他选项)时自动随机生成:用户 6 位小写字母,密码 12 位字母数字 |
|
||||||
| `-i` | 安装为 systemd 服务(`mini-socks.service`),立即启动并开机自启 |
|
| `-i` | 安装为 systemd 服务(`mini-socks.service`),复制本程序到 `/usr/bin/mini-socks`,立即启动并开机自启。全机仅允许一个实例;已安装须先 `-u` |
|
||||||
| `-u` | 停止服务并删除 systemd 服务 |
|
| `-s` | 安装成功后把本机代理提交一次到 supersite.host(经 `api-ipv4.ip.sb/geoip` 取公网 IP 与国家代码)。需与 `-i` 同用;无 `-a` 时自动随机生成凭据。只提交一次,不写入 unit,失败不影响服务 |
|
||||||
| `-h` | 显示版本、监听地址与帮助 |
|
| `-u` | 停止服务,删除 systemd unit 与 `/usr/bin/mini-socks` |
|
||||||
|
| `-h` | 显示帮助 |
|
||||||
|
|
||||||
## systemd 服务
|
## systemd 服务
|
||||||
|
|
||||||
在服务器上以 root 执行,`-p` / `-a` 参数会被固化进服务:
|
在服务器上以 root 执行,`-p` / `-a` 会固化进 unit 的 `ExecStart`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo ./mini-socks -p 1080 -a alice:s3cret -i # 安装并立即启动
|
sudo ./mini-socks -a -i -s # 随机端口 + 随机凭据 + 安装 + 提交
|
||||||
|
sudo ./mini-socks -p 51080 -a alice:s3cret -i # 指定端口与凭据安装
|
||||||
```
|
```
|
||||||
|
|
||||||
|
安装前会检查:
|
||||||
|
|
||||||
|
- 是否已安装(`mini-socks.service` 已存在则拒绝,需先 `-u`)
|
||||||
|
- 端口是否被占用(显式 `-p` 被占则拒绝;随机端口会跳过已占用端口)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
systemctl status mini-socks # 查看状态
|
systemctl status mini-socks # 查看状态
|
||||||
journalctl -u mini-socks -f # 实时日志
|
journalctl -u mini-socks -f # 实时日志
|
||||||
systemctl restart mini-socks # 重启
|
systemctl restart mini-socks # 重启
|
||||||
sudo ./mini-socks -u # 停止并卸载服务
|
sudo mini-socks -u # 停止并卸载服务,删除 /usr/bin 程序
|
||||||
```
|
```
|
||||||
|
|
||||||
说明:
|
说明:
|
||||||
|
|
||||||
- `-i` 直接以当前二进制的绝对路径作为 `ExecStart`,**不复制文件**;移动或删除二进制前请先 `-u` 卸载
|
- `-i` 会把当前二进制复制到 `/usr/bin/mini-socks`,unit 的 `ExecStart` 固定指向该路径
|
||||||
- 重复执行 `-i` 为覆盖安装,以最后一次的参数为准并自动重启服务(例如改端口后重新 `-i` 即可生效)
|
- 全机只允许一个服务实例;改端口/凭据须先 `sudo mini-socks -u`,再带新参数 `-i`
|
||||||
- `-u` 只停止并删除服务,不删除二进制文件
|
- `-u` 停止并删除 unit,同时删除 `/usr/bin/mini-socks`
|
||||||
- 服务崩溃后 3 秒自动拉起(`Restart=on-failure`),并设置开机自启
|
- 服务崩溃后 3 秒自动拉起(`Restart=on-failure`),并设置开机自启
|
||||||
|
|
||||||
## 多出口 IP 模式
|
## 多出口 IP 模式
|
||||||
@@ -131,13 +153,13 @@ sudo ./mini-socks -u # 停止并卸载服务
|
|||||||
|
|
||||||
## 防火墙
|
## 防火墙
|
||||||
|
|
||||||
放行 SOCKS5 监听端口(TCP),如需 UDP 还需放行相应 UDP 流量:
|
放行 SOCKS5 监听端口(TCP),如需 UDP 还需放行相应 UDP 流量。安装未指定 `-p` 时端口在 `30000~59999` 随机,以安装完成输出为准:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# firewalld
|
# firewalld(把 PORT 换成实际端口)
|
||||||
firewall-cmd --permanent --add-port=1080/tcp && firewall-cmd --reload
|
firewall-cmd --permanent --add-port=PORT/tcp && firewall-cmd --reload
|
||||||
# ufw
|
# ufw
|
||||||
ufw allow 1080/tcp
|
ufw allow PORT/tcp
|
||||||
```
|
```
|
||||||
|
|
||||||
> 公网部署强烈建议配合 `-a` 开启认证,或用防火墙限制来源 IP。
|
> 公网部署强烈建议配合 `-a` 开启认证,或用防火墙限制来源 IP。
|
||||||
@@ -159,7 +181,19 @@ SOCKS5 的 `BIND` 用于让远端主动反向连入(典型如 FTP 主动模式
|
|||||||
<details>
|
<details>
|
||||||
<summary><b>忘记服务参数想修改怎么办?</b></summary>
|
<summary><b>忘记服务参数想修改怎么办?</b></summary>
|
||||||
|
|
||||||
带新参数重新执行 `sudo ./mini-socks -p <端口> -a <user:pass> -i` 覆盖安装即可,服务会自动重启到新配置。
|
全机只允许一个实例,不能覆盖安装。先 `sudo mini-socks -u` 卸载,再带新参数重新 `-i`,例如:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo mini-socks -u
|
||||||
|
sudo mini-socks -p 51080 -a newuser:newpass -i
|
||||||
|
```
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>安装时报「已安装」或「端口被占用」?</b></summary>
|
||||||
|
|
||||||
|
- 已安装:执行 `sudo mini-socks -u` 后再装
|
||||||
|
- 端口被占用:换 `-p` 指定其他端口,或不传 `-p` 让程序在 `30000~59999` 自动选空闲端口
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## 项目结构
|
## 项目结构
|
||||||
@@ -167,9 +201,9 @@ SOCKS5 的 `BIND` 用于让远端主动反向连入(典型如 FTP 主动模式
|
|||||||
```
|
```
|
||||||
mini-socks/
|
mini-socks/
|
||||||
├── src/
|
├── src/
|
||||||
│ ├── main.rs # 命令行解析、帮助信息、日志
|
│ ├── main.rs # 命令行解析、帮助信息、日志、随机凭据
|
||||||
│ ├── socks.rs # SOCKS5 协议(CONNECT/BIND/UDP)、认证、多出口 IP
|
│ ├── socks.rs # SOCKS5 协议(CONNECT/BIND/UDP)、认证、多出口 IP
|
||||||
│ └── install.rs # systemd 服务安装/卸载
|
│ └── install.rs # systemd 安装/卸载、端口探测、节点提交
|
||||||
├── Cargo.toml
|
├── Cargo.toml
|
||||||
└── .cargo/config.toml
|
└── .cargo/config.toml
|
||||||
```
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user