💡 SK 모뎀(H66ON) 및 공유기(H734GP)를 사용 중입니다. 다른 통신사의 경우 방법이 다소 차이가 날 수 있습니다.
1. Introduction
📌 Network Structure
홈 서버를 구축하기 전에 가장 먼저, 가정 내 네트워크 구조가 어떻게 구성되어 있는지 파악해야 한다.

내 경우엔 SK 통신사의 모뎀과 라우터(=공유기; 정확히는 무선 공유기)를 사용 중이었는데, 덕분에 학교에서 배운 내용하고 달라서 조금 헤맸다.
내가 알기론 최근엔 Gateway 역할을 하는 모뎀과 Router가 일체형인 구조가 많다고 들었는데, 찾아보니 기가 와이파이 시대에선 이게 또 분리되는 게 트렌드라고 한다.
- 모뎀(Moderm)
- 각 장치의 디지털 신호를 전송 가능한 아날로그 신호로 치환
- 외부 인터넷 망(벽면의 케이블)이랑 가장 처음 연결되는 네트워크 기기
- LAN 선으로 물리적으로 연결하는 경우 모뎀과 연결.
- 무선 공유기(라우터, Router)
- 모뎀과 연결하여, 무선 네트워크 망을 관리
그래서 개략적인 구조를 그려보면 다음과 같다. (이 부분은 아래에서 같이 진행할 것이다.)

문제는 외부에서 접속을 하려면 모뎀에 공인 IP가 할당되어 있어야 하는데, (SK 통신사가 특히) NAT 모드가 기본 설정으로 되어 있으면 사설 IP 주소가 할당되어 있다.
그래서 외부에서 접근할 방도가 없기 때문에 이 문제를 해결해야 한다.
따라서, 이번 포스트에서는 다음 문제들을 다룰 예정이다.
- 홈 네트워크 구조 파악하기
- 모뎀 NAT to Bridge mode 변환
- 무선 공유기 포트 포워딩 및 서버 PC 포트 개방
아, 참고로 ipTIME을 쓰는 집이 정말 많다고 알고 있다.
그런데 ipTIME은 뭔가 온갖 기능을 덕지덕지 붙여놓은 공유기로 알고 있어서, 오히려 나보다 설정이 쉽지 않을까 싶다.
다만 이걸 허브로 쓰고 있느냐, 혹은 또 다른 네트워크 구조를 가지고 있느냐에 따라 문제가 달라진다.
2. Change to Bridge Mode
📌 Moderm's GPON S/N & Router's Wired MAC


우선, 작업을 시작하기 전에 두 가지 정보를 확인하자.
모뎀 뒷면의 GPON S/N과 라우터의 유선 MAC 정보를 알아야 한다.
정확히는 뒤의 6자리 문자 정보만 알면 된다.
이걸 알아야 추후 관리자 페이지에 접근이 가능하다.
📌 Router IP
# windows cmd
> ipconfig
# macOS
$ ifconfig
# PC에 할당된 IP 주소만 확인하는 방법
$ ifconfig | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}' | head -n 1 | cat -e
위 명령어를 통해서 네트워크 정보를 확인할 수 있다.
Windows의 경우,

랜선으로 연결했으면 ethernet 항목에서 확인 가능하고, 난 랩탑 와이파이 연결 상태라 Wireless에 나타난다.
Default Gateway 주소를 브라우저 주소에 "192.168.35.1/login.html"라고 입력하면 아래 페이지가 나타난다.

