Intro
앞선 포스팅들에서 홈서버용 미니 PC를 조립하고, OS를 설치하고, 기본적인 세팅을 끝냈습니다. 이제 내부(홈) 네트워크에서는 홈 서버로 접속도 가능할 것입니다. 집 안에서는요. 하지만 내부 네트워크를 벗어나는 순간 홈 서버에 접속은 불가능해집니다. 같은 네트워크 대역 안에 있지 않기 때문이죠.
이번 포스트에서는 외부 네트워크에서 홈 서버에 접속할 수 있도록 설정하는 방법과 관련된 개념들을 다뤄보겠습니다.
홈 네트워크와 외부 네트워크 뭐가 다를까?
같은 네트워크 대역 안에서는 내부 IP 대역 (= 사설 IP 대역)의 주소로 서로 통신할 수 있습니다. 내부 네트워크에서 서로의 주소를 알고만 있다면 서로 통신이 가능하며, 이를 LAN (Local Area Network) 라고 합니다.
하지만 내부(홈) 네트워크 바깥의 외부 사용자는 홈 서버로 접속할 때는 어려움이 발생합니다. 첫 번째 이유는 바로 홈서버의 IP 주소를 모르기 때문이며, 두 번째는 홈 서버의 IP 주소를 알더라도 이 IP 주소가 일반적으로 인터넷에서 사용되는 공인 IP 주소가 아닌, 홈 네트워크 내에서만 사용 가능한 사설 IP 주소를 사용하기 때문입니다. 그리고 설령 공인 IP 주소를 알더라도, 사설 IP 주소는 외부에서 접근할 수 없기 때문에 직접적으로 연결이 불가능합니다. (단, 홈 서버에 별도로 공인 IP를 부여했다면 접근이 가능합니다.)
첫 번째 이유 : 외부 사용자가 홈 서버의 주소를 모름
두 번째 이유 : 홈 서버의 사설 IP를 알더라도, 서로 다른 네트워크이기 때문에 접근할 수 없음.
사설 IP 대역은 아래와 같습니다.
RFC1918 이름 | IP 주소 범위 | 주소 개수 | 호스트 ID 크기 |
---|---|---|---|
24비트 블록 | 10.0.0.0 ~ 10.255.255.255 | 16,777,216 | 24 비트 |
20비트 블록 | 172.16.0.0 ~ 172.31.255.255 | 1,048,576 | 20 비트 |
16비트 블록 | 192.168.0.0 ~ 192.168.255.255 | 65,536 | 16 비트 |
포트포워딩
그렇다면 외부 사용자가 홈서버에 접속할 수 있도록 세팅하는 방법은 뭘까요? 바로 포트 포워딩 (Port Forwarding) 입니다. 포트포워딩이란 라우터(이번 포스트에서는 메인 공유기에 해당)에서 외부 네트워크에서 들어오는 요청을 내부 네트워크의 특정 장치(호스트)와 포트로 매핑해주는 작업입니다.
예를 들어 게이트웨이가 존재하는 네트워크의 공인 IP가 123.123.123.123 이라고 했을 때, 홈서버의 SSH 로 접근하는 포트는 22번이라고 설정하면, 외부 사용자는 123.123.123.123:22 라는 주소를 이용해 홈서버의 SSH로 접근할 수 있는 것입니다. 쉽게 말해 홈 서버로 가는 길을 열어주는 것이죠.
포트포워딩 시 외부에서 노출되는 포트와 실제 내부에서 사용하는 포트를 다르게 설정하는 것이 보안상 더 안전합니다. 예를 들어, SSH의 기본 포트 22번은 공격자들에게 잘 알려져 있어 이를 이용한 공격이 많습니다. 따라서 외부에서 2222번과 같은 다른 포트를 사용하게 하고, 이를 내부의 22번 포트로 매핑하면 보안성을 높일 수 있습니다.
포트포워딩 설정해보기
그렇다면 실제로 포트포워딩 설정을 진행해보겠습니다. 제 경우 KT를 사용하고 있으므로, KT로 예시를 들겠습니다. 먼저 통신사 메인 공유기 관리자 페이지로 접속하여 로그인한 뒤 “장치설정” 메뉴로 들어갑니다.
트래픽 관리 메뉴 -> 포트 포워딩 설정으로 들어갑니다.
이 부분이 가장 중요합니다. 포트 포워딩 설정을 입력해주는 단계인데요, (1) 에는 외부에서 홈 서버로 접근할 때 사용할 포트 번호 (2) 에는 홈 서버의 내부 IP, (3) 에는 홈 서버에서 실행중인 서비스 중 외부에 노출시킬 서비스의 포트, (4) 에는 통신 프로토콜을 지정해줍니다.
그리고 적용을 누르면 아래 리스트에 포트 포워딩 설정이 추가 됩니다.
외부에서 홈 서버에 접근해보기
그렇다면 외부에서 홈 서버에 접근해보도록 하기.. 전에! 홈 서버가 있는 네트워크의 공인 IP는 어떻게 알 수 있을까요? 그러니까.. 외부에서 우리 집 공유기에 접근할 때 사용할 공식적인 IP는 어떻게 알 수 있을까요? 네이버에서 “내 IP”라는 검색어로 검색을 하면, 현재 접속중인 네트워크의 공인 IP를 확인할 수 있습니다.
홈 서버가 속한 네트워크의 공인 IP를 확인했다면, 이제 외부에서 접속해볼 차례입니다. 일전에 사용했던 Terminus에서 새로운 호스트를 하나 등록합니다. 여기서 주의할 점. IP or Hostname 에 꼭 앞서 확인했던 공인 IP를 입력해줘야 한다는 점을 꼭 기억해주세요.
아이폰에서 wifi 연결을 해제하고 LTE 환경에서 Terminus를 통해 홈 네트워크로 접근을 해보겠습니다.
성공!
추가. DMZ
포트포워딩 외에도 홈 서버에 외부 접속을 허용하는 방법 중 하나로 DMZ 설정이 있습니다. DMZ는 네트워크에서는 외부에서의 접근을 허용하는 한정된 구역을 의미합니다. 이는 홈 네트워크에서 특정 장치를 외부 인터넷에 완전히 노출시켜야 할 때 사용됩니다.
일반적으로 라우터에서 DMZ 설정을 통해 하나의 장치를 외부 네트워크와 직접 연결할 수 있습니다. 즉, DMZ에 설정된 장치는 모든 포트가 외부로 개방되며, 보안의 경계를 넘은 외부 사용자가 직접 접근할 수 있게 됩니다.
특정 장치(예: 홈 서버)를 외부에 쉽게 노출할 수 있고, 포트포워딩처럼 세부 포트를 설정할 필요 없이 간단하게 외부 접근이 가능하다는 장점이 있으나, 장치의 모든 포트가 외부에 개방되므로 보안 위험이 크며, 해킹의 표적이 될 수 있습니다. 따라서 DMZ에 서버를 설정할 경우 추가적인 보안 설정(방화벽, 인증 설정 등)이 필수적입니다.
일반적으로 사용할 때에는 포트포워딩을 사용하여, 외부에 노출할 포트를 직접 지정하고 관리하는 것이 보안상 더 좋을 것이라는 의견과 함께 포스팅을 마치겠습니다.