Nó giải quyết vấn đề gì
Kịch bản điển hình: bạn có vài VPS trên cloud, NAS ở nhà và một Raspberry Pi, muốn chúng truy cập lẫn nhau — ví dụ SSH trực tiếp từ VPS vào máy ở nhà. Cách làm của Tailscale: mỗi máy cài một client, đăng nhập cùng một tài khoản, gia nhập cùng một mạng (tên chính thức là tailnet), mỗi máy nhận một địa chỉ IPv4/IPv6 của Tailscale. Sau đó các máy có thể truy cập nhau, không cần mở cổng trên internet công cộng cho việc này.
Hai điểm cần nói rõ: liệu có truy cập được dịch vụ cụ thể trên một máy hay không vẫn phụ thuộc vào chính sách truy cập trong bảng điều khiển quản trị, tường lửa của chính máy đó, và dịch vụ có đang lắng nghe hay không; bài này chỉ nói về cài đặt và cấu hình thường dùng của client Linux.
Cài đặt
Script một dòng chính thức áp dụng cho họ Ubuntu/Debian, họ RHEL/CentOS/Fedora, Raspberry Pi OS, Amazon Linux, openSUSE/SLE, Oracle Linux v.v.:
curl -fsSL https://tailscale.com/install.sh | sh
Không muốn dùng curl | sh, có thể cấu hình kho thủ công theo trang pkgs.tailscale.com/stable. Lấy Ubuntu 26.04 (Resolute) làm ví dụ, các lệnh sau đều cần sudo:
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/resolute.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/resolute.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list
sudo apt-get update && sudo apt-get install tailscale
Debian 13 (trixie) làm tương tự, thay ubuntu/resolute trong URL bằng debian/trixie. Fedora dùng dnf:
sudo dnf config-manager --add-repo https://pkgs.tailscale.com/stable/fedora/tailscale.repo
sudo dnf install tailscale
sudo systemctl enable --now tailscaled
Một chi tiết: trang stable chính thức ở mục Ubuntu và Debian không ghi systemctl enable --now tailscaled, chỉ mục Fedora yêu cầu rõ ràng. Dịch vụ sau khi cài trên các bản phân phối khác đã được bật hay chưa, hãy dựa vào output của lệnh này:
systemctl status tailscaled
Nếu chưa chạy thì bật thủ công:
sudo systemctl enable --now tailscaled
Arch Linux và NixOS có hướng dẫn riêng trong tài liệu chính thức; các bản phân phối khác chưa được liệt kê có thể dùng binary tĩnh, xem trang stable.
Đăng nhập và xác nhận
sudo tailscale up
Output của lệnh sẽ đưa ra một URL xác thực, hoàn tất xác thực trong trình duyệt; với máy chủ không có trình duyệt, copy URL rồi mở bằng trình duyệt trên máy local. Sau khi xong, vào trang Machines của bảng điều khiển quản trị để xác nhận thiết bị xuất hiện. Xác nhận trạng thái trên máy local bằng:
tailscale ip
tailscale status
Lần lượt hiển thị địa chỉ IPv4/IPv6 của Tailscale trên máy này và trạng thái kết nối. Sau khi khóa thiết bị hết hạn, buộc xác thực lại:
sudo tailscale up --force-reauth
Máy chạy không người trực: khóa xác thực
Máy chủ cloud, Raspberry Pi thuộc loại không có trình duyệt và cũng không muốn can thiệp thủ công khi đăng nhập, dùng khóa xác thực để đăng ký:
sudo tailscale up --auth-key=tskey-abcdef1432341818
Khóa phân biệt chữ hoa chữ thường. Viết khóa thật vào dòng lệnh, nó có thể nằm lại trong lịch sử shell, script hoặc bản ghi terminal, đừng ghi vào script hay ghi chú có thể chia sẻ. Thiết bị đăng nhập bằng khóa được xác thực với tư cách người dùng đã tạo khóa; nếu khóa gắn tag, thiết bị nhận danh tính của tag đó.
Các loại khóa: dùng một lần (tự động thu hồi sau khi dùng), dùng nhiều lần, tạm thời (thiết bị bị gỡ tự động sau khi offline), phê duyệt trước (pre-approved), gắn tag, và khóa pre-signed dùng để kích hoạt mạng Tailnet Lock (cần tailscale lock sign). Thời hạn hiệu lực chọn từ 1 đến 90 ngày, mặc định là 90 ngày nếu không chỉ định.
Cần phân biệt hai lớp thời hạn: khóa đã hết hạn thì không thể đăng nhập thiết bị mới nữa; thiết bị đã được khóa đó cấp quyền vẫn giữ quyền cho đến khi khóa node của chính nó hết hạn, khóa node mặc định 180 ngày. Thiết bị gắn tag mặc định tắt cơ chế hết hạn khóa.
Đánh đổi bảo mật: khóa dùng nhiều lần một khi bị đánh cắp, bất kỳ ai có được nó đều có thể đăng ký thiết bị vào mạng của bạn, nên giữ trong một kho khóa chuyên dụng. Thu hồi khóa không làm vô hiệu các node đã dùng nó, muốn dọn sạch phải vào trang Machines xóa từng cái. Quyền tạo và thu hồi chỉ dành cho Owner, Admin, IT admin, Network admin, và chỉ có thể thu hồi khóa của chính mình.
Tailscale SSH
Thực thi trên máy chủ cần được kết nối vào (cần root):
sudo tailscale set --ssh
Cần Tailscale v1.24 trở lên, mỗi máy chỉ cần làm một lần, sẽ tạo cặp khóa host SSH. Hai cảnh báo: sau khi thực thi, các kết nối SSH hiện có đến Tailscale IP của máy đó sẽ bị treo; nếu bạn đang quản lý máy này qua một phiên như vậy, hãy chuyển sang đăng nhập qua console của nhà cung cấp cloud hoặc kênh quản trị khác trước, rồi mới thực thi lệnh kích hoạt.
Nó dùng danh tính Tailscale để xác thực, không cần tạo khóa trên client rồi đưa public key lên máy chủ; chỉ xử lý lưu lượng đến cổng 22 đi qua tailnet, /etc/ssh/sshd_config và ~/.ssh/authorized_keys không bị thay đổi, các kết nối SSH thông thường không đi qua Tailscale vẫn dùng được như thường. Cái giá phải trả: bất kỳ người dùng hệ thống nào trên máy client đều có thể tạo kết nối qua Tailscale, phía local không cần cặp khóa, kiểm soát truy cập hoàn toàn do chính sách phía máy chủ quyết định.
Truy cập cần hai quy tắc: một quy tắc mạng cho phép nguồn truy cập cổng 22 của đích, và một quy tắc ssh. Ví dụ chính thức:
{
"action": "accept",
"dst": ["autogroup:self"],
"src": ["autogroup:member"],
"users": ["autogroup:nonroot"]
}
Quy tắc này cho phép các thành viên SSH vào thiết bị của chính họ với tư cách người dùng không phải root. Chi tiết: chỉ dùng được tài khoản đã tồn tại trên máy chủ, Tailscale sẽ không tạo tài khoản; chỉ hỗ trợ cổng 22 và không thể thay đổi; src và dst không cho phép ghi * riêng lẻ; quy tắc check được đánh giá trước quy tắc accept; chính sách mặc định chưa sửa cho phép người dùng SSH vào thiết bị của mình ở chế độ check.
Nếu nới lỏng dst khỏi autogroup:self (ví dụ đổi thành một tag nào đó), phải xem xét lại autogroup:nonroot trong users — nếu giữ nguyên, tất cả mọi người mà src cho phép đều có thể đăng nhập bằng bất kỳ người dùng không phải root nào trên máy đích. Đây là chỗ cần suy nghĩ kỹ nhất khi bật Tailscale SSH.
Chế độ check yêu cầu xác thực lại trước khi kết nối (có thể kích hoạt MFA), checkPeriod mặc định 12 giờ, đặt được từ 1 phút đến 168 giờ, hoặc "always". Nó chỉ có hiệu lực với Tailscale SSH, không dùng được cho quy tắc có nguồn là thiết bị gắn tag. Đặt thành "always" sẽ làm gián đoạn các công cụ tự động kiểu Ansible mở nhanh nhiều kết nối.
Giới hạn: phía máy chủ chỉ hỗ trợ tailscaled của Linux và phiên bản mã nguồn mở trên macOS, không hỗ trợ Synology, QNAP; khởi động lại tailscaled (ví dụ khi nâng cấp) sẽ kết thúc phiên đang diễn ra; thay đổi chính sách có hiệu lực trong vài giây và chấm dứt phiên hiện có của người dùng đó, các cách truy cập khác (như khóa SSH) phải gỡ riêng. Phía chính thức cho rằng nó không phù hợp lắm với máy nhiều người dùng có quyền hạn khác nhau, và máy dùng authorized_keys để hạn chế lệnh từ xa. Khi cần luân chuyển:
sudo tailscale up --ssh --force-reauth
Lệnh này tạo khóa node mới và khóa host SSH mới.
Định tuyến subnet
Định tuyến subnet cho phép các máy trong tailnet truy cập các thiết bị trong dải mạng không cài Tailscale — ví dụ chỉ cài client trên gateway (Raspberry Pi hoặc NAS) là có thể truy cập toàn bộ mạng nội bộ. Bốn bước.
Bước một, bật IP forwarding (khi /etc/sysctl.d tồn tại):
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
Khi không có /etc/sysctl.d, thêm hai dòng cấu hình vào /etc/sysctl.conf rồi chạy sudo sysctl -p. Sau khi bật forwarding, giữ tường lửa ở chế độ từ chối chuyển tiếp mặc định (ufw, firewalld mặc định như vậy). Nếu firewalld đang chạy, có thể vì lỗi đã biết mà cần:
sudo firewall-cmd --permanent --add-masquerade
Bước hai, khai báo route trên máy đóng vai trò subnet router:
sudo tailscale set --advertise-routes=192.0.2.0/24,198.51.100.0/24
Thay bằng dải mạng của bạn, hỗ trợ IPv4 và IPv6; route mặc định 0.0.0.0/0 và ::/0 thuộc phạm vi sử dụng của exit node, không cần khai báo bằng subnet routing.
Bước ba, vào trang Machines của bảng điều khiển quản trị để phê duyệt: tìm thiết bị mang nhãn Subnets, trong phần Subnets nhấn Edit, tick chọn rồi Save (nếu autoApprovers đã phủ thì có thể bỏ qua). Phê duyệt route và quy tắc truy cập là hai thứ riêng biệt, chính sách cũng phải cho phép lưu lượng đến các subnet này, nếu không lưu lượng vẫn bị từ chối.
Bước bốn, client Linux mặc định chỉ khám phá địa chỉ Tailscale, mỗi máy Linux cần truy cập subnet phải chạy:
sudo tailscale set --accept-routes
Các nền tảng khác tự động nhận route mới.
Bẫy về tính sẵn sàng cao: khi nhiều subnet router dự phòng khai báo cùng một route, đừng bật --accept-routes trên chúng, nếu không router dự phòng có thể nhận route từ router chính và kéo lưu lượng đi vòng; đa số tình huống sẵn sàng cao chỉ dùng --advertise-routes.
Xử lý lỗi và điểm cần lưu ý
- Kết nối không thông, chạy
tailscale statusở cả hai đầu trước, xác nhận thiết bị online và địa chỉ đúng. - Thiết bị rơi khỏi mạng, cân nhắc khóa node có hết hạn chưa (mặc định 180 ngày), dùng
sudo tailscale up --force-reauthđể xác thực lại. - Subnet routing không thông, kiểm tra theo thứ tự: IP forwarding đã có hiệu lực chưa (
sysctl net.ipv4.ip_forward), bảng điều khiển đã phê duyệt route chưa, client Linux đã chạy--accept-routeschưa, chính sách có cho phép lưu lượng đến subnet đích không. - Tailscale SSH không kết nối được, kiểm tra cả hai quy tắc đều tồn tại, tài khoản đích có thật sự tồn tại trên máy chủ không.
- Thông báo chính thức: tắt log (đặt
TS_NO_LOGS_NO_SUPPORT=truehoặc dùng--no-logs-no-support) có thể dẫn đến không nhận được hỗ trợ kỹ thuật. Ngoài ra tài liệu chính thức không đưa thêm chi tiết.
Các lệnh và cấu hình trên đều đến từ tài liệu chính thức tailscale.com/kb và trang cài đặt pkgs.tailscale.com/stable, trang kb/1031 tham khảo ghi ngày xác nhận là 5 tháng 1 năm 2026; nếu output cài đặt hay giao diện bảng điều khiển của bạn khác với bài viết, hãy lấy phiên bản hiện hành của tài liệu chính thức làm chuẩn.




