传奇服务端角色网关与登录网关多IP配置全解析

来源: 作者: 点击:
### 一、网关在服务端架构中的实际位置

传奇服务端的运行依赖多个独立进程协同工作。客户端从输入账号到进入游戏地图,依次经过账号数据库、登录网关、角色网关和游戏网关四个环节。登录网关负责接收客户端发来的账号密码,转发给账号数据库进行验证;验证通过后,客户端转向角色网关,由角色网关读取角色列表、处理角色创建和删除操作;最后游戏网关接管地图加载与实时数据同步。登录网关默认监听7000端口,角色网关默认监听7100端口,这两个端口是客户端必须能够访问的对外端口。

在单IP环境下,登录网关和角色网关的配置文件只需填写一个服务器IP即可正常运行。但涉及多IP场景时,情况会变得复杂。多IP通常出现在以下几种情况中:服务器配备双网卡分别接入不同运营商线路、网关程序需要同时监听内网和外网地址、或者采用异地网关分离部署架构。无论哪种情况,登录网关和角色网关的IP配置如果处理不当,直接导致玩家无法连接或频繁掉线。

## 二、登录网关的多IP绑定

登录网关的核心配置文件是LoginGate.ini,位于MirServer\LoginGate目录下。文件中两个关键字段决定了网关的行为:ServerAddr和ListenAddr。ServerAddr用于网关与账号数据库之间的内部通信,ListenAddr用于接收客户端连接。

单IP配置时,这两个字段都填写服务器的主IP地址。多IP场景下,ListenAddr需要特别注意。如果服务器有两块网卡,一块接电信线路一块接联通线路,那么两个网卡各有独立IP。此时ListenAddr不应填写某一个固定IP,而是填写0.0.0.0,让网关监听本机所有网卡上的7000端口。这样无论客户端从电信IP还是联通IP发起连接,登录网关都能接收。

ServerAddr的填写则取决于账号数据库的位置。如果数据库和登录网关在同一台机器上,填127.0.0.1即可,避免因网卡切换导致内部通信走错线路。如果数据库在另一台服务器上,则需要填写数据库所在机器的内网IP。

GatewayPort字段控制客户端连接端口,默认为7000。多IP环境下,通常保持默认端口不变,因为玩家只需要通过不同IP的7000端口连接即可。如果确实需要多个登录网关实例(比如电信和联通各跑一个登录网关进程),则第二个实例的端口需要偏移,例如改为7001。

## 三、角色网关的多IP处理

角色网关的配置逻辑与登录网关类似但更复杂。角色网关的核心配置文件是SelGate.ini或Config.ini,位于MirServer\SelGate目录下。角色网关同时需要连接上游的登录服务器(或账号网关)和下游的游戏网关。

在多IP环境中,角色网关的ServerAddr和ListenAddr同样面临选择。ListenAddr建议设为0.0.0.0,使网关监听所有本地IP的7100端口。ServerAddr指向上游登录服务的IP。如果登录服务和角色网关在同一台机器上,ServerAddr填127.0.0.1;如果登录服务在另一台机器,填写那台机器的内网IP。

角色网关的GatePort默认是7100,客户端在完成登录后连接此端口。多IP场景下,这个端口同样保持默认值即可。如果启动了多个角色网关实例,第二个实例的GatePort应改为7101。

还有一个容易被忽视的配置项:GameSrvAddr和GameSrvPort。这两个参数指示角色网关将数据同步到哪个游戏网关。在多IP架构中,如果游戏网关也绑定了特定网卡的IP,角色网关的GameSrvAddr必须与游戏网关实际监听的IP匹配,否则会出现角色选择后进入游戏时卡住或报错。

## 四、双网卡双IP的绑定策略

服务器安装两块物理网卡分别接入电信和联通线路时,网关程序的IP绑定直接决定玩家的连接质量。核心原则是:不同线路的网关必须强制绑定到对应网卡的IP地址,不能使用0.0.0.0进行自动适配。

具体操作分为几步。首先在操作系统的网络设置中为两块网卡分别配置电信IP和联通IP,注意只在一块网卡上设置默认网关,另一块不设或通过静态路由指定流量走向。然后在服务端中复制完整的服务端目录,建立两个独立实例,修改各自实例中所有网关的监听端口使其互不冲突。一区的登录网关、角色网关、游戏网关全部绑定到电信IP,二区的对应网关全部绑定到联通IP。

实际操作中,登录网关的LoginGate.ini中ListenAddr填写电信IP,角色网关的SelGate.ini中ListenAddr同样填写电信IP,确保一区的所有对外服务都走电信线路。二区则统一填写联通IP。这种硬绑定方式虽然配置稍繁琐,但能确保电信玩家连电信IP、联通玩家连联通IP,避免跨网延迟。

## 五、异地网关分离部署

当网关程序不部署在M2主服务器上,而是放在另一台机器时,多IP配置进入另一种场景。典型的异地部署中,主服务器(运行M2Server和DBServer)位于一个IP段,异地网关服务器位于另一个IP段。

主服务器侧需要修改的文件包括DBServer目录下的!addrtable.txt,在授权列表中增加异地网关服务器的IP地址,允许其连接数据库端口。LoginSrv目录下的!addrtable.txt也需要增加异地网关IP,使登录服务器信任来自异地网关的连接请求。Mir200目录下的!runaddr.txt和!servertable.txt同样需要加入异地网关IP,确保游戏主程序能正确识别远程网关。

异地网关服务器侧,LoginGate的Config.ini中ServerAddr1填写主服务器的IP地址,ServerPort1填写主服务器上登录服务的端口(通常5500),GatePort1填写7000。SelGate的Config.ini中ServerAddr1同样填写主服务器IP,ServerPort1填5100,GatePort1填7100。异地部署的关键是确保主服务器防火墙对异地网关的IP开放了内部通信端口,否则网关启动后虽然能接受玩家连接,但无法与主服务器建立数据通道。

## 六、登录器列表的对应配置

无论采用哪种多IP方案,最终玩家连接的入口在登录器列表文件中。列表文件的每一行代表一个线路条目,包含游戏名称、线路名称、服务器IP和端口。多IP环境下,列表文件应包含多条记录,分别指向不同的网关IP。

例如,电信线路条目填写电信公网IP加7000端口,联通线路条目填写联通公网IP加7000端口。现代登录器具备自动测速功能,会根据玩家本地网络的延迟自动选择最优线路。如果使用支持手动选择的登录器,可以在界面上显示“电信入口”和“联通入口”两个选项。

需要特别注意:列表中的IP地址必须是玩家客户端能够直接访问的公网IP,不能填内网地址。如果网关监听的是内网IP而通过路由器做端口映射,列表中的IP应填写路由器的公网IP。

## 七、常见问题与排查方向

多IP配置中最常见的问题是网关启动后玩家无法连接。排查顺序应从内到外。首先确认网关程序是否正常启动,登录网关和角色网关必须都在运行状态,任一未启动都会导致连接中断。

其次检查网关的IP绑定是否正确。打开LoginGate.ini确认ListenAddr没有误填127.0.0.1,在双网卡环境中确认是否绑定了正确的网卡IP。如果网关配置为0.0.0.0但系统路由表存在冲突,可能导致部分线路的客户端连接被系统路由到错误的网卡。此时需要在操作系统中检查路由表,确保从电信网卡进入的连接从电信网卡返回,从联通网卡进入的连接从联通网卡返回。

第三个排查点是网关的IP过滤设置。部分网关配置文件中包含AllowIP或DenyIP字段,如果这些字段中残留了旧的IP限制规则,外网玩家IP不在允许范围内会被直接拦截。将过滤列表清空或删除相关行即可解除限制。

第四个问题是端口冲突。多区或多实例部署时,如果两个网关实例监听了同一个端口,后启动的实例会失败。确认每个实例的7000、7100、7200端口都做了偏移,偏移量可以是100或1000,视实例数量而定。