써야지 써야지 하고 마음만 먹었던 글감을 드디어 쓰려고 한다.


라즈베리파이로 NAS 구축하는 글 쓴 이후로 거의 일년 반이 지난 것 같은데.... ㅎㅎ


좀 많이 늦긴 했지만 약속을 지키고자.

사실 쓰려면 금방 썼을 글인데 왠지 모르게 손이 안갔다.



이번에 다룰 주제는 열심히 만든 라즈베리파이를 단순히 파일 저장용으로 쓰는 것이 아니라,

라즈베리파이에 저장된 동영상을 다시 다른 컴퓨터나 폰으로 다운받을 필요 없이 곧바로 재생할 수 있는 스트리밍 서버로 활용하는 것이다.


정말 간단하다.


우선 예시로 사용할 동영상은 pi 계정의 홈 디렉토리에 example.mp4 라는 이름으로 저장되어 있다.





# 데스크탑에서 스트리밍


사용할 프로그램은 다음 팟플레이어이다.

다른 동영상 플레이어에도 웹에 연결하는 기능이 있다면 다 비슷하게 작동하리라 생각한다.


우선 팟플레이어를 열고 아래 사진처럼 '재생목록' 메뉴를 연다.



여기서 +새앨범 버튼을 누른다.



그러면 위와 같은 창이 열리는데, 해당 빈칸을 채워넣기만 하면 된다.


1. 앨범 이름: 원하는대로 ㅎ 나는 pi로 설정

2. FTP/WebDAV/HTTP 주소 선택

3. 프로토콜은 FTP로 그대로 두고, 호스트는 라즈베리파이의 주소.

같은 공유기에 연결되어있다면 내부 IP를 적어도 되고,

아니라면 라즈베리파이가 연결된 공유기의 외부 IP 주소, 또는 DDNS 연결한 주소를 쓰면 된다.

어쨌든 라즈베리파이에 연결하기 위한 주소!

4. 사용자명: FTP 접속 가능한 아이디

5. 비밀 번호: 해당 비밀번호


아마 기억상으로 Passive가 해제되어 있어야 정상 작동했던 것으로 기억한다.

UTP-8과 Passive 설정도 사진에서처럼 설정한다.


그리고 확인을 누르면,



이런 식으로 라즈베리파이 내부 파일목록에 접근할 수 있다.


맨 위에서 PuTTY로 SSH 연결한 터미널에 있던 파일 구조와 동일한 것을 확인할 수 있다.




# 폰에서 스트리밍


큰 차이는 없다. 폰에서도 똑같이 앱 내부에서 FTP 연결을 할 수 있는지를 확인하고

해당 기능을 사용하면 될 뿐.


나는 아이폰 유저이고, 예시로 들 앱은 유료 앱인 nPlayer이다.


사용하는 플랫폼이나 앱이 다르더라도 비슷한 흐름으로 따라하면 될 것 같다.




네트워크 서버에 연결하는 아이콘이다.



우리는 ftp 서버밖에 설정을 안했으니까... ftp를 선택한다.



이렇게 접속할 주소와 아이디, 비밀번호 등을 적어야 한다.



제목은 그냥 서버 목록에 표시될 이름이고, 호스트는 라즈베리파이의 주소.

사용자는 라즈베리파이에서 ftp 이용 가능한 사용자명, 그리고 암호.

중요한게 포트 번호를 21로 지정을 해줘야 한다.


안그러면 제대로 접속이 안되는 걸 방금전에 테스트해봤다.


그러고나면 이렇게 라즈베리파이에 접속해서 네트워크 서버에 있는 파일 목록을 보여준다.

예시 동영상인 example.mp4도 잘 있다.






이렇게 쉽고 편한 방법으로 라즈베리파이를 동영상 스트리밍 서버로 활용할 수 있다.

번거롭게 파일을 여러 컴퓨터에 옮길 필요 없이 라즈베리파이에 접근 가능한 환경에서는 손쉽게 이용할 수 있다.





음.. 아마 다음번 글감은 요즘 핫한 보이스챗 프로그램인 디스코드에서 쓰는 봇이 되지 싶다.

라즈베리파이에 봇 설치하고, 음성채널에 접속시키고, 라즈베리파이를 통해서 24시간 돌아갈 수 있게 설정하는.


최대한 빠른 시일 내에 정리하는 것을 목표로.


WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

받은 트랙백이 없고 , 댓글이 없습니다.
secret

만 1년만의 포스팅.... 그동안 대학원을 졸업하고 회사에 취업하는 등 개인 신상에 많은 변화가 생겼지만 사실 포스팅 정도야 하려면 할 시간은 많았다. 그냥 귀찮음에 포스팅을 미뤄뒀던 것일 뿐...

1년 동안 티스토리 로그인을 안해서 휴면계정으로 넘어간다는 알림 메일에 간만에 접속했더니 미숙한 글이나마 도움을 받아가는 분들이 있어서 뽑았던 칼이 더이상 녹슬기 전에 마무리는 하고자 한다.


또 한동안 블로그질에 불붙을 지도 모르겠다 ㅎㅎ 왜냐면 블로그에 할애할 시간이 줄었던 이유가 파이널판타지 14 때문인데 지금 고정팟이 공중분해돼서 이제 접속해도 할 게 없어서 시간이 다시 남기 때문이다... ㅠㅠ


잡설은 여기까지 늘어놓기로 하고, 오늘 다룰 내용은 별 내용은 없다. 라즈비안 운영체제에 사용자 계정을 만들어서 관리용 계정과 외부 공개용 계정을 분리하는 것이다.

