2024 年了,依然没有一个好用的跨平台虚拟组网方案

注:由于「V.P.N.」为敏感词汇,本文中用「虚拟局域网」代称,和 VLAN 技术无关。

1. 背景

和朋友联机玩《博德之门 3》。因为不在同一城市,大家又不都是在 Steam 上购买的,决定用虚拟局域网联机。

我是 Linux,一个朋友是 macOS(ARM 版),另一个朋友是 Windows。

2. 问题

2.1. macOS 引发的惨案

之前我和用 Windows 的朋友组网的方案是 n2n,完全靠国内服务器中转,非常稳定。

但是用 macOS 的朋友来了之后,研究了一番表示:

n2n 官方没有打包 macOS 版,必须自己编译,而且文档里也说「请注意,在最新的 Apple Silicon 上,操作系统中的安全限制可能会越来越多,导致难以安装 TUN/TAP 内核扩展。」[1] 这种调用 UNIX 接口创建路由、而不使用苹果的 API 的虚拟局域网工具,都会把网络弄乱。

同理,ZeroTier、OpenVPN、Tinc、TetherVPN 等一众软件也都是绕过苹果限制创建的虚拟网络,会把这个朋友现有的网络配置弄乱,所以没办法用。

2.2. macOS 原生支持的协议

那么 macOS 具体支持哪些虚拟网络协议呢?官方文档提到三种:

  1. L2TP over IPSec
  2. IPSec
  3. IKEv2
  4. 另外,App Store 里的 Tailscale 也使用 macOS 接口
  5. 也可以用 ARM macOS 的功能运行 iOS 版的各虚拟网络 App

2.3. 排除法

然而众所周知,《博德之门 3》之类的游戏只支持用局域网广播搜索局域网房间,而不能输入同伴 IP。然而广播是 Layer 2(链路层)虚拟网络才支持的

这样可行的选项只剩下 L2TP over IPSec 和 IKEv2(又名 IKEv2 over IPSec)了。

但是还没完。 Linux 上唯一的 L2TP 客户端兼服务端 xl2tpd 问题非常非常多,我折腾了三天都落在不同的 issues 上:不仅连接不上,还看不到任何有用的报错,非常让人恼火,另外原仓库作者也失踪两年多了。所以,L2TP over IPSec 也 Pass 了。

3. 目前情况

IKEv2 over IPSec 不可行,见下面的更新

所以唯一剩下的方案就是 IKEv2 over IPSec 了,恰好这也是 Android 目前唯一原生支持的虚拟局域网协议。

但是因为比较新、由商业公司(微软等)开发,网上有用的文档也很少。

另外 IKEv2 over IPSec 本身也不支持广播/组播,还要依靠 StrongSwan 的插件,目前在研究如何搭建服务器中……

折腾了几天,不禁感叹标题的内容:2024 年了,居然还拿不出一个简单易行的跨平台虚拟组网方案啊……


07-14 更新:

  1. 手动搭建 IKEv2 over IPSec with EAP-MS-CHAPV2 虚拟网络(是的,这玩意名字就是这么长)。看了一整天资料,技术栈实在过于复杂:IKEv2 和 IPSec 是独立的,拨号又依赖另外的 EAP-MS-CHAPV2 协议和 PKI 证书基础设施进行认证。报出的错误千奇百怪,一个一个试错解决花了一下午的时间:no common hash algorithmno trusted ED25519 public key foundno matching peer config foundno IKE config foundno private key foundTPM 2.0 - could not load……最新成果是卡在第一个错误提示,真的修不动了。没有高级网络工程师的资历,玩不转这个
  2. 用自动脚本搭建。尝试了 Star 数量最多的 setup-ipsec-vpn 项目,运行倒是很顺利,就是创建出来的 IKEv2 连接上后依然没有组播功能。尝试修改配置文件,无果,推测是客户端的限制而非服务器问题。

在读文档的过程中,我也意识到 IKEv2 设计时同样没有考虑广播的场景,所以,IKEv2 over IPSec 这条路也 Pass 了。

束手无策了,看看各位的奇思妙想吧。


  1. Note that on the newest MacOS versions and on Apple Silicon, there may be increasing security restrictions in the OS that make installing the TUN/TAP kernel extension difficult. ↩︎

3 个赞

你这个需求真的是…比我还麻烦。

我是实现了游戏主机在 A 城市,但目前通过 parsec 和 sunshine 在 B 城市打游戏。未涉及到与好友联网的问题 :joy:

其实一句话概括就是:我想和远程的朋友组网联机玩《博德之门》。这就有几个限制:

  1. 虚拟网络必须支持广播
  2. 必须支持 Windows、Linux 和 macOS

