읽을 거리/잡담

우당탕탕 원격 데스크톱 세팅하기

hwi.middle 2025. 11. 15. 17:48

선결론

KT 공유기를 사용한다면, 외부망에서 WOL을 사용하기 위해 내부망에 중계기를 두어야한다.

개요

요즘은 학원에 다니고 있는데, 학원에 있는 PC의 사양이 영 마음에 들지 않아서 집에 있는 PC에 원격으로 접속하여 작업을 진행하려고 마음을 먹었다. 그래서 요 며칠간은 원격 데스크톱 환경을 세팅하기 위해서 이리저리 삽질을 좀 했는데, 이 내용을 정리해보려고 한다.

 

원격 데스크톱을 세팅하려면 일단 크게 두 가지 부분에 대해서 고려해야한다. 첫 번째는 어떤 원격 제어 프로그램을 사용할 것이냐는 것이고, 두 번째는 Wake-On-Lan(이하 WOL)이다. 참고로 WOL은 꺼져있는 PC에 매직패킷이라고 하는 신호를 보내서 원격으로 PC를 부팅시키는 기능이다.

원격 제어 프로그램은 '원격 데스크톱'

일단 원격 제어 프로그램은 원래 Parsec을 사용했었는데, 다중 모니터를 사용하려면 월 10달러의 구독이 필요해서 무료 대안을 찾아보던 중, 윈도우에 기본으로 탑재된 '원격 데스크톱' 앱이 상당히 괜찮다는 후기들을 여럿 발견했다. 이 부분은 크게 삽질한게 없으니 짧게 이야기 해보자면, 상당히 만족할만한 품질이었고 별도 프로그램 구독이나 구매 없이 원격 데스크톱 앱을 사용하기로 결정했다.

 

Parsec 대비 원격 데스크톱이 만족스러웠던 점은 아래와 같다.

  • 자동으로 클라이언트 쪽 환경에 맞게 모니터 설정을 변경해줌(모니터 개수 포함)
  • 장시간 사용해도 일시적인 품질 저하 현상이 없음
  • 모바일에서도 접속이 가능함

다만, Parsec과 달리 외부망 접속을 위해서는 포트포워딩이 필요한데 네트워크에 대해 잘 알지 못하는 경우에는 힘들 수 있겠다.

WOL 세팅하기

일단 나는 KT 공유기를 사용하고 있는데, 인터넷에 관련 내용을 찾아보면 KT 공유기의 경우 외부망에서 관리자 페이지 접속이 불가능하기 때문에, 원격 데스크톱을 위해 WOL을 사용하는 것은 불가능하다는 이야기가 주를 이루었다. 그런데 나는 이런 생각이 들었다.

 

관리자 페이지에 접속을 못 하는거랑 무슨 상관이지? 그냥 포트 포워딩 해주면 되잖아?

 

내가 상상한 장밋빛(?) 미래는 이렇다. 그냥 이렇게 포트포워딩 해서 보내주면 되는거 아닌가?

... 그런데 안됐다. 왜 안되는지를 알아내는데 좀 걸렸는데, 그림으로 나타내면 이렇다.

먼저, 라우터 입장에서 전달된 패킷은 이렇게 보일 것이다. 내용이 무엇인지는 모르지만, 2000번 포트로 패킷이 들어왔다.

그리고 NAT 테이블을 보면 2000번 포트로 들어온 것은 127.30.1.50:9로 전달하라고 적혀있다. 이제 127.30.1.50:9로 보내면 된다!

 

하지만 여기서 간과했던 사실은, 이 패킷을 보내기 위해서는 상대방의 MAC 주소를 알아야한다는 것이다.

이를 위해서는 ARP라는 프로토콜을 통해 MAC을 알아내야하는데, 그냥 로컬 네트워크 안에서 "이 IP 주소를 가진 사람 누구야? 너 MAC 주소 좀 알려줘~" 라고 냅다 소리를 지르는 것이다(브로드캐스트). 그러면 그 IP를 가진 장치가 자신의 MAC을 응답해준다.

 

그런데 문제는, 지금 WOL의 대상이 되는 PC는 (당연하게도) 꺼져있다는 것이다. ARP는 L3 상의 프로토콜로서 전원이 꺼져있는 기기가 응답할 수 없다. 그러니 라우터가 MAC 주소를 찾을 수 없으니 결국 이 패킷은 폐기되어버린다.

 

그렇다면 전원이 꺼져있는 기기가 ARP에는 응답할 수 없으면서, WOL로 켜질 수 있는 이유는 무엇일까? WOL은 L2상의 프로토콜이라서 전원이 꺼진 상태에서도 패턴을 감시해서 부팅까지 처리할 수 있는 것이다. 애초에 '매직패킷'이라고 하는게 그냥 16진수로 FF FF FF FF FF FF 뒤에 대상의 MAC 주소를 16번 나열한 간단한 형태이다.

그래서 결과적으로 만들어진 형태는 이렇다. 대부분 KT 공유기 사용자의 WOL은 이런식으로 구성되는데, 나도 결국 이러한 형태를 따라갈 수 밖에 없었다.

 

라우터의 포트포워딩을 통해서는 일단 '중계기'로 보내는 것이다. 그리고 나서 중계기가 해당 패킷을 브로드캐스트한다. 이를 통해 라우터에 연결된 모든 장치에 이 매직패킷이 전달되는데, 이는 UDP의 형태로 일반적으로 WOL을 위해 사용되는 9번 포트로 설정한다.

 

이 과정에서 로컬 네트워크 내의 모든 장치들에게 패킷이 전달되지만 대상이 아닌 기기는 이를 무시한다. 꺼져있는 기기라면 WOL 신호라는걸 인지하더라도 그 뒤에 있는 MAC 주소가 자신의 주소가 아닌 것을 판단하여 버릴 수 있고, 켜져있는 기기라면 9번 포트에서 무언가 실행되고 있지 않는 이상 버릴 수 있다. 만약 9번 포트에서 무언가 실행되고 있었다고 하더라도, (제대로 만들어진 프로그램이라면) 제대로된 패킷이 아니라는 걸 걸러낼 수 있다.

 

이런 과정을 통해서 내가 켜고자 하는 PC에게만 매직패킷이 유효하게 도달하고, 원격으로 PC를 켤 수 있다!

 

매직 패킷을 어떤 기기로 중계할 것인지는 선택하기 나름이다. 나는 집에 아두이노 메가 보드가 남아있어서 이를 활용했다. 이더넷 쉴드를 구매해 이더넷 포트를 붙여주고, 매직패킷을 브로드캐스트 해주는 코드를 짜면 끝이다. 이제 이 아두이노는 원격에서 내 컴퓨터를 켜주는 효자(?)가 될 것이다.

 

서버 프로그래밍을 공부하면서 얻은 네트워크 지식이 예상치 못한 곳에 쓰이게 되어서 신기하다.