npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

nodevlproxy

v2.0.3

Published

VLESS WebSocket 协议服务器实现,支持路径判断和 HTTP 伪装

Downloads

6

Readme

NodeVlProxy VLESS WebSocket 服务器

这是一个使用 Node.js 实现的 VLESS WebSocket 协议服务器,旨在提供安全、可伪装的网络代理服务。它支持路径判断、多种 HTTP 伪装模式,并集成了 Cloudflared Tunnel 和 SOCKS5 链式代理功能。

✨ 功能特性

  • VLESS 协议支持: 完整实现 VLESS 协议规范,提供高效稳定的传输。
  • WebSocket 传输: 基于 WebSocket 的数据传输,易于穿透防火墙。
  • 路径判断: 支持自定义 WebSocket 路径,增加隐蔽性。
  • HTTP 伪装: 提供多种伪装模式(博客、新闻、公司、API),使流量看起来像正常的 Web 访问。
  • 静态文件服务: 支持 CSS、JS、图片等静态资源,增强伪装效果。
  • UUID 验证: 支持多用户 UUID 配置,确保只有授权用户才能连接。
  • SOCKS5 链式代理: 支持通过 SOCKS5 代理转发所有出站流量。
  • Cloudflared Tunnel 集成: 自动下载并启动 Cloudflared,通过 Argo Tunnel 隐藏服务器真实 IP。
  • 优雅关闭: 完善的信号处理,确保服务器平稳退出。

📦 项目结构

vless-ws-server/
├── index.js       # 主程序入口,负责配置加载、服务器启动和 Cloudflared 管理
├── vless-ws-server.js  # VLESS 协议和 WebSocket 服务器核心实现
├── http-camouflage.js  # HTTP 伪装处理器及静态文件服务
├── config.json      # 配置文件 (可选,环境变量优先)
├── package.json     # 项目依赖和脚本配置
└── static/        # 静态文件目录,用于 HTTP 伪装
  ├── style.css
  ├── favicon.ico
  └── robots.txt

🚀 快速开始

1. 安装依赖

在项目根目录运行以下命令安装所需依赖:

npm install

2. 配置服务器

服务器配置可以通过 config.json 文件或环境变量进行。环境变量的优先级高于 config.json

通过 config.json 配置 (可选)

{
 "port": 8080,
 "wsPath": "/ws",
 "uuids": [
  "550e8400-e29b-41d4-a716-446655440000",
  "76c6ad8e-f809-4458-9875-8b1279d41648"
 ],
 "camouflage": {
  "mode": "blog",
  "staticDir": "./static"
 },
 "cloudflared": {
  "enabled": false,
  "tunnelToken": ""
 },
 "socks5Proxy": {
  "enabled": false,
  "host": "127.0.0.1",
  "port": 1080
 }
}

通过环境变量配置 (推荐)

| 环境变量名 | 对应配置项 | 说明 | 默认值 | | ------------------------ | ----------------------- | ------------------------------------------------------------ | ---------------------------------------- | | PORT | port | 服务器监听端口 | 8080 | | WS_PATH | wsPath | WebSocket 路径 | /ws | | UUIDS | uuids | 有效的 UUID 列表 (JSON 数组字符串,例如 '["uuid1","uuid2"]') | ["550e8400-e29b-41d4-a716-446655440000", "76c6ad8e-f809-4458-9875-8b1279d41648"] | | CAMOUFLAGE_MODE | camouflage.mode | 伪装模式 (blog, news, company, api) | blog | | CAMOUFLAGE_STATIC_DIR | camouflage.staticDir | 静态文件目录 | ./static | | CLOUDFLARED_ENABLED | cloudflared.enabled | 是否启用 Cloudflared Tunnel (true 或 false) | false | | CLOUDFLARED_TUNNEL_TOKEN | cloudflared.tunnelToken | Cloudflared Tunnel 的 Token | "" | | SOCKS5_PROXY_ENABLED | socks5Proxy.enabled | 是否启用 SOCKS5 链式代理 (true 或 false) | false | | SOCKS5_PROXY_HOST | socks5Proxy.host | SOCKS5 代理主机 | 127.0.0.1 | | SOCKS5_PROXY_PORT | socks5Proxy.port | SOCKS5 代理端口 | 1080 |