听起来简单,但光这两点,就已经让市面上 90% 的虚拟网络工具都对我没用了……

剩下10%也不少了。 :joy:

和目前远程串流一个解决方案,用皎月连直接组网就行了

软件采用了最新的P2P算法,在连接双方都没有公网IP和IPV6的情况下,可满足包括对称型NAT在内的大多数连接需求。

这么牛逼的?

看了一下,我的两点需求均不满足:

  1. 根本没有 macOS 或 iOS 版本
  2. 提供的 macOS/iOS 迂回方案是端口映射。这个已经是 Layer 4(传输层)的虚拟网络了,和 Layer 2 的要求差得远。另外,也不支持局域网广播。

请先看清我的要求再说吧,不过还是谢谢了。

确实牛逼,而且作者最近和moonlight联合搞了个新的月月连,直接一个应用自动组网,主要是解决电视机等只能开一个应用的设备也能用

简单点macOS装虚拟机,复杂点问问作者能不能把苹果的给开发了,感觉作者只是没想到还有这种需要广播的情况,因为本来是为了串流的,可以不装客户端就实现,实际比Windows还要方便了,他就没想着开发

不过这里有点问题,说能把 macOS 网络搞乱基本上就是「我不想和你打的意思」,我觉得你可以仔细想想这件事。

这倒不至于,已经用游戏的「直接连接」功能(应该是 P2P)玩了一周了,主要的问题就是不稳定,经常会断。 :joy: 研究虚拟组网的一个目的是提升游戏体验,另一个目的是为以后联机做其他事打基础。

macOS 上现在的情况可以参考这个文(抱)档(怨)

支持广播的虚拟局域网,这个一杆子打死了很多相关方案。我也标记一下,等答案

我有一个蒲公英路由器,是向日葵他们家的硬件产品,提供了虚拟组网服务,可以二手卖给你朋友哦~

刚才去搜了一下,看到了这个视频

作者已经在重构映射了,之后会就推出Mac版本
而且作者竟然是个不懂开发的文职人员,牛啊

还好大部分局域网联机的游戏并不需要真的在一个局域网里,只要主机开一个端口暴露给其他用户就行,你这个游戏算是比较复杂的情况。

感谢各位的讨论,我更新了 IKEv2 的测试结果:不能满足需求


嗯嗯,我用 macOS 的朋友也有个群晖做旁路由,但是恐怕问题没这么好解决:在他的局域网里,因为 MacBook 对路由器的存在不知情,它发出的广播包并不会自动到达我和另一个朋友的电脑(或许蒲公英可以做到转发广播?不太清楚)。

因此,最好情况下,也就是我和另一个朋友能搜索到他的房间。

是的。准确地说,在 Windows、Linux 上都有一堆方案,ZeroTier、n2n、Tinc 都是完全满足需求的、「支持广播」的虚拟局域网。尤其是 n2n,个人力推。

但到了 macOS 上,问题立刻复杂了:n2n 等软件的开发人员,作为独立开发者,没钱上交年贡,买 macOS 的 V.P.N 调用权限(更不要说苹果的官方 V.P.N. API 只开放给「企业开发者」了);苹果的 API 又朝令夕改,接口想弃用就弃用,权限想收紧就收紧。

因为你,我去搜了关键词,然后发现了一片新大陆,目前成功打入了群里
有人遇到你一样的局域网广播问题,皎月连已经有插件支持了,并且群里大佬的改版也直接打包内置了
mac版本正在开发中,相信ios也不远了(他们都是自行打包,用各种方法侧载)

1 个赞

既然这个问题目前看起来是无解了,给大家介绍一下我这几天研究方案的经验总结吧。放松条件之后还是有很多选择的:

  1. 支持三端的普通局域网,有公网服务器:n2n(Linux 安装 n2n,Windows 安装 Happynet,macOS 安装 Happynet 的 iOS 应用);
  2. 支持三端的普通局域网,无公网服务器:Tailscale;
  3. Linux 和 Windows 的广播局域网,有公网服务器:n2n;
  4. Linux 和 Windows 的广播局域网,无公网服务器:Zerotier;
  5. macOS 和 Windows 的广播局域网,有公网服务器:用 setup-ipsec-vpn 或群晖、OpenWrt 等,自建 L2TP/IPSec 服务器。
2 个赞

这么猛吗,不知带我也进个群方便否? :doge:

他们有好几个群,我现在进的是一个串流群,目前未得知皎月连的作者在哪个群,等我再探探 :grin: