Win11老游戏局域网联机:IPXWrapper将IPX调用转为UDP广播 上周有位朋友在群里发了张截图两台装着 Windows 11 的机器接在同一台交换机下面游戏顺利进到多人菜单可局域网房间列表干干净净一个房间都没有。他试过在网络适配器属性里点“安装”翻遍协议列表也找不到 IPX/SPX又装了网络发现、开了共享、关防火墙依然没用。这个场景我太熟了——从 Vista 开始系统就把 IPX/SPX 协议栈整个拆掉了所以“装回协议”这条路在 Windows 11 上根本不存在。真正能救场的是一条绕行路线用 IPXWrapper 这组开源 DLL把老游戏发出的 IPX 调用在用户态翻译成普通 UDP 广播让它在纯 TCP/IP 的网络上跑起来。这篇就把我从拿到压缩包到两台机器成功建房的全过程拆开讲包括哪几个文件必须放对位置、ini 里哪几行决定成败、防火墙只需开一个口子以及联机失败时按什么顺序排查。适合手里还留着一堆老游戏、想在 Win11 上和朋友在同一局域网里再打一局的人哪怕你完全不懂协议栈照着做也能跑通。1. 先搞清楚 Win11 为什么把 IPX 这条路彻底拆掉了1.1 老游戏菜单里那个 IPX 选项当年是刚需九十年代末到两千年初的局域网对战游戏联机菜单里通常并列着几个协议选项TCP/IP、IPX、串口、调制解调器。那时候很多人家里还没有路由器几台机器靠一台集线器或交换机连起来根本没有 DHCP 服务器IP 地址要手工配配错了就互相看不见。而 IPX 有个天然优势它不需要你知道对方是谁。游戏启动后往局域网里发一个广播包问“这局游戏有人在开吗”所有开着同一款游戏的机器都会回一声房间列表就自动长出来了。这种“喊一嗓子就有人应”的发现机制对当年的玩家来说太友好了所以大量老游戏把 IPX 当成局域网联机的主推协议。从协议本身看IPX 是当年局域网文件服务那套体系里的网络层协议配套还有负责可靠传输的 SPX。它的地址结构很简单4 字节网络号、6 字节节点号、2 字节套接字。节点号基本就是网卡的物理地址网络号由服务器或系统分配。整套寻址方式跟 TCP/IP 完全平行互不干扰。游戏厂商喜欢它还有个现实原因那个年代网卡驱动和操作系统都自带 IPX 支持开发者调用接口就能发包不用自己操心 IP 配置、子网掩码、网关这些东西省事。1.2 从 Vista 开始的移除让“装回协议”变成死路问题出在系统演进上。从 Vista 起微软把这套协议栈从系统里彻底拿掉了之后的 Win7、Win10、Win11 一路继承下来。也就是说你在 Win11 的“网络连接属性 → 安装 → 协议”列表里翻永远不会看到它。这不是藏起来了是组件本身不存在了。网上很多老教程还停留在 XP 时代教你点“安装 → 协议 → 添加 → 从磁盘安装”照着做只会卡在找不到文件那一步。更麻烦的是很多老游戏的联机菜单里IPX 是唯一能用的局域网选项TCP/IP 那一项要么没有要么是给互联网直连用的需要手动填对方 IP体验极差。所以你面临的是一个死结游戏只认 IPX系统不提供 IPX。这个死结不解开游戏本身能跑起来也没用只能单机。1.3 IPXWrapper 的巧劲不装协议而是把调用翻译掉IPXWrapper 解决的问题就在这儿。它不去碰系统协议栈也不装驱动走的是一条完全不同的路利用 Windows 加载 DLL 的搜索顺序在游戏目录里放一组同名 DLL游戏启动时优先加载目录里的这一份而不是系统目录里的。这组 DLL 拦截住游戏对网络接口的调用把“我要发一个 IPX 包”翻译成“我要发一个 UDP 广播包”然后交给系统的正常 TCP/IP 网络发出去。对面的机器同样跑着这组 DLL收到 UDP 包后再翻译回 IPX 包喂给游戏。打个比方这就像两个只会说方言的人要打电话。系统提供的电话线只传普通话于是你在他俩旁边各放了一个翻译一个把方言翻成普通话对着话筒说另一个把听筒里的普通话翻回方言。两个人自己完全不知道中间发生了什么还是照常聊。这个方案的巧妙之处在于“零侵入”——不用改注册表绝大多数情况、不用装驱动、不用动系统组件卸载就是把几个文件删掉干净利落。1.4 哪些游戏吃这套哪些游戏压根用不上先做个筛选能省掉很多无用功。判断标准很简单进游戏的多人/局域网菜单看协议选项里有没有 IPX 字样。有就属于这套方案的目标用户如果菜单里只有 TCP/IP 或者只支持某种平台服务那 IPXWrapper 帮不上忙别浪费时间。还有一类情况容易被误判游戏菜单里有 IPX但实际联机走的是 DirectPlay 的 IPX 接口这种需要额外挂一个组件后面第 6 节会讲。另外纯 DOS 游戏在 Win11 上通常跑在模拟器里模拟器自带自己的网络模拟层跟 IPXWrapper 不是一回事也不要混着用——我见过有人把 DLL 塞进模拟器目录结果模拟器直接起不来。2. 文件落位那几个 DLL 到底该复制到哪一层目录2.1 压缩包里每个文件的分工缺一个都会出问题从项目发布页拿到压缩包解压后你会看到一堆文件看着乱其实分工很清晰。核心是一个主 DLL负责真正的协议翻译逻辑其余几个是“门面”DLL作用只有一个——游戏调用它们时它们把请求转交给主 DLL。之所以要这么多门面是因为不同年代的遊戲调用网络的入口不一样有的走老式 Winsock有的走另一套接口得分别接住。这意味着一个硬性要求门面 DLL 和主 DLL 必须放在一起缺一个都不行。我见过有人只复制了看起来“最像主角”的那个文件结果游戏启动就报错或者干脆静默退出查半天以为是兼容性问题。判断方法很直接解压出来的 DLL 文件凡是和游戏目录里已有文件名不冲突的全部复制进去一个都别挑。压缩包里通常还会附带一个示例配置文件和一个注册表文件。示例配置文件改名后就是你的工作配置注册表文件是给需要 DirectPlay 支持的游戏准备的暂时用不上就先放着别急着双击。2.2 32 位和 64 位选错表现是秒退而不是报错这是最容易翻车的一步。项目一般同时提供 32 位和 64 位两套文件选哪个不取决于你的系统是 64 位而取决于游戏可执行文件本身是 32 位还是 64 位。Win11 绝大多数是 64 位系统但那个年代的老游戏几乎清一色 32 位程序所以你需要的是 32 位那一套。这个点非常反直觉很多人看到自己系统是 64 位就去拿 64 位文件放进去游戏直接闪退连错误框都不给。怎么确认游戏是几位任务管理器里看进程32 位进程在 Win11 上通常会有明确标注或者直接看 exe 文件属性兼容性那一栏有时能看到最稳的办法是用命令行工具读文件头。懒人做法先把 32 位的塞进去试不行再换 64 位两次就能确定成本很低。游戏程序位数应选文件选错的表现32 位绝大多数老游戏32 位那一套换 64 位后通常启动即退出无提示64 位少数重制版64 位那一套换 32 位后报“不是有效的应用程序”2.3 覆盖之前先备份有些游戏自带同名 DLL复制之前先看游戏目录里已经有什么。有些游戏自己就带了一个同名 DLL尤其是后来的补丁版你直接覆盖会把原来的覆盖掉万一这游戏本来就能正常联网你就把一条好路堵死了。稳妥做法是把要覆盖的文件先改个名留着出问题随时换回来。另一个细节是安装位置。如果游戏装在系统盘的程序目录下普通权限可能写不进去导致配置文件和日志都生不出来排查时会很被动。建议整个游戏目录挪到非系统盘或者在复制前确认你对那个目录有完全控制权限。这一步花不了两分钟但能省掉后面“明明配了却没生效”的一大堆困惑。还有一个容易被忽略的点某些游戏启动器会做文件校验发现目录里多了东西就重新下载或拒绝启动。这种情况要么关掉校验要么直接用游戏主程序启动、绕开启动器。老游戏一般没这么讲究但碰上了要知道往这个方向想。3. ipxwrapper.ini 里那几行决定了九成的成败3.1 interface 绑错网卡是联机失败的头号原因配置文件里最关键的一行是指定绑定哪块网卡。默认值通常是自动听起来省事实际上是坑最多的地方。现在的机器上除了真实的物理网卡还躺着一堆虚拟网卡虚拟机软件装的、容器功能生成的、远程桌面留下的、蓝牙网络的。自动选择很可能挑中其中一块虚拟网卡于是广播包全发进了虚拟网络真实局域网里一个字节都没出去。解决方式是把网卡的实际局域网 IP 写死。打开命令行敲ipconfig找到你实际在用的那块网卡通常是 Wi-Fi 或者以太网把它当前的内网地址填进去。注意这个地址如果是自动获取的重启路由后可能会变那就得回来改。想省事可以在路由器上给这台机器绑定固定地址。[ipx] interface 192.168.1.23 [udp] port 54792 [log] level 3上面是一份常见的最小可用配置。字段名在不同版本之间可能略有差异以自己的压缩包里那份示例文件为准照着它的格式填。写的时候别用中文标点也别在值后面加注释符号以外的内容配置解析器很朴素容错不高。3.2 net 和 node两台机器撞车会让房间列表出怪事IPX 地址由网络号和节点号拼起来翻译层需要伪造出这么一套地址给游戏看。节点号默认可能会取本机网卡的物理地址如果取不到某些版本会用一个固定值。这就埋下隐患如果两台机器的节点号撞了表现出来的不是“连不上”而是一些很诡异的现象——比如房间里出现了重复的自己或者一方能看到房间但点进去就卡住。处理办法是手工给每台机器指定一个不同的节点值。十二位十六进制两台机器最后几位错开就行比如一台结尾是 01另一台是 02。网络号同理两边保持一致别一台填了 A 一台填了 B。这两行看起来枯燥但它们是“两台机器能不能互相认出来”的基础值得多花两分钟确认一遍。3.3 帧类型和端口两个需要动手试的参数帧类型这个参数决定翻译出来的包在以太网层面模拟成什么封装。上世纪不同游戏厂商选的封装不一样虽然现在包都被 UDP 包起来了但这个参数仍会影响某些游戏的兼容表现。默认值一般能用可如果两台机器都能互相 ping 通、防火墙也放行了、日志里却看不到对端的包就值得把几种常见的帧类型挨个试一遍。我遇到过一款老游戏默认值下永远看不到对方换成另一种封装立刻就好了前后折腾了快两个小时。端口默认值通常是一个固定的高位端口一般不用改。需要改的场景只有两个一是这个端口被别的程序占了日志里会有明显提示二是你要跨网段转发需要固定一个已知端口方便做规则。改的时候两台机器必须改成同一个值这点经常被忘。4. 让两台机器真正“看见”对方防火墙与首轮验证4.1 只需要放行一个 UDP 端口IPXWrapper 走的是 UDP二、三台机器之间是广播加单播混合。防火墙要放行的就是配置里那个端口方向是入站协议 UDP。图形界面点也行命令更省事netsh advfirewall firewall add rule nameIPXWrapper UDP dirin actionallow protocolUDP localport54792执行完可以用netsh advfirewall firewall show rule nameIPXWrapper UDP确认规则在。这里有个细节容易被忽略Windows 的网络配置文件有专用和公用两种状态如果你在图形界面里加规则时只勾了“专用网络”而当前网络被识别成了公用连了新 Wi-Fi 常常会这样规则就不生效。用命令加规则默认对所有配置文件生效能避开这个坑。加完规则别忘了确认当前网络状态别在公用配置文件下折腾半天。4.2 网络发现、文件共享跟这事没半点关系这是我在群里见过最多的错误方向。很多人一看局域网联机不通第一反应是去开“网络发现”、开“文件和打印机共享”、把防火墙整个关掉。这些操作对 IPXWrapper 毫无帮助因为那套东西是给文件共享用的走的是完全不同的端口和协议。开了顶多是心理安慰关了防火墙反而让自己暴露在风险里。真正需要确认的只有三件事两台机器在同一网段内网地址前三段相同、防火墙放行了那个 UDP 端口、配置里绑的是真实网卡地址。这三条满足剩下的就是游戏层面的问题别在系统设置里绕圈。4.3 用日志确认握手有没有真的发生配置里把日志级别调到能出详细记录的程度然后启动游戏、进联机菜单、等十几秒退出去游戏目录找日志文件。日志里能看到几件关键信息绑定到了哪个地址、监听在哪个端口、有没有收到来自其他地址的包。这一步的判断价值极高。如果日志里干干净净说明包根本没进来问题在网络层网卡绑错、防火墙拦了、两台机器不在一个广播域。如果日志里能看到对端地址在反复发包但游戏里仍然没房间问题在翻译层帧类型不匹配、节点号冲突。这两类问题的最优解法完全不同先分清方向再动手比盲目试参数快得多。想看得更透可以临时抓一下包看那个 UDP 端口上到底有没有流量进出。抓包看的是“网线上真实发生了什么”比日志更硬但门槛也高一点普通排查用日志足够了。5. 联机失败的六步排查链路按顺序走别跳5.1 前三步先确认 DLL 到底有没有被加载第一步确认位数选对了。32 位游戏配 32 位文件别拿系统的位数当依据。第二步确认门面 DLL 一个不少地躺在游戏主程序同级目录不是子目录不是上一级。第三步确认游戏真的在用你放进去的那份而不是系统目录里的。这一步稍微麻烦点可以用进程查看工具看游戏进程加载的模块路径如果显示的是游戏目录下的路径说明劫持成功如果显示的是系统目录说明加载顺序没生效。加载没生效的常见原因有三个文件放错了目录层级、被杀毒软件隔离了其中一个文件、游戏用了某些保护机制阻止目录加载。第三个原因在老游戏上很少见前两个非常常见。特别是杀软这类劫持性质的 DLL 行为特征很像恶意软件被静默隔离的概率不低。先在杀软隔离区看看有没有再考虑加白名单。5.2 后三步帧类型、端口和广播域第四步翻日志确认绑定地址对不对是不是绑到了虚拟网卡。第五步如果日志显示收到了对端的包但游戏没反应去试另一种帧类型每次只改一个参数、两台机器同时改、改完重启游戏。第六步如果日志里连包都收不到检查两台机器是不是真的在同一个广播域——同一台路由器下的两个 Wi-Fi 连接通常没问题但有些公共网络开了客户端隔离客户端之间互相看不见这种情况在系统层面无解。排查最容易犯的错是“一次改好几个地方”。改了网卡地址、换了帧类型、又关了防火墙结果好了你根本不知道是哪一项起的作用下次出问题还是抓瞎。一次只动一个变量虽然慢一点但每一步都是有效信息。5.3 症状对照表先对号再动手现象最可能的原因优先动作游戏启动即闪退无提示DLL 位数与游戏不匹配换另一套位数的文件游戏能进但日志文件压根没生成DLL 未加载或被隔离查模块加载路径、查杀软隔离区日志有绑定记录但无任何收到的包绑错网卡 / 防火墙拦截 / 不在同一广播域核对网卡 IP、查防火墙规则日志能看到对端包游戏内无房间帧类型不匹配或节点号冲突逐种试帧类型、改节点号房间出现但进不去或出现重复自己两台机器地址冲突手工指定不同的节点号单机能玩进联机菜单就卡死门面 DLL 缺失补齐压缩包内全部 DLL这张表不是万能的但能砍掉大部分试错时间。实际排查中超过一半的问题落在第一行和第三行也就是位数和网卡绑定这两件事上。6. 进阶场景DirectPlay、串口模拟与跨网段6.1 走 DirectPlay 的老游戏要额外挂一层有些游戏的联机不是直接调网络接口而是走系统提供的一套老式多人游戏接口这一层的 IPX 支持同样在新系统上没了。压缩包里那个注册表文件和额外的门面 DLL 就是为这种情况准备的把它一起放进游戏目录导入注册表项让这一层调用也能被接住。判断要不要这一步的方法如果所有前置步骤都对、日志显示包正常收发、但游戏里就是建不了房而且这款游戏年代偏晚两千年前后那种带完整多人界面的基本可以往这个方向怀疑。导入注册表前先备份这是常识别嫌麻烦。这一步不是所有游戏都需要不需要的时候做了也没坏处但会让排查多一个变量所以建议放在最后做。6.2 串口和调制解调器联机是另一套东西老游戏的联机菜单里除了 IPX 和 TCP/IP经常还有串口直连和调制解调器拨号。这两项跟 IPXWrapper 没有任何关系它们走的是完全不同的路径。串口联机在 Win11 上反而更容易救活因为有成熟的虚拟串口工具可以把两台机器甚至同一台机器上的两个游戏实例串起来。我提这一点的原因是很多人一看 IPX 走不通就放弃了其实这款游戏可能还有串口那条路。进联机菜单把所有选项都看一遍有时候答案就在旁边。当然串口方式的速度和稳定性不如网络人多了也不合适只适合两个人怀旧。6.3 跨网段和异地联机的现实限制IPXWrapper 的基础玩法依赖广播而广播不出网段。两台机器接在同一个路由器下没问题一旦中间隔了路由器、或者一方在公司一方在家广播就过不去了。这种情况下需要在一端做端口转发或者搭一个中继把 UDP 包在两边倒一手。这套配置复杂度不低需要一端有可用的公网入口还要处理两边地址不一致的问题。我的建议是先把同一局域网下的联机跑通确认配置、帧类型、节点号这些全都对了再去考虑跨网段。顺序反了会很痛苦——你没法判断失败是因为跨网段的转发没配好还是本地的配置本来就有问题。先在简单环境里拿到一次成功后面所有改动都有了一个可靠的基准点。7. 我踩过的几个坑和一个能省时间的检查顺序说几个只有真上手才会知道的事。第一虚拟机软件和容器功能装出来的虚拟网卡是自动绑定模式最大的敌人机器上虚拟网卡越多自动选错的概率越高直接写死地址最省心。第二杀毒软件对这类目录劫持型 DLL 的容忍度很低我遇到过文件放进去几分钟就消失的情况一开始还以为是复制失败后来在隔离区里找到了。第三游戏装在系统盘受保护目录下时配置文件可能压根没被读取日志也不会生成表现和“DLL 没加载”一模一样很容易误判。关于检查顺序我的习惯是从外往里推先确认游戏本身能正常启动、进得了联机菜单这一步不涉及任何网络再确认 DLL 被加载看模块路径再确认绑定地址正确看日志再确认端口通看防火墙规则和日志收包最后才去调帧类型和节点号这些细节。这个顺序的好处是每一步都有明确的成功标志不会陷在“好像哪里都不对”的泥潭里。还有个实用的小技巧先在一台机器上开两个游戏实例试试。很多老游戏允许同机多开有的需要改配置或者用不同的用户目录两个实例走同一个翻译层互相发现如果同机能互相看到房间说明翻译层本身是通的问题一定出在两台机器之间的网络上。这一招能把问题范围瞬间砍掉一半比在两台机器之间来回折腾高效得多。另外提醒一句这套方案本质上是把老游戏的网络调用重定向了只在你自己控制的局域网里用、只跑你信得过的老游戏是合理的用法。别把它当成某种通用的网络改造手段也别在不受控的网络环境里长期开着那个 UDP 端口用完关掉规则干干净净。