도타처럼 독특한 게임을 개발하면서 겪었던 어려움, 버그 수정, 가끔씩 발생하는 행복한 사고에 대해 개발팀원들과 함께 이야기하는 블로그 기능인 레인 사이(Between the Lanes) 에 다시 오신 것을 환영합니다.
이 글은 인터넷에 대한 이야기이며, 인터넷이 정상적으로 작동할 때와 그렇지 않을 때를 제외하고는 인터넷이 어떻게 작동하지 않는지에 대한 이야기입니다. 고객에게 인터넷이 어떻게 작동을 멈췄는지, 그리고 어떻게 문제를 해결했는지에 대한 이야기입니다.
인터넷은 우리가 생각하는 것보다 훨씬 더 거친 영역입니다. 2단계 인증과 신뢰할 수 있는 쿠키라는 안전한 울타리를 벗어나면, 인터넷은 악의를 품은 무작위 트롤들로 가득 찬 황무지가 될 수 있으며, 점점 더 많은 사람들이 다른 이유 없이 사용자의 삶을 비참하게 만들 수 있는 능력을 가지고 있습니다.
2014년 당시 트롤이 사용했던 방법은 분산 서비스 거부(DDoS) 공격이었습니다. "분산"이란 다수의 인터넷 호스트가 네트워크 스택을 압도하기 위해 특정 대상 IP에 악의적으로 트래픽을 폭주시키는 것을 말합니다. 이를 볼륨 공격이라고 하며, 네트워크에 침입하려는 의도가 아닙니다. 단지 서비스를 거부하려는 것입니다. 분산 서비스 거부는 정상적인 서비스를 원하는 합법적인 사람들이 악성 트래픽에 밀려난다는 것을 의미합니다.
DDoS 공격의 문제점은 2014년 말에는 상급 컴퓨터 공학 학위를 가진 데이터 유출을 노리는 슈퍼 해커에 의한 공격이 아니었다는 점입니다. 돈을 지불하고 서비스나 봇에 공격을 의뢰하고자 하는 거의 모든 사람이 공격을 감행했습니다. 그 이유는 꽤나 분명합니다. 순전히 반달리즘을 위해 기꺼이 공격을 감행하는 사람들도 있었지만, 다른 동기가 있는 사람들도 있었습니다: DDoS 공격은 자신이나 자신이 응원하는 팀이 지고 있는 경기를 중단시킬 수 있는 확실한 방법이었기 때문입니다. DDoS 공격은 더 이상 가끔씩 발생하는 짜증스러운 일이 아니었습니다. 플레이어가 경쟁하는 모든 게임에 대한 노골적인 공격으로 바뀌고 있었습니다.
2015년이 시작될 무렵, 도타와 CS:GO에 대한 DDoS 공격이 크게 증가했으며 다른 회사들도 큰 폭으로 증가했다고 보고했습니다. 누군가 아주 갑자기 누구나 쉽게 디도스 공격을 할 수 있도록 만든 것입니다.
2015년 8월, The International은 디도스 공격으로 인해 중단되었습니다. 경기를 진행하는 프로 선수들은 영향을 받지 않았지만, 2시간 이상 방송 진행자들은 실황 중계와 컬러 해설을 하려는 경기에 참여할 수 없었습니다. TV 방송으로 스트림을 송출하는 것도 문제가 되었습니다. 선수들은 갑자기 공백 속에서 경기를 치러야 했습니다. 수백만 명이 시청하고 수백만 달러가 걸려 있는 프로 게임 이벤트가 5달러짜리 소프트웨어를 가진 임의의 사람들에 의해 중단되고 있었습니다. Valve는 이 문제를 무시할 수 없었습니다.
DDoS 공격에 대응하기 위해 여러 가지 솔루션을 시도해본 결과 효과가 있는 솔루션을 찾았습니다. 처음에는 강력한 네트워크 스위치로 트래픽을 필터링하려고 시도했습니다. 안타깝게도 이러한 유형의 필터링은 게임 트래픽에는 본질적으로 적용하기 어렵습니다. 게임 서버의 특성상 임의의 IP 주소에서 원치 않는 UDP(사용자 데이터그램 프로토콜) 트래픽을 수신할 수 있기 때문입니다. 원치 않는 정크 메일을 걸러주는 우체국이 있다고 상상해 보세요. 하지만 이제 당신의 직업이 조언 칼럼니스트이고 모르는 사람으로부터 항상 수많은 정상 메일을 받는다고 상상해 보세요. 우체국에서는 무엇이 정크 메일이고 무엇이 아닌지 알 수 없습니다. 게임 서버로 유입되는 트래픽도 마찬가지입니다. 게다가 UDP 패킷의 소스 IP는 보안되지 않아 쉽게 스푸핑될 수 있습니다. 정크 메일 발신자가 봉투의 반송 주소를 위조하기 때문에 우체국에서는 봉투의 반송 주소만 보고도 단서를 찾을 수 없습니다.
Steam은 게임 콘텐츠를 위한 많은 bit를 제공하며, 이를 위해 대규모 네트워크를 구축했습니다. 저희는 이미 이 네트워크를 활용하여 전용 링크를 통해 게임 트래픽을 전송하고, 좋은 피어링을 확보하고, 네트워킹 엔지니어링 모범 사례를 사용하는 등의 방법을 사용하고 있었습니다. 이를 통해 플레이어의 핑 시간을 낮게 유지했지만 DDoS 공격으로부터 보호하지는 못했습니다. 문제는 UDP 프로토콜이 안전하지 않기 때문에 자체 네트워크가 있긴 했지만 비공개가 아니었다는 점입니다.
공격자가 자체 네트워크를 사용하여 서버를 공격하는 것을 방지하기 위해 모든 입구를 제어하고 보안을 유지해야 했습니다. 이를 위해 게임 트래픽에 대한 프록시를 생성하여 네트워크를 통해 전송되는 모든 데이터 패킷을 릴레이를 통해 라우팅했습니다. 이제 클라이언트가 게임 서버와 통신하려면 클라이언트를 인증하고 해당 트래픽을 게임 서버로 프록시하는 릴레이를 거쳐야 했습니다. 즉, 서버의 IP 주소는 항상 숨겨져 있었기 때문에 공격자는 어디를 공격할지 알 수 없었습니다.
앞서의 구식 우체국 비유를 다시 사용하자면, 스팸 발송자는 더 이상 정크 메일을 보낼 주소가 없습니다. 해당 지역의 모든 우체국에 스팸 메일을 보내서 우편으로 보내달라고 요청할 수는 있지만 권한이 없는 우체국에서는 그렇게 하지 않을 것입니다. (게다가 그 우체국에서는 누군가 한 사람에게 10만 통의 편지를 보내려 한다는 사실을 조금은 의심할 것입니다.)
하지만 그냥 릴레이를 공격할 수는 없나요? 기술적으로는 가능합니다. 하지만 우리는 본질적으로 릴레이의 수를 제한하지 않고 공격받도록 설계했습니다. "릴레이"는 소프트웨어를 실행하는 컴퓨터의 다른 말일 뿐입니다. 이를 공격하거나 오프라인 상태로 만들 수 있지만 프로토콜은 이러한 가정을 염두에 두고 설계되었습니다. 클라이언트가 게임을 하다가 릴레이와 연결이 끊어지면 다른 릴레이로 전환됩니다. 릴레이는 게임 서버를 보호한다는 단 하나의 목적을 가지고 전 세계에 흩어져 있는 수백 개의 폰과 같습니다. (참고로 릴레이를 제거하는 것은 생각보다 어렵습니다. 릴레이는 꽤 잘 설계되어 있고 네트워크의 특정 부분에 배치되어 있기 때문에 오프라인으로 제거할 수 있도록 만들어졌지만 아직 한 대도 잃은 적이 없습니다).
해결책은 간단하지만 효과적이었습니다. 이전에는 누군가 게임을 중단시키려면 게임 서버 한 대를 무력화하면 되었습니다(클리어 기준이 매우 낮았습니다). 이제 그들은 본질적으로 데이터 센터 전체를 장악해야 했고, 이는 훨씬 더 높은 기준이었습니다. 여전히 이러한 목표를 달성할 수 있는 공격이 있을까요? 물론입니다. 온라인에서 누구나 5달러에 구입할 수 있는 공격이 있을까요? 이 정도의 정교한 공격은 공식적으로 대부분의 사람들이 감당할 수 있는 가격대를 벗어났습니다.
이 새로운 시스템을 가동하면서 저희는 깨달았습니다. 자체 사설 네트워크를 제어하면 일반 인터넷의 작동 방식에 얽매이지 않을 수 있다는 것이죠. 이를 통해 고객 경험을 더욱 향상시킬 수 있습니다. 일반 인터넷에서는 한 IP 주소에서 다른 IP 주소로 패킷을 보낼 때 사용하는 경로가 BGP(보더 게이트웨이 프로토콜)에 의해 결정됩니다. 이는 패킷이 네트워크를 통해 이동하는 방식을 결정하는 라우팅 알고리즘으로, 사용자는 선택의 여지가 없습니다.
하지만 수백 개의 글로벌 릴레이와 데이터 센터로 구성된 가상 사설망을 사용하면 기본적으로 클라이언트에서 게임 서버까지 자체 경로를 선택할 수 있으며, 기본 경로보다 더 빠른 지름길이 될 수도 있습니다. 스팀 데이터그램 릴레이(SDR)를 사용하는 경우, Steam 오버레이에 핑 시간과 제공 경로가 표시되므로 어떻게 최적화되는지 직접 확인할 수 있습니다.
도타 게임 서버를 보호하기 위해 시작된 이 기능은 누구도 예상하지 못했던 규모로 성장했습니다. SDR 네트워크는 일상적으로 초당 최대 1억 4천만 개의 패킷과 550GBit를 전송합니다. 5TBit 이상의 용량을 갖춘 31개 데이터 센터에 릴레이가 있습니다. 현재 저희는 스팀 데이터그램 릴레이라고 부르는 것을 통해 DDoS 공격으로부터 보호할 뿐만 아니라 모든 도타 고객의 연결성을 높이고 핑을 낮춥니다. 그리고 이 기능은 Dota뿐만 아니라 이 기능을 활용하고자 하는 Steam의 모든 게임에도 적용됩니다.
도타의 레인 사이를 들여다보는 또 다른 재미가 있으셨기를 바랍니다. 꽤 기술적인 내용이었지만 끝까지 읽어주셔서 감사합니다! 다음에 다뤘으면 하는 내용이 있다면 언제든지 알려주세요.
(IP보기클릭)118.223.***.***
아씨 출시 또 늦어지겠네...
(IP보기클릭)210.91.***.***
(IP보기클릭)118.223.***.***
coyan
아씨 출시 또 늦어지겠네... | 24.03.06 16:47 | | |
(IP보기클릭)103.135.***.***
(IP보기클릭)220.93.***.***
(IP보기클릭)14.34.***.***
머 그래도 요즘은 롤보다 쉬워진겜이라.. 이장르 처음 접해서 이겜하면 생각보다 적응하기 쉬워짐 | 24.03.06 18:57 | | |
(IP보기클릭)223.39.***.***
요즘은 롤이 더 어려움 | 24.03.06 19:48 | | |
(IP보기클릭)220.93.***.***
어렵다는 의미도 있긴한데 기본 40-50분 게임이라;; | 24.03.06 20:12 | | |
(IP보기클릭)123.215.***.***
상위티어는 보통 30분 안짝으로 끝나긴하던디 하위티어는 파밍할때 싸울때 구분이 안되서 ㅋㅋㅋㅋㅋ | 24.03.07 12:46 | | |
(IP보기클릭)118.127.***.***