示例 (使用环境变量启动)

PORT=8080 \
WS_PATH=/ws \
UUIDS='["550e8400-e29b-41d4-a716-446655440000"]' \
CAMOUFLAGE_MODE=blog \
CLOUDFLARED_ENABLED=true \
CLOUDFLARED_TUNNEL_TOKEN="<YOUR_TUNNEL_TOKEN>" \
SOCKS5_PROXY_ENABLED=true \
SOCKS5_PROXY_HOST=127.0.0.1 \
SOCKS5_PROXY_PORT=1080 \
npm start

请将 <YOUR_TUNNEL_TOKEN> 替换为您真实的 Cloudflare Tunnel Token。

3. 启动服务器

npm start

核心功能详解

VLESS 协议实现

本项目实现了 VLESS 协议的请求和响应格式,确保与标准 VLESS 客户端兼容。

请求格式

| 字段 | 长度 | 说明 | | ------------ | ------- | ------------- | | 协议版本 | 1 字节 | 固定为 0 | | UUID | 16 字节 | 用户标识 | | 附加信息长度 | 1 字节 | 附加信息长度 | | 附加信息 | M 字节 | ProtoBuf 格式 | | 指令 | 1 字节 | 连接指令 | | 端口 | 2 字节 | 目标端口 | | 地址类型 | 1 字节 | 地址类型 | | 地址 | S 字节 | 目标地址 | | 请求数据 | X 字节 | 实际数据 |

响应格式

| 字段 | 长度 | 说明 | | ------------ | ------ | ------------- | | 协议版本 | 1 字节 | 与请求一致 | | 附加信息长度 | 1 字节 | 附加信息长度 | | 附加信息 | N 字节 | ProtoBuf 格式 | | 响应数据 | Y 字节 | 实际数据 |

HTTP 伪装功能

通过模拟真实网站的 HTTP 响应和静态文件服务,使 VLESS 流量在网络中更难被识别。

  • 支持的伪装模式:

  • blog: 模拟个人技术博客。

  • news: 模拟新闻资讯网站。

  • company: 模拟企业官网。

  • api: 模拟 API 文档网站。

  • 静态文件支持: 自动提供 static/ 目录下的 CSS、JS、图片(PNG、JPG、GIF、SVG)、网站图标(favicon.ico)和 robots.txt 文件。

  • HTTP 头部伪装: 自动设置常见的 HTTP 头部,如 Server: nginx/1.18.0、Cache-Control、X-Frame-Options 等。

Cloudflared Tunnel 集成 (Argo Tunnel)

为了方便部署和提供更安全的连接,此项目现在通过 JavaScript 代码自动管理 cloudflared 的安装和启动。这意味着您无需手动安装 cloudflared。

工作原理

当您运行 index.js 并启用 Cloudflared 时,程序会检查 cloudflared 可执行文件是否存在。如果不存在,它会根据当前操作系统和架构自动从 Cloudflare GitHub 仓库下载最新版本,并赋予执行权限。然后,程序会启动 cloudflared 进程,使用您提供的 Token 创建一个隧道。cloudflared 会将 Cloudflare 边缘网络的流量安全地转发到运行在本地的 Node.js 服务器的指定端口,从而隐藏您的服务器真实 IP,并利用 Cloudflare 的 CDN 优势。

使用方法

  1. 获取隧道 Token: 在 Cloudflare Zero Trust 控制台中创建一个新的隧道,并获取其 Token。
  2. 通过环境变量配置: 在启动服务器时,设置环境变量 CLOUDFLARED_ENABLED=true 和 CLOUDFLARED_TUNNEL_TOKEN="<YOUR_TUNNEL_TOKEN>"。
  3. 启动服务器: 按照上述“启动服务器”步骤运行即可。

