- Статус
- Offline
- Регистрация
- 25 Окт 2021
- Сообщения
- 16
- Лайки
- 419
Мы продолжаем рубрику «Между линий», где рассказываем о сложностях, ошибках и счастливых случайностях, с которыми сталкиваемся во время работы над такой уникальной игрой, как Dota 2.
Это история об интернете и о том, как он не работает как нужно, если вообще работает (но на самом деле не работает). Мы расскажем, как у наших клиентов переставал работать интернет и как мы это исправили.
Интернет — не такая уж и обузданная территория, как нам кажется. Стоит выйти за безопасные пределы двухфакторной идентификации и доверенных файлов cookie, и вы окажетесь на диких просторах. Тут с лёгкостью можно наткнуться на вездесущих троллей, которые желают (и всё чаще получают возможность) испортить вам жизнь просто так, забавы ради.
В далёком 2014 году эти тролли использовали распределённые атаки типа «отказ в обслуживании» (DDoS-атаки) — «распределёнными» их называют потому, что в их ходе злоумышленник с помощью множества интернет-хостов заваливает трафиком определённый IP-адрес, чтобы перегрузить стек протоколов. Такие атаки ещё называются «объёмными», и с их помощью пытаются не проникнуть в сеть, а вызвать отказ в доступе к ней. Соответственно, распределённый отказ в доступе — это когда поток постороннего трафика мешает реальным людям пользоваться той или иной службой.
Проблема DDoS-атак заключалась в том, что к концу 2014 года их совершали не суперхакеры с учёной степенью в информационной сфере, занимающиеся похищением данных. Их совершали практически все, кто хотел заплатить за услугу, а всем остальным занимались боты. И причина была очевидна. Кто-то занимался этим исключительно из любви к вандализму, но у некоторых был мотив: DDoS-атака позволяла гарантированно прервать матч, в котором проигрывали вы или тот, за кого вы болели. Из досадного неудобства атаки превратились в прямую угрозу для любой игры, где можно соревноваться.
В первые месяцы 2015 года мы наблюдали огромный всплеск числа DDoS-атак на Dota и CS:GO, и другие компании также сообщали о том, что атак стало значительно больше. Кто-то неожиданно упростил этот процесс и сделал его доступным кому угодно.
В августе 2015 года DDoS-атаки помешали ходу The International. Они никак не повлияли на соревнующихся игроков, но на протяжении более двух часов мешали студийным комментаторам и аналитикам присоединиться к матчу и провести качественную трансляцию. Онлайн-трансляция матчей была под угрозой. Игры в одночасье стали проходить будто в вакууме. Профессиональный турнир с миллионами зрителей и миллионами долларов на кону пострадал из-за того, что невесть кто запустил программку за пять долларов. Такую проблему нельзя было игнорировать.
Прежде чем прийти к рабочему решению, мы перепробовали многое. Сначала мы попытались отфильтровать трафик с помощью мощного сетевого коммутатора. К сожалению, подобная фильтрация плохо подходит для игрового трафика. Для игровых серверов принятие незапрошенного UDP-трафика от различных IP-адресов — обычное дело. Представьте, что ваше отделение почты отсеивает нежелательные письма, но в то же время вы ведёте рубрику «Советы читателям» в местной газете, и поэтому вам постоянно пишут незнакомые люди. В таких условиях почтовому отделению никак не понять, какие письма настоящие, а какие нет. Примерно так же игровые серверы воспринимают трафик. Более того, IP-адреса отправителей в протоколе UDP не защищены, и их можно легко подделать, так что даже обратный адрес не может служить признаком важности письма, ведь злоумышленники могут сфальсифицировать эти данные.
Через Steam проходит крупный поток игровых данных, и для этого была выстроена большая сеть. Мы активно пользовались этой сетью, чтобы отправлять игровой трафик по специальным маршрутам, обеспечивать хороший обмен данными, задействовать передовые технологии и так далее. В результате игроки получали хорошее время отклика в сетевых играх, но не были защищены от DDoS-атак. Незащищённость UDP-протокола не позволяла сделать частной даже нашу собственную сеть.
Чтобы нашу же сеть не использовали для атак на наши сервера, нам нужно было контролировать и защищать все входы и выходы. Для этого мы создали серверы-посредники, которые направляли через ретрансляторы абсолютно весь игровой трафик вплоть до последнего пакета. В результате все клиенты, которые пытались связаться с игровыми серверами, стали проходить аутентификацию и перенаправляться с помощью ретрансляторов. А значит, IP-адреса серверов всегда были скрыты от конечного пользователя, и злоумышленники уже не знали, какие адреса нужно атаковать.
Возвращаясь к нашему старомодному сравнению, злоумышленникам больше не было известно, какой адрес заваливать письмами. Они могли отправить письмо хоть в каждое почтовое отделение с просьбой переслать его дальше, но без подтверждения личности письмо никуда бы не ушло (более того, почтовому отделению показалось бы немного подозрительным, что кто-то пытается отправить одному человеку сто тысяч писем).
Но разве нельзя атаковать ретрансляторы? Технически — можно. Но мы создали их именно для этого, и у нас их практически безграничное количество. «Ретранслятор» — это, по сути, компьютер с запущенной программой. Его можно атаковать или вывести из сети, но протокол разрабатывался с учётом такой возможности. Если во время игры клиент теряет связь с ретранслятором, просто задействуется другой. Ретрансляторы — словно сотни игральных фишек, разбросанных по миру с единственной целью: защищать игровые серверы. (Кстати говоря, остановить работу ретранслятора сложнее, чем кажется. Они довольно хорошо спроектированы и расположены в определённой части сети, поэтому, хоть они и созданы, чтобы принимать на себя удар, ещё ни один из них не вышел из строя.)
Решение оказалось простым, но эффективным. Раньше, чтобы помешать игре, достаточно было одолеть один игровой сервер (и сделать это крайне легко). Теперь же, по сути, нужно остановить работу всего дата-центра (и сделать это гораздо, гораздо, гораздо сложнее). Существуют ли атаки, которым это под силу? Разумеется. Существуют ли атаки, которым это под силу и которые кто угодно может купить за пять долларов? Нет. Столь изощренная атака официально стала слишком дорогой для большинства людей.
Мы запустили новую систему, и у нас случилось прозрение: мы не будем привязаны к правилам обычного интернета, если станем управлять собственной частной сетью. С её помощью мы можем ещё сильнее улучшить качество обслуживания. Пользуясь обычным интернетом и отправляя пакет с одного IP-адреса на другой, вы получаете маршрут от протокола граничного шлюза (англ. Border Gateway Protocol или BGP). Этот алгоритм маршрутизации определяет, как ваш пакет будет перемещаться по сети, и вы не можете на него повлиять.
Но благодаря виртуальной частной сети, состоящей из сотен ретрансляторов и дата-центров по всему миру, мы, по сути, можем выбрать собственный маршрут от клиента до игрового сервера — и зачастую он быстрее, чем маршрут по умолчанию. Пользователям Steam Datagram Relay (SDR) мы показываем время отклика и выделенный нами маршрут, чтобы они могли сами увидеть, как он оптимизируется.
Функция, изначально защищавшая серверы одной игры, превзошла все ожидания. Сеть SDR без проблем доставляет до 140 миллионов пакетов и 550 гигабит данных в секунду. Наши ретрансляторы в 31 дата-центре могут хранить более 5 терабит информации. Эта система не только предоставляет защиту от DDoS-атак, но и повышает скорость подключения и снижает время отклика у всех игроков — не только в Доте, но и в любой другой игре в Steam, которая захочет воспользоваться этой возможностью.
Надеемся, вас порадовал очередной взгляд за кулисы Доты. В этот раз было много технических подробностей, так что спасибо, что дочитали до конца! И не стесняйтесь сказать нам, о чём вы хотите услышать в следующий раз.