미니PC NAS 만들기 우분투 서버 Samba Tailscale 외부접속까지

이 블로그에서는 그동안 RTX 3060으로 로컬 LLM을 돌리는 글을 주로 썼는데 이번엔 방향이 좀 다릅니다.
집에 굴러다니던 미니PC로 미니PC NAS를 만들어봤습니다.


ASUS PN40, 셀러론 J4125에 램 8GB, SSD 128GB입니다.
몇 년 전에 우분투를 깔아뒀는데 그 뒤로 켜본 적이 없습니다.

ASUS PN40 미니PC에 전원과 랜선이 연결된 모습

손바닥만 합니다. 소비전력도 10W 남짓이라 24시간 켜둬도 부담이 없습니다.
미니PC NAS로 쓰기엔 오히려 이런 게 낫습니다.

이걸로 미니PC NAS를 만들어보기로 했습니다.
윈도우 탐색기에 주소만 치면 폴더처럼 열리고, 밖에서도 접속되는 그런 거요.
가능할까요?

결론부터 말하면 가능합니다. 명령어도 몇 줄 안 됩니다.
다만 중간에 세 번 막혔고, 그 세 번이 이 글의 핵심입니다.

미니PC NAS 준비물과 전체 구조

먼저 뭘 쓸지 정해야 했습니다. 파일 공유 방식이 여러 개거든요.

방식탐색기 접속드라이브 문자암호화
FTP됨 (폴더 뷰)안 됨평문
WebDAV됨됨HTTPS
SMB(Samba)됨됨암호화

처음엔 FTP 주소를 탐색기에 바로 넣는 방식을 생각했습니다.
그런데 FTP는 비밀번호가 평문으로 날아가고, 윈도우 탐색기가 FTPS를 지원하지 않습니다.
암호화하면 탐색기로 못 붙고, 탐색기로 붙으면 암호화가 안 되는 겁니다.

그래서 Samba로 갔습니다. \\주소\폴더 형태라 생김새만 다르고, 쓰는 건 오히려 더 편합니다.

외부 접속은 테일스케일(Tailscale)입니다.
포트포워딩이나 DDNS 없이 됩니다. 이건 뒤에서 자세히 다루겠습니다.

정리하면 Samba + 테일스케일(Tailscale) 조합입니다.
Samba는 윈도우·아이폰·안드로이드가 전부 기본 지원해서 서버에 하나만 깔면 되고
테일스케일은 공유기를 안 건드려도 밖에서 접속됩니다.
둘 다 무료고, 명령어도 몇 줄 안 됩니다.

미니PC NAS용 우분투 서버 26.04 설치

기존에 깔려 있던 건 20.04였습니다. 그런데 아이디랑 비밀번호를 까먹었습니다.

복구 모드로 들어가서 비번을 바꾸는 방법도 있는데, 그냥 밀기로 했습니다.
20.04는 일반 지원이 끝났고, 안에 뭐가 들었는지도 기억이 안 났거든요.

우분투 공식 사이트에서 26.04 LTS live server를 받았습니다.
지난 4월에 나온 최신 LTS고 2031년까지 지원됩니다.

Rufus로 USB에 굽습니다.

Rufus에서 ubuntu-26.04-live-server-amd64.iso 파일을 16GB USB에 굽는 화면

Desktop 말고 Server를 받아야 합니다.
Desktop은 GUI가 들어 있어서 6GB나 되고, J4125에 올리면 램만 잡아먹습니다.

미니PC NAS에 USB를 꽂고 미니PC를 켠 뒤 바이오스로 들어갑니다.
PN40은 F2 또는 DEL입니다.
부팅 로고가 뜨는 짧은 순간에 눌러야 하니 전원 켜자마자 연타하는 게 확실합니다.

미니PC 바이오스에서 부팅 순서를 UEFI USB Flash Memory로 변경하는 화면

UEFI가 붙은 쪽을 골라야 합니다.

GNU GRUB 부팅 메뉴에서 Try or Install Ubuntu Server 항목이 선택된 화면

