查看“︁工程参考/服务端外网设置”︁的源代码
来自天龙知识库
←
工程参考/服务端外网设置
跳到导航
跳到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
__NOTOC__ <div class="server-network-reference" style="max-width:1200px;margin:0 auto;line-height:1.8;color:#29343a;font-family:Arial,'Microsoft YaHei',sans-serif;letter-spacing:0;overflow-wrap:anywhere;"> [[首页|首页]] · [[Lua接口/服务端函数索引|服务端接口]] 本文说明如何手工修改服务器和客户端配置,使玩家能够通过局域网或公网进入游戏。适用于采用下述配置格式、Login 与 GameServer 分别提供登录和游戏端口的部署;操作不依赖环境管理工具。 以'''服务端各进程与数据库运行在同一台 Windows 主机、一个游戏进程和一个登录进程、使用一个对外 IPv4 地址'''为主例。多机、多游戏进程和独立代理部署见后文。网络可达性还取决于路由、防火墙和服务状态,必须完成实际登录、进场景验证。 [[#先看要改哪些配置|配置清单]] · [[#局域网设置|局域网]] · [[#公网设置|公网]] · [[#公网和局域网同时访问|内外网同时访问]] · [[#验证与排查|验证与排查]] == 先看要改哪些配置 == 客户端先连接 Login;选择角色进入游戏时,Login 再下发 GameServer 的地址和端口。'''只改客户端登录地址,或只开放登录端口,都不足以保证进入游戏。''' {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 位置 ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 应该填写什么 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">tlbb/Server/Config/ServerInfo.ini</code> 的 <code style="white-space:normal;overflow-wrap:anywhere;">[Server0] IP0 / Port0</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本例游戏进程对玩家公布的地址、游戏 TCP 端口,示例端口 14401。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">ServerInfo.ini</code> 的 <code style="white-space:normal;overflow-wrap:anywhere;">[Server1] IP0 / Port0</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本例登录进程公布的地址、登录 TCP 端口,示例端口 14400。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 上述两个节的 <code style="white-space:normal;overflow-wrap:anywhere;">IP(CNC)、IP(CTC)、IP(EDU)</code> 及对应 Port | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 选中运营商线路时可能返回的地址。单一入口部署统一为同一可达 IP;游戏节填游戏端口,登录节填登录端口。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">Client/Patch/LoginServer.txt</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 目标区服行中的登录地址,格式为 IPv4:登录端口。常见行有三个已填地址和一个空的第四地址字段。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 服务器防火墙、云安全组或路由器 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 允许玩家到达实际登录、游戏 TCP 端口。路由器 NAT 要分别映射两项。 |} 路径以实际部署目录为准:服务端配置是'''运行中的 Server.exe、Login.exe 所使用的 Config 目录''';源码树中的 resources/Server/Config 是资源副本,单改资源副本不会自动改变已部署服务。客户端也必须修改玩家实际启动的那一份 Client/Patch/LoginServer.txt,并关闭后重新打开客户端。 === 先确认节名与进程对应关系 === {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 本例配置 ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 含义与核对方法 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">[Server0] ServerID=0, Type=0</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | GameServer。Type=0 表示游戏服务;示例 CurrentServerID=0。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">[Server1] ServerID=2, Type=1</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | Login。Type=1 表示登录服务;LoginInfo.ini 的 [System] LoginID=2 指向此 ServerID。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">Server1</code> 与 <code style="white-space:normal;overflow-wrap:anywhere;">ServerID=2</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 节序号 1 不等于服务 ID 2。不要为了改 IP 而重编号。 |} 若你的区服布局不同,应按 Type、ServerID、LoginID 和实际启动配置定位相应节,不能机械套用 Server0/Server1。保留 ServerNumber、MachineID、共享内存键及其他业务参数。 == 地址与端口的区别 == {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 地址或字段 ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 如何使用 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">127.0.0.1</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 回环地址,指发起连接的电脑自己。可用于同机服务通信;发给其他玩家时会指向玩家自己的电脑。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">192.168.50.10</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本文假设的服务器局域网地址,应替换为服务器实际网卡 IPv4。可用 ipconfig 查看,并通过固定地址或 DHCP 保留保持稳定。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">203.0.113.10</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本文的公网说明地址,不能用于真实连接。实际配置必须换成分配给你的公网 IPv4 或公网转发入口。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">0.0.0.0</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 监听表中通常表示本机所有 IPv4 接口,不是让玩家连接的地址。不同配置字段对它的解释不同,不要统一理解为“自动检测 IP”或“禁用”。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">IP0 / Port0</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | IP0 是公布给客户端的默认地址;当前 Login 和 GameServer 使用 Port0 建立 TCP 监听,默认也把 Port0 下发给客户端。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">IP1 / Port1</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 服务端内部配置字段,不是给局域网玩家另开的一套登录/游戏入口。把 IP1 改成局域网地址不会替代对 IP0 的设置。 |} 当前网络代码用 IPv4 TCP,并在 INADDR_ANY 上绑定 Port0,实际监听通常显示 0.0.0.0:14400 和 0.0.0.0:14401。因此 NAT 部署时,IP0 可以填路由器的公网地址,服务器网卡仍保留它自己的内网地址;不要把路由器的公网 IP 硬填到内网服务器网卡上。本文使用数字 IPv4,域名和 IPv6 不作为已验证方案。 端口须为 1 至 65535 的整数;同机 Login 与 GameServer 不能争用同一监听端口,也不能与 World、Billing、数据库或其他程序冲突。本文使用资源配置中的 14400/14401,实际改端口后,服务端、客户端、线路字段及转发规则都必须同步。 === 同机部署通常保留的内部配置 === {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 位置 ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 本例值与处理 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">ServerInfo.ini [World] IP / Port</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">127.0.0.1 / 777</code>,供服务进程连接 World。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">ServerInfo.ini [Billing] IP0 / Port0</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">127.0.0.1 / 10101</code>,此处 IP0 是 Billing 服务地址,不是游戏客户端入口。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">ServerInfo.ini [Server0] IP1 / Port1</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">127.0.0.1 / 8880</code>,保留内部配置。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">ServerInfo.ini [Server1] IP1 / Port1</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">127.0.0.1 / 8882</code>,保留内部配置。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">LoginInfo.ini、ShareMemInfo.ini、BillingInfo.ini</code> 的 <code style="white-space:normal;overflow-wrap:anywhere;">[System] DBIP / DBPort</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">127.0.0.1 / 3306</code>,数据库同机时保留;若已使用其他数据库端口,继续使用实际值。 |} 以上是资源文件的示例值,不是端口开放清单。'''服务连接到 127.0.0.1,不等于对应进程只监听回环接口''';实际监听以系统查询为准。玩家只需访问登录、游戏入口,World、Billing、数据库及管理端口应限制在需要它们的主机或内部网络内。 == 修改前的准备 == # 确认当前服务端已能按原有方式完成正常登录,避免将数据库、资源加载或程序启动问题误判为外网配置问题。 # 正常停服并等待角色数据保存、ShareMemory 落盘完成,再修改配置;关闭正在使用的客户端。使用已有的手工停服方式,避免直接强杀保存进程。 # 备份将要修改的 ServerInfo.ini、LoginServer.txt;如需修改 LoginInfo.ini,也先备份。保存原编码、换行、节名和其他参数,尤其不要把原有 GBK/GB18030 文件无意转成另一编码。 # 记录服务器内网 IP、玩家使用的入口 IP、登录端口、游戏端口,以及是否经过路由器、虚拟机 NAT、云安全组。下面示例只用于修改对应键或行,不能覆盖整个配置文件。 == 局域网设置 == 假设服务器的局域网 IPv4 为 192.168.50.10,玩家电脑可以路由到它,所有服务进程和数据库仍在服务器同一台主机上。 === 1. 修改服务端对外配置 === 在 ServerInfo.ini 找到原有的两个节,逐项替换以下值;保留节内未列出的其他字段,'''不要在文件末尾追加重复的节或键'''。 <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">[Server0] IP0=192.168.50.10 Port0=14401 IP(CNC)=192.168.50.10 Port(CNC)=14401 IP(CTC)=192.168.50.10 Port(CTC)=14401 IP(EDU)=192.168.50.10 Port(EDU)=14401 [Server1] IP0=192.168.50.10 Port0=14400 IP(CNC)=192.168.50.10 Port(CNC)=14400 IP(CTC)=192.168.50.10 Port(CTC)=14400 IP(EDU)=192.168.50.10 Port(EDU)=14400</pre> 这里将单一入口的运营商地址也统一设置,避免玩家切换线路后得到旧 IP、0.0.0.0 或错误端口。已有独立代理、多运营商地址的部署应分别填写真实入口,不能用这个单入口示例覆盖原有代理设计。 === 2. 修改每份客户端的目标区服行 === 在 Client/Patch/LoginServer.txt 的 SERVER_BEGIN 与 SERVER_END 之间找到实际要进入的区服。本例只修改“天下第一”这一行的地址,保留它原有的其他字段: <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">华东电信一区,天下第一,0,101,3,0,0,WELECOME TO TLBB,192.168.50.10:14400,192.168.50.10:14400,192.168.50.10:14400,</pre> 这是一条完整记录,必须保存在'''同一物理行''';页面自动换行不表示文件中要换行。使用英文半角逗号和冒号,不要加引号、空格、http:// 或把游戏端口 14401 写进登录地址。 {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 从 1 开始数的字段 ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 用途 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 第 1 至 8 项 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 区组名、区服名及原有区服属性等;本次保持原值,不把 ServerID 填进这些位置。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 第 9、10、11 项 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本例三个已填写的登录地址,全部指向同一个 Login 入口。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 第 12 项 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 第四个登录地址。本例为空,由第三个地址后面的行尾逗号保留;当前客户端要求至少 12 项,删掉逗号会使此示例变成只有 11 项并被跳过。 |} 如果第四项原本有地址,也必须核对并更新为你的有效登录入口;如果有额外路由字段,保留并按实际客户端规则核对。不要添加与网络设置无关的字段,不要修改其他人的区服记录。三个地址不是“公网、内网、游戏地址”的固定分工;客户端按线路选择它们,不能靠随意混填公网/内网实现自动识别。 === 3. 放行服务器防火墙并启动 === 在 Windows 高级安全防火墙中为实际服务端设置入站允许规则:TCP,本例本地端口 14400、14401;规则应用到当前网卡所属配置文件。纯局域网使用时,可以把远程地址范围限制为实际玩家网段;跨网段或 VPN 客户端也要包含在允许范围内。保留防火墙开启,不以关闭整个防火墙代替规则。 检查无线网络是否启用了访客网络或客户端隔离;虚拟机桥接应填写虚拟机自己的局域网 IP,虚拟机 NAT 则还需要宿主机转发。服务端按原有手工流程启动:数据库就绪,再依次启动 ShareMemory、Billing、World、Login、Server,确认各进程及依赖就绪后启动客户端。执行后文的局域网验证。 == 公网设置 == 公网示例仍以服务器内网地址 192.168.50.10、登录 14400、游戏 14401 为例,假设公网入口是 203.0.113.10。'''203.0.113.10 是文档专用示例,实际操作必须替换。''' === 1. 先确认公网入口 === * 家用路由器后:确认路由器取得可入站访问的公网 IPv4;宽带运营商必须允许相关入站连接。网页查询到的出口 IP,不等于你拥有该地址的端口映射权限。 * WAN 地址为 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 或 100.64.0.0/10 时,该地址不是可直接分配给公网玩家使用的公网入口。它可能处于上级路由或运营商 NAT 后,要继续确认上游。 * 光猫和路由器双重 NAT:每一层都要把两个 TCP 端口继续转发到下一层,或者调整为已有的可达网络拓扑。 * 云服务器:使用实例的公网/EIP,放行云安全组和主机防火墙;部分云平台将公网地址映射到内网网卡,无需手工给网卡配置 EIP。 * 没有可控的公网入站地址:需要运营商分配公网地址,或部署能转发这两个 TCP 入口的公网中继。也可让所有玩家加入可互通的 VPN,按局域网方式使用 VPN 地址;中继/VPN 的具体路由与效果需要实测。 === 2. 改为公网公布地址 === 把局域网示例中两个节的 IP0 和三组线路 IP 改为你的公网入口;同机内部的 World、Billing、数据库及 IP1 继续使用原有内部地址。本例应替换的对外键如下: <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">[Server0] IP0=203.0.113.10 Port0=14401 IP(CNC)=203.0.113.10 Port(CNC)=14401 IP(CTC)=203.0.113.10 Port(CTC)=14401 IP(EDU)=203.0.113.10 Port(EDU)=14401 [Server1] IP0=203.0.113.10 Port0=14400 IP(CNC)=203.0.113.10 Port(CNC)=14400 IP(CTC)=203.0.113.10 Port(CTC)=14400 IP(EDU)=203.0.113.10 Port(EDU)=14400</pre> 每份公网客户端的目标区服行同步改为: <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">华东电信一区,天下第一,0,101,3,0,0,WELECOME TO TLBB,203.0.113.10:14400,203.0.113.10:14400,203.0.113.10:14400,</pre> 独立游戏服务器使用不同公网 IP 时,游戏节填游戏服务器入口,登录节与客户端列表填 Login 入口,不能强行共用一个 IP。 === 3. 建立两个 TCP 映射 === 路由器常称为“端口转发”或“虚拟服务器”。如果端口可自定义,本例按相同的外部、内部端口配置: {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 协议与公网入口 ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 转发到服务器 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | TCP 203.0.113.10:14400 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 192.168.50.10:14400,Login 登录端口。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | TCP 203.0.113.10:14401 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 192.168.50.10:14401,GameServer 游戏端口。 |} 服务器内网 IP 要固定,否则 DHCP 变化会让转发目标失效。云端使用提供商的安全组/映射规则;公网 IP 直接配置在服务器网卡且无 NAT 时无需另加路由器端口映射,但仍须满足上游和主机防火墙要求。 '''不要只将公网 24401 映射到内网 14401,却仍让服务端公布 Port0=14401。'''默认返回地址和监听都使用 Port0,客户端会继续尝试公网 14401。本文采用内外相同端口;若改用 24401,游戏 Port0、三组线路端口、监听、防火墙及内外映射都同步使用 24401。登录端口改变还要同步修改客户端列表。固定外部端口的中继、不同端口转换或独立代理须另行核对完整返回地址,需要实测。 公网玩家访问这套登录与游戏路径使用 TCP,不需要把 UDP 或所有服务端端口一起开放。账号注册网站、更新器、管理后台如有独立需求,按各自服务单独配置,不属于本文这两个游戏入口。 == 公网和局域网同时访问 == 单个 GameServer 默认公布一个 IP0。它不会因为玩家来自局域网就自动把 IP1 当游戏地址返回;仅给局域网玩家换一份 LoginServer.txt,只能改变第一段登录连接。 {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 方案 ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 设置与前提 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 同一个公网入口,路由器支持 NAT 回环 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 服务端和客户端统一使用公网示例。路由器必须支持并启用 NAT loopback / hairpin NAT,让局域网玩家访问公网登录、游戏端口时正确转回内网。必须用一台局域网客户端实测两个端口及完整进游戏。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 所有玩家使用同一可路由的 VPN 地址 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 服务器公布玩家都能到达的 VPN IPv4,客户端列表也使用该地址。所有玩家均须接入 VPN;主机规则、客户端互通与回程路由需成立。这不是开放给未接入 VPN 的普通公网入口。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 路由器不支持回环,且希望维持普通公网入口 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 需要调整路由/更换支持回环的设备,或专门设计能正确返回内外地址的代理方案。不能承诺只修改本文几个 IP 就同时连通。 |} 在服务器本机测试公网 IP 也可能遇到 NAT 回环限制。先分别用局域网另一台电脑与真正的外网电脑测试,避免把“内网访问自己的公网地址失败”误判为公网服务不可达。 只修改 hosts、做域名内外分流,不能修正本文服务端直接下发的数字 IP;不同来源返回不同地址的代理方案需要同时核对登录、进入场景以及后续换服连接,需要实测。 == 线路字段与多机部署 == === 为什么需要核对运营商地址 === 资源配置中 LoginInfo.ini 的 [System] ProxyConnect=1。当前实现会根据客户端的线路标记选择 GameServer 的 IP(CNC)、IP(CTC)、IP(EDU) 及对应端口,默认分支才回退到 IP0/Port0。'''配置解析器只要读到一对线路 IP、Port 字段就标记为启用,并不因 IP=0.0.0.0 自动禁用。''' 因此只修改两个 IP0,可能在一条线路正常、切到另一条线路后进场景失败。单一入口的做法就是将两个节的三组线路地址分别设为各自真实入口,正如前面的完整片段。保留当前可用的 ProxyConnect;它控制代理业务,不是“是否开启公网”的开关。 ServerInfo.ini 的 [Proxy] 中 Proxy0ForCncUser、Proxy0ForCtcUser、Proxy0ForEduUser 等是识别代理来源的配置。'''不要把路由器网关或普通玩家的局域网 IP 填进去充当内外网判断''',当前实现按来源 IP 字符串匹配,匹配后还受代理准入逻辑影响。这些字段和 [Server0]/[Server1] 的 IP(CNC) 等不是同一用途。 === 多机、多游戏进程的边界 === * World、Billing、数据库分机时,连接它们的服务应填写实际可达的内部地址,不能继续用代表本机的 127.0.0.1;还需同步各进程配置及内部访问规则。共享内存相关进程有本机依赖,分机不属于只改 IP 的操作。 * 每个会接收玩家的游戏进程,都需要正确的客户端可达地址和独立、可达的监听端口;同机各进程端口不能冲突,路由器也须分别映射。只配置起始场景所在进程,不能证明其他服务器上的场景可进入。 * [Mother]、共享内存键、MachineID、数据库账号等不因切换公网/局域网而统一改写。现有独立代理的路线选择、端口转换和跨服表现须按本服实现继续核对,需要实测。 == 验证与排查 == === 1. 服务器上检查监听 === 在服务器 PowerShell 执行;端口若已改变,替换为实际值: <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">Get-NetTCPConnection -State Listen -LocalPort 14400,14401 | Select-Object LocalAddress,LocalPort,OwningProcess</pre> 应看到 Login 与 Server 对应端口的监听记录。根据 OwningProcess 查询进程,确认不是其他程序占用了端口;例如将 PID 替换为查询结果: <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">Get-Process -Id 1234 | Select-Object Id,ProcessName,Path</pre> 1234 只是 PID 示例。显示 0.0.0.0 监听属正常情况;查询无记录或只出现一项时,先查相应进程的启动日志、加载配置位置及端口冲突。 === 2. 从局域网玩家电脑测试 === <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">Test-NetConnection -ComputerName 192.168.50.10 -Port 14400 Test-NetConnection -ComputerName 192.168.50.10 -Port 14401</pre> 两项都应显示 TcpTestSucceeded: True。这个结果只证明能建立 TCP 连接,不证明对端就是正确程序,也不证明数据库认证和进游戏成功。旧系统没有这些 PowerShell 命令时,可用 netstat -ano 检查监听,并用其他 TCP 连通性工具从玩家电脑测端口。 === 3. 从真正的外网测试 === 使用未连接服务器局域网的另一台电脑,例如手机热点下的电脑;将下列文档 IP 换成实际公网 IP: <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">Test-NetConnection -ComputerName 203.0.113.10 -Port 14400 Test-NetConnection -ComputerName 203.0.113.10 -Port 14401</pre> 两项都成功后,再用对应客户端实际选择区服、登录账号、选择角色并进入场景,确认能够移动;有多游戏进程时还要测试相应换场景连接。需要内外网同时使用时,在局域网客户端重复完整流程。能 ping 通不代表 TCP 端口开放,ping 不通也不代表 TCP 一定不通。 === 按失败阶段定位 === {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 现象 ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 优先核对 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 目标区服不显示或显示异常 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 实际读取的 LoginServer.txt、文件编码、SERVER_BEGIN/END、目标记录是否同一行、字段数量和行尾逗号;本机改的文件是否同步给玩家。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 14400/14401 在服务器上没有监听 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | Login/Server 是否正常启动;是否改了资源副本而非部署文件;端口冲突、World/数据库等依赖错误。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本机可测通,局域网电脑测不通 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 服务器实际内网 IP、主机防火墙配置文件与来源范围、访客 Wi-Fi 隔离、虚拟机网络模式和路由。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 局域网通,真正外网两个端口不通 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 公网入口是否可控、双重 NAT/运营商 NAT、两个 TCP 转发、映射内网 IP、云安全组及上游入站限制。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 能登录或看到角色,进入游戏失败 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | GameServer 返回的 IP/端口、14401 映射与监听;所有被选中的 IP(CNC/CTC/EDU) 是否还指向旧地址;Login 与游戏配置是否同步。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 只在切换线路后失败 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 客户端备用登录地址及第四地址、服务器对应线路的 IP/Port、ProxyConnect 与代理来源识别配置。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 外网可玩,内网使用公网入口失败 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 路由器 NAT 回环,以及登录成功后返回的游戏地址。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 端口都通但认证或进场景仍失败 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 账号、Billing/数据库、World 与游戏进程就绪情况、客户端和服务端资源是否匹配;结合日志定位,不能仅凭 TCP 成功排除业务故障。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 修改后仍连接旧地址 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 是否启动了另一份客户端/服务端、进程是否重启、更新器是否覆盖了 LoginServer.txt、线路地址是否漏改。 |} Login 日志中的 <code style="white-space:normal;overflow-wrap:anywhere;">WLRetCharLoginHandler::Execute()</code> 成功记录包含下发的 IP、Port、SID,可用于核对进入游戏时真正使用的地址。若它下发的地址本身不可达,继续修改客户端初始登录地址不会修复这一段。 === 验收与恢复 === * 监听进程正确;局域网或公网目标玩家能访问两个实际 TCP 端口。 * 同一份已更新客户端能够登录、选角、进场景;需要同时支持的网络和线路分别完成实测。 * World、Billing、数据库和管理入口未因这次配置被一并暴露给玩家。 * 如修改后异常,正常停服,恢复备份的服务端配置和各份客户端列表,恢复本次改动的映射/防火墙规则,再按原流程启动。不要回滚未参与本次修改的其他设置。 == 核对依据与适用范围 == 字段及调用路径已对照当前源码和资源配置核对;本文示例没有在真实公网、路由器或游戏进程中执行,完整连接效果'''需要实测'''。同名配置在其他实现中可能有不同含义,应先确认实际运行程序与配置布局一致。 {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 源码或资源位置(相对项目目录) ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 用于核对 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">resources/Server/Config/ServerInfo.ini</code>、<code style="white-space:normal;overflow-wrap:anywhere;">LoginInfo.ini</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 示例节名、ServerID、LoginID、端口及 ProxyConnect。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">resources/Client/Patch/LoginServer.txt</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 目标区服记录与行尾空地址字段。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">Prj/GameCode/Server/Tools/TlbbEnvironmentManager/TlbbEnvironmentManager.Core/PathsAndConfig.cs</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 外网设置修改的服务端键与客户端三个已填地址;仅作为参考来源,文章操作不依赖此工具。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">Prj/GameCode/Common/ServerBase/Config.cpp</code>、<code style="white-space:normal;overflow-wrap:anywhere;">Config.h</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 线路字段启用条件、服务 ID 映射与代理来源识别。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">Prj/GameCode/Common/Net/Socket.cpp</code>、<code style="white-space:normal;overflow-wrap:anywhere;">ServerSocket.cpp</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | IPv4 TCP、INADDR_ANY 监听。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">Prj/GameCode/Server/Server/LoginServer/Login/Player/LoginPlayerManager.cpp</code>;<code style="white-space:normal;overflow-wrap:anywhere;">GameServer/Server/Player/IncomingPlayerManager.cpp</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | Login 与 GameServer 从 Port0 建立玩家端监听。后一个路径相对同级 Server/Server。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">Prj/GameCode/Server/Server/LoginServer/Login/Packets/WLRetCharLoginHandler.cpp</code>;同一 Login 目录的 <code style="white-space:normal;overflow-wrap:anywhere;">Player/LoginPlayer.cpp</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 进入游戏时下发游戏地址、线路选择及默认回退。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">Prj/GameCode/Client/Client/Game/Procedure/GamePro_Login.cpp</code>、<code style="white-space:normal;overflow-wrap:anywhere;">LoginDataStructDef.h</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 区服行解析、四个登录地址与线路选择。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">Prj/GameCode/Client/Client/Game/Network/PacketHandler/LCRetCharLoginHandler.cpp</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 客户端使用服务器下发的 GameServer 地址和端口。 |} </div>
返回
工程参考/服务端外网设置
。
导航菜单
页面操作
页面
讨论
阅读
查看源代码
历史
页面操作
页面
讨论
更多
工具
个人工具
创建账号
登录
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
搜索
工具
链入页面
相关更改
页面信息