NAS 구축 후 혼자 쓰기만 할 거라면 사실 별 필요 없는 내용이고, 모아둔 자료를 지인들과 함께 공유하고자 한다면 나름 유용하게 쓰일 수 있을 것 같다.



# 홈디렉토리 구성도


사실 기본 개념은 지난 글에서 FTP client를 깔면서 설명한 바 있다.


링크: 2015/06/21 - [라즈베리파이(Raspberry Pi)로 NAS 구축하기] 2. FTP client 설치하기


아래 내용은 해당 글에서 발췌해 온 내용이다.




DefaultRoot 옵션을 통해 각 계정별로 지정된 홈디렉토리를 루트, 즉 최상위 디렉토리로 지정을 하기 때문에 그 상위 디렉토리로 못넘어가게 막는 것이다.


조금 자세히 설명을 해보자면, 라즈베리파이의 관리자 계정인 pi가 있고 이 pi의 홈디렉토리는 /home/pi/가 된다.


이 pi 홈디렉토리 밑에 guest 라는 이름의 디렉토리를 만든다. (/home/pi/guest/) 그리고 이 /home/pi/guest/를 홈디렉토리로 하는 guest라는 계정을 만든다.


그러면 pi 계정은 홈 디렉토리가 /home/pi/ 이므로 여기서부터 시작해 그 하위 디렉토리(/home/pi/guest/ 포함)는 전부 접근할 수있지만, 반대로 guest 계정은 홈 디렉토리가 /home/pi/guest/ 이므로 여기서부터 시작해야 하기 때문에 더 상위 디렉토리인 /home/pi/ 디렉토리는 접근할 수도 없고 여기에 무슨 파일들이 있는지 알 수 없게 되는 것이다.


그래서 저 옵션을 설정함으로써 어느 수준의 보안을 구현할 수 있다는 말이다.



라는 내용을 썼었고, 아래는 저 말을 그림으로 표현한 것.



즉 '위에서 아래로는 내려가지만 아래에서 위로는 못올라간다'는 것만 이해하면 된다.

pi 계정 입장에서는 그 아래의 모든 디렉토리를 볼 수 있지만 guest 계정 입장에서는 /home/pi/, 또는 /home/pi/ 디렉토리 아래에 다른 디렉토리를 생성해서 /home/pi/another/ 같은 디렉토리가 있다고 하더라도 볼 수 없다.


이 관계를 이용해 다른 사람에게 다른 사람에게 공개하고자 하는 디렉토리의 범위를 설정할 수 있게 된다.

뭐.. 전체이용가와 성인등급을 따로 공개하는 식의...? ㅋㅋㅋ



그래서 이제는 위의 예시대로 디렉토리를 만들고 라즈비안 운영체제의 사용자계정을 만들어서 그 계정의 홈디렉토리를 새로 생성한 디렉토리로 지정하는 아주 간-단한 내용을 설명하기로 한다.




# 사용자계정 생성 및 홈디렉토리 지정


근데 여기는 정말정말로 설명할 게 없다. 명령어 딱 2개만 알면 된다.


1. useradd

2. passwd


아주 직관적이다.



우선은 홈디렉토리로 사용할 하위 디렉토리를 생성한다. 예시와 동일하게 만들기 위해 터미널에서 로그인 하자마자 바로 생성했다.


$ mkdir guest



사진이 잘 보일라나 모르겠네.....

여튼 mkdir (<- make directory) 명령어를 이용해서 새 사용자계정의 홈디렉토리로 사용할 디렉토리를 생성했다.



이제는 guest 라는 이름의 사용자계정을 만들 건데, -d 옵션을 이용해서 이 사용자계정의 홈디렉토리까지 한번에 지정하자.


$ sudo useradd -d /home/pi/guest/ guest


이 상태로는 guest의 비밀번호가 지정되어 있지 않을 거다. 아마. 비밀번호까지 지정하고 싶으면 passwd 명령어를 이용한다. passwd 명령어의 파라미터로는 비밀번호를 지정하고자 하는 사용자계정의 이름을 넣으면 된다.


$ sudo passwd guest


위 명령어를 치면 암호를 입력하라는 메세지가 뜬다. 두번이나.



그러면 이제 사용자계정 생성 및 비밀번호 설정까지 마친 것이고, 지난번처럼 브라우저에 주소 입력하고 들어가서 위 정보를 입력하면 해당 디렉토리보다 하위의 디렉토리에 있는 파일들에 접근할 수 있다.




# 어설픈 마무리


일단 여기까지 해서 정말 기본적인 라즈베리파이 외부 접속 설정 방법과 FTP client 설치, 설정, 공개범위 설정까지 마쳐봤다. 급마무리하는 것 같은 느낌이 든다면 맞다.

하하하하.....


지금은 일단 간단하게 FTP 서버만 구축해보았고, 조만간에 그러면 이 FTP 서버를 가지고 무엇을 할 것이냐! 하는 응용편(?)을 포스팅하도록 하겠다.


개인적으로는 영화나 만화책 파일을 볼 때 번거롭게 재생장치에 옮기지 않고 웹스트리밍으로 보는 데에 이용 중인데, 내가 쓰는 프로그램이나 어플리케이션에서의 사용 방법을 소개하고자 한다. 다른 프로그램 쓰더라도 기본 방법은 같을테니....


그러면 우선은 부족한 시리즈글은 여기서 마무리짓도록 한다. 안뇽-


WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

받은 트랙백이 없고 , 댓글  5개가 달렸습니다.
  1. 포스팅된 내용 잘 보았습니다

    구형 라즈베리파이 1 모델이 있어, 따라해 봤는데
    쉽게 설명이 되어있어 훌륭한 NAS를 얻었네요..

    좋은글에 감사드립니다^^

    앞으로도 좋은 내용 부탁드립니다
    • 도움이 되셨다니 다행입니다. 부족한 실력이지만 가끔 그래도 이렇게 도움이 되었다는 글을 보면 좋네요 ㅎㅎ
  2. 포스팅 잘 읽었습니다.
    nas 구축하려고 샀던 라즈베리파이가 게임기가 되고, 그나마도 잘 사용하지 않던 터에
    좋은 포스팅 발견해서 이번 주말에 바로 실행에 옮길 생각입니다.
    글 말미에 적으신 응용편도 기대하고 있으니 꼭 작성해주세요~ㅎㅎ
  3. 흡.. 응용편이 시급합니다!!!
    • 헉.. 요즘 회사생활에 치여서(?) 블로그 관리도 소홀히 하느라 포스팅을 못했네요. 그사이에 라즈베리파이에 구축한 서버가 날아가는 바람에 저도 다시 처음부터 구축하고 스마트폰에서 어떻게 스트리밍 서비스 이용하는지 조만간 포스팅하도록 하겠습니다 ^^;
secret
한달이 넘게 블로그 방치 중이었던 나 자신을 반성한다. ㅠㅠ

라즈베리파이로 NAS 구축하는 거 설명하기 위해서 당초 계획했던 포스팅은 이 글 포함 3개가 남았고, 원래대로였다면 7월 안에 다 끝낼 예정이었는데.

나름 졸업준비를 위해서 일이 바빴다는 핑계를 대보기로 한다... 한동안 글을 안쓰다보니 뭐 어떻게 설명을 시작했는지도 가물가물할 정도네.


# 주의사항


이번 포스팅에서도 해야할 건 사실 몇 개 없지만, 나는 이 과정에서 하드웨어적인 문제로 많은 돈과 시간을 쏟았다.


2.5인치 외장하드 물렸을 때는 알 수 없는 이유로 전원이 제대로 공급되지 않아 usb 허브도 두어개 샀고 y자 케이블도 물려보는 등 여러 수단을 써 봤는데 결국은 2.5인치는 포기했다.

자체 전원 어댑터로 전력을 공급받는 3.5인치 외장하드를 사다가 꽂았더니 언제 문제가 생겼었나 싶게 한번에 성공해버렸다.

(사실 2.5인치 외장하드도 케이스까지 갈아본 건 아니어서 케이스와의 상성이 안좋았을 가능성이 남아있긴 하다.)


만약 외장하드를 새로 사다가 꽂을 예정이라면, 되도록이면 전력 공급과 데이터 보관의 안정성 모두를 위해 3.5인치를 추천하는 바이다. 어차피 NAS 구축하는 이유가 일일이 외장하드 안들고 다니고 집에 박아두고 쓰려는 건데..



# ntfs-3g 설치


이 부분은 윈도우에서 사용하던 ntfs 방식의 외장하드를 라즈베리파이에서도 그대로 이용하기 위해 필요한 절차이다.

외장하드에 다른 포맷으로 데이터를 저장하고 있다면 이 부분은 과감히 스킵하면 된다.


$ sudo apt-get install ntfs-3g


(나는 왜 자꾸 sudo 입력할 부분에 sudp 라고 오타를 내는지 모르겠다...)


이거는 뭐 설치만 해두면 된다.



# 외장하드 접근 위치 확인


드디어 외장하드를 라즈베리파이에 연결이 다 끝났다면, 외장하드에 접근할 경로를 확인하기 위해서 다음 명령어를 쳐보자.


$ sudo fdisk -l


(글씨체 때문에 잘 구별이 될지 모르겠는데 소문자 L이다. 복붙이 가능하면 그냥 복붙해서 쓰자.

PuTTY 프로그램에서 붙여넣기 하려면 커서 활성화 된 상태에서 마우스 오른쪽 클릭하면 된다.)



fdisk 명령어를 쳐보면 위 캡쳐화면같이 나온다.

위쪽의 /dev/mmcblk0 이거는 라즈베리파이의 주 저장장치인 SD 카드의 파티션이다. 여기서는 볼 필요가 없으니 넘어간다.


아래쪽의 /dev/sda 이 부분이 따로 연결시켜준 외장하드를 나타내고 있다. 아마존에서 큰맘먹고 15만원이나 주고 산 나의 크고 아름다운 5테라짜리 외장하드가 잘 잡히고 있다. 음하하하.

여기서 중요한 부분은 이 외장하드 디스크가 /dev/sda 로서 잡혀있다는 것이고, 이 안에 있는 파티션은 하나밖에 없는데 Device Boot 아래에 /dev/sda1 이라는 이름을 부여받았다는 것이다. 


덧.

만약 외장하드 하나의 내부를 여러 개의 파티션으로 쪼갰다면 /dev/sda1 뿐만이 아니라 /dev/sda2, /dev/sda3, .... 등의 이름이 더 떴을 것이다.

fdisk 명령어와 출력 결과에 대해서 더 자세히 알고 싶다면 https://www.linux.co.kr/home/lecture/index.php?cateNo=&secNo=&theNo=&leccode=10799 참조.


하지만 'cd /dev/sda' 또는 'cd /dev/sda1' 등을 쳐보면 디렉토리가 아니라면서 접근이 불가능하다. 그러면 어떻게 해야 할까!

이 장치를 라즈베리파이가 인식할 수 있는 디렉토리 중 하나에 연결을 해줘야 하고, 그걸 mount라고 부른다.

(이쯤 되면 그냥 대충 usb 포트에 꽂으면 알아서 드라이브 이름 붙이고 사진 불러오기 할까? 아니면 그냥 폴더 열래? 하고 물어보기까지 하는 윈도우가 그립기도 할 것 같다.)


우선은 외장하드의 경로 중에서 파티션 번호까지 붙은 디바이스 패스 전체를 적어두도록 하자. (위 캡쳐에서는 /dev/sda1)



# 외장하드 마운트


연결은 잘 되어있지만 내가 cd 명령어 쳐서 접근할 수는 없는 외장하드 디바이스를, 이제는 접근 가능한 디렉토리에 연결을 시켜보기로 한다.


우선은 연결시킬 디렉토리가 필요하다. 내가 예전에 캡쳐해둔 짤을 보니 root에 /media/main 이라는 이름으로 디렉토리를 생성했었다. pi 계정의 홈디렉토리 밑에 만들어도 되고 (실제로 지금은 그렇게 사용중) 알아서 대-충 만들자.


$ sudo mkdir /media/main 

(root 디렉토리에 만드느라 sudo 필요했던 듯)


만약 pi 계정 밑에 만들거라면 그냥

$ mkdir external

뭐 이런 식으로 만들어도 무방하다.


연결할 디렉토리를 만들었다면, mount 명령어를 통해 디바이스를 디렉토리 위에 얹는(mount)다.


$ sudo mount -t auto /dev/sda1 /media/main

(mount -t auto <디바이스 패스> <연결할 디렉토리> 형식으로 입력하면 된다.)



만약에 명령어 입력했는데 이 사진처럼 언클린 파일 시스템이라고 뜨면, 윈도우 컴퓨터에 연결했다가 외장하드 뽑을 때 막 뽑아서 그런 거니까 다시 윈도우 컴퓨터에 연결했다가 안전제거 한 후에 다시 라즈베리파이에 물려주면 된다. (라고 구글신님이 말하셨다.)


여기까지 했다면 이제 거의 다 온 거다.

이제 cd 명령어로 방금 마운트 시켜준 디렉토리에 들어가보면 외장하드에 저장된 파일들이 잘 나오는 것을 볼 수 있다. 후후. 또는 이 상태에서 파일을 생성한 다음에 라즈베리파이에서 뽑아서 메인 컴퓨터에 연결해보면 생성한 파일을 확인해볼 수도 있다.



# 외장하드 마운트 자동화


하지만 아직 끝이 난 건 아니다. 지금은 마운트가 잘 돼서 디렉토리 안에 마음대로 들어갈 수 있지만, 라즈베리파이 재부팅이라도 하고나면 마운트가 풀려서 또 일일이 명령어 치고 해줘야 한다. 그러면 당연히 귀찮아질테니 라즈베리파이가 부팅할 때 알아서 마운트하도록 일을 시켜놔야 한다.


관련 내용은 /etc/fstab 파일에 저장되어 있다. 편집기로 열어주자.


$ sudo nano /etc/fstab


라즈베리파이 기능과 관련된 파일이기 때문에 반드시 sudo로 열어줘야 한다. 안그럼 편집해도 저장을 할 수가 없다. /etc/fstab 파일을 열고 나면 위에서 적어둔 디바이스 패스와 마운트한 디렉토리 이름을 가지고 한 줄 추가해주면 된다. 아래 캡쳐파일 참조.


/dev/mmcblk0p1, /dev/mmcblk0p2는 SD카드에 있는 파티션들이다. 건드리면 큰일난다.


그 밑에 있는 /dev/sda1 이게 외장하드의 첫 번째 파티션이고, 나는 지금은 위에서도 말했다시피 외장하드를 pi 계정 밑의 external 이라는 디렉토리에 마운트해서 쓰고 있다. 디바이스 패스, 마운트 경로만 자기가 설정한대로 바꿔주고 나머지는 그냥 그대로 적자.


<디바이스 패스> <마운트 경로> auto noatime 0 0


마운트 경로 뒤쪽의 값들은 의미를 까먹었다. 근데 아마 auto는 외장하드에 파일 저장된 형식을 알아서 인식해서 그대로 처리하라는 뜻으로 기억한다. 하하하... 무책임잼..


여기까지 하고나면 라즈베리파이 재부팅해도 알아서 마운트가 되면서 해당 디렉토리에 알아서 연결이 된다. 여기까지만 하고 넘어가도 상관없다.


ftp 설치하고 브라우저에서 접속해보는 것까지 지난 포스팅에서 다 했으므로, 마운트한 디렉토리가 pi 계정으로 접근 가능한 범위에 있다면 브라우저에서 접근했을 때 외장하드 내부 파일들도 다 볼 수 있게 된다. 테스트 해보자.

물론 Filezilla 같은 ftp 프로그램으로도 접근할 수 있다.



# 추가. UUID로 마운트하기


이거는 해도 되고 안해도 되는 내용이다. 귀찮으면 그냥 스킵하자.


사실은 라즈베리파이에 외장하드를 여러개 물린다면, 외장하드를 인식한 순서에 따라서 /dev/sda, /dev/sdb, ... 이런 식으로 이름이 붙게 된다. 이게 만-약에 알 수 없는 이유로 꼬이게 된다면 마운트 위치가 달라질 수 있다.


그래서 /dev/sda, /dev/sdb, /dev/sdc, .... 같은 상대적인 이름 대신 하드웨어 고유의 ID를 가지고 마운트를 할 수도 있다.


$ sudo blkid


이 명령어를 치면 (외장하드가 도록도록 소리를 내고나서) 각 디바이스에 부여된 고유 ID를 확인할 수 있다. UUID=" 어쩌구 저쩌구 " 하는 부분이다. 저 부분을 부분을 복사해서 /etc/fstab 파일을 편집할 때 디바이스 패스 부분에 집어넣으면 꼬일 일이 없다.





UUID=" 어쩌구 저쩌구 " <마운트 경로> auto noatime 0 0


여기까지 해서 외장하드를 라즈베리파이에 꽂아서 내부를 들여다 볼 수 있게 설정했다. 오늘도 스스로를 칭찬하자.


어디서 막혔거나 설명이 이해가 안되는 부분이 있다면 질문 부탁드리며 이번 글을 마친다.


WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

받은 트랙백이 없고 , 댓글  4개가 달렸습니다.
  1. 도움되는 포스팅 감사드립니다.
    마지막으로 UUID로 마운트 할때 마운트가 제데로 되지 않는 현상이 발생하네요. 제가 잘못 한것 같은데 Device pass 대신 UUID 입력하게되면
    3D61-34A1 /home/pi/memory auto noatime 0 0
    이렇게 되는데 라즈베리파이 리붓 이후에 마운트가 되지 않네요.
    • 아 제가 어제 라즈베리파이에 연결되어있던 랜선을 다른 데서 쓰느라고 뽑아놓고 그냥 출근한 바람에 지금 바로 확인이 불가하네요 ㅠㅠ 퇴근 후에 확인해본 뒤에 답변해드리도록 하겠습니다. 제가 설명을 잘못한 것일 수도 있으니..
    • 답변이 늦어서 죄송합니다 ㅠㅠ
      스샷 첨부해서 글 수정했습니다. UUID=" .. " 형식으로 작성해주셔야 제대로 됩니다.
  2. 마운트가 제대로 되었다고 생각하고 재부팅을 했는데 어디서 문제가 생겼는지 파이가 Emergency Mode로 실행되었습니다. 우선 외장하드 연결된걸 모두 빼고, fstab에 새로 쓴 부분을 지우고 저장 한 후, https://www.raspberrypi.org/forums/viewtopic.php?f=56&t=124149 <- 이 사이트에 접속하여 disk 검사를 진행했습니다. 이제 살아났네요 휴..ㅠㅠ 혹시 비슷한 증상 겪으신 분 계시다면 위 링크에서 확인해보세요..
secret
이제 드디어 기본 설정이 끝났고 본격적으로 FTP 프로그램을 깔아본다.

FTP는 File Transfer Protocol의 약자이다. 파일 전송을 위한 규격이라고 할 수 있다. 인터넷 브라우저에서 사이트 주소 앞에 흔히 붙는 http라는 것도 Hyper-Text Transfer Protocol의 약자이다. 한국 사람은 한국말로 해야 말이 통하고 미국 사람은 영어 해야 말이 통하듯이 서로 뭘 주고받을 것인지, 말이 통하기 위한 규격이라고 생각하면 된다.

FTP 프로토콜로 접속을 하게 되면 목표 서버에 나는 파일을 다운로드 하려고 그 서버에 접속하는 거라고 말하는 셈이다.


# proftp 설치하기


$ sudo apt-get install proftpd-basic


내가 봤던 매뉴얼에서는 sudo apt-get install proftpd 입력하라고 되어있었는데 어차피 apt-get이 지원하는 패키지 이름을 검색해보고 자동으로 proftpd-basic 깐다고 하니 그냥 처음부터 proftpd-basic 설치하면 될 것 같다.


중간에 어떤 모드로 설치할 것인지 물어보는데, 기본 세팅대로 standalone으로 설치한다.

standalone 버전은 말그대로 proftpd 프로세스가 독립적으로 실행되는 상태이고, 다른 모드 이름이 기억은 안나는데 그 모드는 외부 접속을 처리하는 다른 독립 프로그램이 있고 걔가 여러 가지 요청을 처리하다가 ftp 관련 요청이다 싶으면 proftpd 프로세스를 종속적으로 만들어서 처리를 맡기는 형식으로 기억한다.

내 기억이 잘못됐을 수도 있고 더 이상의 설명은 (나도 모르는 부분이라) 불가능하므로 나랑 비슷한 수준의 초보자라면 곱게 standalone으로 설치하자.


설치가 다 끝났다면 약간의 설정을 해주자.



# proftp 설정하기


설정 파일은 /etc/proftpd/proftpd.conf 파일 안에 저장되어 있다. 텍스트 편집기로 열어준다. 물론 얘도 sudo 넣어서 열어줘야 한다.


$ sudo nano /etc/proftpd/proftpd.conf


ServerName 같은 거는 서버 이름이니까 적당히 원하는 대로 바꿔줘도 되고, 다른 설정은 다른 데서 검색해보고 공부해서 고쳐도 되지만 내가 설명해 줄 건 DefaultRoot 옵션이다.


이 옵션은 보안을 위해 필요한 것인데, 나중에 이 서버를 주변 친구들이나 다른 사람에게 공개할 때 아무나 내 서버에 접속해서 중요한 파일을 헤집어놓고 다니면서 설정을 바꿔놓는다면 큰 문제가 생길 것이다.

그래서 보안을 위해서는 공개를 위한 디렉토리를 따로 만들어놓고 일반 사용자들은 그 제한된 디렉토리 안에서만 접근할 수 있도록 바꿔야 한다. 따라서 DefaultRoot 옵션이 적용될 수 있도록 주석을 해제해줘야 한다. 기본적으로 DefaultRoot 앞에 '#' 글자가 붙어서 설정에 영향을 미치지 않는 주석으로 처리가 되어있는데, 이 #을 지워서 설정이 적용되게 한다. 아래 그림처럼.



스크롤 내려서 찾기 힘들면 '^W Where Is' 라고 써있는게 텍스트 검색 단축키 설명이다. Ctrl+W 눌러서 defaultroot 입력하고 엔터치자. 기본적으로 대소문자 구별은 안한다.


