장난감 연구소

#2 라즈베리파이 웹 서버 운영하기 - 고정 IP 설정, 포트포워딩 본문

토이프로젝트

#2 라즈베리파이 웹 서버 운영하기 - 고정 IP 설정, 포트포워딩

changi1122 2020. 2. 4. 09:00
    728x90

    목차

    1. 라즈베리파이 웹 서버 운영하기 - 우분투 설치, SSH 설정
    2. 라즈베리파이 웹 서버 운영하기 - 고정 IP 설정, 포트포워딩

    이번 글에서는 라즈베리파이 단말기의 내부 IP를 고정하고, 외부 IP의 특정 포트가 라즈베리파이의 내부 IP로 연결되도록 포트포워딩을 하는 방법을 다룬다. 이를 통해 외부에서 라즈베리파이로 접속할 수 있도록 한다.

    배경 지식

    위 그림은 우리집 안의 라우터를 중심으로 네트워크가 어떻게 연결되어 있는지 나타낸다. 라우터(공유기)는 ISP에 할당받은 외부 IP로 내부 단말기들이 인터넷에 접속할 수 있게 해주고, 내부 단말기들에 내부 IP를 직접 할당하여 관리한다. 또, 포트포워딩을 통해 외부 특정 포트와 내부의 특정 단말기 특정 포트를 연결해준다.

    ① 외부 IP 주소

    IP 주소는 컴퓨터 네트워크에서 장치들이 서로를 인식하고 통신하기 위해 사용하는 특수한 번호이다. 이 번호를 통해 메시지가 수신자를 향해 목적지로 전달된다. 그렇기에 라즈베리파이로 웹서버를 만들었을 때도 인터넷에서 라즈베리파이의 위치를 나타내는 주소가 있어야 접속할 수 있다. 그 중 이 글에서 말하는 외부 IP 주소는 KT같은 ISP에서 우리집 회선으로 할당한 IP 주소를 말한다. 가입한 인터넷 서비스에 따라 고정 IP를 제공하는 경우도 있고, IP 주소가 유동적인 경우도 있다. 일반 가정용 인터넷은 대부분 IP 주소가 유동적이므로, 일정 시간마다 네임 서버에 바뀐 위치를 알리는 DDNS를 사용할 것이다.

    ② 내부 IP 주소

    이 글에서 말하는 내부 IP 주소는 우리집 라우터(공유기)에서 집 안 네트워크에 접속한 기기들에 할당한 IP 주소를 말한다. 기본적으로 이 주소는 유동적으로 할당하는데, 외부에서 라즈베리파이로 접속하려면 내부 IP 주소가 고정되어야 한다.

    ③ 포트포워딩

    포트포워딩은 컴퓨터 네트워크에서 패킷이 라우터를 가로지를때, IP 주소와 포트 번호 결합의 통신 요청을 다른 곳으로 넘겨주는 것이다. 인터넷에서 우리집 라우터 80번 포트로 통신 요청을 보냈을 때, 이를 라즈베리파이 80번 포트로 연결해주는 것도 이에 해당한다. 인터넷에서 라즈베리파이로 연결하려면 포트포워딩 설정이 필요하다.

    #참고자료

    내부 IP 주소 고정

    먼저 라즈베리파이와 공유기를 랜선으로 연결하였는가 확인한다. 인터넷으로 라즈베리파이에 접속하려면, 라즈베리파이의 내부 IP 주소를 고정하고, 포트포워딩 설정이 필요하다. 이 글에서는 KT 공유기를 기준으로 보이겠다.

    우선 공유기 관리자 페이지에 접속한다. 와이파이나 랜선으로 공유기에 연결하고, 172.30.1.254http://homehub.olleh.com을 연다. 그리고 아이디와 비밀번호, 보안 문자를 입력하고 로그인한다. 이때 계정을 따로 설정하지 않았을 때, 기본 아이디는 ktuser, 비밀번호는 homehub이다.

    DHCP IP 할당범위 변경

    배경 지식을 설명하면서 기본적으로 내부 IP 주소는 공유기에서 유동적으로 할당한다고 했다. 그러나 우리는 라즈베리파이에 한 IP 주소를 고정적으로 할당해줘야 한다. 이를 위해 공유기에서 유동적으로 할당해주는 IP 주소 범위를 줄이고, 할당 범위에서 벗어난 IP 주소를 라즈베리파이가 사용하도록 할 것이다.

    공유기 관리자 페이지에서 장치설정 > 네트워크 관리 > LAN 연결 설정을 연다.

    라즈베리파이가 적당히 172.30.1.1를 사용하도록 하자. DHCP 코넷 IP 사용범위의 앞 부분을 172.30.1.3으로 변경하고 적용해준다. (172.30.1.2를 비워둔 것에 특별한 이유는 없다.) 이제 공유기에서 다른 단말기들에 172.30.1.1을 할당하지는 않을 것이다.

    #참고자료

    고정 IP 설정 (우분투 19.10 기준)

    셸에서 vi 에디터로 /etc/netplan/50-cloud-init.yaml 파일을 연다.

    • $ sudo vi /etc/netplan/50-cloud-init.yaml

    파일의 내용을 아래 사진과 같이 수정한다. 172.30.1.1은 IP 주소이고, 172.30.1.254는 게이트웨이, nameserver는 DNS 서버 주소를 적어준 것이다. KT 공유기, KT DNS 서버를 사용하면 아래 사진과 똑같이 적어주면 되고, 그게 아니면 잘 찾아 넣어주도록 한다. vi 에디터가 익숙하지 않으면 사용법을 검색하자.

    파일을 저장하고, 설정을 반영한다.

    • $ sudo netplan apply

    아래 명령어로 eth0 인터페이스의 IP 주소가 172.30.1.1이 나오는 지 확인한다.

    • $ ip addr

    #참고자료

    라즈베리파이를 재부팅하고도 IP 주소가 유지되면 IP 주소를 고정하는데 성공하였다. PuTTY 등의 프로그램으로 172.30.1.1에 22번 포트로 SSH 접속이 가능한지도 확인해보자.

    포트포워딩

    외부에서 라즈베리파이에 접속하려면 포트포워딩이 필요하다.

    공유기 관리자 페이지에서 장치설정 > 트래픽 관리 > 포트 포워딩 설정을 연다.

    외부 포트에 외부에서 접속하는 포트, 내부 IP 주소에 라즈베리파이의 IP 주소, 내부 포트에 연결할 포트를 적고 추가하면 된다. 잘 알려진 포트라고, IANA에서 각 프로토콜에서 기본적으로 사용하는 포트를 미리 정해 놓았다. SSH 프로토콜은 22번 포트, HTTP는 80번 포트로 정해져 있다. 다시 말해 웹페이지를 보내주기 위해서는 80번 포트, SSH로 원격 접속하기 위해서는 22번 포트로 라즈베리파이에 사용하는 것이다.

    웹 서버를 위해 사진과 같이 외부 80번 포트 - 내부 80번 포트를 추가한다. 그리고 외부에서 SSH 접속을 위한 설정도 할 것인데, 해커의 접근을 줄이기 위해 외부 포트는 잘 알려지지 않은 포트 번호 - 내부 22번 포트를 추가하면 된다.

    설정을 완료하였으면, PuTTY와 같은 프로그램에서 외부 IP 주소, 설정한 포트로 SSH 접속이 가능한 지 확인해보자.

     

    이것으로 고정 IP 주소와 포트포워딩 설정이 끝났다. 다음 글에서는 IP 주소가 아니라 google.com과 같은 도메인 주소로 사용자가 접속할 수 있도록, 도메인을 구입하고 네임 서버를 설정하는 방법에 대해 다룰 것이다.