따로 설정한 적이 없다면 기본값은 다음과 같다.
- 사용자ID: admin
- 비밀번호: {Router's Wired MAC 뒤 6자리(영어는 대문자)}_admin
예를들어, 유선 MAC 주소가 ABCD.AB45.D4D4 였으면, 비밀번호는 45D4D4_admin이 된다.


[네트워크 관리 > 인터넷 연결 정보]로 들어가면 WAN 연결 상태를 볼 수 있을 것이다.
여기에 또 기본 게이트웨이가 적혀있는데, 이게 바로 모뎀 IP 주소다.

구조도를 보면, 현재 관리자 페이지로 접근한 건 무선 공유기다.
이제 모뎀 관리자 페이지로 들어가야 한다.
📌 Moderm Admin Page
위에서 파악한 모뎀 주소는 192.168.75.1
이 주소를 브라우저에서 접속하면 다음 화면이 나타난다.

이번에도 따로 설정한 값이 없다면, ID/PW 기본값은 정해져 있다.
- ID: admin
- PW: {GPON S/N 뒤 6자리(영어는 대문자)}_admin

📌 bridge mode

외부 접속을 허용하기 위해 모뎀이 공개 IP 주소를 가질 필요가 있다.
그러나 현재 모뎀이 사설 아이피 대역을 가지고 있는데, 이는 SK 같은 통신사는 기본적으로 우리들의 모뎀을 NAT로 설정해놓기 때문이다.
보다 직관적으로 설명하자면, 공개 IP 주소는 (아마도) ISP 모뎀이 가지고 있고,
우리 집의 모뎀은 사실상 공유기로 전락함으로써, 모뎀과 무선 공유기가 이중 NAT 구성을 이루고 있던 셈이다.
따라서, 우리들의 모뎀에 공인 IP를 할당받기 위해선 NAT 기능을 상실시켜야 한다.
이를 위해 모뎀을 Bridge Mode로 전환하면 더이상 ISP 모뎀으로 부터 사설 IP를 할당받지 않으므로, 공인 IP를 할당받을 수 있게 되는 것이다.

설명은 길었지만 작업은 단순하기 그지없다.
[네트워크 > WAN > 채널 모드]에서 NAT를 Bridged 모드로 변경하면, 모뎀 재부팅 60초 정도 후에 반영이 완료된다.
참고로 Bridge 모드로 전환하면, 더 이상 모뎀 관리자 UI에 접속할 수 없게 된다.
다시 설정을 복구하고 싶다면, 모뎀 장치에서 물리적인 초기화를 진행해야 한다. (별로 안 어려우니 걱정 말자)

이후 Router 관리자 UI로 접속해보면 IP 주소가 공인 IP로 변경된 것을 확인할 수 있다.
3. Port Forwarding
📌 Router Port-Forwarding

마지막으로 {공인 IP:port}로 요청했을 때, 라우터가 올바른 목적지를 찾아갈 수 있도록 이정표를 마련해야 한다.
내 경우엔 MacOS laptop이 서버로 동작하고 있으니, 다음 터미널 명령어로 쉽게 IP 주소를 알아낼 수 있었다.
$ ifconfig | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}' | head -n 1 | cat -e
그리고 라우터의 관리자 UI에서 포트포워드 설정을 다음과 같이 설정하면 된다.

이러면 {공인 IP:50100}으로 요청이 들어오는 패킷은 모두 192.168.35.73:8080 포트로 변환되어 전달된다.
(바로 8080 포트를 뚫어주고 싶었으나, well-known port 개방에 대한 제약이 존재하는 것 같다.)
📌 Open MacOS port
MacOS에서 8080 포트 inbound를 수용해주기 위해 다음의 절차를 수행하면 된다.
$ sudo nano /etc/pf.conf
# 맨 아래에
# pass in inet proto tcp from any to any port 포트번호 no state
# 입력하고 파일 저장

설정이 끝나면 공인 IP 주소를 통해 서버 접속까지 성공하는 것을 확인할 수 있다.
라우터에서 50100 포트를 개방했으므로, 요청할 때도 8080이 아니라 50100을 보내야 하는 것에 유의하자.
📌 NAT LoopBack Issue

처음에 사설 IP로 서버 접속은 되는데, 공인 IP로 접속이 안 되는 이슈가 발생했다.
그런데 친구한테 공인 IP 주소를 넘겨주니 정상적으로 접근이 되는 이상한 현상이었다.
혹시나 싶어, 와이파이를 끊고 데이터 연결 상태에서 공인 IP로 접속을 시도하니 성공하는 것을 확인했다.
즉, 가상 사설망에 연결된 상태에서 내 공인 IP를 입력했을 때, 패킷이 다시 되돌아와야 하는데 내 라우터는 해당 기능이 없어서 지원이 안 되는 것이었다. (iptime은 온갖 기능 다 쑤셔넣은 거라 된다는 얘기가 있음.)
어차피 사설망 내부에선 사설 IP 쓰면 되니 상관은 없다만, 내 네트워크 지식이 잘못된 줄 알고 상당히 놀랐다. (이왜안?)
4. Conclusion
📌 Further
아직 더 해야 할 일은 많다.
도메인 연결도 해야 하고, (어지간하면 사설 IP가 바뀔 일은 없겠지만) 서버 IP를 DCHP 고정 IP 주소 할당 방식으로 지정해주어야 안전하다.
하다보니 안 쓰는 PC가 또 있는데, 여기서 지금껏 염원해왔던 ELK도 돌려보고 싶다는 욕심이 스멀스멀 올라오고 있다. ㅎㅎㅎㅎㅎㅎ
여튼 이번 포스팅은 여기서 쫑내고, 다음 작업은 다음에 해보자.