SOCKS로 터널 뚫기
on
SOCKS라는 프로토콜이 있다. 프락시로 사용하라고 만든 프로토콜인데, 일반적으로 알려져있기로는 TCP proxy용도다. 어떤 사람은 이것을 dynamic port fowarding이라고 말하기도 하는데, SOCKS라는 프로토콜을 쓰면 TCP 프로토콜을 모두 캡슐화해서 하나의 포트로 주고받게 되기 때문에 사실상 proxy를 위해서 뚫린 포트는 한개이지만 다양한 포트로 프락시를 할 수 있게 된다.
MacOS에서는 SOCKS를 예전부터 지원했고 사용하기 매우 편리하게 되어있어서 일단 SOCKS 연결이 가능한 조건이 되면 SOCKS를 활성화 하는 순간 ssh와 웹 트래픽 등등 모두 SOCKS를 통해서 주고받게 할 수 있다. 별도로 설정해줄 것도 없고.
그런데 여기서 욕심이 더 생기게 된다. 기왕이면 UDP 패킷도 주고 받고 싶고 DNS도 받아보고 싶고, 기왕이면 거의 모든 패킷을 그냥 하나의 터널 디바이스를 통해서 socks를 경유하여 쓰고 싶게 된다. 그렇지 않으면 ssh로 포트마다 뚫어줘야 한다거나 하는 고충이 생기기 때문이다.
badvpn이라는 github에 공개되어있는 애플리케이션이 이것을 지원한다. 즉, socks로 주고 받을 것을 tunnel device를 통해서 연결해주는 것이다. 따라서 SOCKS를 사용하라고 특별히 지정해놓은 서비스가 아니라도 route 조건만 맞게 되어있다면 SOCKS를 통해서 통신할 수 있게 된다.
왜 이런 짓을 해야하는가? 도무지 용도가 무엇이냐 할 수 있다.
다음은 나의 응용예이다.
- 난 회사의 네트워크에 물려 일을 해야하는데, 재택 근무기간동안에 회사에서 내어준 랩탑만을 써야 한다. 여기에 VPN 접속용 어플리케이션이 깔려있는데, 다른 곳에는 설치할 수가 없다.
- 회사에서 내어준 랩탑의 성능이라든가 설치 가능한 소프트웨어는 크게 제한 되어있고 관리자 권한도 없기 때문에 웹 앱을 통해서 일을 하고 메일이나 주고 받는 게 전부다.
- 억울하지만 나는 컴퓨터로 해야할 일이 상당히 많다. 회사 망에 붙어서 라이센스를 받아 써야 하는 어플리케이션도 많고, Linux와 Windows를 왔다갔다 하면서 일해야 되는 경우도 많다.
- 결국, 고성능 데스트탑과 이 랩탑을 어떻게든 연결해서 데스크탑이 회사 망에 붙어서 일을 하게 만들어주어야 한다. 그러나, 대놓고 ssh 터널을 뚫거나 이걸 가능하게 해주는 소프트웨어를 설치할 수 없다. 물론 관리자 권한이 없기 때문에 밖으로 tcp 포트하나 열어놓을 수가 없다.
그렇다. 이러한 경우에는 회사 망에 붙일 수 있는 방법이 없고 랩탑의 성능이 제한되어있기 때문에 아무 일도 할 수 없다고 배를 째버리는 것이 답이다.
그러나, 시절이 시절인만큼 어쩔 수 없이 머리를 써서 일을 해줘야 한다. 이런 안좋은 시기에 프로젝트가 폭망한다거나 (나 혼자 일 못한다고 폭망하진 않겠지만), 진행에 문제가 생기면 어떻게든 짜증이 나게 되니까.
자. 그러면 어떻게 문제를 풀어가야 할까? 회사에서는 내 데스크탑에 회사 전용 VPN을 설치하게 해주지 않을 것이다. 그걸 원한다면 내 PC가 회사 도메인으로 편입이 되도록 해야 하거나 회사 관리자가 맘대로 컨트롤할 수 있게 내 권한을 죄다 넘겨주고 바보 PC를 만들어 버림과 동시에 윈도우즈 말고 다른 OS는 꿈도 못 꾸게 된다. Secure boot라는 게 있어서 다른 짓을 하면 사람을 불편하게 하기 때문에 아예 회사에서 주는 랩탑은 최대한 지급받은 그대로 그냥 두는 게 답이다.
이미 답은 앞에서 다 말했다. 어쨌든 이런 방법을 통해서 라이센스 받아야 쓸 수 있는 소프트웨어 등등 거의 모든 일을 아무런 불편없이 잘 해내고 있다.