WireGuard, Tailscale hay Headscale: chọn gì cho VPS?
Tailscale là WireGuard kèm control plane để tự discovery và xuyên NAT. So sánh chi phí vận hành, quyền riêng tư và chọn WireGuard, Tailscale hay Headscale cho VPS.
WireGuard so với Tailscale: câu trả lời ngắn gọn
WireGuard so với Tailscale không phải là lựa chọn giữa hai giao thức, vì Tailscale chính là WireGuard. Tailscale dùng cùng cơ chế mã hóa và cùng tunnel, sau đó bổ sung một control plane: máy chủ điều phối trao đổi public key, cấp địa chỉ, xuyên qua NAT (network address translation) và áp dụng chính sách truy cập. Bạn đang chọn mức độ tự vận hành phần điều phối này.
Có ba câu trả lời rõ ràng. Dùng WireGuard thuần khi bạn có một server và một số ít client, tất cả đều kết nối vào server đó. Dùng Tailscale khi bạn muốn mọi máy truy cập được mọi máy khác mà không phải duy trì file cấu hình. Dùng Headscale khi bạn muốn mô hình mesh đó nhưng không muốn bên thứ ba lưu danh sách node.
Control plane thực sự mang lại gì
WireGuard thuần không có cơ chế discovery. Mỗi peer là một đoạn văn bản bạn phải tự viết: public key, dòng AllowedIPs và Endpoint nếu peer đó có thể truy cập được. Thêm một máy vào mạng gồm 10 máy nghĩa là phải sửa 10 file cấu hình, vì mỗi phía cần key của phía còn lại. Vì vậy, gần như mọi thiết lập WireGuard tự host đều dùng mô hình hub và spoke: một server có public IP, còn các client chỉ kết nối với server đó.
Control plane loại bỏ việc sửa thủ công này. Mỗi node đăng ký một lần, nhận một địa chỉ từ dải 100.64.0.0/10 CGNAT (carrier grade NAT), rồi nhận public key của các node mà nó được phép truy cập. Tunnel vẫn là kết nối WireGuard trực tiếp giữa 2 peer, và traffic của bạn không bao giờ đi qua coordination server. Server chỉ lưu metadata: node nào tồn tại, key nào thuộc về node nào và node nào được phép giao tiếp với node nào.
Cơ chế này mang lại 3 lợi ích cụ thể.
NAT traversal. 2 laptop nằm sau 2 router gia đình khác nhau và không có public IP chung để kết nối. Tailscale dùng STUN (session traversal utilities for NAT) để phát hiện địa chỉ và port bên ngoài của mỗi phía. Sau đó, cả 2 phía gửi packet cùng lúc, để mỗi router thấy một flow đi ra trước và chấp nhận reply. Khi cách này thất bại, traffic chuyển sang DERP relay, là một relay được Tailscale vận hành và mã hóa. Dữ liệu của bạn vẫn được mã hóa end-to-end khi đi qua relay, vì relay không bao giờ có các key. Chạy tailscale status; dòng của mỗi peer sẽ hiển thị direct hoặc relay. Chạy tailscale netcheck để xem relay nào gần nhất và network của bạn có cho phép UDP hay không.
Key rotation có thời hạn hết hạn. Key WireGuard không bao giờ hết hạn. Key bạn cấp từ 3 năm trước vẫn hoạt động mãi, trừ khi bạn tự xóa block peer. Thay vào đó, Tailscale đặt thời hạn cho node key. Tính đến tháng 7 năm 2026, thời hạn mặc định trên tailnet mới là 180 ngày. Máy chưa reauthenticate sẽ ngừng kết nối. Bạn có thể tắt thời hạn riêng cho từng thiết bị, chẳng hạn server hoặc subnet router mà không có ai thường xuyên đăng nhập để reauthenticate.
Dùng policy thay cho routing. Trong WireGuard thuần, AllowedIPs đồng thời là routing table và access control list. Vì vậy, quy tắc “alice được phép truy cập database” phải được biểu diễn bằng một dải IP. Tailscale lưu một policy file riêng, trong đó các rule gọi tên user, group và tag. Một rule có thể quy định tag:laptop được phép truy cập tag:db trên port 5432 và không được truy cập gì khác. Rule đó vẫn giữ nguyên ngay cả khi máy nhận địa chỉ mới.
Chi phí của control plane
Máy chủ điều phối biết mạng của bạn. Nó lưu public key của mọi node, tên của mọi node, các địa chỉ đã cấp phát và policy. Với Tailscale được host, máy chủ này thuộc một công ty nằm ngoài quyền kiểm soát của bạn. Công ty đó không thể đọc các packet của bạn vì private key của WireGuard vẫn nằm trên các máy của bạn. Tuy nhiên, họ có thể thấy cấu trúc mạng của bạn. Khả năng kết nối của bạn cũng phụ thuộc vào việc dịch vụ của họ đang hoạt động và tài khoản của bạn vẫn ở trạng thái hợp lệ.
Có một chi phí thứ hai dễ bị bỏ qua. Tailscale là một daemon trên mọi máy, vì vậy bạn phải luôn cập nhật bản vá cho phần mềm này trên từng máy. WireGuard thuần trên Ubuntu 24.04 là một kernel module được phân phối cùng hệ điều hành và được cập nhật cùng kernel.
Chi phí thứ ba là phí dịch vụ. Tính đến tháng 7 năm 2026, gói Personal miễn phí với số thiết bị không giới hạn cho tối đa 6 người dùng, gói Standard có giá $8 cho mỗi người dùng mỗi tháng và gói Premium có giá $18 cho mỗi người dùng mỗi tháng. Một hộ gia đình vẫn được dùng miễn phí. Một nhóm 10 người thì không.
Khi WireGuard thuần túy là lựa chọn phù hợp
Chọn WireGuard thuần túy khi topology thực sự là mô hình hub và spoke. Một VPS có public IP, ba hoặc bốn thiết bị kết nối đến đó, và không có yêu cầu để các thiết bị này kết nối với nhau. Cấu hình chỉ nằm gọn trên một màn hình, không có daemon cần cập nhật, không có account có thể bị mất, và không có dịch vụ bên ngoài đứng giữa bạn với server.
Đây cũng là lựa chọn phù hợp khi bạn muốn hiểu lớp nền mà mọi thứ khác được xây dựng trên đó. Tự host WireGuard VPN trên VPS hướng dẫn tạo key, wg0.conf, IP forwarding, NAT và các lỗi handshake. Tất cả cơ chế này vẫn chạy bên dưới một tailnet. Nếu bạn vẫn đang cân nhắc lựa chọn cũ hơn, WireGuard so với OpenVPN trình bày bốn trường hợp OpenVPN vẫn có lợi thế.
Quá trình cài đặt rất ngắn:
sudo apt update && sudo apt install -y wireguard
sudo modprobe wireguard && echo okWireGuard thuần túy bắt đầu trở nên bất tiện khi mọi thiết bị phải kết nối được với mọi thiết bị khác. Một full mesh gồm N node cần N nhân N trừ một peer block. Với sáu thiết bị, bạn phải tự đồng bộ ba mươi block. Một entry AllowedIPs bị trùng sẽ âm thầm chiếm traffic từ peer đã có entry đó trước, và không có lỗi nào được in ra ở bất kỳ đâu.
Khi Tailscale là lựa chọn phù hợp
Chọn Tailscale khi các máy thường xuyên thay đổi mạng. Ví dụ: laptop dùng mạng khách sạn, điện thoại dùng dữ liệu di động hoặc home server nằm sau router mà bạn không kiểm soát. Đây chính là các trường hợp mà WireGuard thuần túy xử lý không tốt, vì cả hai phía đều không có public endpoint ổn định để đặt vào Endpoint.
Cài client bằng một command từ installer chính thức:
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
tailscale statustailscale up in ra một URL. Mở URL đó, đăng nhập, rồi máy sẽ tham gia network. Bạn không cần sao chép key hoặc mở inbound port, vì daemon tạo kết nối outbound đến coordination server và duy trì kết nối đó. Vì vậy, node Tailscale vẫn hoạt động trên network mà bạn hoàn toàn không kiểm soát firewall.
Sau đó, hai thiết lập sẽ đảm nhiệm phần lớn chức năng hữu ích. Subnet router quảng bá toàn bộ LAN vào network, nên bạn không phải cài client trên từng thiết bị:
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
sudo tailscale set --advertise-routes=192.0.2.0/24Route vẫn không hoạt động cho đến khi bạn approve route đó trong admin console. Đây là hành vi có chủ đích: node không thể tự đưa route vào network của bạn. Linux client cũng cần sudo tailscale set --accept-routes, vì Linux không chấp nhận route được quảng bá theo mặc định. Do đó, dù route đã có vẻ được approve ở phía server, route vẫn không có tác dụng trên laptop Linux cho đến khi bạn thiết lập mục này.
Exit node gửi toàn bộ traffic của client qua một máy, tức là cơ chế full tunnel mà mọi người thường gọi là “VPN”:
sudo tailscale set --advertise-exit-nodeKhi Headscale là lựa chọn phù hợp
Headscale là bản triển khai mã nguồn mở của coordination server và chạy trên VPS do bạn sở hữu. Các Tailscale client chính thức kết nối đến server này thay vì dịch vụ được lưu trữ:
sudo tailscale up --login-server https://headscale.example.comData path không thay đổi. Nó vẫn là WireGuard và vẫn kết nối trực tiếp giữa các peer khi mạng cho phép. Điểm thay đổi là danh sách node, các key và policy được lưu trong một file SQLite trên disk do bạn sở hữu. Không ai bên ngoài có thể xem cấu trúc mạng của bạn, vô hiệu hóa account hoặc tính phí theo từng user.
Đổi lại, bạn phải tự vận hành nhiều việc. Bạn sẽ chạy một public HTTPS service, cần có DNS name, certificate và reverse proxy chuyển tiếp WebSocket upgrade chính xác. Bạn chịu trách nhiệm về uptime. Khi coordination server bị down, node mới không thể đăng ký và các node hiện có không thể nhận biết thay đổi. Headscale cũng chưa đạt version 1.0 và các bản minor release đã có những breaking change. Vì vậy, hãy đọc changelog trước mỗi lần upgrade. Chạy Headscale như Tailscale control server của riêng bạn trình bày cách cài đặt, config.yaml, preauth key và các port cần mở.
Có một điểm cần lưu ý mà nhiều người chỉ phát hiện muộn. Headscale không đi kèm global relay network của Tailscale. Khi hai peer không thể kết nối trực tiếp, bạn phải bật relay tích hợp trên server của mình hoặc trỏ config đến một relay khác. Relay đó chỉ là một box duy nhất trong một region duy nhất, không phải một fleet trên toàn thế giới. Các peer ở phía bên kia hành tinh sẽ chịu ảnh hưởng rõ rệt từ khác biệt này.
Cách quyết định trong một lần
Hỏi cần có bao nhiêu máy kết nối với nhau. Nếu câu trả lời là tất cả máy chỉ cần giao tiếp với server, WireGuard thuần túy sẽ dùng ít phần mềm hơn mà vẫn đạt cùng kết quả.
Hỏi các máy có địa chỉ công khai ổn định hay không. Nếu phần lớn máy nằm sau NAT mà bạn không kiểm soát, bạn cần một control plane, vì hole punching là phần khó và không đáng để tự xây dựng lại.
Hỏi ai được phép biết cấu trúc mạng của bạn. Nếu câu trả lời không bao gồm các công ty bên ngoài, hoặc số lượng người dùng khiến việc tính phí theo seat trở nên tốn kém, hãy chạy Headscale và chấp nhận rằng từ đó bạn phải vận hành control server.
Bạn có thể đổi quyết định với chi phí thấp. Vì data plane trong cả ba lựa chọn đều dùng cùng một giao thức, chuyển từ WireGuard thuần túy sang mesh có điều phối chỉ cần cài client thay vì thiết kế lại hệ thống; chuyển từ Tailscale sang Headscale chỉ cần đăng ký lại từng node với một login server khác.
Những gì cả ba đều không cung cấp
Không công cụ nào trong số đó là firewall. Tunnel quyết định những packet nào được truyền, không quyết định service nào đang lắng nghe. Server có thể truy cập qua tunnel vẫn có thể được truy cập từ internet qua mọi port bạn để mở. Vì vậy, hãy tiếp tục để các rule firewall UFW trên VPS thực hiện nhiệm vụ của chúng. File policy của Tailscale giới hạn những node khác có thể truy cập gì, nhưng không tác động đến public interface.
Không công cụ nào trong số đó cung cấp authentication theo từng service. Không công cụ nào cũng tạo audit trail về những gì user đã thực hiện sau khi kết nối. Hãy xem cả ba chỉ là lớp transport, và đặt các bước kiểm tra đăng nhập trong application.
FAQ
Tailscale có phải chỉ là WireGuard với nhiều bước hơn không?
Tailscale sử dụng giao thức WireGuard cho đường truyền dữ liệu, nên cơ chế mã hóa và tunnel là như nhau. Phần bổ sung là cơ chế điều phối: trao đổi key, cấp phát địa chỉ, NAT traversal bằng STUN và relay DERP, thời hạn key, và policy file dùng tên người dùng thay cho các dải IP. Với WireGuard thuần, bạn phải tự xử lý các phần này. Chúng trở nên phức tạp khi các máy chuyển qua lại giữa nhiều network.
Traffic của tôi có đi qua server của Tailscale không?
Thông thường là không. Các peer kết nối trực tiếp với nhau sau khi coordination server giới thiệu chúng, và tailscale status hiển thị direct trên các dòng peer đó. Khi không thể thiết lập đường truyền trực tiếp, traffic chuyển sang relay DERP và dòng này hiển thị relay. Ngay cả khi đó, relay chỉ chuyển các packet đã mã hóa và không giữ private key WireGuard của bạn, nên không thể đọc nội dung. Chạy tailscale netcheck để kiểm tra network của bạn có chặn UDP mà kết nối trực tiếp cần hay không.
Tôi có thể dùng Headscale với ứng dụng Tailscale chính thức không?
Có. Headscale sử dụng cùng control protocol, nên client chính thức có thể tham gia bằng sudo tailscale up --login-server https://headscale.example.com. Ứng dụng desktop và mobile cũng có thể trỏ đến login server tùy chỉnh. Tuy nhiên, vị trí cài đặt khác nhau trên từng platform, và ứng dụng mobile thường là loại cần một version cụ thể nhất. Hãy thử trên một điện thoại trước khi migrate toàn bộ network.
Tôi có vẫn cần mở port cho Tailscale hoặc Headscale không?
Tailscale client không cần inbound port vì client kết nối ra coordination server và duy trì kết nối đó. Headscale server tự host cần inbound port: 443 cho control protocol, 80 nếu bạn dùng HTTP-01 certificate challenge, và 3478/udp chỉ khi bật relay tích hợp. WireGuard thuần cần mở UDP listen port, thường là 51820, trên server và trên mọi network firewall riêng mà provider của bạn vận hành.
Trong 3 lựa chọn này, lựa chọn nào nhanh nhất?
Throughput như nhau vì cả 3 đều dùng WireGuard để truyền packet. Khác biệt nằm ở thời gian thiết lập kết nối và chất lượng đường truyền. WireGuard thuần với Endpoint chính xác sẽ luôn kết nối trực tiếp. Tailscale và Headscale thường kết nối trực tiếp, nhưng sẽ chuyển sang relay khi network chặn hole punching; đường truyền qua relay làm tăng latency. Đo đường truyền của bạn bằng tailscale ping <node> để biết route là direct hay relayed, hoặc dùng iperf3 qua tunnel.