SOCKS5 链式代理

本项目支持通过 SOCKS5 代理转发所有出站流量,实现链式代理功能。

工作原理

当 SOCKS5_PROXY_ENABLED 环境变量设置为 true 时,服务器会将所有通过 VLESS 协议的出站流量转发到配置的 SOCKS5 代理。您可以将此功能用于连接到 Tor 网络、其他代理服务器或任何支持 SOCKS5 协议的服务。

部署方式

您需要在 VLESS WebSocket 服务器可以访问的网络环境中运行一个 SOCKS5 代理服务。例如,您可以在宿主机上运行一个 SOCKS5 代理,或者使用一个单独的 Docker 容器来运行。

  • 示例:在 Docker 容器中连接到宿主机的 SOCKS5 代理 # 启动 VLESS WebSocket 服务器容器,并连接到宿主机的 SOCKS5 代理

    docker run -d -p 8080:8080 \
     -e SOCKS5_PROXY_ENABLED=true \
     -e SOCKS5_PROXY_HOST=host.docker.internal \
     -e SOCKS5_PROXY_PORT=1080 \
     --name vless-ws-server \
     vless-ws-server

    注意:host.docker.internal 是一个特殊的 DNS 名称,可以从 Docker 容器内部解析到宿主机的 IP 地址。在 Linux 上,您可能需要添加 --add-host=host.docker.internal:host-gateway 参数。

🔒 安全与性能

安全特性

  • UUID 验证: 仅允许配置的 UUID 进行连接。
  • 路径验证: 只有正确的 WebSocket 路径才能升级连接。
  • 协议版本检查: 验证 VLESS 协议版本,拒绝不兼容的连接。
  • 错误处理: 完善的错误处理和连接管理,防止服务崩溃。

性能优化

  • 连接复用: 支持多个并发连接,提高吞吐量。
  • 内存管理: 及时清理断开的连接,避免内存泄漏。
  • 错误恢复: 自动处理连接异常,保持服务稳定性。
  • 异步 I/O: 采用异步文件操作和网络请求,避免阻塞主线程。

📱 客户端配置示例

在 V2Ray 或 Xray 客户端中配置:

{
 "protocol": "vless",
 "settings": {
  "vnext": [{
   "address": "your-server.com",
   "port": 8080,
   "users": [{
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "encryption": "none"
   }]
  }]
 },
 "streamSettings": {
  "network": "ws",
  "wsSettings": {
   "path": "/ws"
  }
 }
}

🐳 Docker 支持

您可以使用 Docker 来构建和部署此项目。由于 cloudflared 的安装和启动由 index.js 负责,Docker 镜像将更加简洁。

构建 Docker 镜像

在项目根目录运行:

docker build -t vless-ws-server .

运行 Docker 容器

运行容器时,可以通过环境变量传入配置:

docker run -d -p 8080:8080 \
 -e PORT=8080 \
 -e WS_PATH=/ws \
 -e UUIDS='["550e8400-e29b-41d4-a716-446655440000"]' \
 -e CAMOUFLAGE_MODE=blog \
 -e CLOUDFLARED_ENABLED=true \
 -e CLOUDFLARED_TUNNEL_TOKEN="<YOUR_TUNNEL_TOKEN>" \
 --name vless-ws-server \
 vless-ws-server

请将 <YOUR_TUNNEL_TOKEN> 替换为您真实的 Cloudflare Tunnel Token。

⚠️ 注意事项

  1. 本实现仅用于学习和测试目的。
  2. 在生产环境使用时,请务必确保网络安全,建议配合 TLS/SSL 使用以提高安全性。
  3. 定期更新 UUID 以提高安全性。
  4. 确保您的 Cloudflare 账户已启用 Argo Tunnel 服务,并且您已正确配置了隧道和 DNS 记录,以便 Cloudflared 正常工作。

🤝 贡献

欢迎提交 Issue 和 Pull Request 来改进这个项目。

📄 许可证

MIT License