w568w
(w568w)
July 14, 2024, 3:43am
1
注:由于「V.P.N.」为敏感词汇,本文中用「虚拟局域网」代称,和 VLAN 技术无关。
1. 背景
和朋友联机玩《博德之门 3》。因为不在同一城市,大家又不都是在 Steam 上购买的,决定用虚拟局域网联机。
我是 Linux,一个朋友是 macOS(ARM 版),另一个朋友是 Windows。
2. 问题
2.1. macOS 引发的惨案
之前我和用 Windows 的朋友组网的方案是 n2n ,完全靠国内服务器中转,非常稳定。
但是用 macOS 的朋友来了之后,研究了一番表示:
n2n 官方没有打包 macOS 版,必须自己编译,而且文档 里也说「请注意,在最新的 Apple Silicon 上,操作系统中的安全限制可能会越来越多,导致难以安装 TUN/TAP 内核扩展。」 这种调用 UNIX 接口创建路由、而不使用苹果的 API 的虚拟局域网工具,都会把网络弄乱。
同理,ZeroTier、OpenVPN、Tinc、TetherVPN 等一众软件也都是绕过苹果限制创建的虚拟网络,会把这个朋友现有的网络配置弄乱,所以没办法用。
2.2. macOS 原生支持的协议
那么 macOS 具体支持哪些虚拟网络协议呢?官方文档 提到三种:
L2TP over IPSec
IPSec
IKEv2
另外,App Store 里的 Tailscale 也使用 macOS 接口
也可以用 ARM macOS 的功能运行 iOS 版的各虚拟网络 App
2.3. 排除法
然而众所周知,《博德之门 3》之类的游戏只支持用局域网广播搜索局域网房间,而不能输入同伴 IP。然而广播是 Layer 2(链路层)虚拟网络才支持的 。
(4) Tailscale 基于 WireGuard,因此是 Layer 3(网络层)虚拟网络 ,直接 Pass。(2) IPSec 同理 Pass;
(5) OpenVPN 和 n2n 的 iOS App 运行起来后创建的也是 Layer 3 虚拟网络,Pass;
这样可行的选项只剩下 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 更新:
手动搭建 IKEv2 over IPSec with EAP-MS-CHAPV2 虚拟网络(是的,这玩意名字就是这么长)。看了一整天资料,技术栈实在过于复杂:IKEv2 和 IPSec 是独立的,拨号又依赖另外的 EAP-MS-CHAPV2 协议和 PKI 证书基础设施进行认证。报出的错误千奇百怪,一个一个试错解决花了一下午的时间:no common hash algorithm
、no trusted ED25519 public key found
、no matching peer config found
、no IKE config found
、no private key found
、TPM 2.0 - could not load
……最新成果是卡在第一个错误提示,真的修不动了。没有高级网络工程师的资历,玩不转这个 ;
用自动脚本搭建。尝试了 Star 数量最多的 setup-ipsec-vpn 项目,运行倒是很顺利,就是创建出来的 IKEv2 连接上后依然没有组播功能 。尝试修改配置文件,无果,推测是客户端的限制而非服务器问题。
在读文档的过程中,我也意识到 IKEv2 设计时同样没有考虑广播的场景 ,所以,IKEv2 over IPSec 这条路也 Pass 了。
束手无策了,看看各位的奇思妙想吧。
3 Likes
Qingwa
(青小蛙)
July 14, 2024, 3:44am
2
你这个需求真的是…比我还麻烦。
我是实现了游戏主机在 A 城市,但目前通过 parsec 和 sunshine 在 B 城市打游戏。未涉及到与好友联网的问题
w568w
(w568w)
July 14, 2024, 3:52am
3
其实一句话概括就是:我想和远程的朋友组网联机玩《博德之门》 。这就有几个限制:
虚拟网络必须支持广播
必须支持 Windows、Linux 和 macOS
听起来简单,但光这两点,就已经让市面上 90% 的虚拟网络工具都对我没用了……
skystar
(skystar)
July 14, 2024, 4:08am
5
和目前远程串流一个解决方案,用皎月连直接组网就行了
skystar
(skystar)
July 14, 2024, 5:26am
8
确实牛逼,而且作者最近和moonlight联合搞了个新的月月连,直接一个应用自动组网,主要是解决电视机等只能开一个应用的设备也能用
skystar
(skystar)
July 14, 2024, 5:41am
9
简单点macOS装虚拟机,复杂点问问作者能不能把苹果的给开发了,感觉作者只是没想到还有这种需要广播的情况,因为本来是为了串流的,可以不装客户端就实现,实际比Windows还要方便了,他就没想着开发
Qingwa
(青小蛙)
July 14, 2024, 6:24am
10
不过这里有点问题,说能把 macOS 网络搞乱基本上就是「我不想和你打的意思」,我觉得你可以仔细想想这件事。
w568w
(w568w)
July 14, 2024, 6:36am
11
这倒不至于,已经用游戏的「直接连接」功能(应该是 P2P)玩了一周了,主要的问题就是不稳定,经常会断。 研究虚拟组网的一个目的是提升游戏体验,另一个目的是为以后联机做其他事打基础。
macOS 上现在的情况可以参考这个文(抱)档(怨) 。
支持广播的虚拟局域网,这个一杆子打死了很多相关方案。我也标记一下,等答案
tiger
(小虎王)
July 14, 2024, 7:38am
13
我有一个蒲公英路由器,是向日葵他们家的硬件产品,提供了虚拟组网服务,可以二手卖给你朋友哦~
skystar
(skystar)
July 14, 2024, 9:30am
14
刚才去搜了一下,看到了这个视频
作者已经在重构映射了,之后会就推出Mac版本
而且作者竟然是个不懂开发的文职人员,牛啊
xml123
(xml123)
July 14, 2024, 10:43am
17
还好大部分局域网联机的游戏并不需要真的在一个局域网里,只要主机开一个端口暴露给其他用户就行,你这个游戏算是比较复杂的情况。
w568w
(w568w)
July 14, 2024, 11:45am
18
感谢各位的讨论,我更新了 IKEv2 的测试结果:不能满足需求 。
嗯嗯,我用 macOS 的朋友也有个群晖做旁路由,但是恐怕问题没这么好解决:在他的局域网里,因为 MacBook 对路由器的存在不知情,它发出的广播包并不会自动到达我和另一个朋友的电脑(或许蒲公英可以做到转发广播?不太清楚)。
因此,最好情况下,也就是我和另一个朋友能搜索到他的房间。
xml123:
你这个游戏算是比较复杂的情况
是的。准确地说,在 Windows、Linux 上都有一堆方案,ZeroTier、n2n、Tinc 都是完全满足需求的、「支持广播」的虚拟局域网 。尤其是 n2n,个人力推。
但到了 macOS 上,问题立刻复杂了 :n2n 等软件的开发人员,作为独立开发者,没钱上交年贡,买 macOS 的 V.P.N 调用权限(更不要说苹果的官方 V.P.N. API 只开放给「企业开发者」了);苹果的 API 又朝令夕改,接口想弃用就弃用,权限想收紧就收紧。
skystar
(skystar)
July 14, 2024, 12:04pm
19
因为你,我去搜了关键词,然后发现了一片新大陆,目前成功打入了群里
有人遇到你一样的局域网广播问题,皎月连已经有插件支持了,并且群里大佬的改版也直接打包内置了
mac版本正在开发中,相信ios也不远了(他们都是自行打包,用各种方法侧载)
1 Like
w568w
(w568w)
July 14, 2024, 12:07pm
20
w568w:
虚拟网络必须支持广播
必须支持 Windows、Linux 和 macOS
既然这个问题目前看起来是无解了,给大家介绍一下我这几天研究方案的经验总结吧。放松条件之后还是有很多选择的:
支持三端的普通局域网,有公网服务器 :n2n(Linux 安装 n2n,Windows 安装 Happynet ,macOS 安装 Happynet 的 iOS 应用);
支持三端的普通局域网,无公网服务器 :Tailscale;
Linux 和 Windows 的广播局域网,有公网服务器 :n2n;
Linux 和 Windows 的广播局域网,无公网服务器 :Zerotier;
macOS 和 Windows 的广播局域网,有公网服务器 :用 setup-ipsec-vpn 或群晖、OpenWrt 等,自建 L2TP/IPSec 服务器。
2 Likes
skystar
(skystar)
July 14, 2024, 12:22pm
22
他们有好几个群,我现在进的是一个串流群,目前未得知皎月连的作者在哪个群,等我再探探