Nếu bạn đang có một PC cũ, mini PC hoặc laptop dư không dùng tới, cách tận dụng thực tế nhất thường không phải cài thêm app linh tinh mà là biến nó thành một NAS lưu trữ. Với Ubuntu, bạn có thể chia bài toán này thành 2 lớp rất rõ:
- Samba để dùng như ổ mạng trong cùng LAN
- WebDAV để truy cập hoặc chia sẻ file từ ngoài Internet
Cách chia này hợp lý hơn việc cố public SMB/Samba ra ngoài, vì Samba rất tiện trong mạng nội bộ nhưng không phải giao thức nên mở thẳng ra Internet.
Khi nào cách này đáng dùng?
Mô hình này hợp nếu bạn cần:
- một chỗ gom file chung cho máy bàn, laptop và điện thoại
- thư mục media hoặc backup trong nhà
- chỗ để ISO, project archive, dữ liệu camera hoặc ảnh
- một điểm chia sẻ file ra ngoài mà không cần gửi file thủ công
Nó đặc biệt hợp với:
- PC cũ còn ổn nhưng không đủ mạnh để chạy nhiều VM nặng
- máy có vài ổ HDD cũ muốn tận dụng lại
- homelab gia đình cần một file server đơn giản
Kết luận nhanh trước khi bắt đầu
Nếu chỉ cần nhớ flow ngắn:
- cài Ubuntu Server
- gắn ổ đĩa và mount cố định
- bật Samba cho LAN
- không public Samba ra Internet
- dùng WebDAV qua HTTPS để truy cập từ ngoài
- tách riêng thư mục nội bộ và thư mục public
Nếu làm theo hướng này, bạn sẽ dễ quản lý quyền hơn và ít tự tạo lỗ hổng hơn.
Kiến trúc nên dùng
Thay vì dùng một giao thức cho mọi thứ, nên tách:
Samba/SMB: cho máy trong mạng nội bộWebDAV: cho nhu cầu truy cập từ ngoài hoặc chia sẻ có kiểm soát
Ví dụ một layout dễ sống lâu:
/srv/storage/family-share-> share qua Samba trong LAN/srv/storage/media-> share qua Samba cho TV, máy bàn, laptop/srv/storage/public-dav-> mount WebDAV từ bên ngoài
Điểm quan trọng là:
- không public port SMB
445 - chỉ public WebDAV qua HTTPS
Bước 1: Cài Ubuntu và chuẩn bị ổ đĩa
Nếu đây là NAS tự dựng, Ubuntu Server thường hợp hơn Ubuntu Desktop vì nhẹ hơn và ít thành phần dư.
Sau khi cài xong, kiểm tra ổ đĩa:
lsblk
Giả sử ổ dữ liệu là /dev/sdb.
Tạo partition và format:
sudo parted /dev/sdb --script mklabel gpt
sudo parted /dev/sdb --script mkpart primary ext4 0% 100%
sudo mkfs.ext4 /dev/sdb1
Tạo thư mục mount:
sudo mkdir -p /srv/storage
Lấy UUID:
sudo blkid /dev/sdb1
Ví dụ output:
/dev/sdb1: UUID="xxxx-xxxx" TYPE="ext4"
Thêm vào /etc/fstab:
UUID=xxxx-xxxx /srv/storage ext4 defaults,nofail 0 2
Mount lại:
sudo mount -a
df -h
Bước 2: Tạo cấu trúc thư mục và quyền cơ bản
Tạo thư mục:
sudo mkdir -p /srv/storage/family-share
sudo mkdir -p /srv/storage/media
sudo mkdir -p /srv/storage/public-dav
Tạo group dùng chung:
sudo groupadd nas-share
sudo usermod -aG nas-share $USER
Gán quyền:
sudo chown -R root:nas-share /srv/storage/family-share /srv/storage/media
sudo chmod -R 2775 /srv/storage/family-share /srv/storage/media
sudo chown -R www-data:www-data /srv/storage/public-dav
sudo chmod -R 755 /srv/storage/public-dav
Ở đây mình tách luôn:
- thư mục Samba thuộc group nội bộ
- thư mục WebDAV thuộc web server
Như vậy sau này bạn không bị lẫn data nội bộ với data public.
Bước 3: Cài Samba để dùng chung trong LAN
Cài Samba:
sudo apt update
sudo apt install samba -y
Backup config gốc:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
Thêm vào cuối file /etc/samba/smb.conf:
[family-share]
path = /srv/storage/family-share
browseable = yes
read only = no
guest ok = no
valid users = @nas-share
force group = nas-share
create mask = 0664
directory mask = 2775
[media]
path = /srv/storage/media
browseable = yes
read only = no
guest ok = no
valid users = @nas-share
force group = nas-share
create mask = 0664
directory mask = 2775
Tạo user Samba:
sudo smbpasswd -a your-username
Kiểm tra config:
testparm
Restart Samba:
sudo systemctl restart smbd
sudo systemctl enable smbd
Bước 4: Truy cập Samba trong mạng nội bộ
Trên Windows
Mở Explorer:
\\IP_MAY_NAS\family-share
Ví dụ:
\\192.168.1.20\family-share
Trên Linux
sudo mount -t cifs //192.168.1.20/family-share /mnt/family-share \
-o username=your-username,uid=1000,gid=1000
Trên macOS
Vào Finder -> Go -> Connect to Server:
smb://192.168.1.20/family-share
Bước 5: Chỉ mở Samba trong LAN, không public ra Internet
Đây là chỗ nhiều người cấu hình sai.
Samba chỉ nên mở trong mạng nội bộ. Nếu bạn dùng ufw, chỉ allow subnet LAN:
sudo ufw allow from 192.168.1.0/24 to any app Samba
Hoặc tối thiểu:
sudo ufw allow from 192.168.1.0/24 to any port 445 proto tcp
sudo ufw allow from 192.168.1.0/24 to any port 139 proto tcp
Không nên:
- forward port
445trên router - mở SMB ra public IP
- dùng Samba như cách chia sẻ file từ ngoài Internet
Nếu bạn cần dùng từ xa, WebDAV hoặc VPN hợp lý hơn nhiều.
Bước 6: Cài WebDAV để truy cập từ ngoài
Một cách khá gọn trên Ubuntu là dùng Apache + WebDAV.
Cài gói:
sudo apt install apache2 apache2-utils -y
Bật module:
sudo a2enmod dav
sudo a2enmod dav_fs
sudo a2enmod auth_digest
Tạo file password:
sudo htdigest -c /etc/apache2/webdav.password "webdav" your-username
Tạo site config:
sudo nano /etc/apache2/sites-available/webdav.conf
Nội dung:
Alias /dav /srv/storage/public-dav
<Directory /srv/storage/public-dav>
DAV On
Options Indexes
AuthType Digest
AuthName "webdav"
AuthUserFile /etc/apache2/webdav.password
Require valid-user
DirectoryIndex disabled
</Directory>
Enable site:
sudo a2ensite webdav.conf
sudo apache2ctl configtest
sudo systemctl reload apache2
Lúc này trong LAN bạn có thể test:
curl -i http://YOUR_NAS_IP/dav
Bước 7: Public WebDAV qua HTTPS
Nếu bạn public WebDAV ra ngoài, nên đi qua HTTPS ngay từ đầu.
Có 2 hướng phổ biến:
- public trực tiếp qua domain + reverse proxy + SSL
- dùng Cloudflare Tunnel nếu không mở được port router
Trường hợp mở được port router
Forward:
80443
DNS:
dav.example.com -> IP public nhà bạn
Tạo vhost Apache hoặc Nginx cho domain đó, rồi cấp SSL bằng Let's Encrypt.
Ví dụ với Certbot:
sudo apt install certbot python3-certbot-apache -y
sudo certbot --apache -d dav.example.com
Sau đó URL dùng từ ngoài sẽ là:
https://dav.example.com/dav
Trường hợp không mở được port
Nếu bạn bị CGNAT hoặc router không cho port forwarding, dùng Cloudflare Tunnel sẽ hợp hơn. Khi đó:
- Apache vẫn chạy local
- Cloudflare Tunnel public
http://localhostra domain - người dùng ngoài truy cập qua HTTPS của Cloudflare
Bước 8: Kết nối WebDAV từ thiết bị khác
Trên Windows
Có thể map như network location hoặc dùng app hỗ trợ WebDAV tốt hơn.
URL:
https://dav.example.com/dav
Trên điện thoại
Dùng các app như:
- FolderSync
- Solid Explorer
- FE File Explorer
- Documents
Trên Linux
Bạn có thể mount bằng davfs2:
sudo apt install davfs2 -y
sudo mkdir -p /mnt/webdav
sudo mount -t davfs https://dav.example.com/dav /mnt/webdav
Những chỗ dễ sai nhất
1. Dùng chung một thư mục cho cả Samba lẫn public WebDAV
Làm vậy rất dễ loạn quyền. Tách riêng thư mục LAN và thư mục public gần như luôn là lựa chọn dễ quản lý hơn.
2. Public thẳng Samba
Đây là lỗi phổ biến và khá nguy hiểm. Nếu muốn truy cập file từ ngoài:
- dùng WebDAV
- hoặc VPN
đừng mở 445 ra Internet.
3. WebDAV chạy HTTP nhưng quên HTTPS
Nếu gửi credential qua HTTP thuần, bạn đang tự tạo rủi ro không cần thiết. Public WebDAV thì gần như luôn phải có HTTPS.
4. Chỉ mở router nhưng quên firewall local
Nhiều người mở port ngoài router rồi nhưng ufw hoặc Apache config vẫn chặn ở trong máy.
5. Ổ đĩa mount tay được nhưng reboot xong mất
Nếu không thêm fstab, máy restart là share biến mất hoặc mount path đổi.
Khi nào không nên dùng cách này?
Không nên chọn mô hình này nếu bạn cần:
- RAID đẹp, snapshot và UI quản trị thân thiện như Synology
- nhiều user non-tech tự dùng mà không muốn đụng terminal
- đồng bộ ảnh, app mobile và permission layer hoàn chỉnh ngay từ đầu
Khi đó, Synology hoặc OpenMediaVault có thể đỡ tốn công hơn.
Kết luận
PC cũ hoàn toàn có thể biến thành NAS dùng ổn nếu bạn đi theo đúng 2 lớp:
- Samba cho mạng nội bộ
- WebDAV cho truy cập public
Điểm quan trọng không phải là cài được service, mà là chia đúng vai trò:
- cái gì nội bộ thì để nội bộ
- cái gì public thì đi qua HTTPS
- không trộn thư mục public với thư mục LAN
Chỉ cần làm gọn như vậy, một chiếc PC cũ cũng đủ làm file server gia đình hoặc homelab rất ổn.