저기서 ~ 라고 써있는 게 리눅스에서의 홈디렉토리를 가리킨다고 보면 된다. DefaultRoot 옵션을 통해 각 계정별로 지정된 홈디렉토리를 루트, 즉 최상위 디렉토리로 지정을 하기 때문에 그 상위 디렉토리로 못넘어가게 막는 것이다.


조금 자세히 설명을 해보자면, 라즈베리파이의 관리자 계정인 pi가 있고 이 pi의 홈디렉토리는 /home/pi/가 된다.


이 pi 홈디렉토리 밑에 guest 라는 이름의 디렉토리를 만든다. (/home/pi/guest/) 그리고 이 /home/pi/guest/를 홈디렉토리로 하는 guest라는 계정을 만든다.


그러면 pi 계정은 홈 디렉토리가 /home/pi/ 이므로 여기서부터 시작해 그 하위 디렉토리(/home/pi/guest/ 포함)는 전부 접근할 수있지만, 반대로 guest 계정은 홈 디렉토리가 /home/pi/guest/ 이므로 여기서부터 시작해야 하기 때문에 더 상위 디렉토리인 /home/pi/ 디렉토리는 접근할 수도 없고 여기에 무슨 파일들이 있는지 알 수 없게 되는 것이다.


그래서 저 옵션을 설정함으로써 어느 수준의 보안을 구현할 수 있다는 말이다.


그러면 이제 저장을 하고 텍스트 편집기를 종료하자.



# ProFTP 재시작하기


설정을 바꿨다면 변경된 내용을 적용하기 위해 proftp 서비스를 재시작해야 한다.


$ sudo service proftpd restart

$ sudo /etc/init.d/proftpd resart // 위 명령어와 같은 일을 한다. 둘 중에 아무거나 편한 거 쓰면 된다.


# 컴퓨터 인터넷 브라우저에서 ftp 접근해보기


크롬을 쓰든 인터넷 익스플로러를 쓰든 파이어폭스를 쓰든, 심지어 윈도우 탐색기라도 좋다. 주소창에 ftp://<라즈베리파이 IP 주소>를 쳐보자.


<라즈베리파이 IP 주소> 부분에 공유기에서 확인한 내부 IP 주소를 넣을 수도 있고, 1. 유선랜 고정 IP 할당 게시물에서 포트포워딩을 통해 외부 접근이 가능하게 만들어 두었으므로 공유기가 할당받은 외부 IP 주소를 넣을 수도 있다.


내부 IP 주소를 넣는다면 컴퓨터가 같은 공유기에 연결이 되어 있어야만 접근할 수 있다.

외부 IP 주소를 넣는다면 집이 아니라 카페나 도서관 와이파이를 잡더라도 외부 IP 주소를 외워서 적어넣으면 접근 가능하다.


IP 주소를 외워다가 치기 복잡하면 우리가 흔히 아는 알파벳 형태로 된 도메인(www.google.com 이라든가)을 IP 주소에 부여해야 한다. 이것은 DDNS 서비스라고 하여 나중에 다시 설명하기로 한다.



ftp://<IP 주소> 치고 들어가면 계정과 비밀번호를 물어보는데, 지금 라즈베리파이에서 쓰는 계정 그대로 치고 들어가면 된다.

기본 설정 그대로라면 pi / raspberrypi 치면 되겠지. 로그인 후에 위 캡쳐사진처럼 홈디렉토리 아래의 파일들이 그대로 나온다면 성공이다.


지금까지의 글들이 스크롤이 어마어마하게 긴 것에 비해 겉으로 드러나는 게 별로 없었는데, 이번엔 스크롤도 짧고 할 것도 별로 없는 주제에 뭔가 어마어마한 성취를 이뤄낸 것 같이 보인다.

여기까지 무사히 완수했다면 스스로에게 박수를 쳐주자.


만약 문제가 생겼다면 댓글을 달아주시길...


WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

받은 트랙백이 없고 , 댓글  5개가 달렸습니다.
  1. 안녕하세요 2015.07.16 22:22 신고
    댓글을 보실지 잘모르겟네요.. 반대로 vi에서 주석처리를 하기위해 저 #을 치게되면 L과 비슷한 상형문자가 입력되는데 이경우에는 어떻게 해결해야되나요? 아직 리눅스 기초 부분을 공부중인데 전혀모르겟네요.. #이 주석처리라면 반대로 #을 입력하기위해서는 어떻게해야되나요?
    • 댓글을 보실지 모르겠지만 2015.07.25 08:59 신고
      http://200315193.tistory.com/1111
      이거 보시고 키보드 설정 하시면 됨
    • 답변이 늦었습니다. 요즘 블로그 관리를 안했더니..
      다른분께서 답변 잘 달아주셨네요. 라즈베리파이가 원래 영국의 비영리재단에서 만든거라 시간 설정이나 키보드 매핑 같은게 다 영국이 기본이라 이상한 데서 걸리적거리는 게 있더라구요 ㅎㅎ;
  2. proftp를 따로 css 작업해서 적용이 되나요?
  3. 막힘없이 잘 따라오고 있습니다. ㅎㅎ 설명을 잘 해주셔서 중간중간 배우는 것도 많네요. 감사합니다!
secret

이번에는 라즈베리파이에 고정 IP를 할당해서 기기를 껐다 켤 때마다 IP 주소가 바뀌는 불편함을 방지해보자.

그리고 SSH 프로그램을 이용해서 라즈베리파이에 명령어를 입력하는 방법도 함께 다룬다.