여기서 첫 번째를 누르면 설치가 시작됩니다.

삽질 하나. 128GB인데 58GB만 잡혔습니다

설치 마법사는 대부분 그냥 Done을 누르면 됩니다.
언어, 키보드, 네트워크, 프록시… 딱히 건드릴 게 없습니다.

그런데 디스크 화면에서 한 번 걸렸습니다.

Use an entire disk를 고르고 넘어갔더니 요약 화면이 이렇게 나왔습니다.

마운트크기타입
/58.093Gnew LVM logical volume
/boot2.000Gnew partition
/boot/efi1.049Gnew partition

128GB 디스크인데 루트가 58GB밖에 안 잡혔습니다.
아래를 보니 ubuntu-vg 밑에 free space가 그대로 남아 있었습니다.

원인은 LVM이었습니다.
디스크 선택 화면에 Set up this disk as an LVM group이 기본으로 체크돼 있는데,
우분투 설치 관리자는 LVM을 쓸 때 절반만 할당합니다. 나중에 늘릴 수 있게 남겨두는 거죠.

나중에 명령어로 확장할 수도 있지만, 설치 중이라면 그냥 다시 하는 게 빠릅니다.
Back을 눌러 돌아가서 LVM 체크를 해제했습니다.

마운트크기타입
/118.190Gnew partition of local disk
/boot/efi1.049Gnew partition of local disk

58GB에서 118GB가 됐습니다. ubuntu-vg 같은 단어도 사라졌고요.

계정을 만들고 나면 SSH 화면이 나옵니다.
Install OpenSSH server는 반드시 체크하세요.
이걸 켜두면 이후 작업을 노트북에서 원격으로 할 수 있습니다.
안 켜면 미니PC에 모니터와 키보드를 계속 꽂아둬야 합니다.

우분투 서버 설치 진행 화면에 curtin 파티셔닝과 이미지 추출 로그가 출력된 모습

설치는 15분쯤 걸렸습니다. 재부팅할 때 USB를 뽑으면 됩니다.

설치 중에 나온 IP 주소와 계정, 비밀번호는 메모해두세요.
네트워크 설정 화면에 192.168.0.XX 형태로 떴던 그 주소입니다. 뒤에서 계속 씁니다.

SSH로 접속해서 업데이트

윈도우는 PowerShell이나 명령 프롬프트를 열고 치시면 됩니다.
(서버 ip에 맞게 입력해야해요 아래 명령어 XX 부분 서버 ip로 바꾸기)

ssh myuser@192.168.0.XX

처음 접속하면 이런 게 나옵니다.

The authenticity of host '192.168.0.XX' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)?

yes를 입력하고 엔터를 치시면 됩니다. y가 아니라 yes를 다 쳐야 넘어갑니다.
처음 보는 서버라 신원을 확인하는 절차고, 다음부터는 안 물어봅니다.

그다음 비밀번호를 넣으면 접속됩니다. 여기서도 화면에는 아무것도 안 보입니다.

이렇게 프롬프트가 바뀌면 성공입니다.

myuser@homeserver:~$

여기서부터는 미니PC NAS에 모니터가 필요 없습니다.
우분투 서버는 GUI가 없어서 전원과 랜선만 있으면 돌아갑니다!

접속했으면 먼저 업데이트부터 합니다.

sudo apt update && sudo apt upgrade -y
우분투 서버 26.04 SSH 접속 후 apt update와 upgrade 명령을 실행한 터미널 화면

Samba 설치, 미니PC NAS의 핵심입니다

이제 파일 공유를 켭니다. 세 줄인데 하는 일이 각각 다릅니다.

sudo apt install samba -y
sudo mkdir -p /srv/cloud
sudo chown $USER:$USER /srv/cloud

순서대로 Samba 설치, 공유할 폴더 생성, 그 폴더의 주인을 내 계정으로 지정입니다.
세 번째 줄을 빼먹으면 나중에 파일을 못 씁니다. 폴더 주인이 root로 남거든요.

