Docker部署AzerothCore后客户端仍用回环地址连接问题求助
我克隆了AzerothCore的master分支(提交哈希为42a1650d3146e025d996ce5b9b5dfbd9bd8fbe88),按照文档完成Docker构建、端口暴露等操作。但更新realmlist为可公网访问的DNS条目后,抓包显示客户端仍尝试通过回环地址连接。
我的DNS条目可解析到正确的公网IP,且未在hosts文件中配置,8085端口也可通过telnet从测试客户端访问。
realmlist查询结果
mysql> select * from realmlist\G *************************** 1. row *************************** id: 1 name: BB Home address: boonebytes.example.internet.accessible localAddress: 127.0.0.1 localSubnetMask: 255.255.255.0 port: 8085 icon: 0 flag: 0 timezone: 1 allowedSecurityLevel: 0 population: 0 gamebuild: 12340 1 row in set (0.00 sec)
认证服务器日志片段(已识别DNS条目)
Updating Auth database... >> Auth database is up-to-date! Containing 1 new and 35 archived updates. Started auth database connection pool. Loading IP Location Database... Added realm "BB Home" at boonebytes.example.internet.accessible:8085. Ping MySQL to keep connection alive
世界服务器日志片段
AzerothCore rev. unknown 1970-01-01 00:00:00 +0000 (Archived branch) (Unix, RelWithDebInfo, Static) (worldserver-daemon) ready... Starting up Auction House Listing thread... Calendar deletion of old events. AC> Update time diff: 2. Players online: 0. Update time diff: 1. Players online: 0.
抓包情况
Wireshark抓包显示,服务器返回给客户端的Realmlist响应包中包含回环地址(公网访问,无VPN),且抓包未发现客户端尝试连接8085端口,仅连接3724端口。

1. 检查并修改authserver.conf的强制局域网地址配置
打开authserver.conf文件,找到ForceLocalAddress选项,确保其值为0(该配置强制所有客户端使用localAddress,默认应为0):
ForceLocalAddress = 0
修改后重启authserver服务。
2. 调整realmlist表的子网掩码或统一地址
当前realmlist的localSubnetMask为255.255.255.0,若authserver因Docker网络误判客户端IP归属局域网,可通过以下两种方式修复:
- 若无需区分局域网与公网客户端,直接将
localAddress与公网address统一:UPDATE realmlist SET localAddress = 'boonebytes.example.internet.accessible' WHERE id = 1; - 若需保留局域网适配,将
localSubnetMask设为更严格的子网(仅匹配127.0.0.1自身):UPDATE realmlist SET localSubnetMask = '255.255.255.255' WHERE id = 1;
执行SQL后重启authserver。
3. 修复Docker网络的客户端IP获取问题
Docker bridge模式默认会做NAT转换,导致authserver无法获取客户端真实公网IP,进而误判为局域网用户。可通过以下方式解决:
- 使用Docker host网络模式运行服务(需注意端口冲突):
docker run --network=host [你的容器参数] - 若保留bridge模式,确保authserver.conf的
BindIP设为0.0.0.0,同时在Docker run命令中正确映射端口:docker run -p 3724:3724 -p 8085:8085 [你的容器参数]
并开启Docker主机的IP转发功能,确保容器能获取真实客户端IP。
4. 验证服务重启生效
修改配置或数据库后,必须重启authserver和worldserver,查看authserver日志确认出现Added realm "BB Home" at boonebytes.example.internet.accessible:8085.,说明配置已加载。
内容的提问来源于stack exchange,提问作者boonebytes

