글클메를 하려면 VPN이 필요하다.
게임용 VPN은 구독료가 한 달에 1만원이 넘는다.
뭐.. 나는 충분히 낼 생각이 있었지만, 그 전에 원래 쓰던 VPN이 속도가 잘 나오는지부터 확인해 보고 구독하려고 했다.
그러던 중에 메이플 좋아하는 친구가
VPN이라는 게 생소하기도 하고, 뭔가 알아봐야 한다는 것 자체를 주저하는 것 같았다.
그럼 그냥 내가 만들자 싶었다.
셋이서 한다#
나랑 아내는 같은 집, 같은 공유기에서 맥으로 한다.
친구는 울산에서 윈도우로 한다.
친구가 제일 중요했다.
이게 시작한 이유니까.
VPN 앱 하나 깔고, 파일 하나 가져오고, 켜면 끝이어야 했다.
VPN이 뭔지부터#
사실 VPN이 제공하는 기능이 전부 필요한 건 아니었다.
나는 그냥 다른 나라 IP를 거쳐서 게임 서버에 닿기만 하면 됐다.
(글클메는 지금 한국 IP 접속을 허용하지 않는다)
(그렇다고 VPN을 대놓고 금지하는 것도 아니다. 다만 VPN으로 약관을 어기면 영구 정지될 수 있고, 가능하면 쓰지 말라고는 한다. 출처: 넥슨 고객센터)
내 컴퓨터에서 나가는 게임 트래픽을 중계 서버까지 보내고, 거기서 게임 서버로 보내 주기만 하면 됐다.
근데 VPN 자체를 만든다는 건 엄청난 노고가 필요하다는 걸 깨달았다.
VPN의 기본 개념은 공개 인터넷 위에 사설망을 만드는 것이다.
앞에 Virtual이 붙은 건 물리적으로 연결하는 게 아니라 논리적으로 연결하기 때문이다.
어쨌든 사설망을 만들려면 이런 것들을 신경 써야 한다.
내 PC에서 출발하는 패킷을 감싸서 다른 지점까지 옮기려면 터널링이 필요하고,
그 패킷이 중간에 변조되지 않았는지 무결성도 검증해야 하고.. 다른 사람이 못 보게 암호화도 해야 한다.
이 밖에도 안전하게 연결하려면 부가 기능이 더 필요하다.
이런 걸 알고 나니, 내가 개발해야 할 건 VPN 자체가 아니라 좀 다른 쪽이라는 걸 깨달았다.
위에 말한 기능들은 WireGuard 같은 견고한 오픈소스가 이미 다 해 주고 있었기 때문이다.
그럼 내가 할 일은#
내가 할 일은 이런 VPN 오픈소스로 서버를 올리고, 사용자 인증을 붙이고, 게임 속도를 끌어올리는 일련의 작업이었다.
먼저 서버는 클라우드에 올릴 건데, 어디에 올릴지가 또 고민이었다.
보통은 별생각 없이 AWS를 고르곤 하는데, 무의식적으로 AWS를 고르는 이유는 대외적으로 가장 잘 알려진 CSP이고, 그만큼 AWS 안에 편리한 서비스도 많고 서비스끼리 통합도 잘 되기 때문이라고 생각한다.
다만 이번에는 그런 것보다 비용을 제일 먼저 생각해야 했다.
셋이서 쓰는데 몇십 불씩 나오면 안 되니까..
그래서 처음엔 GCP가 무료 크레딧을 주니까 GCP로 진행했다.
그런데 문득 이런 생각이 들었다.
아마 CSP 중에 전 세계에 서버가 제일 많은 곳은 AWS일 거고..
그럼 게임 서버에 패킷을 제일 빨리 보내려면 확률적으로 AWS가 낫지 않을까?
그래서 GCP랑 AWS 속도를 비교해 보기로 했다.
메이플은 어디로 붙나#
일단 속도를 비교하려면 메이플이 어디로 붙는지부터 확인해야 했다.
게임만 터널로 보내려면 어차피 게임이 어디로 붙는지도 알아야 했다.
다만 게임이 어디에 붙는지 알려면 게임을 직접 실행해 봐야 하는데,
게임을 실행할 수가 없어서 원래 쓸 수 있던 Proton VPN을 켜고 게임에 접속했다.
얼른 클로드한테 맡겨서, 실제 게임 서버가 AWS 미국 리전 한 곳에 있다는 걸 확인했다.
GCP와 AWS 각각 거기서 제일 가까운 리전에 서버를 올려 두고, VPN 인프라가 다 되면 테스트해 보기로 했다.
게임만 골라 보내기#
AWS 쪽은 Lightsail에 제일 작은 사양으로 올렸다.
혹시 몰라서 한 달에 15달러를 넘으면 알림이 오게 예산도 걸어 뒀다.
근데 서버만 올린다고 끝이 아니었다.
VPN을 켜면 인터넷 전체가 미국을 돌아서 나간다.
유튜브까지 미국에 갔다 오는 걸 원하는 건 아니었다.
근데 사실 더 큰 이유는 돈이었다.
Lightsail 제일 작은 플랜은 한 달 전송량이 1TB까지만 포함이고, 넘으면 나가는 트래픽만큼 GB당 돈을 더 내야 한다.
셋이 인터넷을 통째로 이 서버로 보내면 그걸 넘길 수도 있었다.
그래서 게임 트래픽만 터널로 보내고, 나머지는 원래대로 집 회선으로 나가게 하고 싶었다.
문제는 게임이 거기 한 곳만 가는 게 아니었다는 거다.
그래서 전체 터널을 켜 두고 게임을 처음부터 끝까지 한 바퀴 돌았다.
런처 켜고, 로그인하고, 게임 들어가서 채널 옮기고, 사냥하고, 캐시샵 열어 보고, 업데이트까지.
기능 하나 쓸 때마다 어디로 붙는지 다 모았다.
나온 건 이랬다.
미국 한 지역에 있는 대역이 대부분이었고, 그 밖에도 여러 대역이 섞여 있었다.
이 대역들만 터널로 보낸다.
반대로 일부러 터널 밖에 둔 것도 있다.
게임 패치 다운로드는 Akamai CDN에서 받는데, Akamai까지 터널에 넣으면 다른 사이트들까지 미국을 돌게 돼서 뺐다.
런처 안에 있는 reCAPTCHA, 구글 애널리틱스, 페이스북도 뺐다.
마지막으로 게임하는 동안 터널 밖으로 새는 게임 연결이 있으면 알려 주는 스크립트를 만들어서 돌려 봤다.
게임이랑 런처는 전부 터널로, 유튜브는 집 회선으로 나갔다.
(런처가 구글에 붙는 게 두 건 터널 밖으로 나갔는데, 글꼴이나 분석 같아서 그냥 두기로 했다)
GCP vs AWS#
집에서 미국 중계 서버로 바로 붙어 보니, 게임 월드 서버까지 RTT가 172ms쯤 나왔다.
GCP 쪽은 155~160ms.
어..? AWS가 더 느렸다.
확률적으로 AWS가 빠를 거라던 내 생각은 바로 깨졌다.
우리 집 회선에서 일반 인터넷으로 미국 AWS까지 가는 길이 돌아가고 있었던 모양이다..
그래서 서울에 입구를 하나 더 뒀다.
받은 패킷을 풀지도 않고 미국 중계 서버로 그대로 넘기기만 하는 서버다.
한국에서 바로 AWS 망에 올라타는 셈이다.
그랬더니 130ms.
원래 쓰던 Proton VPN(140ms)보다도 빨라졌다.
결국 AWS가 이기긴 했는데, 생각해 보니 노드가 많아서라기보다 게임 서버가 AWS에 있어서인 것 같다.
서울에서 AWS 망에 올라타면 게임 서버까지 AWS 안에서만 움직이니까.
물론 우리 집 회선에서 그날 잰 값이라, 다른 집에서는 다를 수 있다.
그리고 한국에서 거기까지는 물리적으로 100~110ms 밑으로는 힘들다.
아이템 줍기처럼 서버를 한 번 갔다 와야 하는 딜레이는 이 이상 줄이기 어렵다.
친구한테 보내기#
이제 제일 중요한 친구 차례.
친구는 VPN을 알아보는 것부터 주저하던 사람이라, 친구가 할 일은 최대한 줄여야 했다.
처음 PoC 때는 앱에서 빈 터널을 추가하고, 설정을 텍스트로 직접 붙여 넣는 식으로 했다.
다행히 WireGuard 앱에는 설정 파일을 가져오는(import) 방식이 있어서, 친구가 쓰기 훨씬 편해졌다.
그래서 친구 기기를 추가하는 스크립트를 만들었다.
이름만 넣으면 키 만들고, 서버에 등록하고, 설정 파일이랑 다운로드 링크, 안내문까지 한 번에 뽑아 준다.
친구는 공식 WireGuard 앱 깔고, 그 파일 가져와서, Activate만 누르면 되도록 했다.
맥이랑 윈도우는 같은 파일을 쓰고 안내문만 다르다.
근데 윈도우 테스트가 생각보다 애먹였다.
클라우드에 Windows Server VM을 띄우고 WireGuard를 깔았더니 VM 네트워크가 끊겨 버렸다..
일반 Windows 11에서는 그런 일이 없었다.
결국 맥에 UTM으로 Windows 11을 띄우고, 내가 친구라고 생각하고 안내문만 보면서 그대로 따라 해 봤다.
설치, 파일 가져오기, Activate까지 다 됐고, 게임이랑 로그인 연결도 전부 터널로 갔다.
그 와중에 걸린 것들도 있었다.
- 런처 안에서 회원가입을 하면 오류가 나서, 안내문에는 넥슨 웹사이트에서 가입하라고 적었다
- IPv6 전체(
::/0)를 터널에 넣으면 윈도우 앱이 킬 스위치를 켜서 게임 말고 다 막혔다. 반씩 둘로 나눠 넣어서 피했다
대시보드는 꼭 만든다#
하는 일이 모니터링을 만드는 일이다 보니, 모니터링이 얼마나 중요한지 안다.
그래서 뭘 만들든 모니터링 대시보드는 꼭 만드는 것 같다.
이번에도 미국 중계 서버 안에 상태 대시보드를 붙였다.
누가 접속해 있는지, 지연은 어떤지, 이번 달 전송량은 얼마나 되는지 볼 수 있다.
구글 로그인으로 나만 들어갈 수 있게 해 뒀다.
보니까 게임 트래픽은 몇 분에 1MB 남짓이라 서버 부담은 거의 없었다.
해 보니#
만드는 건 Claude Code랑 같이 했다.
밤 12시쯤 미국 중계 서버를 올리고 서울 입구까지 붙여 놓고 잤다.
아침 8시쯤 다시 시작해서, 친구 안내문이랑 대시보드까지 끝낸 게 낮 1시쯤이다.
VPN을 연결하는 것 자체는 생각보다 단순했다. WireGuard가 다 해 주니까.
다만 한 번에 뚝딱 만들 수 있는 건 아니었다.
게임을 직접 켜서 어디로 붙는지 보고, 윈도우에서 친구처럼 따라 해 보는 건 AI가 대신 해 줄 수 없었다.
직접 해 봐야 알 수 있는 부분이 꽤 있었다.
구독료 좀 아껴 보려고 시작했는데.. 결국 VPN이 뭔지부터 공부하게 됐다.