2 điểm bởi GN⁺ 2025-04-04 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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

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

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 GoBuf 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 develop sẽ 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
  • Mã Go được lint bằng golangci-lint và format bằng golines, gofumpt
    • Độ rộng của golines được đặt là 88
    • Khuyến nghị chạy make lintmake fmt trước khi commit
  • Mã Proto được lint bằng buf và format bằng clang-format
  • Tài liệu được format bằng mdformat, còn các file khác như Markdown·YAML được format bằng prettier
  • 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
  • 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 build sau nix 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

 
GN⁺ 2025-04-04
Ý 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

    • Tailnet lock có vẻ ít quan trọng hơn nhiều với Headscale so với Tailscale. Vì bạn trực tiếp kiểm soát hạ tầng Headscale
    • Tôi thắc mắc liệu Headscale có thực sự tự triển khai các tính năng đó không
      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
    • Một trong những maintainer hiện đang làm việc tại Tailscale
    • Có thể tham khảo phần liên quan tại https://github.com/juanfont/headscale/issues/2416
  • 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

    • So với Headscale, Netbird thực sự có rất nhiều bộ phận chuyển động
      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
    • Tôi đang từ từ chuyển từ Tailscale sang Netbird, và nó hoạt động rất tốt, ngoại trừ hành vi hơi ngớ ngẩn là Tailscale chiếm toàn bộ đường đi CGNAT
      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
    • Tôi muốn dùng Netbird, nhưng nó chưa có khả năng nhúng vào binary Go như tsnet của Tailscale
      Issue GitHub liên quan ở đây
      https://github.com/netbirdio/netbird/issues/1103
    • Không có IPv6 nên đó thật sự là nhược điểm chí mạng: https://github.com/netbirdio/netbird/issues/46
    • Tôi thắc mắc liệu Netbird có làm NAT traversal tinh vi như Tailscale không
  • 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 đã vận hành Headscale trong 2,5 năm và khá ổn
      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 | wc thì 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
    • Tôi thắc mắc ý bạn là đã triển khai nó như một dịch vụ nội bộ cho toàn công ty phải không
  • 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

    • Chẳng phải phần lớn client Tailscale đều là mã nguồn mở, ngoại trừ phần GUI trên các hệ điều hành không phải mã nguồn mở sao?
    • Nếu tôi nhớ đúng, hình như Tailscale từng nói ở đâu đó rằng Headscale thực ra có tác động tích cực đến doanh thu
      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
    • Điều tôi bất mãn nhất với Tailscale là client, đặc biệt là mức tiêu thụ pin của client di động
      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ì

    • Các thiết bị kết nối peer-to-peer với nhau mà không cần cấu hình thủ công, kể cả khi nằm sau NAT phức tạp
      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
    • Vì là VPN dạng mesh nên các peer giao tiếp trực tiếp, không có độ trễ bổ sung
      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
    • Giá trị mà Tailscale mang lại là WireGuard mà cả người có hiểu biết kỹ thuật ở mức nhất định cũng có thể tự cấu hình và quản lý một mình
      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
    • Cũng có những người không có IP tĩnh hoặc không muốn có thứ gì đó lắng nghe trên mạng gia đình
      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