Я настраиваю кучу игровых серверов для сетевого турнира среднего размера с использованием CentOS 6 и различных бинарных файлов Linux, используемых для игровых серверов. С COD4 серверы не отображаются в списке серверов (я могу присоединиться через консоль), если я настраиваю сервер COD4 для привязки к определенному IP-адресу:

./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-адресу, в 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 (финальный)
  • Клиент Call of Duty 4, версия 1.7
  • Сервер Call of Duty 4, CoD4 MP 1.7 сборка linux-i386 28 июня 2008 г.
  • Сервер использует виртуальные IP-адреса (eth0:0/eth0:1)
  • На всех интерфейсах сервера включена функция BROADCAST.
  • selinux отключен для тестирования.

Есть ли способ явно разрешить это в CentOS или есть другой источник этой проблемы?

Спасибо!

1 ответ1

0

После поиска еще нескольких дней я пришел к выводу, что это ошибки в программном обеспечении игрового сервера. Когда программное обеспечение игрового сервера сконфигурировано с определенным IP-адресом в системе, оно отказывается что-либо делать с входящими широковещательными пакетами.

На данный момент я настроил отдельные порты для каждого приложения вместо ip-адресов и буду использовать форму виртуализации на основе контейнеров для разделения приложений игрового сервера.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .