IT,컴퓨터 이야기

https차단 쉽게 통과하는 방법(설치X) + 게임 서버 개발 잡담

원생계 2019. 3. 23. 06:15


https 사이트 중 수백개의 불법 도박사이트와 음란물 사이트, 기타 해외 불건전(?) 유해(?) 사이트들에 대한 접속이 차단되었습니다. 아니, 엄밀히 이야기 하면 통신사, 즉 인터넷 서비스 제공사(ISP) 에서 특정 주소로의 패킷 요청일 경우 중간에서 막아버리는 시스템을 도입한 것입니다. 언론에선 "SNI 차단"이라고 벌써 이름도 붙였더군요.


기술적인 이야긴 아래에서 하고, 개인적으로 저는 이런 사전 차단방식의 규제를 매우 혐오하기 때문에(게임 사전심의제도와 셧다운제도 마찬가지) 이 패킷 스니핑을 통한 https 사이트 접근 차단 방식에 반대합니다.


그러니 먼저

https 사이트 접속 차단행위를 가볍게 무시하고 통과하는 방법을 다뤄봅니다.

※ 간단히 네트워크 설정만 살짝 변경했다가 다시 되돌리는 방식.


1. 윈도우키 -> cmd 입력 -> Ctrl+Shift+Enter 로 실행(혹은 cmd를 우클릭하여 관리자 권한으로 실행)


2. 아래와 같이 타이핑하여, 현재 컴퓨터에서 인식 중인 IPv4 인터페이스 목록을 확인합니다.


netsh interface ipv4 show interfaces

(netsh 는 윈도우 기본 유틸입니다)



제 PC에선 11번 Index 의 interface 가 실제 사용하는 랜카드입니다. 본인 PC에서 실제로 사용중인 interface 가 어떤 것이고 색인이 몇번인지 확인해야 합니다.


쉬운 확인 방법은, [제어판->네트워크 및 인터넷->네트워크 연결] 로 이동해서 활성화된, 실제로 패킷을 주고받는 장치 이름을 확인하시면 됩니다.




3. 다시 아래 커맨드라인 명령어를 입력합니다.


netsh interface ipv4 set subinterface 11 mtu=352

(subinterface 값인 "11"은 제 PC의 네트워크 어댑터 인덱스입니다. 본인 PC에 맞는 인덱스를 입력하시면 됩니다.)



4. https 통신이 불가능했던 사이트에 접속을 시도합니다. 만약, 여전히 접속이 실패한다면 위의 mtu 값을 좀 더 낮춥니다. (100~300 까지? 테스트 해보니 200정도로 낮추니 대부분 접근 성공했습니다. Windows 10 인 경우 352~576)


※ https 사이트 이용이 끝나면 mtu 값을 다시 1500 으로 되돌리는 걸 추천드립니다.

netsh interface ipv4 set subinterface 11 mtu=1500


 5. "매개 변수가 틀립니다" 가 출력될 경우.


Windows 10 의 경우엔 최소 mtu 값이 352 ~ 576 으로 설정되는 것으로 보입니다. 아래 커맨드를 먼저 입력해서 최소 mtu 값을 수정합니다.

netsh interface ipv4 set global minmtu=352 store=persistent


다시 3. 번을 수행합니다.





이상입니다.


커맨드라인 명령어를 잘 알고계신 분들이라면 위 방식이 매우 간편하다고 느끼실 겁니다. 적어도 느린 VPN을 사용하는 것 보다는요. 어떤 의미를 가진 명령인지 최대한 쉽게 풀어서 적어봅니다.



MTU 는 Maximum Transmission Unit 의 약어입니다. 간단하게 말하면, 통신 패킷을 물리적으로 전송할 때의 최대 크기를 이야기 합니다. 쉽게 택배상자의 크기로 예를 들면 위 커맨드는 이 택배상자의 크기를 줄이는 설정입니다. 즉, 원래 1500 크기의 택배상자에 패킷을 담아 보내던 걸, 100~300 짜리 작은 택배상자로 나눠서 여러번 보내겠다는 의미입니다.


