개발 장비에 외부에서 접속하기

bluehope·2022년 11월 28일
0

개발환경설정

목록 보기
2/5

개발장비에 OS를 설치한 이후 바로 진행해야 할 것은, 언제 어디서나 외부에서도 인터넷 접속이 가능하도록 하는 일이다. 일반적인 가정이나 작은 사무실에서는 인터넷 1 회선에 공유기를 사용하여 내부 장비들을 사설 IP로 연결하고, NAT를 통해 외부 인터넷을 연결하여 사용한다. 공유기를 사용하게 되면 공유기 아래의 장비들은 사설 IP(주로 192.168.0.XXX)를 사용하게 되나, 사설IP는 동일한 망 내에 있는 장비들끼리만 통신이 가능하여, 외부에서 접속이 불가능하다. 따라서 사설IP가 아닌 공인IP를 사용해야 하나, 공인IP를 사용하는데는 몇가지 문제가 있다. 우선 일반적인 가정용 인터넷은 ISP에서 고정IP를 제공하지 않고 매 접속시마다 DHCP를 통해 IP를 동적으로 할당하므로, 장비의 IP가 매 접속시마다 변경 될 수 있다. 따라서 기존에 발급받은 IP로는 장비에 접속하지 못할 수도 있다.

고정IP 활용하기

고정IP 상품을 가입하여 외부에서도 늘 동일한 IP를 이용하여 접속하는 방법이 가장 명확한 방법이다. 예전에는 KT와 같은 ISP에서 고정IP 상품을 제공하기도 하였다. 그러나 최근에는 고정IP를 제공하는 개인 고객용 상품은 제공하지 않으며, 기업용 상품인 KT의 오피스IP넷 이라는 상품에서만 사용할 수 있다. 따라서오피스IP넷 상품은 일반적인 가정 또는 작은 사무실에서 사용하기에는 비싼 상품으로 개인이 선택지에 포함시키기는 어렵다. 아래 가격표에서 볼 수 있듯 오피스IP넷의 부가세 별도 3년 약정 기준 가격으로, 사용 중인 500M 인터넷 기준으로 45,000원으로, 실 납부 금액은 월 49,500 원으로, 일반 가정용 500M 상품이 3년약정 기준 33,000원인 것에 비해 매우 비싸고, 더욱이 TV나 모바일등과의 결합 상품을 사용하게 되면 가격은 더 낮아져 월 27,500원에 가입이 가능하므로, 가정용 상품의 약 2배의 요금을 지불해야 한다. 따라서 일반 가정용 인터넷을 사용하는 경우에 사용하기에는 적합하지 않다.

Dynamic DNS 활용하기

가정용 인터넷에 고정IP를 제공하지 않아 외부에서 접속이 불가능한 문제를 극복하기 위해 Dynamic DNS 라는 서비스가 활성화 되어 있다. Dynamic DNS 서비스의 개략적인 구조도(Cisco 블로그 발췌)를 보면 Dynamic DNS 서비스를 이용하는 장비가 DHCP를 통해 IP를 할당받은 IP를 등록하고, 변경된 것을 지속 알려주면, 해당 IP를 Dynamic DNS 서비스를 제공하는 서버가 등록하고 있다가, 해당 URL를 요청받으면 Dynamic DNS 서비스 서버는 장비에서 등록한 IP를 DNS query에 응답하여 정상적이 접속이 가능할 수 있게 해 준다.
Dynamic DNS 서비스는 유/무료 다양하게 있으나, 무료로 단순한 기능만 제공하는 duckdns.org의 서비스를 사용하기로 하였다. 회원 가입을 한 이후 발행되는 토큰을 이용하여 단순한 HTTP메시지로 IP정보를 갱신할 수 있다. 회원 가입을 하면 아래 처럼 Duck DNS에 사용하는 account와 token이 발행된다.

회원 가입 후 로그인 화면에는 서브도메인을 등록 하거나, 관리할 수 있다. 본인이 원하는 서브 도메인명을 추가하고, 해당 서브 도메인에 IP를 관리할 수 있게 된다. 아래 그림에서 보면 내가 등록한 도메인의 IP주소는 6일전에 변경된 것을 확인할 수 있다. 참고로 KT 인터넷은 IP를 할당하면 lease time이 지나도 동일 IP로 재사용할 수 있도록 하고 있어, IP가 자주 변경되지는 않으나, 장비가 재기동 되는 경우 등에는 IP가 변경될 수도 있다.

최초에 IP를 등록하고 나면, 해당 IP가 변경되지 않는 동안은 정상적으로 접속이 가능할 수 있다. 그러나 IP가 변경되고 나면 다시 등록해야만 접속이 가능해진다. 따라서 장비에서 주기적으로 DDNS 서버 에 IP를 현행화 시켜서 장비의 IP를 관리할 수 있어야 한다. 리눅스에는 주기적인 업무를 처리하기 위한 cron 이라는 프로세스가 존재한다. 따라서 duckdns를 주기적으로 호출하는 스크립트를 cron에 등록하는 것이 필요하다. 자세한 등록 방법은 Duck DNS install 페이지에서 확인할 수 있다. 요약하면 다음과 같다.

  1. 자신의 홈 디렉토리에 duckdns 만들기
cd ~/
mkdir duckdns
cd duckdns
  1. duck.sh 스크립트 만들기 (vi 에디터 사용 등 -vi duck.sh)
echo url="https://www.duckdns.org/update?
  domains=[사용자도메인]&token=[사용자에게 할당된 토큰]
  ip=" | curl -k -o ~/duckdns/duck.log -K -
  1. 실행 가능한 파일로 만들기
chmod 700 duck.sh
  1. cron 에 등록하기 (crontab -e 명령어 사용)
*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1

cron에 정상 등록되었는지는 crontab -l 명령어를 통해 확인할 수 있다. 5분마다 주기적으로 호출하도록 되어 있고, 해당 결과는 duck.log 파일에 기록되게 되어 있으므로 해당 파일이 5분단위로 정상 갱신되는지 살펴보면 된다. 만약 duck.log 파일의 결과가 OK라면 정상적으로 갱신 된 것이고, KO 라면 비정상 등록된 것이니 사용자 도메인 또는 토큰을 잘 못 입력한 것인지 확인해 보면 된다.

추가로, rc.local에 등록하는 것도 고려해 볼만하다.

profile
다시 시작해보자!

0개의 댓글