native-vpn

装了客户端的人互为出口节点:你用别人的 IP 上网,别人也可以用你的。 服务端只做中转,看不到你访问了什么

先说清楚:这不是一个开箱即用的 VPN 服务

下载下来不能直接上网。它是一套「几个熟人凑一个 IP 池」的工具,用起来需要两样东西:

  • 一台你自己的服务器当中转(一句命令部署,见 GitHub)
  • 一群愿意把自己网络借出来的朋友——没有别人开出口节点,池子里就没有 IP 可用

冲着「免费翻墙」来的话,这个帮不上忙,别浪费时间下载。

怎么工作的

出口节点在家庭 NAT 后面,公网连不上它。所以是它主动挂一条长连接到服务端,服务端要派活时在这条已有连接上开逻辑流。

浏览器 / curl │ SOCKS5 127.0.0.1:1080 ▼ 客户端 A(消费者) │ WSS 长连接 + 多路复用 ▼ 服务端(只中转,看不到目标域名和内容) │ 在出口节点的反向长连接上开一条流 ▼ 客户端 B(出口) │ 裸 TCP / UDP ▼ 目标网站 ← 看到的是 B 家宽带的 IP

一个网页几十个并发连接全部复用同一条隧道。同一台机器既是消费者也可以是出口, 两个角色互相独立,出口默认是关的

下载

单个可执行文件,不需要装 Node 或任何运行时。体积大是因为整个 JS 运行时都打进去了。

平台文件大小
Windows
64 位
native-vpn-win32-x64.exe sha256 00721650022334fdbd7e446d9e91bc8484aa08461328285e1c81a263ce9def9b 83 MB GitHub 源
macOS
Apple 芯片
native-vpn-darwin-arm64
首次运行需在「系统设置 → 隐私与安全性」里放行 sha256 6805b5b6319a9c83cbd5b09b5e367376350da03616a2e842ffc75abc6dd261ae
107 MB GitHub 源
Linux
x86_64
native-vpn-linux-x64
记得 chmod +x sha256 a351312e579ccf3b912653f6834be6b0c13a995af52c9ef69feb24084cb29e49
119 MB GitHub 源
纯 JS 包
任意平台
native-vpn.cjs
已经装了 Node 的话下这个,node native-vpn.cjs --join ... sha256 2696e7dd81da43a69b4b7812845ceb3c11ccd52655620f2e93a4afc34bcc0771
0.24 MB GitHub 源

版本 v0.2.0 · 发布于 2026-08-24 · 上面的链接从本站下载(国内更快),右侧是 GitHub 源。 校验和 · 这版改了什么

系统会提示「未知发布者」。 这是因为打包方式(往签过名的 Node 二进制里注入代码)必然破坏原签名,而这个项目没有代码签名证书。

介意的话可以自己从源码构建, 产物和这里的一致;或者用上面的校验和核对。

怎么用

如果朋友已经把池子搭好了,你要做的只有两步。

  1. 找组里的人要一条邀请串

    长这样,一条微信消息就发得下:
    nvpn1:eyJiIjoid3NzOi8vdHVubmVsLmV4YW1wbGUuY29t...

  2. 跑一次

    native-vpn --join nvpn1:eyJiIjoid3NzOi8v...

    配置会存下来,之后直接双击启动就行。 SOCKS5 代理在 127.0.0.1:1080,控制台地址(带访问 token)会打在启动日志里。

验证一下

curl --socks5-hostname 127.0.0.1:1080 https://ifconfig.me

要用 --socks5-hostname 而不是 --socks5:域名得交给出口节点解析, 否则 CDN 会按你的位置返回节点——IP 换了线路没换,本地 DNS 还会泄漏。 浏览器里对应的是「远程 DNS」选项。

自己搭池子

需要一台有公网 IP 的服务器和一个域名。完整步骤见 GitHub 上的说明, 大致是配一条 DNS、挂上 Caddy、起 broker、给每个人发一个 token。

如果你打算共享自己的网络

别人的流量会从你家的 IP 发出去

在你的 ISP 和被访问的网站看来,那些请求就是你发的。 这是这类软件唯一真正会出事的地方——911.re 被 FBI 端掉、Hola VPN 被声讨, 根子都在用户不知道自己在当出口。

所以共享默认是关闭的,必须你自己手动打开。只在你信任池子里每一个人的时候才开。

客户端强制执行的出口策略:

另外:出口节点看不到 HTTPS 的内容。TLS 是浏览器和目标站之间端到端的, 经过你这里的是密文。

服务端看得到什么

这套东西的一个设计目标就是:搭服务器的那个人,也不该看到大家访问了什么。

 服务端出口节点
目标域名 / 端口看不到看得到
流量内容看不到HTTPS 看不到 / 明文 HTTP 看得到
地区偏好看得到(选路要用)
谁连了哪个出口、流量大小、时间看得到看得到

做法是消费端和出口节点之间再加一层端到端加密(Noise NK + 每个节点自己的静态身份密钥), 服务端只搬密文。就算搭服务器的人自己也在组里、手里有群组密钥,他也没有别人的静态私钥, 解不开别人之间的流量。

它不是匿名工具

服务端拿不到你访问了什么,但拿得到「谁在什么时候用了多少流量」这类元数据。 这套东西解决的是「换一个出口 IP」和「服务器被入侵也不泄漏浏览记录」, 不是对抗流量分析的匿名性。真需要那个强度,该用 Tor。

还有什么做不到

浏览器的 WebRTC 会绕过去

直连暴露真实 IP。这只能在浏览器侧关掉,代理层管不了。拿它当 IP 伪装用的话务必先处理。

延迟会变高

三跳串联:你 → 服务端 → 出口 → 目标。绕路是这个架构的固有代价。

开着 Clash 的机器当不了出口

fake-ip 模式下所有域名被劫持,而且流量还要再过一次你自己的代理,露出的是代理商的机房 IP。客户端会自检并拒绝。

还没有 P2P 直连

所有流量都过服务端中转,服务端带宽是瓶颈。直连需要自建可靠传输层,而且会让两端互相看到真实 IP。