- Tailscale là mesh VPN trên nền WireGuard, install 1 lệnh, không cần config certificate.
- 1 VPS hub làm subnet router + exit node giúp team remote truy cập DB nội bộ và browse qua IP cố định.
- MagicDNS đặt hostname dễ nhớ thay IP, ACL kiểm soát ai vào server nào.
- SSO với Google/Microsoft/Github, không cần quản lý password riêng cho VPN.
- Free tier 100 thiết bị, đủ cho startup dưới 30 người, không cần Tailscale paid plan.
Startup 15 người, 8 dev WFH, 4 PM ở văn phòng, 3 freelancer ở 3 nước. Tất cả cần truy cập: Postgres staging (VPS không expose public), Grafana nội bộ (chỉ allow IP văn phòng), Gitea (private), shared file server, RDP máy Windows dev. OpenVPN cũ chậm, hay drop, config khó, không SSO. WireGuard manual config 15 device đau đầu. Tailscale: 1 lệnh cài, 1 click SSO, mọi máy trong "tailnet" thấy nhau như cùng LAN.
Bài này hướng dẫn setup Tailscale cho remote team thực tế: cài client trên 15 device, đặt 1 VPS làm hub (subnet router + exit node), config MagicDNS, ACL phân quyền, monitoring. Sau 30 phút bạn có VPN production-ready không tốn ssh tunneling khổ sở nữa.
Tailscale là gì? Khác WireGuard thuần thế nào?
Tailscale là wrapper thương mại quanh WireGuard, thêm:
- Coordination server (Tailscale cloud) trao key giữa các peer tự động.
- NAT traversal: 2 peer sau NAT khác nhau vẫn kết nối trực tiếp.
- MagicDNS: hostname dễ nhớ thay vì 100.x.y.z.
- SSO: login Google/Microsoft/Github/Okta thay vì manage cert.
- ACL: file JSON khai báo ai vào server nào, port nào.
- Admin console: web UI quản lý devices, key expiry, audit log.
- Client cho mọi OS: Mac, Windows, Linux, iOS, Android, Synology, Unifi.
WireGuard thuần (hoặc tự host wireguard-ui) phù hợp khi muốn 100% self-host, không trust công ty Tailscale. Đánh đổi: setup 5-10x công sức, không có MagicDNS, không SSO native. Hầu hết startup chọn Tailscale free hoặc trả phí.
Kiến trúc với 1 VPS hub
+----------+ +----------+ +-----------+
| Macbook | | iPhone | | Windows |
| (dev) | | (PM) | | (analyst) |
+----+-----+ +----+-----+ +-----+-----+
| | |
v v v
(Tailscale tailnet)
|
+------+-------+
| VPS hub |
| tailscale-up |
| --advertise-routes=10.0.0.0/24
| --advertise-exit-node
+------+-------+
|
+--------+--------+
| |
+----v----+ +-----v-----+
| Postgres| | Gitea |
| 10.0.0.5| | 10.0.0.6 |
+---------+ +-----------+
1 VPS đứng giữa làm "subnet router" - advertise dải IP nội bộ 10.0.0.0/24 cho cả tailnet. Mọi device join tailnet truy cập 10.0.0.5 (Postgres) như đang trong LAN. Hub cũng làm "exit node" để route internet qua IP VPS khi cần (vd geo-restriction).
Setup tài khoản Tailscale
- Vào
tailscale.com, click Sign Up, chọn login Google Workspace (hoặc Github/Microsoft) bằng email công ty. - Tạo "tailnet" mặc định theo domain công ty (vd
example.ts.net). - Vào Admin Console -> Settings -> User Management -> bật "Allow members from domain @your-domain.com" tự động join.
- Bật MagicDNS: Settings -> DNS -> Override local DNS toggle ON.
- Tạo Auth Key cho server: Settings -> Keys -> Generate auth key, ephemeral=false, preauthorized=true, expire=90 ngày, tag=tag:server.
Cài Tailscale trên VPS hub
# Ubuntu 22/24 hoặc Debian 12/13
curl -fsSL https://tailscale.com/install.sh | sh
# AlmaLinux 9
sudo dnf config-manager --add-repo https://pkgs.tailscale.com/stable/centos/9/tailscale.repo
sudo dnf install -y tailscale
sudo systemctl enable --now tailscaled
# Bật IP forwarding (cho subnet router và exit node)
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
# Join tailnet với cả subnet router + exit node
sudo tailscale up
--authkey tskey-auth-...
--advertise-routes=10.0.0.0/24
--advertise-exit-node
--hostname=hub-vn
# Kiểm tra
tailscale status
tailscale ip -4
Sau đó vào Admin Console, click vào device "hub-vn", duyệt route 10.0.0.0/24 và exit node. Hai bước duyệt này là bắt buộc, tailnet không nhận route tự động vì lý do bảo mật.
Cài client trên team
- Mac: tải app từ App Store hoặc tailscale.com, login Google SSO, xong.
- Windows: tải installer, login, xong.
- Linux:
curl -fsSL https://tailscale.com/install.sh | shrồisudo tailscale up, browser mở SSO. - iPhone/Android: tải app store, login SSO.
- Tự động enroll: với Google Workspace, IT push app qua MDM, user mở là đã login sẵn.
Sau khi cài, tailscale tự lấy IP 100.x.y.z trong tailnet. Test bằng tailscale ping macbook-duy hoặc ping macbook-duy.tailnet.ts.net (MagicDNS).
Truy cập subnet nội bộ qua hub
Khi VPS hub đã advertise 10.0.0.0/24, mọi device trong tailnet (sau khi accept route) có thể ping IP nội bộ:
# Bật accept route trên client Linux
sudo tailscale up --accept-routes
# Mac/Windows: tự động khi route được approve admin console
# Truy cập Postgres nội bộ
psql -h 10.0.0.5 -U app -d production
# Hoặc dùng hostname rút gọn nếu add DNS record nội bộ
psql -h db-staging.internal -U app -d production
Không cần OpenVPN, không cần ssh -L tunnel, không cần expose Postgres ra Internet. Bảo mật + tiện. Sếp ở Singapore vẫn query DB Hà Nội như đang ngồi cạnh.
Exit node cho geo-restriction
Dev WFH ở nước ngoài cần truy cập 1 site chỉ open cho IP VN, hoặc demo cho khách thấy giao diện theo IP VN. Bật exit node:
# Trên Mac: app -> menu -> Exit Node -> chọn hub-vn
# Trên Linux:
sudo tailscale up --exit-node=hub-vn
# Verify IP
curl ifconfig.me # phải ra IP VPS hub-vn
Mọi traffic Internet đi qua hub VPS. Hữu ích cho test geo-restriction, bypass ngân hàng/dịch vụ chỉ allow IP VN, demo SaaS đăng ký với IP VN.
ACL: phân quyền chi tiết
Admin Console -> Access Controls. Sửa JSON policy:
{
"tagOwners": {
"tag:server": ["autogroup:admin"]
},
"groups": {
"group:devs": ["[email protected]", "[email protected]"],
"group:pms": ["[email protected]"],
"group:freelancers": ["[email protected]"]
},
"acls": [
{
"action": "accept",
"src": ["group:devs"],
"dst": ["tag:server:22,80,443,5432,6379"]
},
{
"action": "accept",
"src": ["group:pms"],
"dst": ["tag:server:80,443"]
},
{
"action": "accept",
"src": ["group:freelancers"],
"dst": ["tag:server:80,443"]
}
],
"ssh": [
{
"action": "accept",
"src": ["group:devs"],
"dst": ["tag:server"],
"users": ["root", "ubuntu"]
}
]
}
Devs vào được mọi server qua SSH/HTTP/Postgres/Redis. PMs chỉ HTTP/HTTPS. Freelancer y hệt PM. Save ACL, hiệu lực ngay lập tức cho mọi device.
Tailscale SSH thay ssh key
Bật Tailscale SSH trên server:
sudo tailscale up --ssh
Từ client, ssh root@hub-vn không cần password, không cần upload ssh key. Auth bằng identity Tailscale (đã SSO trước đó). Audit log mỗi session SSH ghi vào Admin Console. Khi nhân viên nghỉ, revoke account = mất luôn SSH access.
Free tier vs paid
| Plan | Devices | Users | Cost | Phù hợp |
|---|---|---|---|---|
| Free Personal | 100 | 1 user | 0 | Cá nhân, dev solo |
| Free for small business | 100 | 3 users | 0 | Team siêu nhỏ |
| Starter | Không giới hạn | 1 USD/user/tháng | ~6 USD/tháng/user | Startup 5-50 người |
| Premium | Không giới hạn | ~18 USD/user/tháng | Có log/audit nâng cao | Compliance |
Tham khảo trang Tailscale Pricing cho số chính xác mới nhất. Free tier 3 user / 100 device gọn cho founder + 2 cofounder, plus 100 server. Vượt 3 user phải lên paid plan.
Alternative self-host: Headscale
Headscale là open source clone của Tailscale coordination server. Có thể self-host trên VPS để không phụ thuộc Tailscale Inc, không có giới hạn user/device. Đánh đổi: phải tự maintain server, không có Admin Console fancy, ACL config bằng YAML local. Phù hợp khi:
- Không trust Tailscale với network metadata.
- Cần unlimited users mà không trả tiền.
- Compliance yêu cầu không có dependency US-based.
- Có sysadmin có thể vận hành.
Client vẫn dùng Tailscale official app (free, open source), chỉ trỏ login URL về Headscale instance của bạn. 95% feature giữ nguyên.
Bẫy thường gặp
| Triệu chứng | Cách fix |
|---|---|
| Subnet route không hoạt động | Quên duyệt route trong Admin Console, hoặc client chưa accept-routes |
| Tốc độ chậm | 2 peer fallback qua DERP relay thay vì direct, check firewall/NAT |
| MagicDNS không resolve | Hostname chứa underscore hoặc Override DNS off, fix tên thuần alphanum + bật override |
| SSH bị deny | Quên thêm rule ssh trong ACL, hoặc tag:server chưa apply |
| Auth key hết hạn | Tạo key mới với expire dài hơn, hoặc dùng ephemeral cho test, persistent cho server |
VPS làm Tailscale hub + exit node cho team remote
Cloud VPS TND sẵn AlmaLinux 9, Ubuntu 22/24, Debian 12/13. SSD CEPH, snapshot 1-click, backup hằng ngày, network 200Mbps trong nước. Gói 2GB RAM thừa sức làm hub subnet router + exit node cho team 30 người, IP VN ổn định cho geo-restriction.
Xem 8 cấu hình Cloud VPS →FAQ
Tailscale có an toàn không? Data có qua server công ty không?
Tailscale coordination server chỉ trao đổi WireGuard public key giữa các peer, không thấy nội dung traffic. Traffic đi trực tiếp peer-to-peer hoặc fallback qua DERP relay (encrypted end-to-end, Tailscale không decrypt được). Audit độc lập bởi Trail of Bits 2020. An toàn cho production startup.
Khi VPS hub chết, team có mất kết nối không?
Chỉ mất subnet route 10.0.0.0/24 và exit node. Các device khác trong tailnet vẫn ping nhau bình thường (mesh, không phụ thuộc hub). Nếu cần HA cho subnet, deploy 2 VPS hub, cả 2 advertise route, Tailscale tự load balance + failover.
So với Cloudflare Zero Trust thì khác gì?
Cloudflare Zero Trust (Access + Tunnel) tốt cho expose web app ra HTTPS public với SSO + WAF. Tailscale tốt cho VPN mesh peer-to-peer, truy cập database, SSH, RDP. Nhiều startup dùng cả 2: Cloudflare cho web public-facing (Grafana, internal portal), Tailscale cho VPN dev/sysadmin access.
Có hỗ trợ split tunneling không?
Có. Mặc định Tailscale chỉ route traffic đến tailnet IP (100.x.y.z) qua VPN, traffic Internet đi thẳng. Khi bật exit node, mới route 100% qua VPS. Có thể custom kỹ hơn bằng --exit-node-allow-lan-access cho phép truy cập LAN local song song.
Có thể dùng Tailscale với Synology NAS / Unifi không?
Có. Synology DSM 7+ có package Tailscale official trong Package Center. Unifi gateway gần đây cũng hỗ trợ. Cài, login SSO, NAS join tailnet, từ Macbook truy cập NAS bằng hostname dù NAS đang ở nhà bố mẹ. Rất phổ biến cho dev có home lab.


