Vì sao Tailscale là lựa chọn dễ thở nhất cho NAS Synology
Nhu cầu kinh điển: đi công tác, ngồi quán cà phê, thèm mở File Station hay Photos trên NAS ở nhà mà không phải đục lỗ router. Ba cách quen thuộc để làm chuyện này là mở port forward + QuickConnect của Synology, tự dựng WireGuard qua gói VPN Server, hoặc dùng Tailscale. Cách đầu — dân rành bảo mật nghe xong là rùng mình, vì mở port thẳng ra internet chẳng khác nào dán tờ giấy "nhà không khóa cửa" ngay trước cổng.
Tailscale bản chất cũng chạy trên nền WireGuard, nhưng nó ôm hết phần đau đầu nhất: trao đổi key, NAT traversal, định tuyến peer-to-peer. Bạn chỉ việc đăng nhập, các thiết bị trong tailnet tự thấy nhau qua một dải IP riêng (100.x.x.x), không cần mở port nào trên router cả.
Trên Synology, Tailscale có hẳn gói native trong Package Center — xác nhận tại trang synology.com/dsm/packages/Tailscale và repo GitHub tailscale/tailscale-synology. Cài một cú click, Package Center tự lo cập nhật, khỏi cần bật Container Manager chỉ để chạy một con VPN. Bài này đi theo hướng đó là chính. Docker/Container Manager (kiểu sidecar) chỉ đáng dùng khi bạn muốn từng container ứng dụng (Vaultwarden, Immich, Actual Budget...) có địa chỉ tailnet riêng thay vì dùng chung IP của NAS, hoặc khi NAS thuộc dòng ARM đời cũ không có gói native. Cuối bài có bảng so sánh ba cách để cân nhắc.
Yêu cầu trước khi cài
- DSM 7 (DSM 6 legacy vẫn chạy được, nhưng lên đời 7.x cho lành).
- Kiến trúc CPU: x86_64, armv8/arm64, hoặc arm. Vào Control Panel > Info Center xem dòng CPU của máy trước — vài model ARM đời cũ không có gói native do giới hạn của Go toolchain, dính trường hợp này thì nhảy thẳng xuống phần Docker.
- Một tài khoản Tailscale (đăng nhập qua Google/Microsoft/GitHub SSO, miễn phí cho cá nhân tối đa 100 thiết bị).
Cách 1: Cài Tailscale qua Package Center (khuyến nghị)
Đường ngắn nhất, làm xong trước khi ly cà phê kịp nguội:
- Mở Package Center, gõ "Tailscale" vào ô tìm kiếm.
- Bấm Install. Package Center tự tải và cài, không cần restart NAS.
- Cài xong, bấm Open để mở giao diện package.
- Đăng nhập bằng tài khoản Tailscale (SSO Google/Microsoft/GitHub), rồi bấm Connect.
- Vào
login.tailscale.com/admin, mục Machines, kiểm tra NAS đã lên danh sách với đúng tên hostname.
Vậy là xong phần lõi. NAS giờ có một IP dạng 100.x.x.x, thiết bị nào khác trong tailnet cũng kết nối được tới nó, chẳng cần biết IP công cộng hay port gì cả.
Thêm flags nâng cao: advertise-routes, exit-node
Muốn NAS advertise cả dải mạng LAN (để các thiết bị khác trong tailnet tiện ghé luôn máy in, camera... trong nhà) hoặc làm exit-node, giao diện package lại chẳng có ô nào để nhập flag. Cách xử lý: tạo một script chạy qua Control Panel > Task Scheduler, loại Triggered Task > User-defined script, chạy khi boot-up, nội dung lệnh kiểu:
tailscale up --advertise-routes=192.168.1.0/24 --accept-dnsRoute mới advertise vẫn cần bạn vào admin console duyệt (approve) ở mục Machines thì các thiết bị khác mới dùng được — Tailscale không tự ý mở route hộ bạn.
Cách 2: Docker/Container Manager (sidecar) — khi nào cần
Cách này phức tạp hơn hẳn, chỉ nên đụng tới khi có lý do cụ thể: cấp danh tính tailnet riêng cho từng container, hoặc NAS không có gói native. Container Manager thuần GUI không hỗ trợ cấu hình cap_add hay map device — bắt buộc phải dùng tính năng Project (docker-compose), có từ DSM 7.2 trở lên.
Tạo file docker-compose.yml trong /volume1/docker/tailscale/, ví dụ cho một sidecar dùng chung network với app Vaultwarden:
services:Vài điểm mấu chốt trong file này:
tailscale:
image: tailscale/tailscale:v1.76.1
hostname: nas-vaultwarden
environment:
- TS_AUTHKEY=tskey-auth-xxxxxxxxxx
- TS_STATE_DIR=/var/lib/tailscale
- TS_HOSTNAME=nas-vaultwarden
- TS_ACCEPT_DNS=true
volumes:
- /volume1/docker/tailscale/state:/var/lib/tailscale
devices:
- /dev/net/tun:/dev/net/tun
cap_add:
- NET_ADMIN
restart: unless-stopped
vaultwarden:
image: vaultwarden/server:latest
network_mode: service:tailscale
depends_on:
- tailscale
restart: unless-stopped
- Pin version cụ thể (ví dụ
:v1.76.1) thay vì:latest— image mới lâu lâu đổi behavior, pin lại cho chắc, kẻo container tự pull bản mới lúc nửa đêm rồi sáng ra NAS dở chứng chẳng hiểu vì sao. TS_STATE_DIRphải trỏ ra volume ngoài (/volume1/docker/...), đừng để mặc định nằm trong container.network_mode: service:tailscaleở service ứng dụng — nghĩa là Vaultwarden dùng chung network namespace với container Tailscale, nên nó có luôn IP tailnet riêng, tách biệt khỏi IP chính của NAS.- Nếu NAS không cấp được
/dev/net/tun(một số model DSM khóa), thêmTS_USERSPACE=truevào environment thay vìdevices+cap_add— chạy chế độ userspace networking, chậm hơn chút nhưng không cần quyền kernel-level.
Import Project này trong Container Manager > Project > Create, chọn "Create docker-compose.yml" và paste nội dung trên, hoặc trỏ tới file đã lưu sẵn.
Bật MagicDNS và HTTPS Certificates
IP 100.x.x.x gõ được nhưng nhớ nổi mới lạ. Vào admin console, mục DNS (login.tailscale.com/admin/dns), bật MagicDNS và HTTPS Certificates. Sau đó NAS truy cập được qua tên dạng nas.ten-tailnet.ts.net, kèm cert Let's Encrypt tự động — cần thiết nếu bạn có reverse proxy hay app nào đòi TLS hợp lệ thay vì cert tự ký.
Cài trên điện thoại và thiết bị khác
- Cài app Tailscale trên App Store/Google Play.
- Đăng nhập cùng tài khoản đã dùng trên NAS.
- Bật Use Tailscale DNS trong cài đặt app để MagicDNS hoạt động trên điện thoại.
- Test bằng cách gõ IP 100.x hoặc tên MagicDNS vào trình duyệt, thử mở DSM, File Station, Photos xem vào được không.
Giới hạn quyền truy cập bằng ACL
Mặc định, mọi thiết bị trong tailnet thấy nhau tuốt — tiện cho cá nhân nhưng rủi ro nếu bạn chia sẻ tailnet cho vài nhân viên hay bạn bè. Vào admin console, mục Access Controls, viết ACL giới hạn kiểu chỉ nhóm "admin" mới truy cập được NAS, nhóm khác coi như nó không tồn tại. Bước này hay bị bỏ qua vì "chạy được là thôi", nhưng với NAS chứa dữ liệu công ty thì nên làm ngay từ đầu, đừng đợi có sự cố mới nhớ ra ACL là gì.
Lỗi thường gặp và cách xử lý
- Quên mount volume cho TS_STATE_DIR (chỉ áp dụng cách Docker): mỗi lần container restart, tailscaled coi như thiết bị mới toanh, tạo node mới trong admin console và bắt bạn re-auth lại. Hậu quả là mục Machines rác đầy node cũ chết, nhìn vào cứ tưởng nhà mình bị ai đó âm thầm thêm máy lạ. Fix: luôn mount
TS_STATE_DIRra ngoài volume thật như ví dụ trên, và dọn node cũ trong admin console. - Thiếu NET_ADMIN + /dev/net/tun mà không bật USERSPACE: tailscaled báo lỗi permission denied vì không tạo được network interface. Chọn một trong hai: cấp đủ
cap_add: NET_ADMINvàdevices: /dev/net/tun, hoặc bậtTS_USERSPACE=trueđể né hẳn yêu cầu quyền kernel. - NAS ARM đời cũ không thấy gói Tailscale trong Package Center: đơn giản là kiến trúc CPU không nằm trong danh sách hỗ trợ. Không có cách lách nào ở bước native, chuyển thẳng sang Docker/Container Manager.
- Quên bật MagicDNS + HTTPS Certificates: vẫn truy cập NAS bằng IP nội bộ bình thường, nhưng app nào đòi TLS hợp lệ (reverse proxy, vài dịch vụ tích hợp) sẽ báo lỗi chứng chỉ. Bật hai tùy chọn này trong admin console là hết.
- Dùng một reusable auth key vĩnh viễn cho nhiều container: tiện thật đấy, nhưng key lộ ra là coi như mất kiểm soát toàn bộ tailnet, muốn thu hồi từng thiết bị riêng cũng bó tay. Tạo key có expiry ngắn hoặc ephemeral key cho mỗi container/service.
Bảo mật: đừng để Tailscale chạy song song với lỗ hổng cũ
Có Tailscale rồi thì tắt luôn QuickConnect và port forwarding trên router. Nghe hiển nhiên mà nhiều người vẫn để hai đường vào song song "cho chắc" — thực ra chỉ đang mở rộng bề mặt tấn công vô ích, Tailscale nên là cửa duy nhất.
Bật 2FA cho tài khoản Tailscale (qua provider SSO bạn dùng để đăng nhập). Auth key dùng cho container/thiết bị mới nên có thời hạn ngắn hoặc là ephemeral key, tránh non-expiring key nằm lì trong file compose năm này qua năm khác chờ ngày bị lộ. Nếu là doanh nghiệp nhỏ dùng chung tailnet cho vài nhân viên, gói Tailscale Business đáng cân nhắc vì có SSO tổ chức, audit log, và quản lý thiết bị theo nhóm — quan trọng hơn hẳn khi số người dùng tăng lên chứ không chỉ mỗi bạn với cái NAS ở nhà.
So sánh nhanh: Tailscale native, Docker sidecar, WireGuard native
| Tiêu chí | Tailscale (Package) | Tailscale (Docker sidecar) | WireGuard (VPN Server) |
| ------------------ | ------------------- | -------------------------- | ---------------------- |
| Độ khó setup | Rất dễ | Trung bình-khó | Trung bình |
| Cần mở port router | Không | Không | Có (UDP 51820) |
| Tốn tài nguyên | Thấp | Trung bình | Thấp |
| Tự chủ hạ tầng | Phụ thuộc SaaS | Phụ thuộc SaaS | Hoàn toàn tự chủ |
| Phù hợp nhất | Truy cập toàn NAS | Từng app riêng IP | Không muốn bên thứ 3 | Với nhu cầu phổ biến nhất — mở toàn bộ NAS ra để truy cập từ xa an toàn — gói Tailscale native qua Package Center là lựa chọn hợp lý nhất: ít việc phải làm, ít thứ để hỏng, tự cập nhật. Chỉ lùi về Docker sidecar khi thật sự cần cách ly từng app, và chỉ chuyển qua WireGuard tự dựng khi có lý do rõ ràng để không muốn phụ thuộc control-plane của bên thứ ba.



No comments yet