ID причины dc-firewall · Основной ответственный Команда инфраструктуры · Сетевая инфраструктура · Совместно Команда разработки · Разработка сервера, Команда разработки · Разработка клиента
Файрвол записывает каждое пропущенное соединение в таблицу сессий и отслеживает его. Когда таблица заполнена, новые соединения принять нельзя.
Почему Из-за наплыва подключений или атаки число сессий достигает лимита → Следствие Для нового соединения нет свободной записи, и оно отклоняется → На экране У тех, кто пытается войти, ошибка входа или бесконечная загрузка, у части уже установленных соединений тоже дисконнект
Сразу после входа или техработ, При наплыве игроков
Ответственные
Основной ответственный Команда инфраструктуры · Сетевая инфраструктура · Совместно Команда разработки · Разработка сервера, Команда разработки · Разработка клиента
Команда разработки: задачи
Сервер: сдерживать наплыв подключений очередью на вход, переиспользовать соединения вместо повторяющихся коротких, первым закрывать соединения без хартбитов (чтобы мёртвые соединения не занимали таблицу сессий надолго). Клиент: слать хартбиты с интервалом не больше половины самого короткого таймаута простоя, при обрыве автоматически переподключаться, увеличивая интервал между попытками и добавляя случайный разброс (чтобы игроки не возвращались все разом).
Команда инфраструктуры: задачи
Увеличить таблицу сессий, быстрее удалять завершившиеся короткие соединения (сократить таймаут для закрытых сессий), при сокращении таймаута простоя сообщать новое значение команде разработки, чтобы подстроить интервал хартбитов, блокировать атаки, поставить алерт на заполнение таблицы сессий.
На графике
Упор в лимит (плато) · число сессий файрвола, число неудачных новых подключений
Где смотреть
Вывести на график число одновременных сессий файрвола вместе с лимитом и найти в логах устройства записи об отброшенных пакетах, для которых не удалось создать сессию. На файрволе Linux сравнить nf_conntrack_count с nf_conntrack_max и поискать в dmesg «nf_conntrack: table full, dropping packet», на инстансе AWS смотреть conntrack_allowance_exceeded в ethtool -S
Подтверждает
С момента, когда число сессий упирается в лимит и выходит на плато, растёт число неудачных новых подключений, а вместе с ним записи об ошибках создания сессий или счётчик отброшенных пакетов
Опровергает
Если сессий намного меньше лимита, а войти нельзя, это «Переполнение очереди подключений (backlog)» или сервер авторизации. Если рвутся только неактивные соединения, это «Истечение отслеживания соединений в облачной группе безопасности»
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)
Источники
Netfilter Conntrack Sysfs variablesLinux kernel Максимальное число записей в таблице conntrack (nf_conntrack_max), время хранения закрывающихся соединений (TIME_WAIT и FIN_WAIT по умолчанию 120 с), установленных TCP-соединений по умолчанию 5 дней, текущее число записей (nf_conntrack_count)
Amazon EC2 security group connection trackingAWS При превышении числа соединений, которые инстанс может отслеживать, пакеты новых соединений отбрасываются, неактивные соединения могут исчерпать таблицу отслеживания
Infrastructure layer attacksAWS Атаки вроде SYN-флуда занимают ресурсы серверов, файрволов и балансировщиков нагрузки