传奇服务端要实现双线双IP同时承载多个区,核心在于网关监听、IP绑定、端口分配和登录器列表这四个环节。单线环境你已经会,这里只讲双线双IP下的差异点和关键配置。
准备两台公网线路,电信一条、网通(联通)一条,每台线路对应一个独立公网IP。服务器可以是同一台物理机,也可以是两台。如果是单台服务器,系统层面必须确保两张网卡分别绑定对应运营商的公网IP,并且网关路由不能冲突。Windows下在“高级TCP/IP设置”里给每张网卡配置固定IP,不要开启自动跃点,手动指定跃点为10和20,确保出站流量走正确线路。Linux下用ip route配置策略路由,让来自电信IP的请求回给电信网关,来自网通的回给网通网关。
DBServer、LoginGate、GameGate、SelGate这些网关程序,每一个都要启动两套,分别对应电信IP和网通IP。以GameGate为例,Mir200\Gate目录下的Config.ini里,BindIP=0.0.0.0表示监听所有网卡,但在双线环境下建议直接写死为对应线路的IP,比如电信网关BindIP=61.xxx.xxx.xxx,网通网关BindIP=60.xxx.xxx.xxx。端口不能冲突,电信侧用7000、7100、7200这类,网通侧用7001、7101、7201,依此类推。DBServer的DBPort也要区分开,一套用6000,一套用6001。
M2Server的配置里,GameGateIPList要分别填写两套GameGate的IP和端口。电信M2只认电信GameGate,网通M2只认网通GameGate。如果混写会导致跨线丢包、登录卡死。InterServer配置里的ServerAddr填127.0.0.1即可,但外部通信的ServerPort要错开,比如电信用5000,网通用5001。
数据库方面,如果是双区独立运行,直接用两个独立的Mir200目录,各自的DB分开,玩家数据不互通。如果是双线同区,也就是一个区同时支持电信网通接入,那么两套网关最终指向同一个M2Server,DBServer只需要一套,但GameGate必须是两套,LoginGate也是两套。此时登录器列表里同一个区名对应两条记录,一条电信IP+端口,一条网通IP+端口,客户端会根据本地网络自动选择延迟低的连接。
启动顺序要严格:先启DBServer,再启LoginGate,接着GameGate,然后SelGate,最后M2Server。每一套网关都要单独建一个启动批处理,不要混在一个窗口里。批处理里用cd命令切到对应目录,路径写绝对路径,避免环境变量出错。
登录器配置是关键。登录器列表文件(通常list.json或serverlist.txt)里,每个区组要写清楚电信入口和网通入口。格式示例:区名电信IP 7000 区名 网通IP
7001。老版本登录器需要在登录器生成工具里分别勾选双线模式,新内核的登录器直接支持多IP自动测速。测试时用电信网络和网通网络分别拨号连接,看是否各自走对应线路,延迟是否在正常范围内。
防火墙必须放行所有用到的端口。Windows防火墙里新建入站规则,把7000-7200、5000-5100、6000-6010这些端口全部放行,协议选TCP和UDP。如果是云服务器,还要在安全组里同样放行。很多双线架设失败都是因为端口只开了一半,导致网通侧连不上GameGate。
内网测试阶段,可以在服务器本机用127.0.0.1登录,确认M2能正常加载。然后找一台外网机器,分别用电信和网通网络远程桌面连服务器,在服务器上用netstat -an | findstr 7000查看端口监听情况,确认电信IP和网通IP都在LISTEN状态。如果只看到一个IP,说明BindIP没配对,或者网卡路由有问题。
合区操作跟单线一样,但前提是两套数据最终要合并到同一个DB。如果一开始就是双线同区,那本身就是一套DB,不需要合。如果是双线双区独立运营,后期要合区,先把其中一个区的玩家数据导出,再用合区工具合并到主区DB,注意角色名冲突处理和物品ID重置。
日志排查是最后一道防线。每个网关目录下都有Log文件夹,GameGate的Error.log里会记录IP绑定失败、端口占用、连接被拒绝的具体原因。M2的RunLog里能看到玩家从哪个GateIP进来,配合这个可以判断双线分流是否生效。出现大面积掉线时,先看Gate的Send/Recv流量是否有一路异常归零,通常就是某条线路IP绑定失效或者路由跳错了。
整套流程跑通后,每次重启服务器先停M2,再停Gate,最后停DB,反向启动即可。长期运行时,建议把两套网关分别做成Windows服务,用nssm封装,防止远程桌面断开后进程被杀。双线双IP多区架设没有捷径,就是IP绑对、端口错开、路由分清、列表写准,每一步都做实,自然稳定。

