Skip to content

不用服务器(直连) ​

没有服务器、也没有公网 IP 时,Meshora 还能这样连:你和每位朋友互发一段连接码,两边同时打洞,直接连上。 全程不经过任何服务器——没有官方服务器,也没有中继。

当前状态

1.0.2 起有。在真实网络里打通过:两台安卓手机都用移动流量(运营商级 NAT、对称型,公网 IPv4 打不通), 经公网 IPv6 直连上(1.1.0,2026-10-08)。之前在家用宽带之间试的时候没通,查出来的问题(安卓 17 的局域网权限、 IPv6 用错了源地址)在 1.0.5 修了。家用宽带之间、电脑和手机之间修完还没再测。端到端测试在一台电脑上跑(本机的假 STUN 服务器、 三个节点交换连接码、朋友之间经房主互通)。没有中继兜底,打不通就是打不通,见下面的为什么可能连不上。

什么时候用 ​

  • 不想让任何服务器知道你们在联机,或者官方服务器连不上
  • 大家都在普通的家用路由器后面(多数人都是)

打不通的时候,换回官方服务器建网络:那边打不通会自动走中继。

怎么用 ​

一个人当房主,其余的人是朋友。每位朋友都要和房主交换一次连接码,来回各一段:

  1. 房主:开始页"建一个网络" → 建在哪选"不用服务器(直连)" → 建网络。 弹出"邀请一位朋友":复制房主码(meshora-offer: 开头),发给朋友
  2. 朋友:把房主码贴进"加入朋友的网络" → 加入。弹出一段回执码(meshora-reply: 开头),发回给房主
  3. 房主:把回执码贴进"邀请一位朋友"的第二步 → 加进来

两边随即同时开始打洞。网络页上这位朋友先显示"正在打洞",通了变成"直连"。 还有朋友要加入,房主在地址卡片上点"邀请朋友",再来一遍:每位朋友一个房主码,里面分给他一个地址。

  • 连接码一小时内有效:里面带着你此刻的公网地址,过一阵就不准了
  • 朋友之间不用交换码:房主替大家转发。两位朋友之间的游戏流量要经过房主的上行带宽, 房主网速慢的话,朋友之间会卡;房主下线,朋友之间也断了
  • 重启客户端后会照着上次的连接码重新打洞。路由器给的公网地址变了的话就打不通了,重新交换一次连接码

客户端为打通做了什么 ​

连接码里会带上本机所有能试的地址(最多 8 个,公网 IPv6、公网 IPv4、路由器开的端口排前面,局域网地址排后面), 两边同时往对方的每个地址发探测,哪条先通走哪条:

  • 局域网地址:本机每块真实网卡的局域网地址(最多 4 个)。在同一个家、同一个 Wi-Fi 里的人靠它直接连, 不用绕路由器。代理软件的虚拟网卡(Clash、mihomo 的 TUN 用的 198.18.x.x)、点对点的小网段不算
  • 公网 IPv6:国内家庭宽带和手机流量大多有。IPv6 没有 NAT,只有路由器的防火墙,两边同时发包基本就能打通, 对称型 NAT 也不碍事。地址卡片上显示"有公网 IPv6"就是有。最多带 4 个(手机连着 Wi-Fi 又开着流量时两套都有)。 两边都有公网 IPv6 时,打洞先只打 IPv6 4 秒,再加上 IPv4;IPv6 通了的话,IPv4 那些地址不再密集地发。 码里排第一的是系统真正拿来发包的那个地址(一般是临时地址):对方的防火墙只放行它发过去的地址的回包, 码里只写网卡上固定的那个的话,回包进不去
  • 公网 IPv4(STUN):问几个公共 STUN 服务器(国内的排前面),看到的地址写进连接码,之后每 20 秒再问一遍。 几个服务器看到同一个公网 IP、不同的端口,就是对称型 NAT;看到的公网 IP 都不一样,多半是开着代理或者多线宽带
  • 连上之后互相告知新地址:发码之后才拿到的路由器映射、新的公网 IPv6、换了网络之后的地址, 经已经通了的那条路直接告诉对方,不用重新交换连接码
  • 端口预测:两个 STUN 服务器看到的端口不一样(对称型 NAT),但差得不多、像是按顺序分配的, 就把"最后的端口、步长"写进连接码。对方在打洞的头 30 秒往预测的那一段端口(往后 64 个)也发探测。 只能救"一边对称型、另一边不是",而且端口是随机分配的路由器猜不中
  • 请路由器开端口:依次试 UPnP、PCP、NAT-PMP。开成了,对方往这个地址发的报文路由器直接转进来,不用打洞。 路由器自己在运营商级 NAT 后面时(它拿到的"公网地址"其实是私网的),开了外面也进不来,就不用。 很多家用路由器默认把 UPnP 关着,可以在路由器后台打开
  • Windows 防火墙:安装程序加了一条只放行 meshora.exe 收 UDP 的规则(名字叫 Meshora,卸载时删掉)。 1.0.2 和更早装的没有这条规则,Windows 可能把 Meshora 收 UDP 挡掉——打洞会一直不通。更新到 1.0.3 就加上了
  • 一直试,但不狂发:刚加进来的头 30 秒每 2 秒往对方的每个地址发一次探测。之后一直没回应的地址, 间隔一次比一次长(3、6、12、24 秒),最多 30 秒一次;对方告诉了新地址、本机换了网络时从头来。 通了的地址 3 秒探一次,正在用的那条 2 秒一次(丢了一次马上补探,断了四五秒内就发现)。 正在用的直连断了(对方换了网络、路由器的映射过期)、本机换了网络时,再密集打一轮(30 秒、每 2 秒一次)。 收到对方的探测就记下它真正是从哪个地址来的,马上往回发——码里的端口不准时,靠这个也能通