/srv/cloud가 앞으로 파일이 쌓일 곳입니다.
경로는 원하는 대로 바꾸셔도 되는데, 뒤에 나오는 설정에서도 똑같이 맞춰주셔야 합니다.

우분투에서 samba 패키지를 설치하고 srv cloud 폴더를 생성하는 터미널 화면

설치 용량이 60MB밖에 안 됩니다. 가볍습니다.

다음은 Samba 전용 비밀번호입니다. 리눅스 로그인 비번과 별개로 관리됩니다.

sudo smbpasswd -a myuser

위 명령어를 입력하시면 이렇게 나옵니다.

New SMB password:
Retype new SMB password:
Added user myuser.

비밀번호를 입력하고, 한 번 더 입력하라고 나오면 똑같이 입력하시면 됩니다.
비밀번호를 입력해도 화면에는 아무것도 안 보입니다. 정상이니 그냥 치시면 됩니다.

그리고 공유 설정을 추가합니다.

sudo tee -a /etc/samba/smb.conf > /dev/null <<'EOF'

[cloud]
   path = /srv/cloud
   valid users = myuser
   read only = no
   browseable = yes
EOF
smbpasswd로 삼바 사용자를 추가하고 smb.conf에 cloud 공유 설정을 append하는 화면

재시작하고 방화벽을 열어줍니다.

sudo systemctl restart smbd
sudo systemctl enable smbd
sudo ufw allow samba
smbd 서비스를 재시작하고 enable한 뒤 ufw allow samba로 방화벽 규칙을 추가한 화면

미니PC NAS의 서버 쪽 설정은 완료입니다.

뒤에 외부에서 서버로 접속하기 위한 테일스케일(tailscale) 설치가 남아있긴합니다!

미니PC NAS를 윈도우 탐색기에서 접속

탐색기 주소창에 이렇게 칩니다.

윈도우 11 탐색기 주소창에 백슬래시 아이피 cloud 경로를 입력하는 화면
\\192.168.0.XX\cloud

백슬래시 두 개로 시작하는 게 포인트입니다.
슬래시(/)가 아니라 역슬래시(\)이고, 한글 키보드에서는 원화 표시(₩)로 보입니다. 엔터 키 위에 있습니다.

가운데 숫자는 서버 IP입니다. 설치할 때 메모해둔 그 주소인데, 잊으셨으면 서버에서 확인할 수 있습니다.

ip a

여러 줄이 나오는데 eno1 항목의 inet 뒤를 보시면 됩니다.

2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
    inet 192.168.0.XX/24 brd 192.168.0.255 scope global eno1

맨 뒤 cloud는 앞서 smb.conf에 적었던 공유 이름이라 그대로 쓰시면 됩니다.

윈도우 네트워크 자격 증명 입력 창에 삼바 사용자 이름과 암호를 입력하는 화면

아이디와 비밀번호를 물어봅니다. Samba 비번을 넣어야 합니다.

윈도우 탐색기에서 미니PC NAS의 cloud 공유 폴더에 접속 성공한 화면

미니PC NAS가 열렸습니다. 집 안에서 쓰는 미니PC NAS는 여기서 완성입니다.

매번 주소를 치기 귀찮으면 내 PC 우클릭 → 네트워크 드라이브 연결로 Z:를 붙이면 됩니다.

삽질 둘. 테일스케일은 양쪽에 다 깔아야 합니다

여기까지 만든 미니PC NAS는 집 안에서만 됩니다. 밖에서는 192.168.0.XX가 안 열립니다.

보통은 공유기 포트포워딩에 DDNS를 붙이는데, 이건 좀 번거롭습니다.
게다가 SMB 445 포트는 인터넷에 직접 열면 절대 안 되는 포트입니다.
랜섬웨어가 노리는 대표적인 통로거든요.

그래서 테일스케일을 씁니다. 포트를 여는 게 아니라 암호화된 터널을 뚫는 방식이라 이 문제가 없습니다.

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
우분투 서버에 curl 스크립트로 테일스케일을 설치하는 터미널 화면

