Headscale - Triển khai mã nguồn mở tự lưu trữ của máy chủ điều khiển Tailscale
(github.com/juanfont)- Headscale là một dự án triển khai máy chủ điều khiển Tailscale theo hướng mã nguồn mở và tự lưu trữ, nhắm đến self-hoster và các môi trường dự án/phòng lab của lập trình viên hobby
- Tailscale là một VPN hiện đại dựa trên WireGuard, sử dụng NAT traversal để hoạt động như một mạng overlay giữa các máy tính trong mạng
- Máy chủ điều khiển của Tailscale phụ trách trao đổi khóa công khai WireGuard của các node, cấp phát IP cho client, tạo ranh giới người dùng, chia sẻ máy giữa người dùng và công bố các route do node quảng bá
- Headscale cung cấp một cách triển khai một mạng Tailscale duy nhất (tailnet) với phạm vi hẹp, phù hợp cho sử dụng cá nhân hoặc các tổ chức mã nguồn mở quy mô nhỏ
- Dự án không liên quan đến Tailscale Inc. và không hỗ trợ hoặc khuyến nghị dùng reverse proxy và container để chạy Headscale
Mục đích và phạm vi của Headscale
- Headscale hướng đến việc trở thành một giải pháp thay thế mã nguồn mở, có thể tự lưu trữ cho máy chủ điều khiển Tailscale
- Người dùng mục tiêu là self-hoster, lập trình viên hobby, và người dùng môi trường dự án cá nhân cùng phòng lab
- Phạm vi triển khai được giữ hẹp, cung cấp một tailnet duy nhất
- Phù hợp cho sử dụng cá nhân
- Cũng phù hợp cho các tổ chức mã nguồn mở quy mô nhỏ
Tailscale và vai trò của máy chủ điều khiển
- Tailscale là một VPN hiện đại được xây dựng trên WireGuard
- Tailscale hoạt động như một mạng overlay giữa các máy tính trong mạng và sử dụng NAT traversal
- Trong Tailscale, mọi thành phần ngoại trừ một phần GUI client và máy chủ điều khiển đều là mã nguồn mở
- Các GUI client được nêu là ngoại lệ là client cho các hệ điều hành độc quyền như Windows và macOS/iOS
- Máy chủ điều khiển hoạt động như điểm trao đổi khóa công khai WireGuard giữa các node trong mạng Tailscale
- Cấp phát địa chỉ IP cho client
- Tạo ranh giới giữa người dùng
- Cho phép chia sẻ máy giữa người dùng
- Công bố các route do node quảng bá
- Mạng Tailscale, tức tailnet, là mạng riêng mà Tailscale cấp cho cá nhân hoặc tổ chức
Lưu ý về tài liệu và phiên bản
- Để xem cấu hình ví dụ phù hợp với phiên bản phát hành đang dùng, luôn phải chọn đúng GitHub tag tương ứng
- Nhánh
maincó thể chứa các thay đổi chưa được phát hành - Tài liệu được cung cấp cho phiên bản ổn định và phiên bản phát triển
- Danh sách tính năng được hướng dẫn xem tại tài liệu Features
- Phạm vi hỗ trợ client và hệ điều hành được hướng dẫn xem tại tài liệu Client and operating system support
Chạy và build
- Headscale không hỗ trợ hoặc khuyến nghị sử dụng reverse proxy và container để chạy
- Cách chạy được hướng dẫn xem trong tài liệu chính thức
- Module dành cho người dùng NixOS nằm trong thư mục
nix/ - Các bản build phát triển của nhánh
mainđược cung cấp dưới dạng image container và binary- Chi tiết xem tại tài liệu development builds
Quan hệ dự án và đóng góp
- Dự án này không liên quan đến Tailscale Inc.
- Một trong những maintainer hoạt động tích cực của Headscale đang làm việc tại Tailscale và có thể đóng góp cho dự án trong giờ làm việc
- Các đóng góp của maintainer này sẽ được maintainer khác review
- Các maintainer cùng định hướng dự án theo nguyên tắc xây dựng một dự án bền vững trong khi hỗ trợ cộng đồng self-hoster, người dùng nhiệt thành và lập trình viên hobby
- Người đóng góp nên đọc CONTRIBUTING.md
Môi trường phát triển và quy trình làm việc
- Để đóng góp cần Go và Buf mới nhất
- Buf được dùng làm trình tạo Protobuf
- Khuyến nghị dùng Nix để thiết lập môi trường phát triển
- Chạy
nix developsẽ cài các công cụ cần thiết và cung cấp shell - Cách này đảm bảo cùng môi trường phát triển với các maintainer của Headscale
- Chạy
- Mã Go được lint bằng
golangci-lintvà format bằnggolines,gofumpt- Độ rộng của
golinesđược đặt là 88 - Khuyến nghị chạy
make lintvàmake fmttrước khi commit
- Độ rộng của
- Mã Proto được lint bằng
bufvà format bằngclang-format - Tài liệu được format bằng
mdformat, còn các file khác như Markdown·YAML được format bằngprettier - Khi thay đổi
proto/, cần tạo lại mã Go từ Protobuf- Lệnh là
make generate - Khuyến nghị đưa các thay đổi trong
gen/vào một commit riêng để dễ review
- Lệnh là
- Chạy test và build lần lượt bằng
make test,make build - Quy trình làm việc được khuyến nghị là chạy
make test,make buildsaunix develop- Nếu tự quản lý dependency thì có thể dùng Make trực tiếp
- Nếu thiếu công cụ cần thiết, Makefile sẽ cảnh báo và đề xuất chạy
nix develop - Có thể xem các target khả dụng bằng
make help
1 bình luận
Ý kiến trên Hacker News
Cứ vài tháng tôi lại quay lại kho lưu trữ này để xem Tailnet lock cuối cùng đã hoạt động chưa, và trong thời gian đó có ai thực hiện kiểm toán bảo mật chưa
Tiếc là cả hai đều có vẻ chưa có tiến triển, nên tôi ngày càng không chắc mình có thể tin tưởng nó đến mức nào như một thành phần cốt lõi trong hạ tầng của mình
Tiền đề của Tailscale SaaS là tạo các đường hầm vượt qua tường lửa, rồi cho phép người dùng kiểm soát một cách trực quan và tích hợp những gì sẽ được định tuyến qua các đường hầm đó
Headscale có vẻ làm tốt việc vượt tường lửa và NAT traversal nâng cao, nhưng tôi nghi ngờ liệu nó có thể cung cấp đủ bảo mật riêng để bù đắp cho lớp bảo mật vừa bị vượt qua hay không
Nếu người dùng không có cách nào hiểu hoặc từ chối những gì máy chủ điều khiển ra lệnh cho client làm, và mã máy chủ cũng hoàn toàn chưa được kiểm toán bảo mật, thì đó có vẻ là một lựa chọn khá táo bạo
Tôi từng nghĩ đây là một lớp điều khiển đặt trên các dịch vụ backend mặc định của Tailscale, vậy nó đang môi giới kết nối theo một cách mới sao?
Tôi dùng ZeroTier khá thường xuyên nhưng không quen Tailscale, nên có thể đây là câu hỏi hiển nhiên
Nếu quan tâm đến máy chủ orchestration tự host, Netbird cũng đáng xem
Đây là công cụ tương tự, máy chủ cũng được công bố mã nguồn mở, và máy chủ điều khiển tự host đi kèm GUI khá ổn cùng các tính năng của bản trả phí
https://netbird.io/knowledge-hub/tailscale-vs-netbird
Trông chắc chắn, mạnh mẽ và nhiều tính năng, nhưng Headscale tự host đơn giản hơn nhiều và cũng ít yêu cầu hơn
Hiện tại tôi vẫn chạy Tailscale, nhưng ngày càng tiến gần hơn đến việc loại bỏ dần và chuyển hẳn sang Netbird
Issue GitHub liên quan ở đây
https://github.com/netbirdio/netbird/issues/1103
Nên đưa tên dự án Headscale vào tiêu đề
Headscale là dự án đã nhiều lần xuất hiện trên HN
Sẽ rất hay nếu Headscale hỗ trợ peering/liên kết liên minh giữa các instance. Có thể là sau khi làm lại ACL
Một trong những vấn đề chính là xung đột địa chỉ
Đề xuất là như sau: chọn mạng overlay chỉ IPv6 trong dải địa chỉ cục bộ duy nhất (ULA), rồi chia 121 bit còn lại thành 20 bit thấp cho địa chỉ thiết bị (khoảng 1 triệu thiết bị) và 101 bit cao là hash khóa công khai của máy chủ
Chỉ cần thêm khóa công khai của instance khác để liên minh, rồi quản lý giao tiếp giữa các node bằng policy và ACL
Tôi nghĩ đó là ý tưởng hay, nhưng khi nêu ra vào năm 2023, maintainer kradalby nói rằng nó nằm ngoài phạm vi: https://github.com/juanfont/headscale/issues/1370
Tôi đã dùng Headscale ổn trong nửa năm
Nó tốt đến mức tôi không biết trước đây mình đã sống thế nào khi không có mạng Tailscale
Nó đã được đóng gói trên OpenBSD, và tôi đang dùng gói đó làm máy chủ
Tôi thích Headscale, vừa đưa nó lên production và nó chạy rất tốt
Tôi dùng domain Gmail để đăng nhập, lợi ích lớn là người dùng có thể tự đăng ký thiết bị của họ
Trước đây với OpenVPN, đội vận hành phải tự chuyển chứng chỉ và cấu hình cho họ
Nhược điểm duy nhất là đôi khi người dùng vô tình kết nối tới máy chủ đăng nhập Tailscale thay vì máy chủ riêng, rồi loay hoay không hiểu vì sao không truy cập được dịch vụ
Tôi đang cấu hình các dịch vụ có thể truy cập theo nhóm người dùng
Hiện vẫn dùng Headscale phiên bản cũ, vì còn một số tích hợp cần port sang control plane mới
Theo
headscale node list | wcthì có khoảng 250 node, phần lớn là máy chủTôi không thích lắm việc Tailscale can thiệp như ma thuật vào bảng định tuyến và quy tắc tường lửa, nhưng nhìn chung đó không phải vấn đề và nó hoạt động khá tốt
Nhiều trường hợp sử dụng, chẳng hạn như truy cập từ di động hoặc GUI trên macOS, chỉ có thể dùng Headscale nếu client Tailscale chính thức vẫn giữ tính năng cho phép thiết lập máy chủ điều khiển
Khoảnh khắc chất lượng của Tailscale bắt đầu suy giảm theo cách khó tránh, tính năng này sẽ biến mất
Hiện tại tôi là một khách hàng rất hài lòng với Tailscale, nhưng tôi nói vậy từ góc nhìn của người đã nhiều lần bị các công ty khác làm khổ sau khi họ bị bán hoặc cạn vốn đầu tư mạo hiểm
Nghe cũng hợp lý. Headscale chủ yếu được người dùng homelab và người dùng nhỏ lẻ dùng vì sở thích, và cạnh tranh với OpenVPN hoặc WireGuard tự host chứ không phải Pulsesecure, Cisco Anyconnect hay GlobalProtect
Đây là một con đường giới thiệu Tailscale đến những người thích công nghệ mới trong thời gian rảnh nhưng không muốn từ bỏ quyền kiểm soát hạ tầng
Những người đó rồi sẽ mang chuyên môn và sự nhiệt tình với Tailscale vào nơi làm việc
Các công ty thường không muốn tự làm việc đó, trừ khi quản lý hạ tầng IT là năng lực cốt lõi của họ
Tất nhiên sẽ có một số công ty chọn Headscale thay vì sản phẩm Tailscale chính thức, nhưng xét về quy mô công ty và số tiền thì khả năng cao chỉ là thiểu số
Việc đó giống chi phí doanh thu hơn, không khác nhiều so với quảng cáo Facebook hay biển quảng cáo ven đường ở Thung lũng Silicon
Lý do chúng tôi không thể dùng Tailscale ở nơi làm việc là vì lưu lượng được định tuyến qua các máy chủ mà chúng tôi không kiểm soát
Tôi rất muốn dùng Tailscale ở nơi làm việc, và nó sẽ giải quyết được rất nhiều vấn đề
Nếu phải mở cổng thì tôi có thể chấp nhận, nhưng việc tunnel lưu lượng qua cổng đó khiến tôi rất lo ngại
Trông có vẻ thú vị. Tôi tò mò giá trị gia tăng so với cấu hình WireGuard + OpenWrt là gì
Nó cứ hoạt động, trong giới hạn của ACL được quản lý tập trung
Có người xem nhẹ Tailscale là “chỉ là một bộ điều phối WireGuard”, nhưng thực tế nó còn làm nhiều hơn thế
Nhìn từ góc độ sản phẩm, WireGuard chỉ là chi tiết triển khai
Trước đây tôi đã chọn Netbird vì thấy UI của Headscale quá sơ sài, nhưng có thể trong vài năm qua nó đã được cải thiện
Nó chạy trên rất nhiều client, và cả các Apple TV của tôi cũng đang kết nối vào mạng Tailscale
Mất khoảng 1 phút để thiết lập và cũng có thể đóng vai trò gateway
Với Tailscale hoặc Headscale được host bên ngoài, có thể dùng theo cách đó
Tôi tò mò nếu máy chủ điều phối của Tailscale bị xâm nhập và Tailnet lock đang bật, thì các thiết bị của tôi có nguy cơ bị xâm nhập đến mức nào