kookoo1sabzy/BaleVPN

GitHub: kookoo1sabzy/BaleVPN

一款通过伊朗通讯应用 Bale 的语音通话基础设施隧道传输 IP 流量的点对点 VPN 工具,用于在网络受限场景下借助可信对端中继访问开放互联网。

Stars: 6 | Forks: 1

# Bale VPN 一款点对点 VPN,通过伊朗国家通讯应用 [**Bale**](https://bale.ai/) 的语音通话基础设施隧道传输 IP 流量。一台设备作为*服务器*(提供互联网);另一台作为*客户端*(消耗互联网)。对于 Bale 的服务器而言,该连接看起来就像是两个联系人之间的一通长时间语音通话。 核心意义:当一个人拥有正常/未经审查的网络连接,而另一个人没有时,后者可以通过前者路由其流量——无需任何额外的服务器、账户、付费或注册。只需在两部手机(或服务器端使用笔记本电脑)上安装该应用,确保这两个账号互相存在于对方的联系人列表中,然后连接即可。 本项目与 Bale 没有任何商业合作关系。
## 关于项目 این پروژه یک VPN نقطه‌به‌نقطه است که ترافیک IP را روی زیرساخت تماس صوتی [**بله**](https://bale.ai/)، پیام‌رسان ملی ایران، عبور می‌دهد. یک دستگاه نقش *سرور* را دارد (اینترنت می‌دهد) و دستگاه دیگر نقش *کلاینت* را (اینترنت می‌گیرد). برای سرورهای بله این ارتباط شبیه یک تماس صوتی طولانی بین دو مخاطب به نظر می‌رسد. هدف: وقتی یک نفر اینترنت سالم دارد و نفر دیگر نه، نفر دوم بدون هیچ سرور یا اشتراک اضافه‌ای می‌تواند ترافیکش را از طریق نفر اول رد کند. فقط کافی است هر دو طرف، هم در بله ثبت‌نام کرده باشند و هم یکدیگر را در فهرست مخاطبین داشته باشند. این پروژه هیچ ارتباط تجاری‌ای با بله ندارد.
## ⚠️ 隐私与加密 LiveKit 数据通道使用 **DTLS** 加密,因此流量对于网络上的被动观察者和 ISP 的中间盒是不可见的。**然而,Bale 的 LiveKit 服务器作为 SFU/TURN 节点,可以访问流经该通话的明文数据。** 这意味着: - Bale 可以看到**谁在为谁提供中继**——每个隧道会话都是两个账户之间的一通 Bale 语音通话,因此 Bale 的通话记录会暴露社交关系图(哪个账户使用了哪个中继,何时使用,使用了多长时间)。 - Bale 可以看到**你连接到了哪些目的地**(IP 和端口,或者主机名——如果你的客户端发送了主机名的话;请参阅 [Node SOCKS5 文档](docs/node-en.md#configuring-a-browser-as-a-client) 以了解如何避免 DNS 泄漏)。 - Bale 可以读取**任何本身未经端到端加密的流量内容**。如果你只浏览 `https://` 站点,负载对他们是不透明的;如果你通过隧道访问明文 HTTP / DNS / FTP 等,他们就可以读取其内容。 请将此隧道视为由你并非完全信任的运营商所提供的企业 VPN——它适用于 IP 层面的可达性(突破网络审查),但**不足以作为匿名或端到端隐私保护层**。请在应用层使用 TLS(HTTPS、加密 DNS 等)。 **作者的建议:** 使用虚拟手机号码注册与此工具配合使用的 Bale 账户,而不是使用你的主号码,这样上述通话元数据就无法与你的真实身份关联起来。Bale 接受非伊朗号码——典型流程是:获取一个能接收短信的虚拟号码,用该号码注册 Telegram 账户(Telegram OTP 会通过短信送达),然后用同一号码注册 Bale——Bale 的 OTP 会通过你的 Telegram 账户送达。
### ⚠️ 安全与加密 کانال دادهٔ LiveKit با **DTLS** رمزنگاری می‌شود؛ بنابراین ترافیک از دید ناظرهای مسیر و میدلباکس‌های ISP پنهان است. **اما سرور LiveKit بله نقش SFU/TURN را بازی می‌کند و به دادهٔ رمزگشایی‌شدهٔ تماس دسترسی دارد.** یعنی: - بله می‌تواند ببیند **چه کسی برای چه کسی رله می‌کند** — هر جلسهٔ تونل یک تماس صوتی بله بین دو حساب است، پس سوابق تماس بله گرافِ اجتماعی را افشا می‌کند (چه حسابی از چه رله‌ای، چه زمانی، چقدر استفاده کرده). - بله می‌تواند ببیند **شما به چه مقصدی وصل می‌شوید** (IP و پورت، یا نام میزبان اگر کلاینت شما نام بفرستد — برای جلوگیری از نشت DNS به [راهنمای SOCKS5 در نسخهٔ Node](docs/node-fa.md#تنظیم-مرورگر-بهعنوان-کلاینت) مراجعه کنید). - بله می‌تواند **محتوای هر ترافیکی را که خودش رمزنگاری انتها به انتها نشده** بخواند. اگر فقط روی `https://` بگردید، محتوا برایشان مبهم است؛ اما اگر از پروتکل‌های متنی (HTTP/DNS/FTP/…) استفاده کنید، قابل خواندن خواهد بود. این تونل را مثل VPN شرکتی‌ای ببینید که گرداننده‌اش را کاملاً نمی‌شناسید — برای دسترسی IP (دور زدن مسدودی) خوب است، **اما برای ناشناسی یا حریم خصوصی انتها به انتها کافی نیست**. در سطح برنامه از TLS (HTTPS، DNS رمزنگاری‌شده و…) استفاده کنید. **توصیهٔ نویسنده:** برای حساب بله‌ای که با این ابزار استفاده می‌کنید، از یک *شمارهٔ تلفن مجازی* استفاده کنید نه شمارهٔ اصلی‌تان، تا متادیتای تماس بالا به هویت واقعی شما گره نخورد. بله شماره‌های غیرایرانی را هم می‌پذیرد — مسیر معمول این است: یک شمارهٔ مجازی که SMS دریافت می‌کند تهیه کنید، اول با همان شماره روی تلگرام ثبت‌نام کنید (OTP تلگرام با SMS می‌آید)، سپس با همان شماره روی بله ثبت‌نام کنید — OTP بله از طریق حساب تلگرام شما می‌رسد.
## 支持的功能 | 角色 | 平台 | SOCKS5 代理 | VPN(全 IP 路由) | |---|---|:---:|:---:| | 客户端 | Node.js — Linux / macOS / Windows | ✓ | — | | 客户端 | Android | — | ✓  *(通过 `VpnService` 实现的内核 TUN)* | | 服务器 | Node.js — Linux / macOS / Windows | ✓ | — | | 服务器 | Node.js — **Linux** | ✓ | ✓  *(内核 TUN;需要 `setcap cap_net_admin` + `iptables` MASQUERADE)* | | 服务器 | Android | — | ✓  *(进程内用户空间 TCP/IP NAT;无需 root、无需内核 TUN、无需 iptables)* | 在两个方向上,Node.js 端的 **SOCKS5** 均与平台无关——你可以在任一端选择任何操作系统。Node 端的完整 **VPN** 路由仅限 Linux,因为它依赖于内核 TUN 设备和由 `iptables` 管理的 NAT。Android 应用不提供 SOCKS5 模式;它始终使用系统 VPN。
نسخهٔ Node برای **SOCKS5** در هر دو جهت مستقل از سیستم‌عامل است — می‌توانید برای هر طرف هر OS را انتخاب کنید. ولی **مسیریابی کامل VPN** در سمت Node فقط روی لینوکس کار می‌کند، چون به دستگاه TUN هسته و NAT مدیریت‌شده با iptables متکی است. اپلیکیشن اندروید حالت SOCKS5 ندارد و همیشه از VPN سیستمی استفاده می‌کند.
## 详细指南 各平台的设置、手册和截图: | 平台 | English | فارسی | |---|---|---| | **Android**(客户端及用户空间 TCP/IP 服务器) | [Android 用户指南](docs/android-en.md) | [راهنمای کاربری اپلیکیشن اندروید](docs/android-fa.md) | | **Node.js** — Linux / macOS / Windows(SOCKS5 客户端 + 服务器,Linux TUN VPN 服务器) | [Node.js 应用指南](docs/node-en.md) | [راهنمای نسخهٔ Node](docs/node-fa.md) | 有关协议内部原理、线格式和架构细节:[CLAUDE.md](CLAUDE.md)。 ## 架构 ``` ┌────────────────────────────────────────────────────────────┐ │ Bale signaling (WebSocket) │ │ wss://next-ws.bale.ai/ws/ │ └──┬───────────────────────────────────────────────────┬─────┘ │ │ ▼ ▼ ┌───────────────┐ LiveKit "voice call" ┌───────────────┐ │ VPN client │ raw IP packets in the │ VPN server │ │ (Android, │ data channel (DTLS) │ (Android, or │ │ or Node │ ◄─────────────────────────────► │ Node Linux │ │ SOCKS5) │ │ TUN, or │ │ │ │ Node SOCKS5)│ └───────────────┘ └───────┬───────┘ │ ▼ open internet ``` 两端均使用 **Bale 信令 WS** 建立通话,然后在 Bale 为该通话分配的 **LiveKit 数据通道**上交换流量。Bale WS 在信令完成后断开(并在需要时自动重新连接);LiveKit 数据通道承载所有稳态的 IP / TCP 流量。 ## 状态 积极的研究/实验阶段。API 和磁盘格式可能会在不另行通知的情况下更改。 ## 免责声明 这是一个独立的逆向工程**研究项目**。与 Bale 或其任何运营商没有商业关系,也未获得其认可。发布此代码仅出于教育目的——旨在记录如何将闭源通讯软件的 WebRTC 语音通话基础设施改造为通用数据隧道,并使相关的线格式和协议对其他研究人员具有可读性。 **你对如何使用本软件负有全部责任。** 作者: - 不作任何明示或暗示的保证,包括适销性、特定用途的适用性、安全性或符合任何当地法律或法规; - 对因使用、误用或无法使用本软件而产生的任何损害、索赔、费用或损失不承担任何责任; - 对因运行本软件而可能产生的任何违反 Bale 服务条款、任何适用的电信、隐私或计算机访问法律、或任何第三方权利的行为不承担任何责任。 请仅在您拥有或已获得明确测试许可的账户和基础设施上使用本软件。请勿将其用于规避未经授权绕过的访问控制、逃避合法的网络策略或损害任何第三方。 如果您不确定您的预期用途在您所在的司法管辖区是否合法,请在继续操作前咨询专业律师。 ## 许可证 在 [MIT 许可证](LICENSE)下发布。本软件按“原样”提供,不作任何形式的保证。上述免责声明是对许可条款的补充(而非替代)。
标签:Bale, DTLS, IP流量转发, LiveKit, MITM代理, P2P网络, VPN, WebRTC, 中间人规避, 伊朗, 协议隧道, 即时通讯, 去中心化, 安全合规, 开源, 抗封锁, 数据封装, 流量伪装, 流量穿透, 点对点VPN, 点对点通信, 网络代理, 网络信息收集, 网络安全, 网络审查规避, 自定义脚本, 语音通话, 隐私保护, 隐秘通信