두 번째 명령을 치면 이런 게 나옵니다.

To authenticate, visit:

        https://login.tailscale.com/a/xxxxxxxxxxxx

이 주소를 복사해서 브라우저에 붙여넣으면 로그인 화면이 뜹니다.
구글, 깃허브, 마이크로소프트, 애플 중 편한 걸로 로그인하시면 되는데, 어느 계정으로 했는지 꼭 기억해두세요.
뒤에서 노트북과 아이폰에도 같은 계정으로 로그인해야 합니다.

로그인이 끝나면 터미널로 돌아옵니다. 서버에 부여된 주소를 확인합니다.

tailscale ip -4

100.x.x.x 형태 주소가 나옵니다. 이게 이 서버의 새 주소입니다.

윈도우 탐색기에 쳐봤는데 안 됩니다.

당연한 거였습니다.
테일스케일은 양쪽에 다 깔려 있어야 합니다. (접속하는곳, 접속 받는 곳 양쪽 )
서버에만 깔면 서버 혼자 가상 네트워크에 들어가 있는 거고
노트북은 그 네트워크 밖이라 100.x.x.x를 아예 모릅니다.

무전기 같은 겁니다. 한쪽만 켜져 있으면 통신이 안 되죠.

윈도우에 테일스케일 클라이언트를 설치하는 설치 마법사 화면

테일스케일 공식 사이트에서 윈도우용을 받아 설치하고, 서버와 같은 계정으로 로그인했습니다.
그러니까 바로 열립니다.

\\100.X.X.X\cloud

공유기는 하나도 안 건드렸습니다.

아이폰에서도 됩니다

아이폰은 별도 앱 없이 기본 파일 앱으로 붙습니다. 물론 테일스케일은 깔아야 합니다.

앱스토어에서 테일스케일 iOS 앱 상세 페이지를 연 아이폰 화면

설치 후 앱 안에서 토글을 켜야 연결됩니다. 로그인만 하고 꺼져 있는 경우가 많습니다.

그다음 파일 앱을 열고 오른쪽 위 ⋯ → 서버에 연결을 누릅니다.
주소는 윈도우와 달리 이렇게 씁니다.

smb://100.X.X.X

윈도우는 \\로 시작했는데 아이폰은 smb://입니다. 같은 프로토콜인데 표기법만 다릅니다.

방문자가 아니라 등록 사용자를 고르고, 이름과 암호에는 아까 smbpasswd로 만든 계정과 비밀번호를 넣으면 됩니다.

아이폰 파일 앱의 서버에 연결 화면에서 등록 사용자를 선택하고 계정을 입력하는 모습

삽질 셋. 아이폰에서 저장 버튼이 비활성화 되어있습니다

연결은 됐습니다. cloud 폴더도 보입니다.
그런데 사진을 저장하려니 저장 버튼이 안 눌립니다.

아이폰 파일 앱에서 cloud 공유 폴더가 읽기 전용으로 표시된 화면

화면 아래를 보니 읽기 전용이라고 떠 있습니다.

서버 권한을 확인해봤습니다.

ls -ld /srv/cloud
drwxr-xr-x 3 myuser myuser 4096 Aug  8 02:25 /srv/cloud

소유자는 멀쩡합니다. 그리고 윈도우에서는 쓰기가 잘 됩니다.
같은 서버, 같은 폴더인데 아이폰만 안 되는 겁니다.

원인은 애플 기기 호환 모듈이었습니다.
macOS와 iOS는 SMB를 쓸 때 파일 메타데이터를 자기들 방식으로 저장하려고 하는데,
Samba 기본 설정에는 그걸 받아줄 준비가 안 돼 있습니다. 그래서 읽기 전용으로 떨어집니다.

smb.conf의 [cloud] 블록을 이렇게 고쳤습니다.

[cloud]
   path = /srv/cloud
   valid users = myuser
   read only = no
   browseable = yes
   create mask = 0664
   directory mask = 0775
   force user = myuser
   vfs objects = fruit streams_xattr
   fruit:metadata = stream
   fruit:encoding = native

