我正在使用 CentOS 6 和用于游戏服务器的各种 Linux 二进制文件为中型 LAN 锦标赛设置一堆游戏服务器。如果我将 COD4 服务器配置为绑定到特定 IP 地址,则 COD4 服务器不会显示在服务器列表中(我可以通过控制台加入):
./cod4_lnxded +set net_ip 192.168.1.221 +set net_port 28960 +set dedicated 1 +set g_gametype dm +map_rotate +set sv_punkbuster 0 +exec server.cfg
当我不绑定到特定 IP 但使用通配符时,服务器会显示:
./cod4_lnxded +set net_ip 0.0.0.0 +set net_port 28960 +set dedicated 1 +set g_gametype dm +map_rotate +set sv_punkbuster 0 +exec server.cfg
我将其追溯到 UDP 广播包是问题所在。当客户端“请求”网络中的服务器时,它会广播这些包。这是来自客户端的 tcpdump 输出:
18:39:06.896696 IP 192.168.1.13.28960 > broadcasthost.28960: UDP, length 15
18:39:06.896773 IP 192.168.1.13.28960 > broadcasthost.28961: UDP, length 15
18:39:06.896806 IP 192.168.1.13.28960 > broadcasthost.28962: UDP, length 15
18:39:06.896835 IP 192.168.1.13.28960 > broadcasthost.28963: UDP, length 15
18:39:06.896884 IP 192.168.1.13.28960 > broadcasthost.28960: UDP, length 15
18:39:06.896957 IP 192.168.1.13.28960 > broadcasthost.28961: UDP, length 15
18:39:06.897012 IP 192.168.1.13.28960 > broadcasthost.28962: UDP, length 15
18:39:06.897066 IP 192.168.1.13.28960 > broadcasthost.28963: UDP, length 15
当我没有将 cod4 服务器绑定到特定 IP 时,当我请求本地/LAN 服务器列表时,服务器上的 tcpdump 中会显示以下内容:
18:49:53.639269 IP 192.168.1.13.28960 > 255.255.255.255.28960: UDP, length 15
18:49:53.639604 IP 192.168.1.13.28960 > 255.255.255.255.28961: UDP, length 15
18:49:53.639938 IP 192.168.1.13.28960 > 255.255.255.255.28962: UDP, length 15
18:49:53.640329 IP 192.168.1.13.28960 > 255.255.255.255.28963: UDP, length 15
18:49:53.640498 IP 192.168.1.13.28960 > 255.255.255.255.28960: UDP, length 15
18:49:53.640829 IP 192.168.1.220.28960 > 192.168.1.13.28960: UDP, length 169
18:49:53.640835 IP 192.168.1.13.28960 > 255.255.255.255.28961: UDP, length 15
18:49:53.640850 IP 192.168.1.220.28960 > 192.168.1.13.28960: UDP, length 169
18:49:53.641044 IP 192.168.1.13.28960 > 255.255.255.255.28962: UDP, length 15
18:49:53.641391 IP 192.168.1.13.28960 > 255.255.255.255.28963: UDP, length 15
18:49:53.660843 IP 192.168.1.13.28960 > 192.168.1.220.28960: UDP, length 15
18:49:53.661192 IP 192.168.1.220.28960 > 192.168.1.13.28960: UDP, length 169
当我将 cod4 服务器绑定到特定 IP 时,tcpdump 输出中仅出现传入的广播包:
18:51:45.101509 IP 192.168.1.13.28960 > 255.255.255.255.28960: UDP, length 15
18:51:45.102035 IP 192.168.1.13.28960 > 255.255.255.255.28961: UDP, length 15
18:51:45.102238 IP 192.168.1.13.28960 > 255.255.255.255.28962: UDP, length 15
18:51:45.102588 IP 192.168.1.13.28960 > 255.255.255.255.28963: UDP, length 15
18:51:45.102924 IP 192.168.1.13.28960 > 255.255.255.255.28960: UDP, length 15
18:51:45.103312 IP 192.168.1.13.28960 > 255.255.255.255.28961: UDP, length 15
18:51:45.103482 IP 192.168.1.13.28960 > 255.255.255.255.28962: UDP, length 15
18:51:45.103818 IP 192.168.1.13.28960 > 255.255.255.255.28963: UDP, length 15
18:51:46.355719 IP 192.168.1.13.28960 > 255.255.255.255.28960: UDP, length 15
18:51:46.356045 IP 192.168.1.13.28960 > 255.255.255.255.28961: UDP, length 15
18:51:46.356269 IP 192.168.1.13.28960 > 255.255.255.255.28962: UDP, length 15
18:51:46.356612 IP 192.168.1.13.28960 > 255.255.255.255.28963: UDP, length 15
18:51:46.356759 IP 192.168.1.13.28960 > 255.255.255.255.28960: UDP, length 15
18:51:46.357130 IP 192.168.1.13.28960 > 255.255.255.255.28961: UDP, length 15
18:51:46.357510 IP 192.168.1.13.28960 > 255.255.255.255.28962: UDP, length 15
18:51:46.357668 IP 192.168.1.13.28960 > 255.255.255.255.28963: UDP, length 15
我在 /etc/sysctl.conf 文件中编辑了以下内容,但并没有解决问题:
net.ipv4.conf.default.rp_filter = 0
net.ipv4.icmp_echo_ignore_broadcasts = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.all.rp_filter = 1
net.ipv4.conf.default.arp_filter = 1
net.ipv4.conf.all.arp_filter = 1
以下信息适用:
- CentOS 版本 6.6(最终版)
- 使命召唤 4 客户端,版本 1.7
- 使命召唤 4 服务器,CoD4 MP 1.7 版本 linux-i386 2008 年 6 月 28 日
- 服务器使用虚拟 IP 地址 (eth0:0/eth0:1)
- 所有服务器接口都启用了BROADCAST。
- 为了测试目的,selinux 已经被禁用。
有没有办法在 CentOS 中明确允许这种情况,或者是否存在导致此问题的其他可能原因?
谢谢!
答案1
经过几天的搜索,我得出结论,这是游戏服务器软件中的错误。当游戏服务器软件在系统上配置了特定 IP 时,它拒绝对传入的广播包执行任何操作。
目前,我为每个应用程序配置了单独的端口而不是 IP 地址,并将使用一种基于容器的虚拟化形式来分离游戏服务器应用程序。