본문 내용은 https://www.modmypi.com/blog/tutorial-how-to-give-your-raspberry-pi-a-static-ip-address 이곳의 글을 주로 참조하였다.


아래 과정을 다 따라하고나면 1번 방향으로 동일한 네트워크 내에서 SSH로 접근하는 것과, 2번 방향으로 외부 인터넷망에서 SSH로 접근하는 것을 해결할 수 있다.



# 라즈베리파이 현재 IP 주소 확인하기


지난 글에서 라즈베리파이를 공유기에 랜선으로 꽂아서 연결하는 것을 추천한 바가 있다. 공유기가 라즈베리파이에 할당한 IP 주소를 메인 컴퓨터에서 확인해보자.


윈도우 7 기준으로,

제어판 > 네트워크 및 인터넷 > 네트워크 및 공유센터로 들어가서 메인 컴퓨터가 공유기에 유선랜으로 연결된 경우 '로컬 영역 연결', 무선랜으로 연결된 경우 '무선 네트워크 영역'을 눌러서 연결 상태 창을 연다. 그리고 '자세히'를 눌러서 네트워크 연결 세부 정보를 확인한다. (스크린샷은 연구실에서 찍은 거라 로컬 연결 영역이고, 집에서 노트북으로 연결했을 때는 약간 내용이 많이 나오네..)



그러면 거기서 'IPv4 기본 게이트웨이' 라고 적힌 곳의 IP 주소를 웹브라우저에 입력한다. 공유기 설정에 접근하기 위해서이다.



주소창에 원래 있던 IP 주소와 외부 IP주소는 가렸다. 혹시나 모를 보안을 위해서 ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ 보안은 쥐뿔도 모르긴 하지만.


사용하는 공유기에 따라서 화면은 다를 수 있다. '관리도구' 등의 메뉴를 눌러 공유기 설정으로 들어간다.


이름은 조금 다를 수 있지만 내부 네트워크를 관리하는 곳에서 raspberrypi 라는 기기에 어떤 IP 주소가 할당되었는지 볼 수 있다.




# 포트 포워딩


밑에서 사용할 PuTTY같은 SSH 서비스로 라즈베리파이에 접근하고 싶거나, 우리의 목표인 FTP 연결을 외부 네트워크에서도 연결하고 싶다면 포트 포워딩은 필수이다. 포트 포워딩은 네트워크 외부에서 공유기 IP를 쳐서 들어왔을 때 특정 포트로 접근을 하면, 요청한 포트 번호에 따라서 내부 네트워크에 연결된 기기들에 할당된 내부 IP 주소로 연결해주는 것이다.ㄴ


공유기 설정에 들어간 김에 한 번에 해결하자.


규칙이름은 원하는대로 (22번 포트이면 사실 ssh 뭐시기라고 적는게 나았을텐데 이제와서 바꾸기 귀찮으니 그냥 뒀다.) 쓰고, 내부 IP 주소는 라즈베리파이가 할당받은 IP 주소를 적는다. 나는 TCP, UDP 각각 따로 규칙 설정을 했는데 TCP/UDP 자동으로 세팅해주는 거도 사실 상관 없을 것 같다. 내부 포트 외부 포트는 별다른 일이 없다면(다른 서비스랑 충돌하거나 그러지 않는 이상) 동일하게 세팅하면 된다.


SSH 서비스는 주로 22포트가 기본이므로 22번 포트, FTP는 주로 21포트가 기본이므로 21번 포트를 각각 포트 포워딩 설정해준다.



마지막으로 공유기 설정 창을 닫기 전에 외부 IP 주소를 확인하고 끄자. 이 IP 주소를 알고 있으면 외부 IP 주소와 방금 설정한 포트포워딩을 이용해서 전세계 어디서든 라즈베리파이에 접근할 수 있다.



# 라즈베리파이 터미널 접속


라즈베리파이에 모니터와 키보드를 연결해서 쓰는 중이라면 이부분은 넘어가도 된다.

다른 메인컴퓨터에서 접속중이라면 SSH 접속 프로그램인 PuTTY 프로그램을 켜자.



상세 설정은 나중에 하더라도 일단 라즈베리파이 본체에 접근하려면 Host Name (or IP address) 라고 되어있는 부분에 아까 확인한 라즈베리파이의 IP 주소를 적는다. 포트나 커넥트 타입을 확인한다.


이 때 라즈베리파이의 IP는 공유기가 할당한 내부 IP 주소를 적어도 되고, 이제 포트 포워딩을 마쳤으므로 공유기 자체가 가지고 있는 외부 IP 주소를 적어도 된다. 22포트로 접근을 하면 자동으로 라즈베리파이에 연결되게 해뒀으니까


PuTTY 켤 때마다 아이피주소 적는게 번거롭다면 IP 주소를 쓴 다음에 Saved Sessions 부분에 적당한 이름을 적고 Save를 누르면 저장을 한다. 다음번에 설정을 불러올 때는 Load를 누르면 된다.


그리고 Open을 눌러보자.


login as: 라고 뜨는 부분에는 아이디 (기본으로 pi) 입력하고 엔터,

pi@<IP address>'s password: 라고 뜨는 부분에는 비밀번호 (기본으로 raspberrypi) 입력하고 엔터.

비밀번호 부분에 몇글자 적었는지 안보이더라도 잘 입력 중이니 엔터만 잘 치면 된다.


제대로 잘 입력했다면 로그인에 성공하고 명령어를 입력할 준비가 다 된 것이다.





# 현재 네트워크 정보 확인


네트워크 설정을 바꾸기 전에, 명령어 입력하는 연습도 할겸 라즈베리파이의 현재 네트워크 연결 정보를 확인해보자.


