개요
많은 사람들이 라즈베리파이를 활용하는 방법 중 한 가지는 홈서버(NAS)로 사용하는 것입니다. 이를 위해서는 라즈베리파이를 외부 네트워크에서 접속할 수 있도록 설정을 해주어야 합니다.
네트워크를 통한 원격 접속은 기본적으로 IP 주소만 알면 됩니다. 우리는 지난 포스트에서 라즈베리파이의 IP 주소를 확인하였습니다. 이 IP주소를 사용해 내부 네트워크에서 SSH 또는 VNC를 통해 원격으로 라즈베리파이에 접근할 수 있었습니다.
하지만 우리가 확인한 IP 주소는 사설 IP주소라고 부르며 이것은 공유기 내부에 위치한 장치들 사이에서만 유효합니다. (공유기가 구성해준 네트워크에서 이 값은 고유하기 때문입니다.)
이에 대한 보충 설명을 해보면, 다음과 같습니다.
유/무선 공유기가 보급되기 전의 각 가정에서 사용되던 네트워크 구성은 다음과 같았습니다.
인터넷에 모뎀에 연결하는 장비는 직접 공인 IP 주소를 부여받았으며 외부 네트워크에서도 해당 IP만 알고 있다면 접근(통신)할 수 있었습니다.
※ 이렇게 접근이 쉽다는 것은 보안 측면에서는 문제가 될 수 있습니다.
반면 각 가정에 인터넷을 접속해야 하는 장비가 증가함에 따라 유/무선 공유기를 사용한 다음과 같은 네트워크 구성이 일반적으로 사용되게 되었습니다.
여기서 유/무선 공유기는 인터넷 제공업체에서 부여받은 하나의 공인 IP 주소를 여러 대의 장비에서 함께 사용하도록 공유하는 역할을 합니다. (전문적인 용어로는 NAT 라우터라고 부릅니다.)
우리가 라즈베리파이 IP 확인하기 포스트에서 알아낸 라즈베리파이의 IP 주소(제 경우는 192.168.0.3
)는 (전 세계에서 유일하게 식별되는) 공인 IP 주소가 아닙니다. 공인 IP주소는 인터넷 제공업체에 비용을 지불해야 발급받을 수 있습니다. 우리는 보통 한 개의 공인 IP를 발급받는 비용을 지불하고 이 하나의 IP주소를 여러 대의 정보통신 장비에서 나누어 사용하는 것입니다. 이러한 유/무선 공유기는 저뿐만 아니라 많은 사람들이 사용을 하고 있습니다. 따라서, 그림 2의 구성을 다른 사람들의 네트워크 구성을 고려하여 조금 확대한다면 다음과 같은 상황이 될 것입니다.
그림에서 확인할 수 있는 것처럼 사설 IP 주소(192.168.0.X)는 고유한 값이 아니기 때문에 외부 네트워크에서는 이 IP주소를 알더라도 라즈베리파이에 접근할 수 없습니다. 제 라즈베리파이가 사용하는 192.168.0.3의 경우도 많은 사람들이 동일한 값을 사용하고 있습니다. 우리가 192.168.0.3으로 접근을 하고자 하여도 어떤 192.168.0.3 장비인지 구별할 수 없는 것입니다.
따라서 우리가 외부에서 접근할 수 있는 것은 우선 유일하게 식별되는 공인 IP 가 부여된 장치이며, 이 경우는 유/무선 공유기입니다. 이후의 사설 네트워크로 접근을 하려면 공유기에서 해당 이더넷 패킷을 사설 네트워크에 존재하는 192.168.0.3 IP 주소를 갖는 라즈베리파이로 전달하도록 규칙을 추가해 주어야 합니다.
포트 포워딩 (port forwarding)
포트
포트는 가상의 경로입니다. 만약 컴퓨터 내부에 여러 프로그램이 통신을 하고 있다면 (여러 개의 웹브라우저를 동시에 쓰고 있다면) 어느 웹브라우저에 구글 검색 결과를 표시하고, 어느 웹브라우저에 넷플릭스 영상을 보여줄지 결정하는 데 사용하는 16비트 숫자(0~65535)입니다.
포트는 전화시스템의 내선번호와 유사하게 생각할 수 있습니다. 대표 번호로 전화를 한 후, 유관 부서로 전화를 연결하기 위해서 내선번호를 추가로 입력하는 것과 같이 포트번호를 이용함으로써, 하나의 IP 주소와 포트번호를 조합하여 이더넷 패킷이 어느 프로그램, 어느 장치로 갈지 경로를 정할 수 있게 됩니다.
기본적으로 외부에서 접근할 수 있도록 설정하는 것은 공유기가 이러한 특정 포트번호를 강제로 혹은 수동으로 특정 장치(여기서는 라즈베리파이)로 전달하도록 하는 것을 말합니다.
포트 포워딩 설정하기
포트 포워딩이란, 특정 포트로 유입되는 모든 패킷을 특정 IP 주소의 특정 포트로 전달하는 것을 말합니다.
※ 설정 방법은 공유기에 따라 다릅니다. 이번 포스트는 ipTIME 공유기 기준으로 절차를 작성합니다.
포트 포워딩을 설정하려면, ipTIME 공유기 웹 설정 화면 (http://192.168.0.1) 접속하여 [관리도구] 버튼을 클릭합니다. [고급설정] -> [NAT/라우터관리] -> [포트포워드 설정]을 선택합니다.
규칙이름 항목은 기억하기 좋은 명칭을 입력합니다. 내부 IP 에는 라즈베리파이의 사설 IP 주소를 입력합니다.
내부 포트는 외부에서 접속할 수 있도록 허용하고자 하는 서비스 및 애플리케이션에서 사용하는 포트의 번호를 입력합니다. (예를 들어, 외부에서 SSH를 사용하여 접속하고자 한다면, 내부 포트는 22로 설정하며, 웹서버를 사용하고자 한다면 내부 포트는 80으로 설정합니다.)
외부 포트는 0번 ~ 65535번 사이의 임의의 포트를 사용해도 되지만, 저는 49152번 ~ 65535번 사이의 동적 포트 (dynamic port)를 입력하였습니다.
마지막으로 해당 포트를 통해 유통할 프로토콜을 선택합니다. (SSH를 사용하고자 할 경우, TCP를 선택합니다.)
설정을 마치면, 외부 네트워크에서도 내부 네트워크에서 라즈베리파이에 원격으로 접속한 것과 동일한 방법으로 접근할 수 있습니다. 이때 접속 주소는 유/무선 공유기의 공인 IP 주소와 입력한 외부 포트의 값을 사용하도록 합니다. 예를 들면 다음과 같습니다.
$ ssh pi@23.44.127.153:49152
※ 공인 IP 주소는 ipTIME의 웹 설정 화면 (http://192.168.0.1) 하단에 표시됩니다.
DMZ (demilitarized zone) 설정
또 다른 선택지는 DMZ 기능을 사용하는 것입니다.
기본적으로 DMZ는 네트워크의 일부 영역을 지칭하는 용어입니다. 해당 영역에 위치한(IP주소를 받은) 장비는 외부 네트워크에 노출되고 내부 네트워크에는 접근할 수 없도록 하는 것입니다.
반면 대부분의 가정용 유무선 공유기가 제공하는 DMZ 기능은 단지 설정한 장비를 외부에 공개만 하고, 내부 네트워크와 격리시키지 않습니다. 앞서 설명한 DMZ 와는 다른 기능으로 일반적으로 DMZ Host 기능이라고 별도의 용어를 사용합니다.
따라서 유/무선 공유기에서 제공하는 DMZ 기능은 모든 포트를 특정장치와 연결하는 포트 포워딩의 확장된 버전입니다.
여기서 주의할 점은 만약 DMZ Host로 설정한 장치가 바이러스/악성코드/랜섬웨어 등에 감염이 되었다면, 내부 네트워크와 격리되어 있지 않기 때문에 다른 장치에 영향을 끼칠 수 있습니다.
따라서 유무선 공유기의 DMZ 기능을 사용하고자 할 경우 주의가 필요하며, 꼭 필요한 경우가 아니라면 사용하지 않는 것을 권장합니다.
DMZ 설정하기
설정은 상대적으로 간단합니다. 외부로 공유하고자 하는 장치(라즈베리파이)의 사설 IP 주소를 공유기에 입력하면 완료됩니다.
이제 ipTIME 공유기 웹 설정 화면 (http://192.168.0.1)에 접속하여 [관리도구] 버튼을 클릭합니다. [고급설정] -> [NAT/라우터관리] -> [DMZ/Twin IP]를 선택합니다. 이후 DMZ를 선택한 후, 라즈베리파이 IP 확인하기 포스트에서 알아낸 라즈베리파이의 사설 IP 주소(제 경우는 192.168.0.3
)를 입력한 후, [적용]을 클릭하여 설정을 완료합니다.
(참고) DMZ Host 기능을 사용해야 하는 경우
1. 포트 포워딩 설정 후, 오류가 발생 시 원인 확인을 위해 DMZ 기능을 사용할 수 있습니다.
만약 포트 포워딩을 설정하였음에도 불구하고 외부에서 해당 장치로 접근이 되지 않는다면, 적절한 포트를 개방한 것인지 확인하기 위해 임시로 모든 포트를 개방하는 DMZ를 설정하여 구성의 오류를 확인할 수 있습니다.
2. 임의의 포트를 사용하는 응용 프로그램을 사용하는 경우 DMZ를 사용합니다.
여러분이 사용해야 하는 프로그램이 모든 포트의 개방을 필요로 할 경우, DMZ 기능을 사용하는 것 외에는 다른 방법이 없습니다. 이 경우 DMZ로 설정한 장치는 보안 업데이트에 조금 더 신경 써 주어야 할 것입니다.
3. 가정에서 웹 서버를 사용하는 경우 DMZ 사용을 고려할 수 있습니다.
가정에서 웹 서버를 호스팅 할 경우도 필요한 포트만을 개방하는 포트 포워딩이 권장되지만, 두 대 이상의 라우터를 이용하여 내부 네트워크와 차단된 진정한 DMZ를 구성하는 것도 고려해 볼 수 있습니다.
트윈 아이피 (Twin IP)
트윈 아이피란, ipTIME 공유기에서 사용하는 용어로 Super DMZ, IP Pass through Mode 등 공유기 제조사별로 사용되는 용어가 다릅니다. 공유기에 할당되어 있는 공인 IP를 내부의 특정 MAC 주소로 모두 전달하는 기능을 의미합니다. 장점은 특정 장치에서 공인 IP를 그대로 사용할 수 있다는 것입니다. 반면 단점은 SW NAT 기능이 사용되기 때문에 공유기의 성능에 네트워크 대역폭이 제한될 수 있습니다.
Twin IP 설정하기
Twin IP의 설정은 MAC 주소를 기준으로 하기 때문에, 라즈베리파이의 MAC 주소를 알아야 합니다.
MAC 주소는 다음과 같이 SSH 접속 후 ifconfig
명령어를 사용해 확인합니다.
※ 설치된 Raspbian 버전에 따라 아래와 다른 형태도 표시될 수 있습니다.
$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.3 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::5280:6726:a47d:f38c prefixlen 64 scopeid 0x20<link>
ether c7:35:ce:fd:8e:a1 txqueuelen 1000 (Ethernet)
RX packets 3979 bytes 507695 (495.7 KiB)
RX errors 0 dropped 22 overruns 0 frame 0
TX packets 2719 bytes 318433 (310.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
위 예제의 MAC 주소는 ether 부분의 c7:35:ce:fd:8e:a1
입니다.
이제 ipTIME 공유기 웹 설정 화면 (http://192.168.0.1)에 접속하여 [관리도구] 버튼을 클릭합니다. [고급설정] -> [NAT/라우터관리] -> [DMZ/Twin IP]를 선택합니다. 이후 Twin IP 선택하여 앞서 확인한 라즈베리파이의 MAC 주소(예를 들어, c7:35:ce:fd:8e:a1
)를 입력한 후, [적용]을 클릭하여 설정을 완료합니다.
참고
- TCP/IP illustrated. Volume 1 - The protocols
- When and How to Setup DMZ Host for Home Use
- Network address translation
- DMZ (computing)
'라즈베리파이 > 기초' 카테고리의 다른 글
라즈베리파이 USB 포트 출력전류 설정 (0) | 2019.05.18 |
---|---|
라즈베리파이 - 원격접속 (0) | 2019.04.28 |
라즈베리파이 - 인터넷연결확인하기 (0) | 2019.04.18 |
라즈베리파이 - IP 확인하기 (0) | 2019.04.16 |
라즈베리파이 - 보안강화 (0) | 2019.02.08 |