VirtualBox VM 외부에서 접속하기(IPTIME 공유기의 DDNS, Port-Fowarding 설정 기반)
목차
저번 포스팅에서 IPTIME 공유기의 DHCP 서버 설정을 통해 고정IP를 할당하고, 그 고정IP 를 VM 에 설정해 주었습니다. 그리고 그 고정IP와 DHCP의 IP 할당정책 간에 충돌을 피하기 위해 고정IP대역과 유동IP대역을 구분해주는 작업을 하였습니다. 이제 내부 설정은 어느 정도 마무리가 되었으니, 외부 인터넷에서 쉬운 도메인이름으로 이 VM에 언제든지 접속할 수 있도록 설정하는 작업을 진행하겠습니다.
- IPTIME 이 제공하는 DDNS 기능을 통해 나만의 도메인 네임 만들기
제가 생성한 VM 이 서버역할을 하기 위해서는 언제든지 외부에서 단일한 주소(Endpoint) 로 접속할 수 있어야 합니다. 이 Endpoint 는 IP주소가 될 수도 있고 google.com 과 같은 도메인 네임이 될 수도 있습니다. 기본적으로 IP 주소는 고정IP 가 아닌 이상 DHCP 로직에 의해 변경될 수 있기 때문에 우리는 주로 도메인 네임을 이용해 Endpoint 를 설정합니다. 도메인 네임만 알면 도메인 네임과 IP 주소의 매핑관계를 관리하는 서비스인 DNS(Domain Name Service)를 통해 유효한 IP주소를 알 수있고 그 IP 주소로 서버에 직접 접속하게 되는 것이지요.
IPTIME 공유기는 {나만의이름}.iptime.org 라는 주소로 저만의 도메인 네임을 제공해줍니다. 도메인네임-IP 주소의 쌍(레코드)을 DNS 에 등록해 주는 기능을 제공해 주는 것이지요. 저희 집은 ISP사업자인 SKB를 통해 인터넷 서비스를 이용하고 있습니다. SKB 의 DHCP 로직을 통해 유동IP를 할당받아 사용하고 있습니다. 문제는 이 유동IP로는 서버를 운영하기가 어렵다는 점입니다. 언제든지 변경되는 IP 이므로 클라이언트에서 DNS를 통해 IP 주소를 얻어왔다고 해도 이 IP 주소가 변경 전 주소일 경우 엉뚱한 곳으로 접속을 시도하게 되기 때문이지요. 이 문제를 해결하기 위해 IPTIME 공유기는 저희 집 유동IP가 변경되면 그 변경사실을 DNS 서버에 알려서 항상 최신의 도메인네임-IP주소 레코드를 유지하게 해주는 DDNS(Dynamic Domain Name Service) 기능도 제공해줍니다. 저희 집 IP 가 변하든 안변하든, 외부 인터넷에서는 오로지 {나만의이름}.iptime.org 라는 주소를 통해 우리집 사설 네트워크에 접속할 수 있는 것이지요. 이 작은 공유기에 참 많은 기능이 내장되어 있습니다. 이제 이 작업을 시작해보도록 하겠습니다.
Chrome 브라우저를 실행해서 192.168.0.1 을 입력합니다. 그럼 위와 같이 Login 페이지가 나오는데 ID 와 PW 를 입력합니다.
“Setup” 버튼을 클릭합니다.
좌측 메뉴에서 Advanced Setup -> Utility -> DDNS 탭으로 이동해서 HostName 에는 나만의 이름을 입력하고, User ID 에는 나의 이메일 주소를 입력합니다. 저는 truelifer, eunjun.com@gmail.com 을 입력하겠습니다. 입력 후 “Register” 버튼을 클릭합니다.
몇 초 후에 truelifer.iptime.org 라는 주소가 성공적으로 DNS 서버에 업데이트 되었다고 표시됩니다. IPTIME 관리자페이지의 GUI 를 통해 손쉽게 DDNS 설정을 완료했습니다. 이제 무료로, 외부 어디서든 truelifer.iptime.org 주소를 통해 저희 집 사설네트워크에 접근할 수 있게 되었습니다.
- IPTIME 이 제공하는 Port Fowarding 기능을 통해 ssh 포트 개방하기
하지만 이렇게만 했다고 해서 이전에 만든 VM 에 직접 접속할 수 있는 것은 아닙니다. 공유기 입장에서는 외부의 요청이 들어오면 내부의 어느 사설IP 에 요청을 전달해야 할지 알 수 없습니다. 이 라우팅 규칙을 설정해주는 것을 Port Fowarding 이라고 하는데 IPTIME 공유기는 당연히 Port Fowarding 기능을 제공합니다. 서버를 관리하기 위해 기본적으로 ssh 포트는 열어놓아야 하기 때문에 VM 의 ssh 포트에 대한 Port Fowarding 작업을 진행하겠습니다.
IPTIME 의 관리자 페이지에서 Advanced Setup -> NAT/Routing -> Port Fowarding 탭으로 이동합니다. 우측 하단의 Rule Name 에 적당한 이름을 입력하고, Internal IP 에는 VM 의 주소인 192.168.0.100을 입력합니다. External Port 는 외부에 공개될 포트인데 저는10022를 입력하겠습니다. Internal Port는 VM 에서 오픈해놓은 포트인데 ssh 의 기본설정인 22 를 입력하겠습니다. 입력 완료 후 우측 하단의 “Apply” 버튼을 클릭합니다.
자 이제 외부에서 truelifer.iptime.org:10022 라는 Endpoint 를 통해 접속하게 되면 내부의 192.168.0.100:22 로 라우팅이 되도록 설정이 완료되었습니다.
- VM Ubuntu 에 SSH 설치
위의 작업을 통해 네트워크 설정은 모두 완료가 되었습니다. Ubuntu 20.04 LTS 에 ssh 서버를 설치하고 구동하여 외부에서 접속테스트를 해보도록 하겠습니다.
VirtualBox 를 실행 후 VM 에 접속하여 Terminal 을 엽니다. 그리고 netstat 명령어를 사용하기 위해 net-tools 패키지를 설치합니다. (sudo apt-get install net-tools)
ssh 의 기본 포트인 22번 포트가 열려있는지 확인합니다.(netstat -an | grep 22) 역시 열려있지 않습니다. ssh 서버가 실행 중이 아니기때문입니다.
ssh 서버를 설치해줍니다.(sudo apt-get install openssh-server -y) 설치 후 자동으로 sshd 이 실행됩니다.
다시 22번 포트가 열려있는지 확인합니다.(netstat -an | grep 22) 이번에는 22번 포트가 개방되어 있음을 확인할 수 있습니다. VM 에서의 설정 역시 완료되었습니다.
- 외부에서 ssh 접속 테스트
이제 VM 의 외부에서 ssh접속을 해보겠습니다. 이를 위해 ssh 클라이언트가 필요한데 저는 putty 라는 프로그램을 이용하겠습니다. 다운로드는 이 링크에서 받으시면 됩니다.
putty.exe 를 실행 후 위와 같이 Host Name 과 Port 를 입력해줍니다.
접속시마다 ID 를 입력하는 수고를 덜기 위해 좌측 메뉴의 Connection -> Data 로 이동 후 Auto-login username 에 Ubuntu 20.04 LTS 의 ID 를 입력합니다.
다시 좌측 메뉴의 Session 탭으로 돌아와 적당한 Session 이름을 설정 후 우측의 Save 버튼을 눌러 저장시켜줍니다. 그리고 “Open” 버튼을 클릭하여 세션을 열어줍니다.
최초 접속시 Host Key 가 캐시되어 있지 않아 나타나는 경고창입니다. “예”를 클릭합니다.
password 를 입력 후 엔터를 누릅니다.
정상적으로 접속이 완료되었습니다. 이로써 네트워크 설정이 정상적으로 되었음을 확인할 수 있습니다.
- 마무리
이번 포스팅에서는 IPTIME 공유기의 DDNS 기능을 통해 나만의 도메인 네임을 만들어 유동IP 의 변경에 상관없이 단일한 Endpoint 를 설정하였고, IPTIME 공유기의 Port Fowarding 기능을 통해 외부에서 내부의 VM 에 ssh 로 접속할 수 있도록 작업을 완료했습니다.
다음으로 본격적인 DevOps 개발을 위해 VM 을 추가하고 쿠버네티스 클러스터를 구축하는 작업을 진행하도록 하겠습니다.