开着 Clash 之类的代理时 ​

地址卡片和连接码弹窗上会提示"像是开着代理"(STUN 服务器的域名被解析成了 198.18.x.x,或者看到的公网 IP 不止一个)。 代理的 TUN 模式会接管 Meshora 发出去的 UDP、换成它自己的端口再发,STUN 问到的公网端口就成了代理的, 对方往那发到不了 Meshora。同一个局域网、公网 IPv6 这两条不受影响;只能走公网 IPv4 时, 把代理的 TUN 关掉,或者让它对 Meshora(meshora.exe)直连、不接管。

打不通时看哪里 ​

  • 朋友卡片上写着最可能的原因,按每个地址试得怎么样和本机的情况推出来,比如:
    • "对方的报文到得了这里,我们的回不过去":对方那边的路由器或防火墙挡了入站
    • "两边都有公网 IPv6 却不通":多半是光猫的 IPv6 防火墙挡了入站,在光猫里放行 UDP 41641 或者关掉 IPv6 防火墙
    • "这边像是开着代理""这边是对称型 NAT""路由器没开端口":各自写着怎么办
    • 诊断信息里把所有可能的原因都列出来
  • 安卓 17 的手机:日志里往路由器、局域网地址发的都是 Operation not permitted 的话, 是没给"访问局域网"的权限(1.0.4 及以前没有申请这个权限,系统一律拦下)。新版本第一次连接时会问,点"允许"
  • 地址卡片上的"诊断":复制一段诊断信息(版本、本机的候选地址、公网地址、端口预测、路由器开没开端口、 每个人的地址按 IPv6、公网 IPv4、局域网分开列,每个地址写着"通着""没回应""对方发来过"、相关日志), 发给帮你排查的人。里面有 IP 地址,没有私钥

为什么可能连不上 ​

打洞的原理:两边都先往对方的公网地址发包,各自的路由器以为是"自己先发出去、对方在回应",于是放行。 这要求路由器对谁都用同一个外部端口(锥形 NAT)。

  • 对称型 NAT(每个目的地换一个外部端口):对方猜不到端口,打不通。客户端问两个 STUN 服务器, 看到的端口不一样时会在地址卡片和弹窗里提示"像是对称型 NAT"。一边是对称型、另一边是普通路由器,偶尔也能通;两边都是基本不通
  • 运营商级 NAT(CGNAT,常见于手机流量和部分宽带):多半也是对称型
  • 公司、学校的网络:常常封掉 UDP,打不通
  • STUN 服务器连不上:连接码里只有局域网地址,只有和你在同一个局域网的人连得上(弹窗里会提示)

两边都有公网 IPv6、或者有一边的路由器开得了端口时,上面几条大多不要紧。 两边都只有 IPv4、都在运营商级 NAT 或对称型 NAT 后面(端口又是随机分配的)、路由器又开不了端口时,仍然打不通。这些情况 Meshora 都没有兜底——官方服务器模式有中继,直连模式没有。

隐私 ​

  • 不经过任何 Meshora 的服务器:没有人记录你们和谁联机
  • 问公网地址用的是公共 STUN 服务器(stun.miwifi.com、stun.chat.bilibili.com、stun.douyucdn.cn、 stun.cloudflare.com、stun.l.google.com), 它们能看到你的公网 IP,看不到别的
  • 连接码里有你的公网 IP、局域网 IP 和公钥,只发给你要邀请的人
  • 谁能进来由房主决定:只有房主亲手贴进去的回执码才会被加进名单。所以回执码要确认是朋友本人发来的—— 连接码没有签名,能改你们聊天内容的人可以把码换成他自己的。详见威胁模型

以 MIT 协议发布 · 首页背景由 Paper Shaders 驱动(Apache-2.0)