통신업체에서 1500 짜리 택배상자를 받으면, 그 상자에 붙어있는 SNI(Server Name Indication)를 조사해서, 특정 주소로 보내지는 경우라면 차단하는 상황입니다. 그러니 엄밀히 말하면 "SNI 차단"이 아닌 "SNI 필터링"이 더 명확하겠네요.



이 때 택배 상자를 잘게 나눠서 보내면, 통신업체에서는 그 상자들을 조사해야하는데, 택배상자가 너무 작으니 SNI 를 적어둔 칸도 파편화 되고, 잘개 쪼개진 운송장 조사하기가 어려워지니 그냥 통과시켜버리게 되는 걸 활용한 방식입니다. 단, 패킷 상자가 작아지는 대신에, 더 자주 여러번 패킷을 전송해야겠죠. 택배상자랑 완충제 뾱뾱이 쓰레기도 많아지고오.


오늘 하루 종일 https 키워드가 포털 실검에 올라와있던데, 저도 일단은 네트워크 (게임)을 개발하는 프로그래머 입장에서 호기심이 생겼고 조금 공부하고 검색하면서 재밌는 시간을 보냈습니다. 과거에 처음 게임 네트워크를 공부하고 개발할 때 MTU 라는 개념도 같이 공부했던 것 같습니다. 네트워크의 전송계층에서 일어나는 일이긴 하지만 어느정도 개념은 알고 있어야겠다 생각했었습니다.


이 개념을 대략 알고있다면, 하나의 게임 패킷을 작업할 때에도 가능하면 MTU를 넘지 않게 설계해야 하는 게 유리하다는 정도의 가이드가 될 수 있겠네요. 뭐... 보통 어지간히 큰 패킷이 아니라면 1500 Bytes 가까이 되는 패킷은 잘 안 만들기도 하고, 이렇게 큰 패킷은 보통 "전체 아이템 목록", "전체 길드원 정보" 같은 데이터일 가능성이 높아서  빠르게 보낼 필요가 없는 패킷일 가능성이 높으니 큰 문제는 되지 않을 것 같습니다.


패킷의 크기가 너무 커지게 되면 MTU 기준으로 패킷을 Fragment 로 나눠서 보내야 하고, 그만큼 중간에 유실되거나 재전송처리가 일어날 가능성이 높아지니 아무래도 게이머가 느끼는 네트워크 상태도 좋지 않게 느껴지겠죠.


한 편으로는 MTU 를 좀 높여서 하나의 패킷 해더에 더 많은 양의 데이터를 보낼 때의 이점과, 이 패킷이 유실되거나 정상적으로 수신하지 못했을 때 재전송하는 부하. 반대로 MTU 는 낮췄을 때 증가하는 빈도와 반복되는 패킷 헤더로 인한 비효율성 등을 활용할 수도 있다는 이야기도 들었던 건 같습니다.  실제로 네트워크 환경을 구축하는 시스템 엔지니어링 분야에선 이 개념을 꽤 중요하게 관리하기도 하는 것 같고요.


시스템 엔지니어링은 쪼랩이기도 하고, 게임 서버와 클라이언트 코드의 구조나 설계 등에 더 관심이 컸기 때문에 별로 신경을 안 쓰고 있었습니다만, 어쨌든 반가운 개념들이라 재밌었습니다.



현재로서는 SNI 패킷 내용만 캡쳐해서 연결을 필터링하는 용도로 사용한다곤 하는데, 보안프로그램도 사실 개발/관리자의 의도에 따라 루트킷이나 백도어가 될 수도 있기 때문에, 현재 행정부의 의도가 정의롭다 할 지라도, 언젠가 어떤 의도로 활용할지는 아무도 모르는 일이겠죠.




728x90
반응형