clash-node
v0.0.1
Published
A Node.js CLI proxy tool similar to Clash
Maintainers
Readme
clash-node
一个基于 Node.js 的命令行代理工具,类似于 Clash,支持多种代理协议和智能分流规则。
功能特性
- 🚀 多协议支持:HTTP/HTTPS、SOCKS5
- 🔄 智能分流:基于域名、IP、GeoIP 的规则引擎
- 📡 订阅管理:支持 Clash 的订阅格式
- 🖥️ 系统代理:自动配置 MacOS/Windows 系统代理
- 🔍 节点测试:延迟测试和健康检查
- 🛡️ 规则自定义:支持自定义分流规则
系统要求
- Node.js >= 16.0.0
- macOS / Windows
使用
安装依赖
# npm
npm i clash-node -g
# yarn
yarn global add clash-node
# pnpm
pnpm add clash-node -g启动代理服务
# 使用默认配置启动(默认端口 7890)
cn start
# 指定端口启动
cn start -p 7890 -s 78912. 管理订阅
# 添加订阅
cn list -a https://example.com/clash-config
# 列出所有订阅
cn list
# 更新订阅
cn update
# 删除订阅
cn subscription -d subscription-name3. 管理节点
# 列出所有节点
cn node -l
# 选择节点
cn node -s "Node Name"
# 测试节点延迟
cn node -t
# 自动选择最快节点
cn node -a4. 系统代理设置
# 查看代理状态
cn proxy --status
# 启用系统代理
cn proxy --enable
# 禁用系统代理
cn proxy --disable
5. 查看服务状态
cn status高级用法
自定义配置文件
# 使用自定义配置文件
cn start -c /path/to/config.yaml配置文件
默认配置文件位于 ./config/config.yaml,支持以下配置:
# 代理端口
port: 7890
socks-port: 7891
# 允许局域网连接
allow-lan: false
# 代理模式:rule | global | direct
mode: rule
# 日志级别
log-level: info
# 外部控制器
external-controller: 127.0.0.1:9090
# 代理节点
proxies:
- name: "Example"
type: ss
server: example.com
port: 8388
cipher: aes-256-gcm
password: password
# 代理组
proxy-groups:
- name: PROXY
type: select
proxies:
- DIRECT
- AUTO
- name: AUTO
type: url-test
proxies: []
url: "http://www.gstatic.com/generate_204"
interval: 300
# 分流规则
rules:
- DOMAIN-SUFFIX,local,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT
- IP-CIDR,172.16.0.0/12,DIRECT
- IP-CIDR,192.168.0.0/16,DIRECT
- IP-CIDR,10.0.0.0/8,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXYAPI 接口
启动服务后,可以通过 RESTful API 进行管理:
# 获取状态
curl http://127.0.0.1:9090/status
# 获取节点列表
curl http://127.0.0.1:9090/nodes
# 选择节点
curl -X POST http://127.0.0.1:9090/nodes/NodeName/select
# 测试节点
curl -X POST http://127.0.0.1:9090/nodes/NodeName/test
# 启用系统代理
curl -X POST http://127.0.0.1:9090/system-proxy/enable
# 禁用系统代理
curl -X POST http://127.0.0.1:9090/system-proxy/disableWebSocket 实时通信
连接到 ws://127.0.0.1:9090/ws 可以接收实时状态更新:
const ws = new WebSocket("ws://127.0.0.1:9090/ws");
ws.on("message", (data) => {
const message = JSON.parse(data);
console.log("Received:", message);
});
// 发送消息
ws.send(
JSON.stringify({
type: "getStatus",
})
);支持的代理协议
HTTP/HTTPS
- name: "http-example"
type: http
server: example.com
port: 8080
username: user
password: passSOCKS5
- name: "socks5-example"
type: socks5
server: example.com
port: 1080
username: user
password: pass规则语法
支持以下规则类型:
DOMAIN-SUFFIX,example.com,PROXY- 域名后缀匹配DOMAIN-KEYWORD,ads,REJECT- 域名关键字匹配IP-CIDR,192.168.0.0/16,DIRECT- IP 段匹配GEOIP,CN,DIRECT- 地理位置匹配MATCH,PROXY- 最终匹配规则
平台支持
macOS
- 自动配置网络服务代理设置
- 支持 HTTP/HTTPS/SOCKS5 代理设置
Windows
- 通过注册表配置系统代理
- 支持 IE 代理设置
Linux
- 支持 GNOME 桌面环境代理设置
- 提供环境变量配置指导
常见问题
1. 权限问题
在 macOS 上配置系统代理需要管理员权限:
sudo clash-node proxy --enable2. 防火墙设置
确保防火墙允许代理端口通信:
# macOS
sudo pfctl -f /etc/pf.conf
# Windows
netsh advfirewall firewall add rule name="Clash Proxy" dir=in action=allow protocol=TCP localport=78903. DNS 解析问题
如果遇到 DNS 解析问题,可以手动配置 DNS:
dns:
enable: true
nameserver:
- 8.8.8.8
- 1.1.1.1开发
项目结构
clash-node/
├── bin/
│ └── cli.js # 命令行入口
├── src/
│ ├── core/
│ │ ├── ProxyManager.js # 代理管理器
│ │ ├── SystemProxy.js # 系统代理设置
│ │ ├── SubscriptionManager.js # 订阅管理
│ │ ├── ConfigManager.js # 配置管理
│ │ ├── RuleEngine.js # 规则引擎
│ │ └── NodeManager.js # 节点管理
│ └── index.js # 主服务
├── config/
│ ├── config.yaml # 配置文件
│ └── subscriptions.json # 订阅配置
└── package.json本地开发
# 开发模式运行
npm run dev
# 运行测试
npm test
# 构建可执行文件
npm run build贡献
欢迎提交 Issue 和 Pull Request!
许可证
MIT License
免责声明
本工具仅供学习和研究使用,请遵守当地法律法规。
