V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
edward1987
V2EX  ›  程序员

请教下 war3 局域网远程联机问题

  •  
  •   edward1987 · 311 天前 · 3804 次点击
    这是一个创建于 311 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:和朋友最近复古打机,玩 war3 ,想各自在家的时候也能玩,查资料得知 war3 局域网是通过 udp:6112 + tcp:6112 两种交互完成

    我有一台腾讯云的 vps 。

    尝试 1:我的电脑 A,朋友电脑 B,朋友家有一台和 B 局域网的服务器 C 。

    通过 vps+gost ,在 C 上开启本地端口( udp+tcp) 6112 并转发到 VPS 上,在我的电脑 A 上通过远程端口转发 ( rtcp 和 rudp ),将 VPS 上的请求转发到我本地 6112 上。

    整体调用链是:B 开了房间,会全局广播 UDP ,C 收到广播,通过 VPS 转发到我本地 6112 端口。 但是 UDP 转发却失败了,每次广播我本地是有看到请求的,但是 C 上面一直报 i/o timeout 。我电脑上也看不到房间。方案一失败,不知道为何?

    尝试 2: 组建 zerotier 内网,组建成功,设备都加入了同一个子网,也能 ping 的通,延时 30ms 。但是还是看不到房间,udp 的广播一点都没收到,我也不知道为啥😂

    大佬们有啥好的方案嘛? 或者帮忙看看我的方案有啥问题,中年人打机不容易

    第 1 条附言  ·  311 天前
    谢谢大家的建议,今晚回去我试试 UP 平台~
    第 2 条附言  ·  310 天前
    昨晚试了,UP 平台可以,就不继续折腾了~ 谢谢大家
    第 3 条附言  ·  302 天前
    2023-05-31 更新

    关于 UP 平台,之前是自己开房试了自定义地图,没问题。 昨晚和朋友玩,如果是平台自带的图没问题,但是本地的图另一个人进不了房间,一直报下载失败。

    于是重拾 zerotier ,感谢 @LinePro 的指点,将 zerotier 网卡跃点数设置为小于 以太网的就行了,成功通过 zerotier 联网,并且玩了一把没问题。
    50 条回复    2023-05-23 20:57:07 +08:00
    liuzhedash
        1
    liuzhedash  
       311 天前
    没理解 C 的用途是啥,只是看 udp 广播有没有广播出去?
    其实有个简单的思路,在 vps 上搭个 openvpn ,然后 AB 都连上去。
    bruce0
        2
    bruce0  
       311 天前
    VPN 应该能解决这个问题吧, 一个人开 VPN 服务, 另一个人连接上去, 前提是开 VPN 服务的那个人需要有公网 IP
    FlyPuff
        3
    FlyPuff  
       311 天前 via Android
    最无脑的解决方法,这种现成的 xx 对战平台就支持的游戏,直接用就好了诶。不过,不知道这些对战平台还健在没有,很多年没玩过了。。。
    ikuan
        4
    ikuan  
       311 天前   ❤️ 1
    这个之前玩文明 6 局域网连接研究过,挺复杂的,试过一堆开源软件,而且 windows 上还要配虚拟网卡的优先级,还得看当前网络 nat 类型啥的,不过有个现成的软件解决方案 搜搜 EasyN2N(小黄鸭),亲测可用。
    bruce0
        5
    bruce0  
       311 天前
    @bruce0 具体的我也没有搭建过, 你可以搜一下 open vpn 的搭建方式 我们公司居家办公的的时候用的就是 open vpn 连接到公司内网, 两个人联机打游戏, 只要模拟链接到另一个人的内网应该能满足
    edward1987
        6
    edward1987  
    OP
       311 天前
    @liuzhedash C 作用是收到广播并转发广播用,没有 C 的话我不知道咋直接转发😂,openVPN 我看看~
    @bruce0 嗯好我下次试下 openvpn
    @FlyPuff 对战平台现在存活的很少了,不支持自己开图了
    yswb
        7
    yswb  
       311 天前   ❤️ 1
    windows 的 udp 广播只发一个网卡,试试类似 https://github.com/ubihazard/broadcast 这样的工具,把广播发到所有网卡(理论可行,我没试过)
    edward1987
        8
    edward1987  
    OP
       311 天前
    @yswb zerotier 确实有可能是这个问题!下回我试下
    @ikuan 好,下回我试试 EasyN2N~
    ipfox
        9
    ipfox  
       311 天前
    @FlyPuff +1 ,省的折腾
    root01
        10
    root01  
       311 天前
    n2n 专门搞这个的
    fuzzys
        11
    fuzzys  
       311 天前
    radmin vpn 专门局域网联机用的,甚至不需要 vps
    documentzhangx66
        12
    documentzhangx66  
       311 天前
    1.技术上:
    A.你朋友家里,FRP 服务器 C 的 war3 Server 端口到 VPS 的任意端口。
    B.你的 PC ,socat 转发 war3 client 本地端口到 VPS 的相关端口。

    你第一次搞这事的话,整个调试过程非常麻烦。

    2.使用 zerotier ,VPS 上建立 moon 节点,然后服务器 C 与你的电脑安装 leaf 节点,你的电脑能直接 ping 通服务器 C 就够了。

    3.以上两条方案,我都不建议。我建议你使用现成的对战平台。

    4.但以上 3 条方案,我也不太建议。因为现在 Steam 上面有非常多的好玩的联机游戏,你和朋友玩,不超过 4 个人,我强推 Deep Rock Galactic 。这游戏现在是 Steam 上组队 PVE TOP 1 的游戏。你可以去 B 站看看游戏视频。
    dode
        13
    dode  
       311 天前 via Android
    两边都是家庭宽带,有公网 IP 吗,直接端口映射,wiregurad 组网看看,
    CheckMySoul
        14
    CheckMySoul  
       311 天前
    试试 openvpn 的桥接模式,腾讯云 vps 启动 openvpn 服务 tap 桥接模式,你和朋友练上去,网卡分配 VPC 的 IP ,具体看这 https://community.openvpn.net/openvpn/wiki/BridgingOverviewhttps://community.openvpn.net/openvpn/wiki/BridgingAndRouting
    lesismal
        15
    lesismal  
       311 天前   ❤️ 1
    搭个 BN 大家一起玩?
    https://github.com/pvpgn/pvpgn-server
    siknet
        16
    siknet  
       311 天前
    整那么麻烦干嘛,11 平台自建地图房
    happyn
        17
    happyn  
       311 天前
    我们的服务 happyn ,基于 n2n 的,可以用于游戏联机:
    missdeer
        19
    missdeer  
       311 天前
    记得当年 war3 联机是用 IPX 啥的协议,像浩方之类的平台是在 TCP/IP 上模拟出来的。
    GuuJiang
        20
    GuuJiang  
       311 天前 via iPhone
    搜索 Battle.Lan ,当年上大学时都用这个来和其他栋楼的寝室甚至其他学校的人联机
    LuffyGu
        21
    LuffyGu  
       311 天前
    有现成的不用,非得造个轮子吗?
    Huelse
        22
    Huelse  
       311 天前
    我在想能不能通过 wireguard/zerotier 来实现?能指定网卡或网段就好。
    LaGeNanRen
        23
    LaGeNanRen  
       311 天前
    如果你不是为了讨论技术问题,只是为了满足联机需求,为什么不考虑一下现成的各大平台呢
    exqibao
        24
    exqibao  
       311 天前
    可以搭建 N2N ,war3 联机玩没啥问题。

    不过有些局域网游戏找不到房间,可以尝试修改网卡优先级,和禁用多余网卡,只保留物理网卡和 n2n 虚拟网卡。
    knva
        25
    knva  
       311 天前   ❤️ 1
    特地试了下,zerotier 可以
    Champa9ne
        26
    Champa9ne  
       311 天前
    为啥不用 wireguard 异地组网?既然有云服务器,云服务器做 wg 主节点,两边家庭宽带连过去不就得了。

    国内的云服务器基本都是低带宽低延迟的状态,做这个贼适合。毕竟联机也不会有很多流量过。
    cloudfox
        27
    cloudfox  
       311 天前
    @edward1987 11 平台 up 平台都支持自己开图啊,找一下入口
    edward1987
        28
    edward1987  
    OP
       311 天前
    @siknet
    @LaGeNanRen
    @cloudfox
    朋友上次下载了 11 平台,说是要账号达到多少等级才支持自己开图 我下载试试看,如果可以我也不想折腾😂
    edward1987
        29
    edward1987  
    OP
       311 天前
    @knva 我的不行诶,ping 的通倒是没 udp 广播,不知道是不是因为两个人是不同运营商的原因
    LaGeNanRen
        30
    LaGeNanRen  
       311 天前
    @edward1987 太多了,当年的浩方,联众世界,qq 对战平台,网易有个平台,11 等等等,就算你朋友说的有限制,你付费那点点钱也比你自己捣鼓的成本要低多了
    LinePro
        31
    LinePro  
       311 天前   ❤️ 2
    1. 单说 war3 联机的话可以看看 UP 对战平台 https://www.reckfeng.com (前身是网易和暴雪还没闹掰之前的官方对战魔兽平台),印象中开自定义图是不需要付费的。
    2. 不管 ZeroTier 方案还是 OpenVPN Tap 方案,要记得将所用的虚拟网卡 IPv4 的跃点数设置成 1 (或者手动修改路由表优先级),确保 UDP 广播包能够发送到虚拟网卡上。还有一点就是系统防火墙要放行游戏的流量,允许入站。这对于其他局域网联机游戏来说也适用。
    ysc3839
        32
    ysc3839  
       311 天前 via Android
    最不折腾的方案是 VPS 装个 OpenWrt ,然后配置 OpenVPN tap 模式,IP 地址由 OpenWrt 分配,这样就组建了虚拟的以太网,这些依赖以太网广播啥的游戏也就能玩了。这个基础上再弄一下就可以支持 UPnP 以及 Fullcone NAT ,玩一些 P2P 网游(如 GTAOL)也能解决问题。
    arrhenius
        33
    arrhenius  
       311 天前
    回忆流走一波
    ql562482472
        34
    ql562482472  
       311 天前
    我 08 年玩的时候是用 hamachi 。10 年网络恢复之后就是各种对战平台 qq 对战平台、浩方对战平台 之类的。
    14 年之后就不怎么玩了
    zjsxwc
        35
    zjsxwc  
       311 天前
    frp 是支持 udp 的,比如例子里

    https://github.com/fatedier/frp#forward-dns-query-requests

    这个公网 server 转发 udp 请求到 client ,client 再转发到 google 的 udp dns 服务器。
    bobbyshmurda
        36
    bobbyshmurda  
       311 天前
    整这么复杂。。。
    还是去平台吧,虽然最多人玩的网易平台已经去世,但是浩方 /11 还是经典的味道
    zeusho871
        37
    zeusho871  
       311 天前 via Android
    easyn2n ,很好用
    MeikoZh
        38
    MeikoZh  
       311 天前
    openvpn 简单又快捷应该是没问题的。我之前也和朋友联机用其他平台,后来自己搭在 vps 上就好了,现在你测试过了么?
    lisxour
        39
    lisxour  
       311 天前
    @bobbyshmurda 没死,换名字了,叫 UP 对战平台,就是改了 LOGO ,文件数据、界面全都一毛一样的。😂
    keller
        40
    keller  
       311 天前
    不是有各种对战平台吗?费这个事干啥?
    vdrapb
        41
    vdrapb  
       311 天前   ❤️ 1
    @edward1987 我和我朋友一直都是用的 UP 对战平台。自己开图也没有等级限制
    palxie
        42
    palxie  
       311 天前
    你们当年没用过 浩方 吗 😂
    sanqian
        43
    sanqian  
       311 天前
    UP 平台就好..就是上面的 RPG 图让人恶心
    binyu
        44
    binyu  
       311 天前
    那么,古尔丹,代价是什么呢?
    xuzheliang
        45
    xuzheliang  
       311 天前   ❤️ 1
    我之前也做过联机,你没法连接的问题是因为 war3 对多网卡(或者说多网络适配器)的情况没有做好处理,导致 upd 的广播包发到了错误的网络上,进而不能联机。
    举个例子,如果你同时有 wifi 和网线,那么 war3 可能只走网线或者只走 wifi (具体根据排名,war3 应该永远走第一个)。如果你的好友在另一个网络上,那就无法联机。
    此外,如果你装的有 vmware 等虚拟机,就会安装上虚拟网络适配器,这时候 war3 甚至会只在这些虚拟网段上查找 peer ( zerotier 也会有虚拟网络适配器,甚至你有多个网络还会有多个)。
    解决方案似乎只有禁用其他网络适配器,强迫 war3 用剩下的那个连接,具体用了哪一个,可以用 wireshark 抓包来查看。最后,记得关闭 windows 的防火墙,不然你会倒在黎明前的黑暗里。
    py2ex
        46
    py2ex  
       311 天前
    hamachi VPN 上面有人提到过
    记得有人说过是通过收发局域网 UDP 包发现房间的
    Meltdown
        47
    Meltdown  
       311 天前
    等废半天劲折腾好了还有心情玩吗,直接上平台
    c3de3f21
        48
    c3de3f21  
       310 天前   ❤️ 1
    @lesismal 欸,这个好,这个好
    LinePro
        49
    LinePro  
       310 天前
    @xuzheliang #45
    有关你提的这个问题,可以查看我在 #31 的回复。
    关键就是广播包在路由表里的优先级,调整跃点数即可,不必禁用网卡。
    此外防火墙也不必完全禁用,设置相关程序允许入站即可。
    xuzheliang
        50
    xuzheliang  
       310 天前
    @LinePro 受教了,我之前认为是按照某个 API 的返回值取第一个适配器,这样看来,可能是对 0.0.0.0:xx (端口)这种写法的默认表现
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   951 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 21:18 · PVG 05:18 · LAX 14:18 · JFK 17:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.