woaipaojiao

[技术求助]手机端玩局域网联机游戏,如何虚拟组网, wireguard 已废

  •  
  •   woaipaojiao · May 18 · 1893 views

    RT ,手机端游戏是文明 6 ,按照 AI 给的办法,wireguard 、easytier 、tailscale 都不行。

    原因在于,手机端的文明 6 ,支持局域网联机,但是不能手动输入 IP ,只能靠列表刷新。

    手机端使用 wireguard 虽然可以组网成功,但是好像不能广播 ip ,导致主机端推送不出去自己的 ip ,客户端自然也就无法查到房间,列表就是空。

    按照 AI 的说法,虚拟组网是 3 层,手机端的局域网联机老游戏是 2 层。有木有大佬指点一二

    14 replies    2026-06-04 13:27:07 +08:00
    datocp
        1
    datocp  
       May 18 via Android
    试试 softether 组服务器
    然后导出的配置导入 openvpn
    平时连回公司也都是基于 tcp 的 rdp/录像机之类的,没遇到问题。

    一直的思路 vpn 比代理更万能。其实早些年游戏都是用 softether 组的,可惜不能用在手机上。
    qinsansui233
        2
    qinsansui233  
       May 18 via Android
    n2n
    bobryjosin
        3
    bobryjosin  
       May 18
    两端有 openwrt 或者 routeros 就好办,用 wireguard 点对点,在 wireguard 里面跑 vxlan 或者 eoip ,然后把接口桥接进去,把 L2 打通就可以,纯设备就没办法了
    xqzr
        4
    xqzr  
       May 18
    L2TP()
    itechify
        5
    itechify  
    PRO
       May 18 via Android
    zerotier 在 L2 层
    woaipaojiao
        6
    woaipaojiao  
    OP
       May 19
    @itechify 安卓端也能 L2 吗
    mrzx
        7
    mrzx  
       May 19
    拜托,兄弟,什么是 2 层 VPN ,什么是 3 层 VPN ,你都没弄清楚。。。

    这 AI 也是的。。

    3 楼办法是对的。。。
    woaipaojiao
        8
    woaipaojiao  
    OP
       May 19
    @itechify 搜了下,官网原文是 Unfortunately the iOS and Android VPN APIs won't let ZeroTier use multicast/broadcast. These are typically how apps auto-discover services on the LAN.还是没法广播
    woaipaojiao
        9
    woaipaojiao  
    OP
       May 19
    @bobryjosin 可以细说吗大佬
    tril
        10
    tril  
       May 19
    OpenVPN 支持 TAP 模式,但据 OpenVPN 文档所述,Android 和 iOS 的 VPN API 目前都不支持 TAP ,只支持 TUN 。其他第三方 VPN APP 应该都有相同的情况,不知道系统自带的 VPN ( IPsec/IKEv2 之类的)能不能幸免。

    元气骑士的局域网联机也有相同情况,解决方案是在房主设备上指定客户端 IP ,做 广播 -> 单播 转换之后再发给客户端,这样就能使用 TUN VPN 了。可以参考这个不到 30 行的小工具: https://github.com/Sengxian/SoulKnightHelper
    guanzhangzhang
        12
    guanzhangzhang  
       May 20
    提出一个思路,😐你在每个 peer 里跑个 socat 类似转发,本地局域网监听端口转发到 server 的,这样收到组播后实际会发到 server 那儿
    woaipaojiao
        13
    woaipaojiao  
    OP
       May 21
    @zephyr65535 感谢,这是正解,已经晚上了
    woaipaojiao
        14
    woaipaojiao  
    OP
       2 days ago
    看到有些兄弟收藏了,再 call 一下解决方案。参考的教程就是 https://www.bilibili.com/opus/993912143071936516

    对应的项目是 https://github.com/chenxi65535/civ6-multiplay

    思路上是说,广播是手机端触发的,手机点击刷新按钮,会向当前局域网广播,问所有人:你是不是主机

    1.因为种种限制,手机端广播只能在真实局域网下有效。此时就可以在真实局域网下,再加一个真实设备,例如平板/电脑。

    2.手机端和电脑在同一个真实局域网,所以手机端的广播,可以被电脑捕捉到。此时 udp 包就被捕获了。

    3.现在,服务端(也就是我朋友),和我的电脑,再异地组网,组网软件应该任选了(我理解如果不是文明 6 ,此时服务端用 FRP 也是可以的,只需要让电脑能访问到就行了)

    4.此时的局势是:我的手机(文明 6 )和我的电脑在同一个真是局域网,我的电脑和我朋友(做主机)在一个虚拟局域网。

    5.这时候我的手机点击刷新列表按钮,手机端广播,我电脑收到,我电脑转发报文给我朋友,我朋友响应给电脑,电脑响应给手机。

    这时候手机就把电脑,当作了服务端。至此实现了联机。注意,全程我的手机(客户端)是不需要 vpn 的,我的手机就是把电脑当作主机了。


    其实我后续也测试了连接成功后去除电脑端,但是其实不行,因为电脑端的 udp 转发,只是把 udp 的 payload 拿出来重新给手机端发包了,手机端接收到的报文的 ip 是电脑的,ip 是内核自动加的。

    所以如果电脑端想变成打洞的角色,就需要转发 udp 报文时保留主机端的 ip ,这时候手机端就需要和服务端互通。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2927 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 13:40 · PVG 21:40 · LAX 06:40 · JFK 09:40
    ♥ Do have faith in what you're doing.