Hướng dẫn liên quan
Tìm hiểu Tailscale: các thiết bị nối thẳng với nhau thế nào
Cập nhật
Việc Tailscale làm có thể nói trong một câu: mỗi thiết bị đứng tên bạn nhận một địa chỉ nội bộ cố định, rồi các thiết bị dựng đường hầm mã hóa WireGuard trực tiếp với nhau, không cần một máy chủ trung tâm chuyển giúp. Nó chia hệ thống mạng làm hai nửa: phần điều khiển (control plane) chỉ lo xác nhận danh tính, phát khóa và cho mỗi thiết bị biết “các máy khác giờ đang ở đâu”; phần dữ liệu (data plane) là các kết nối mã hóa điểm-điểm giữa thiết bị, lưu lượng của bạn không đi qua máy chủ điều khiển. Cái khó là thiết bị ở nhà hay ở công ty đều nằm sau router, không có địa chỉ công khai; Tailscale dùng kỹ thuật xuyên NAT (NAT traversal) để nối thẳng chúng, nối không được thì nhờ relay chuyển tiếp. Bài này đi lần lượt theo thứ tự đó.
VPN truyền thống và Tailscale khác nhau ra sao: hình sao và hình lưới
VPN truyền thống có dạng hình sao: mọi thiết bị đều nối tới một máy chủ VPN, hai thiết bị muốn nói chuyện thì lưu lượng phải lên máy chủ rồi mới quay về. Máy chủ vừa là nút thắt cổ chai vừa là điểm hỏng duy nhất: nó chậm thì ai cũng chậm, nó sập thì ai cũng mất kết nối.
Tailscale có dạng lưới (mesh): mỗi cặp thiết bị có một đường hầm trực tiếp riêng. Điện thoại vào NAS ở nhà thì lưu lượng đi thẳng từ điện thoại tới NAS, theo con đường ngắn nhất giữa hai máy. Không có máy nào phải gánh toàn bộ lưu lượng.
Cái giá của dạng lưới là quản lý phức tạp: mười thiết bị nối từng đôi với nhau là bốn mươi lăm đường hầm, đường nào cũng phải trao đổi khóa và biết địa chỉ hiện tại của bên kia. Làm tay là không thể; toàn bộ việc của Tailscale là tự động hóa chuyện này.
Phần điều khiển: chỉ phát khóa và danh bạ, không đụng tới lưu lượng
Khi cài Tailscale, mỗi thiết bị tự tạo một cặp khóa: khóa riêng (private key) ở lại trên thiết bị mãi mãi, khóa công khai (public key) gửi lên máy chủ điều khiển (Tailscale gọi là coordination server). Bạn đăng nhập tài khoản là máy chủ điều khiển biết “thiết bị này thuộc về ai”.
Máy chủ điều khiển giữ một bảng: khóa công khai của từng thiết bị, địa chỉ nội bộ được cấp, địa chỉ mạng hiện tại để tìm thấy nó, và quy tắc truy cập cho phép ai nối tới ai. Nó gửi cho thiết bị của bạn những dòng bạn được phép thấy; thiết bị nào bật, tắt hay đổi mạng thì bảng được cập nhật rồi đẩy tới các thiết bị liên quan.
Máy chủ điều khiển không chuyển lưu lượng của bạn và cũng không có khóa riêng, nên không giải mã được những gì các thiết bị trao đổi. Nó giống lễ tân chỉ phát danh bạ và thẻ ra vào: cho bạn biết người kia ở đâu, bạn có được vào hay không; còn vào rồi nói gì thì nó không có mặt.
Đăng nhập dùng hệ thống tài khoản bạn đã có (đăng nhập một lần, SSO), không phải đặt thêm một mật khẩu VPN riêng; khóa của thiết bị hết hạn định kỳ và phải đăng nhập lại để xác nhận; thiết bị bị mất thì xóa trong trang quản trị là hết quyền truy cập.
Phần dữ liệu: đường hầm WireGuard giữa các thiết bị
Thứ thực sự truyền dữ liệu là WireGuard. Có khóa công khai của thiết bị kia rồi, mỗi thiết bị dựng được một đường hầm mã hóa tới nó; hai đầu nhận ra khóa công khai của nhau, kẻ đứng giữa không đọc được, cũng không sửa được.
Tailscale không đụng vào phần mã hóa của WireGuard; nó làm những việc bản thân WireGuard không lo: phân phát khóa thế nào, cấp địa chỉ ra sao, thiết bị đổi mạng thì tìm lại nhau bằng cách nào. Nguyên lý WireGuard xem bài Tìm hiểu WireGuard.
Trong mạng này, mỗi thiết bị có một địa chỉ nội bộ cố định (dải bắt đầu bằng 100); dù thực tế nó đang dùng mạng nhà, mạng công ty hay 4G, địa chỉ đó vẫn không đổi. Vì vậy bạn luôn vào NAS ở nhà bằng cùng một địa chỉ. Bật thêm MagicDNS thì gọi thẳng bằng tên thiết bị cũng được.
Xuyên NAT: cả hai máy cùng nấp sau router, nối thẳng bằng cách nào
Máy tính ở nhà không có địa chỉ công khai; muốn ra Internet nó phải qua router dịch địa chỉ (NAT). Router chỉ cho qua kết nối “do bên trong khởi tạo trước”, còn ai từ ngoài tự gõ cửa thì bị chặn hết. Hai thiết bị đều nằm sau router của mình, không bên nào gõ cửa được bên kia trước; đó là cái khó của kết nối điểm-điểm.
Tailscale giải quyết trong ba bước. Bước một, mỗi thiết bị hỏi một máy chủ công khai “anh thấy tôi đi ra từ địa chỉ nào, cổng nào”, nhờ đó biết mình trông thế nào khi nhìn từ ngoài router (loại dịch vụ này gọi là STUN). Bước hai, hai thiết bị trao đổi địa chỉ bên ngoài đó qua máy chủ điều khiển. Bước ba, cả hai cùng lúc gửi gói tin về địa chỉ bên ngoài của nhau: router mỗi bên thấy đây là “bên trong gửi trước” nên mở sẵn khe cho chiều về, gói của bên kia vừa khéo lọt vào khe đó, và kết nối thông. Đây chính là kỹ thuật thường gọi là “đục lỗ” (hole punching).
Đục lỗ dùng UDP. Phần lớn router gia đình đục được; nhưng có những mạng dịch địa chỉ rất khắt khe (mỗi đích mới lại đổi sang một cổng bên ngoài khác), hoặc chặn hẳn UDP, khi đó không đục được.
Relay DERP: đục lỗ không được thì ai chuyển giúp
Đục lỗ không đảm bảo thành công, nên Tailscale chuẩn bị sẵn một loạt máy chủ relay gọi là DERP. Hai thiết bị tạm thời không nối được với nhau thì cùng nối tới một máy DERP, để nó chuyển các gói đã mã hóa cho bên kia. DERP chạy trên HTTPS (TCP 443), gần như mạng nào cũng cho qua.
Relay chỉ chuyển những gói đã được WireGuard mã hóa sẵn; DERP không có khóa, chỉ thấy được “ai gửi cho ai, dung lượng bao nhiêu”, không thấy nội dung.
Kết nối luôn bắt đầu qua relay: hai thiết bị vừa lên mạng là nói chuyện ngay qua DERP để chắc chắn thông liền; đồng thời ở phía sau vẫn thử đục lỗ, đục được là âm thầm chuyển sang nối thẳng, trong lúc chuyển kết nối không bị ngắt. Vì vậy vài giây đầu độ trễ hơi cao rồi giảm xuống là chuyện bình thường.
Nếu cứ ở mãi trên relay thì tốc độ và độ trễ phụ thuộc máy relay đó xa bạn bao nhiêu và bận đến đâu, thường chậm hơn nối thẳng. Trong ứng dụng Tailscale có thể xem kết nối hiện tại là direct (nối thẳng) hay relay (qua relay).
Exit node và subnet router: không chỉ để các thiết bị vào nhau
- Exit node (nút cổng ra): chỉ định một thiết bị làm cổng ra, thì toàn bộ lưu lượng Internet trên các thiết bị khác của bạn được mã hóa gửi tới nó trước, rồi đi ra từ mạng của nó. Hiệu quả giống VPN truyền thống: bên ngoài thấy địa chỉ của exit node. Exit node có thể là máy tính ở nhà bạn, cũng có thể là máy chủ do nhà cung cấp dịch vụ đặt.
- Subnet router (định tuyến mạng con): cho một thiết bị đã cài Tailscale làm đại diện cho cả mạng LAN nơi nó đặt. Máy in, camera, NAS đời cũ, những thứ không cài được Tailscale, sẽ được truy cập thông qua nó.
- Kiểm soát truy cập (ACL): mặc định các thiết bị đứng tên bạn vào được lẫn nhau; khi dùng theo nhóm thì có thể viết quy tắc, quy định người nào, thiết bị nào được vào cổng nào. Quy tắc do máy chủ điều khiển phát xuống, từng thiết bị tự thực thi.
- MagicDNS: đặt cho mỗi thiết bị một cái tên, truy cập không cần nhớ địa chỉ bắt đầu bằng 100.
Nó liên quan gì tới WireGuard và VPN truyền thống
- So với WireGuard: WireGuard là giao thức của một đường hầm, chỉ lo hai đầu mã hóa và nói chuyện thế nào; khóa và địa chỉ bên kia của mỗi đầu bạn phải tự cấu hình tay. Tailscale là cả một hệ thống xây trên nó, làm hộ bạn phần đăng nhập, phân phát khóa, cấp địa chỉ, xuyên NAT và relay.
- So với dịch vụ VPN truyền thống: VPN truyền thống là “mọi lưu lượng đi tới một máy chủ”, trọng tâm là đổi cổng ra; trọng tâm của Tailscale là “các thiết bị thông với nhau”, đổi cổng ra chỉ là tính năng kèm theo (exit node).
- So với công cụ mở cổng mạng nội bộ ra Internet (kiểu frp, Oray/Peanut Shell): những công cụ đó phơi một cổng của mạng nội bộ ra Internet, ai biết địa chỉ cũng vào được, an toàn hoàn toàn trông vào bản thân dịch vụ đó; Tailscale không mở cổng nào ra ngoài, chỉ thiết bị đã đăng nhập dưới tên bạn mới vào được.
- So với ZeroTier: ý tưởng gần giống, đều là tự động dựng mạng; ZeroTier dùng giao thức riêng và giả lập một mạng tầng 2, còn Tailscale dùng WireGuard và chạy ở tầng 3.
Headscale và tự dựng máy chủ điều khiển
Ứng dụng Tailscale là mã nguồn mở, còn máy chủ điều khiển là dịch vụ do công ty Tailscale vận hành. Headscale là máy chủ điều khiển mã nguồn mở do cộng đồng viết, cài đặt cùng một giao thức, nên ứng dụng chính hãng có thể chuyển sang kết nối tới nó. Như vậy danh sách thiết bị, danh mục khóa và quy tắc truy cập đều nằm trong tay bạn.
Tùy chọn “máy chủ điều khiển tùy chỉnh” trong ứng dụng, tức Use custom server / Use an alternate server, sinh ra là để làm việc này: điền một địa chỉ vào, ứng dụng sẽ không nối tới máy chủ của công ty Tailscale nữa mà nối tới máy bạn chỉ định.
Khi đã tự dựng, đăng nhập bằng gì, gắn được bao nhiêu thiết bị, có những exit node nào đều do người vận hành máy chủ điều khiển đó quyết định, không liên quan tới hạn mức miễn phí hay gói trả phí của Tailscale chính hãng.
Dùng trên mạng ở Trung Quốc: vài điều cần biết
- Đục lỗ dựa vào UDP. Không ít đường mạng ở Trung Quốc bóp tốc độ UDP, mạng nội bộ cỡ lớn của nhà mạng (nhiều tầng dịch địa chỉ) cũng khiến đục lỗ khó thành công hơn, nên khả năng phải đi qua relay cao hơn ở nước ngoài.
- Đi qua relay thì tốc độ tùy relay đặt ở đâu. Relay ở xa thì độ trễ cao; đây là lý do chính khiến trải nghiệm Tailscale ở Trung Quốc chênh lệch nhiều như vậy.
- Định dạng gói tin của WireGuard cố định, không ngụy trang, nên trên mạng kiểm soát gắt có thể bị nhận diện và bóp tốc độ. Nó là công cụ dựng mạng, không được thiết kế để vượt tường lửa.
- Trên điện thoại cứ để bật thường trực cũng không sao: đường hầm không có lưu lượng thì gần như không tốn pin, chuyển qua lại giữa Wi‑Fi và 4G thì kết nối tự hồi phục.
Mạng riêng của LeoTun dùng nó thế nào
Mục Mạng riêng của LeoTun dùng chính ứng dụng Tailscale chính hãng, nối tới máy chủ điều khiển do chúng tôi tự vận hành: bạn đăng nhập bằng tài khoản trang này một lần là thiết bị luôn trực tuyến; chúng tôi đặt exit node ở các khu vực, muốn đổi cổng ra thì chọn khu vực trong menu Exit Node của ứng dụng, không phải nhập lại cấu hình; điện thoại, máy tính, NAS cùng một tài khoản vào thẳng được lẫn nhau.
Vì đăng nhập vào máy chủ điều khiển của trang này, số thiết bị tính theo gói tài khoản của trang này, không liên quan tới tài khoản hay hạn mức của Tailscale chính hãng; nếu thiết bị đã đăng nhập tài khoản Tailscale chính hãng thì phải đăng xuất trước rồi mới đăng nhập tài khoản của chúng tôi. Các bước cài đặt và đăng nhập có ảnh minh họa xem bài Mạng riêng (Tailscale) là gì, bắt đầu từ trang Mạng riêng.
Khi mạng bạn đang dùng hạn chế UDP, Mạng riêng vừa chậm vừa chập chờn, cùng tài khoản đó có thể đổi sang cách kết nối khác; xem Mỗi cách kết nối hợp với tình huống nào.
FAQ
Máy chủ của Tailscale có thấy lưu lượng của tôi không?
Không thấy nội dung. Máy chủ điều khiển chỉ lưu khóa công khai, danh sách thiết bị và quy tắc truy cập, khóa riêng không rời khỏi thiết bị; máy chủ relay chuyển các gói đã mã hóa và không có khóa. Thứ chúng thấy được là siêu dữ liệu: thiết bị nào đang trực tuyến, đã kết nối với ai.
Tailscale và WireGuard liên quan với nhau thế nào?
WireGuard là giao thức đường hầm mã hóa ở tầng dưới, Tailscale thêm lên trên nó phần đăng nhập tài khoản, phân phát khóa, cấp địa chỉ, xuyên NAT và relay. Có thể hình dung WireGuard là động cơ, còn Tailscale là chiếc xe đã lắp sẵn động cơ, lên là chạy.
Sao đôi khi ứng dụng báo relay thay vì nối thẳng?
Nghĩa là hai thiết bị đục lỗ không thành công, thường do mạng ở một bên chặn UDP hoặc kiểu dịch địa chỉ quá khắt khe. Đi qua relay vẫn dùng được, chỉ là tốc độ tùy vị trí relay. Đổi sang mạng khác (ví dụ phát Wi‑Fi từ điện thoại) thường là nối thẳng được.
DERP là gì?
Là máy chủ relay của Tailscale. Hai thiết bị không nối thẳng được thì nó chuyển giúp các gói dữ liệu đã mã hóa; thiết bị vừa lên mạng cũng liên lạc với nhau qua nó trước. Nó chạy trên HTTPS nên cả ở mạng chỉ cho lưu lượng web đi qua cũng thông.
Exit node khác VPN thông thường ở chỗ nào?
Hiệu quả như nhau: toàn bộ lưu lượng Internet đi ra từ một nơi khác. Khác ở chỗ exit node chỉ là một thiết bị trong mạng, lúc nào cũng có thể chọn máy khác trong menu hoặc tắt đi, đổi không cần cấu hình lại, và việc các thiết bị vào lẫn nhau cũng không bị ảnh hưởng.
Headscale là gì?
Là một bản cài đặt mã nguồn mở của máy chủ điều khiển Tailscale. Đổi địa chỉ máy chủ điều khiển trong ứng dụng chính hãng sang nó là bạn có một hệ thống mạng do chính mình nắm; phần dữ liệu vẫn là WireGuard, ứng dụng vẫn là bản chính hãng.
Tailscale có vượt tường lửa được không?
Bản thân nó là công cụ dựng mạng: chỉ khi mạng của bạn có một thiết bị đặt ở nước ngoài và bạn đặt nó làm exit node thì lưu lượng mới đi ra từ nước ngoài. Lưu lượng của nó không ngụy trang, trên mạng hạn chế UDP chưa chắc dùng tốt. Cần đường truyền xuyên biên giới ổn định thì xem các cách khác trong bài Mỗi cách kết nối hợp với tình huống nào.