(아래 스크린샷들은 위에 링크한 참조 페이지에서 퍼왔다.)


ifconfig



나는 랜선으로 연결한 상태이기 때문에 eth0으로 잡혀있는 것을 볼 수 있다.

여기서 주목할 정보는 다음과 같다. (적어두라는 뜻이다.)


inet address: 라즈베리파이의 현재 IP 주소

Bcast: broadcast IP range

Mask: Subnet Mask address


netstat -nr



여기서는 GateWay, Destination 정보를 적어둔다.



# 네트워크 설정 변경해서 고정 IP 할당


라즈베리파이의 네트워크 설정은 /etc/network/interfaces 에 저장되어있다. nano 편집기를 써서 편집을 해보자. 그리고 이런 중요한 설정 파일은 관리자 권한이어야 편집이 가능하다. superuser 권한을 얻을 수 있도록 sudo를 붙여서 실행하자.


터미널에 다음과 같은 명령어를 입력한다.


sudo nano /etc/network/interfaces


그러면 화면에 다음과 같은 내용이 나온다.


이걸 아래와 같이 바꾸자. 


address, netmask, network, broadcast, gateway에 집어넣을 값의 설명은 다음과 같다.


address : 할당할 내부 IP 주소 (공유기에서 확인한)

netmask : ifconfig에서 나온 Mask

network : netstat -nr에서 나온 Destination

broadcast : ifconfig에서 나온 Bcast

gateway : netstat -nr에서 나온 공유기 Gateway


덧.

아마 무선으로 하려면 iface wlan0 inet manual 이라고 써진 부분을 위로 올려서 

iface lo inet loopback 밑에 iface wlan0 inet static 이라고 쓰고 나머지 비슷하게 작성하면 되지 않을까 한다.

직접 테스트해본 것은 아니므로 제대로 안된다면 다른 글을 참조하길 바란다. 불친절하지만 어쩔수 없..


이렇게 해두고 Ctrl+O 를 누르면 저장 (^ 표시가 Ctrl 키를 의미), Ctrl+X를 누르면 종료이다. 굳이 저장 후 종료하지 않아도 파일이 변경된 상태에서 종료하면 저장할 것인지 물어보긴 한다.


그리고 터미널에 sudo reboot 입력해서 재부팅하고 나면 라즈베리파이에 동일한 IP주소가 할당되는 것을 확인할 수 있다.

이로써 라즈베리파이에 고정 아이피 할당하는 단계가 끝났다. 여기까지 따라왔다면 축하한다.


WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

받은 트랙백이 없고 , 댓글  6개가 달렸습니다.
  1. putty 로 오픈 했는데 아무글자도 안뜨네요 그러다가 타임아웃되고
    ip는 맞게 해놨는데 뭐가 문제일까요?
    • 아 해결했습니다 내부IP말고 외부 IP로 오픈하니 열리네요.
      좋은 정보감사합니다
  2. 지나가던 선비 2017.01.19 20:04 신고
    putty로 라즈베리파이를 열 때 Network error: connection refused 라고 오류가 발생하는데 왜 그런거죠?
    • 라즈베리파이가 인터넷 연결이 제대로 안되어있거나 해서 접속할 대상을 못찾은 것 같이 보이네요. 번거로우시더라도 모니터를 연결하고 gui 환경에서 확인해보시는 것도 괜찮을 것 같습니다.
  3. 자세한 포스팅에 감사합니다.
    언제 답변이 달릴지는 모르겠지만 질문드립니다.

    putty로는 현재라즈베리파이와 동일 네트워크상에 있는 pc로 라즈베리 파이에 접속도 가능하고 외부 ip로도 22번 포트를 통해 ssh접속이 가능한대...

    동일한 조건으로 라즈베리파이와 동일 네트워크에 있는 pc에서는 내부 ip:1000(80포트를 1000으로변경함, webpage)로는 접속이 가능하지만 외부 ip를 통해 접속이 불가한대 어떤 설정을 어디서 추가로 해줘야하나요.?

    다른 네트워크에서는 공인 ip:1000포트로 접속이 되기때문에 포트포워딩 문제는 아닌것 같습니다.

    제 네트워크구성은 아래와 같습니다.

    메인 공유기 (BTv) ->
    라즈베리파이(무선 192.168.25.13) (와이파이로 ip세팅함)
    노트북 192.168.25.4 (와이파이 이용)
    애니게이트 유무선 공유기

    메인 공유기 아래 3개의 장치가.같은 네트워크로 구성되어있습니다.
    • 확인이 늦었습니다 ㅎㅎ;

      세 번째 문단이 조금 이해가 안돼서 다시 질문드립니다.
      putty 이용해서 ssh 접속하는 것은 내/외부 IP 모두 정상적으로 접근이 되는데,
      웹브라우저를 이용해서 (1000번 포트로) 접속을 하면 내부 IP로만 접근이 되고 외부 IP로는 접근이 안된다는 것인가요?

      혹시 https://iptime.com/iptime/?page_id=174&nType=UFFscUh5dURlaTNsU1BwZGlNV2czcWpRb3B1QldXK21aUXoza1VRdlB0UFZjN012UUhUejZKa1ZDNitEWWU5LzVHa1dYVDlncG9LNW12TWloa3NIVENPd2FWa0xHNzV5S1ZnZFJiRm8yWUFyOWVWejJSOC9yaVhEWTUrOXlveGZmdU4zV0VnU0MyTm1TajZEaTB5RmpUZElGY3pPczFnVk9Cb05WRmpENGc9PQ==
      이 글의 증상과 비슷한 것인지 확인 부탁드릴게요.
secret