라즈베리파이를 집에서만 사용할 것이라면 크게 상관없지만, 가끔은 집 밖에서 사용하고 싶을 경우도 있을 것입니다. 라즈베리파이를 웹서버로 사용하거나, IoT용 스마트홈으로 사용하여 외부에서도 집의 여러 기기들을 원격 제어하고자 할 때 말이죠. 이번에는 라즈베리파이를 외부에서 원격 조종하는 것에 대해서 한번 공부해봤습니다. 다만 의도한대로 완벽하게 되지는 않았고 조금 어설프게 되었는데요, 수많은 실패 과정과 그 결과에 대해서 밑에서 얘기해보도록 하겠습니다.
1. 라즈베리파이가 연결된 공유기 접속하기
제 라즈베리파이는 iptime 공유기에 와이파이로 연결되어 있습니다. 해당 공유기 설정에 접속을 하여 설정을 진행해주세요. iptime으로 접속을 하려면 192.168.0.1로 접속을 하셔야 합니다. 참고로 초기 아이디와 암호는 admin /admin 입니다.
사진에서 까맣게 가린 부분이 외부 접속을 위한 외부 ip 주소입니다. 이 ip 주소를 잘 기억해주세요. 이제 고급 설정 -> 네트워크 관리 -> 내부 네트워크 설정으로 들어가주세요.
여기에 보면 raspberrypi라는 기기가 바로 제 라즈베리파이이며 192.168.0.11에 할당되어 있네요. 이것이 내부 ip 주소이며 이것도 기억해뒀다가 바로 밑에서 사용하겠습니다.
2. 포트포워딩 설정하기
라즈베리파이를 외부에서도 사용하려면 포트포워딩 설정이 필요합니다. 즉 해당 포트로 접속을 시도한 기기를 특정 ip로 보내 연결하라는 것인데요, 만약 12345번 포트를 이용한 접속은 모두 라즈베리파이의 ip로 보내라고 포트포워딩 해주고 외부의 어떤 기기에서 12345번 포트로 접속을 시도한다면, 이 기기는 라즈베리파이에 접속을 하게 됩니다. 포트포워딩에 대한 내용은 아래의 링크에서 확인할 수 있습니다.
고급 설정 -> NAT/라우터 관리 -> 포트포워드 설정으로 들어가주세요.
1) 규칙 이름 : 아무거나 정해주세요. 적당히 알아볼 만한 이름으로 정해주시면 됩니다.
2) 내부 IP 주소 : 위에서 봤던 라즈베리파이에 할당된 내부 ip 주소를 넣어주시면 됩니다.
3) 프로토콜 : TCP 방식, UDP 방식, TCP + UDP 등이 있는데, 전송을 어떤 방식으로 정할 지 결정하는 것입니다. 설명하려면 내용이 길어지기 때문에 기회가 있다면 따로 설명해드겠습니다. 여기서는 TCP로 설정해주세요.
4) 외부포트 : 접속할 포트를 정해주세요. 0 ~ 65535번까지 설정할 수 있는데, 이 중 되도록이면 1024 ~ 49151 내에서 사용하는 것이 좋습니다. 그 이유는 아래의 링크를 보면 알 수 있을 것입니다. 가령 22번 포트는 보통 ssh 접속을 위한 포트로 사용되는 등의 이유입니다. 저 같은 경우엔 현재 포트포워딩이 여러 개 설정되었지만 여기선 11111번 포트를 사용하고 있다고 보시면 됩니다.
https://ko.wikipedia.org/wiki/TCP/UDP%EC%9D%98_%ED%8F%AC%ED%8A%B8_%EB%AA%A9%EB%A1%9D5) 내부포트 : ssh 접속을 할 때 기본적으로 22번 포트로 들어가게 설정되어 있습니다. 내부포트는 22번으로 잡아주세요.
입력이 끝난 후 우측 하단에 적용을 누르고 우측 상단의 저장을 꼭 눌러주세요.
3. 라즈베리파이에 ssh로 접속해보기
이제 터미널에서 한번 접속해볼까요? 이전 포스팅에서 설명한 적이 있지만, 아래의 코드로 들어간 후 비밀번호를 입력하시면 됩니다. 다만 외부 접속을 위한 것이니 외부 ip 주소를 입력해야겠죠? pi@ 뒤에 위에서 보았던 외부 ip 주소를 입력해주세요. 뒤이어 위에서 지정했던 포트 번호를 입력해주세요. 저의 경우 1순위를 보시면 11111번 포트를 사용하고 있으니 -p 11111이 되겠네요. 참고로 라즈베리파이의 기본 ID와 비밀번호는 pi / raspberry 입니다.
ssh pi@192.168.55.139 -p 11111
이제 확인해볼까요?
문제 없이 연결이 잘 되는 것을 확인할 수 있습니다. 끝!
아 그러고 보니 해당 컴퓨터는 내부 네트워크 (iptime 공유기 와이파이)를 사용 중이네요? 그럼 외부 네트워크를 사용해볼까요? 이거 확인하자고 밖에 나갈 순 없으니 핸드폰의 핫스팟을 연결해 임시적으로 외부 네트워크 효과를 내보았습니다. 물론 무리없이 잘 돌아가겠죠?
... 안되네???
한참을 기다리니 Operation timed out 에러가 발생하네요. 뭐 쉽게 말하자면 그냥 접속할 수 없다는 것입니다. 일단 여기서부터 1차적으로 당황했습니다. 외부 네트워크로 접속하고, 포트도 잘 설정했는데 뭐가 문제일까요?
엄청난 구글링을 한 결과 iptime의 문제라기보다 의외의 곳에서 힌트를 얻을 수 있었습니다.
저의 집에는 SK 공유기에 iptime과 SKwifice라는 공유기가 연결되어 있습니다. 즉 하나의 메인 공유기에 2개의 서브 공유기가 연결되어 내부 네트워크망을 형성하고 있다는 것인데요, 외부에서 메인 SK 공유기를 거치지 않고 바로 서브 공유기로 연결을 시도하니 접속이 되지 않았던 것이었습니다.
즉, SK 공유기에서 라즈베리파이에 연결하기 원하는, 특정 포트로 들어오는 접속 시도는 전부 iptime의 특정 포트로 보내도록 포트 포워딩을 한 후에, 다시 해당 포트로 들어오는 접속 시도는 라즈베리파이로 보내면 되는 것이었습니다. 한마디로 2중 포트포워딩을 해야한다는 것이죠.
좀 쉽게 말하자면, 외부에서 11111번으로 들어오는 접속은 전부 iptime의 11111번 포트로 보내도록 하고, iptime에서 11111번으로 받은 접속은 다시 22번 포트, 즉 라즈베리파이로 들어가게끔 만들어주면 되는 것이었습니다. 이를 위해선 iptime의 상위 공유기인 SK 공유기에 접속을 해야하네요.
4. iptime의 상위 공유기에 접속하기
이번에는 SK 공유기에 접속을 해보겠습니다. 저의 집 같은 경우엔 192.168.55.1로 접속하면 되네요. 192.168.35.1로 접속하면 된다는 분들도 있는데, 아마 기종이나 여러 이유로 조금씩 다른가봅니다. (자세한건 저도 잘..) SK 공유기가 아닌 다른 분들도 구글링을 하면 충분히 찾을 수 있을 것입니다.
SK 공유기의 기본 아이디는 admin이며 암호는 조금 까다로웠는데요. 위의 사진을 보면 빨갛게 칠한 부분이 암호가 됩니다. 총 6자리이며 대소문자를 구분해야합니다. 다만 암호가 저게 끝이 아니고 앞에 admin_을 붙여야합니다. 즉 빨갛게 칠한 부분이 가령 A12B34라고 한다면 접속 아이디와 암호는 아래와 같이 되죠. 아이디와 암호를 치고 접속해주세요.
ID : admin pw : admin_A12B34
여기서 다시 빨갛게 칠한 부분이 SK 공유기의 외부 ip주소가 되겠습니다. 즉 외부에서 접속을 하기 위해선 해당 ip로 접속을 먼저 해야하는 것이죠. 역시 이것을 기억해주세요.
5. SK 공유기에서 포트포워딩하기
다시 포트포워딩을 해야하네요. 왼쪽 메뉴의 네트워크 -> LAN에 들어가주세요. DHCP 서버 중간에 접속 리스트가 있는데 여기에 들어가주세요.
역시 내부 네트워크를 잘 기억해주세요. 여기서 둘 중에 뭐가 iptime에 연결된 것인지 모른다면, iptime에 접속해서 외부 ip 주소를 확인해보세요. (위의 1. 라즈베리파이가 연결된 공유기 접속하기에서 까맣게 칠한 부분이 iptime의 외부 ip 주소였습니다.) iptime 또한 SK 공유기와 "외부"로 연결된 것이니 SK 공유기가 iptime에게 할당한 주소가 iptime의 외부 ip 주소가 되는 것입니다. 192.168.55.139가 iptime이 되겠네요.
이제 다시 왼쪽 메뉴의 NAT -> 포트 포워딩으로 들어가주세요.
이제 iptime에서 했었던 것처럼 포트포워딩해주세요. 로컬 IP 주소에 위에서 확인했던 내부 ip (이자 iptime의 외부 ip)인 192.168.55.139를 넣고 포트를 적절하게 설정해주세요. 저 같은 경우 11111번으로 들어오는 접속은 iptime의 11111번으로 보내게 했습니다. 참고로 설정을 한 후에는 반드시 저장해주어야 합니다. 관리 -> 재시작에서 재시작을 하면 자동으로 변경 사항이 저장됩니다.
이제 포트포워딩도 했으니 한번 다시 접속해볼까요? 터미널에서 다시 접속해주세요. 해당 공유기의 외부 ip 주소가 111.111.11.111이고 포트를 11111번으로 지정했다면 아래와 같이 접속할 수 있겠네요.
ssh pi@111.111.11.111 -p 11111
... 안되는데???
... 생각해보니 해당 노트북이 SK 공유기의 하위 공유기인 iptime과 연결되어 있네요. 하위 공유기에서 상위 공유기로 접속하려고 하니 접속 거부가 발생하는 것 같습니다. 그렇다면 아까처럼 외부 네트워크를 임시적으로 형성해서 접속해보면 되겠네요! 다시 스마트폰의 핫스팟을 켜서 진행했습니다.
된다!! 이 과정까지 정말 많은 시간이 필요했습니다. 뭔가 이론적으론 될 것 같은데 요상하게 안되고.. 뭐 아무렴 해결되었다면 다행인거죠. 이제 라즈베리파이를 외부에서도 사용해보세요.
추가
이렇게 끝내면 좋은데, 혹시라도 여기서 또 안되는 분들이 있나요? 이유는 잘 모르겠지만, 이렇게까지 해도 뭔가 문제가 있다는 얘기를 들어 다시 봤습니다. 소개할 방법까지 안된다면 다른 방법은 모르겠지만, 최대한 해결하길 바라는 마음에 올려봅니다. (사실 보안쪽으로는 별로 좋지 않다는 얘기가 있어서 조금 망설여지네요.)
왼쪽 메뉴의 NAT -> DMZ를 클릭해주세요.
DMZ 호스트 IP 주소에 iptime이 가지고 있는 내부 ip 주소를 넣어주고 적용한 후 재시작해주세요. DMZ는 쉽게 말해 외부의 모든 접속을 열어버리는 것입니다. 즉 192.168.55.139에 속하는 모든 ip 주소와 포트를 개방해버리는 것입니다. 접속은 원활하겠지만 당연히 보안에서 문제가 생기겠죠. 물론 외부에 접속을 허용해야하는 게임 서버 등에서는 사용할 만 하다고 생각합니다. 혹시라도 잘 안된다면 이 방법이라도 사용해보시면 어떨까 합니다.
마치며...
라즈베리파이를 가지고 놀면서 네트워크에 대한 지식이 점점 늘어나네요. 역시 놀면서 배우는 것이 가장 좋은 것 같습니다. 댓글을 피드백과 의견은 언제든지 환영합니다. 부족한 부분 많이 지적해주세요. 또한 해당 댓글로 이 글을 보는 많은 사람들이 추가적으로 도움을 얻을 수 있으면 합니다. 다들 원하는 바 이루시길 바라며 즐거운 코딩하세요!
관련글
1. [Embedded System] 라즈베리파이4 가지고놀기 #1 - 라즈베리파이4 세팅하기
2. [Embedded System] 라즈베리파이4 가지고놀기 #2 - 운영체제 설치하기
3. [Embedded System] 라즈베리파이4 가지고놀기 #3 - SSH 설정 및 VNC를 이용해 같은 네트워크망에서 라즈베리파이에 접속해보기
4. [Embedded System] 라즈베리파이4 가지고놀기 #4 - 모니터 없이 SSH 및 VNC 설정하기
5. [Embedded System] 라즈베리파이4 가지고놀기 #5 - 공유기가 여러 개인 네트워크일 때 외부에서 라즈베리파이에 접속하기
와 정말 큰! 도움이 되었습니다. 행복한 일 가득하세요!
답글삭제부족한 글임에도 불구하고 도움이 되셨다니 정말 다행입니다. 글 읽어주셔서 감사합니다 ^^
삭제지금도 답글을 달아주실지는 모르겠지만 포트포워딩을 할때 내부 ip와 ex) 1번포트로 하고 외부에서 접속할때 외부 ip + ex) 1번 포트로 접속을 해야한다는건가요?
답글삭제