핵심은 vfs objects = fruit 한 줄입니다. 이름 그대로 애플 대응 모듈입니다.

sudo systemctl restart smbd

아이폰에서는 반드시 연결을 끊었다가 다시 붙여야 합니다. 설정 변경은 재연결해야 반영됩니다.

다시 붙으니 저장이 됩니다. 읽기 전용 표시도 사라졌습니다.

마지막으로 IP를 고정합니다

여기까지 하면 다 된 것 같지만 하나 남았습니다.

지금 서버는 DHCP로 IP를 받고 있습니다.
공유기가 재시작되거나 임대 시간이 끝나면 192.168.0.XX가 다른 번호로 바뀝니다.
그러면 어느 날 갑자기 집 안 접속이 안 됩니다.

TP-Link 공유기 DHCP 서버 설정에서 주소 예약 목록이 비어 있는 화면

공유기 관리자 페이지의 주소 예약이 비어 있습니다. 여기에 등록합니다.

참고로 DHCP 클라이언트 목록에 같은 MAC이 두 번 나왔습니다.
재설치 전 20.04가 쓰던 .YY가 임대 목록에 남아 있어서입니다. 예약을 걸면 정리됩니다.

TP-Link 예약 항목 추가 창에서 MAC 주소와 고정 IP 주소를 입력하는 화면

연결된 장치보기로 고르면 MAC이 자동으로 채워집니다.
다만 IP가 옛날 .YY로 들어올 수 있으니 직접 확인하고 고쳐야 합니다.

TP-Link 공유기에서 홈서버 MAC에 고정 IP 예약이 등록 완료된 화면

등록했습니다. 이제 재부팅해도 정전이 나도 항상 같은 주소를 받습니다.

서버에서 netplan으로 직접 고정하는 방법도 있는데, 공유기 쪽을 권합니다.
서버에서 직접 잡으면 공유기가 그 주소를 다른 기기에 나눠줘서 충돌이 날 수 있거든요.

미니PC NAS 만들기, 정리하면

미니PC NAS 만들기, 우분투 서버에 명령어 몇 줄과 테일스케일이면 됩니다.

1. 어려운 개념은 없습니다. Samba 설치가 세 줄, 설정이 다섯 줄, 테일스케일이 두 줄입니다. 대신 우분투 설치와 잔손질에 시간이 걸립니다. 처음이면 반나절 잡으시면 넉넉합니다.

2. LVM은 절반만 할당합니다. 128GB 디스크에 58GB만 잡혔습니다. 설치 중이라면 Back으로 돌아가 LVM 체크를 해제하는 게 제일 빠릅니다. 118GB로 늘었습니다.

3. 테일스케일은 양쪽에 다 깔아야 합니다. 서버에만 깔고 왜 안 되냐고 한참 헤맸습니다. 접속하려는 기기에도 같은 계정으로 로그인해야 합니다.

4. 아이폰은 vfs objects = fruit가 필요합니다. 윈도우는 되는데 아이폰만 읽기 전용으로 뜨면 이걸 의심하면 됩니다. 설정 후 재연결해야 반영됩니다.

5. IP 고정은 잊지 마세요. 안 하면 멀쩡히 쓰다가 어느 날 갑자기 끊깁니다. 원인 찾기도 어렵고요.

미니PC NAS의 실제 저장 공간이 궁금해서 확인해봤습니다.

df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       116G  7.7G  103G   7% /

103GB 쓸 수 있습니다. 128GB 표기 디스크가 실제로는 116G로 잡히고, 우분투 서버가 7.7G를 씁니다.

PN40에는 2.5인치 SATA 베이가 있으니 부족해지면 디스크를 하나 더 넣으면 됩니다.

사진 자동 백업 같은 게 필요해지면 이 미니PC NAS 위에 Nextcloud를 얹을 수도 있습니다.
지금 구조 위에 추가하는 거라 처음부터 다시 할 일은 없습니다.

이상 글 마치겠습니다!

위로 스크롤