1 điểm bởi GN⁺ 22 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • DynIP là dịch vụ DNS động dành cho homelab, router biên và đội ngũ hạ tầng, cung cấp cập nhật trong 60 giây và gói miễn phí
  • Hỗ trợ cập nhật qua RFC 2136 TSIG, REST API và UDP/53, đồng thời tích hợp với FortiGate, OPNsense, OpenWRT và MikroTik
  • Hỗ trợ IPv6 cùng với IPv4 để cập nhật song song bản ghi A·AAAA, xử lý cả dual-stack lẫn zone chỉ có IPv6
  • DNSSEC tự động hóa việc tạo khóa ký, công bố lên parent zone và ký bản ghi, đồng thời là điều kiện cần để cấp chứng chỉ Let’s Encrypt
  • Với BYOD, có thể kết nối domain đang sở hữu để tạo subdomain động, nhưng cần ủy quyền cho ns1.dynip.devns2.dynip.dev

Tổng quan về DynIP

  • DynIP là dịch vụ DNS động cho homelab, router biên và đội ngũ hạ tầng, nổi bật với cập nhật 60 giây, gói miễn phí, RFC 2136 TSIG, dùng domain riêng và DNSSEC
  • Được thiết kế để khi router gửi bản cập nhật, hostname sẽ được phân giải chính xác trên toàn cầu trong khoảng 60 giây
  • Cung cấp TTL 60 giây, truyền bá dựa trên NOTIFY và nameserver đa vùng
  • đăng ký miễn phítài liệu

Tiêu chuẩn DNS và tích hợp router

  • Hỗ trợ RFC 2136 TSIG nên có thể dùng với FortiGate, OPNsense, OpenWRT và các router hỗ trợ DNS UPDATE
  • Người dùng MikroTik có thể dùng tích hợp HTTP API gốc
  • Các phương thức được hỗ trợ gồm RFC 2136 TSIG, REST API và cập nhật gốc qua UDP/53
  • Trong màn hình snippet cấu hình, có thể tạo khối cấu hình để sao chép dựa trên loại thiết bị, địa chỉ IP đích, domain và khóa TSIG
  • Trong khi zone mới đang được truyền bá đến nameserver, bản cập nhật RFC 2136/TSIG của FortiGate cần chờ
  • Các bản cập nhật HTTP API như cURL, PowerShell, Python, MikroTik hoạt động ngay lập tức

IPv6 và DNSSEC

  • Hỗ trợ IPv6 cùng với IPv4 để có thể cập nhật song song bản ghi A và AAAA
  • Hỗ trợ cả cấu hình dual-stack lẫn zone chỉ có IPv6
  • Để cấp chứng chỉ Let’s Encrypt, DNSSEC phải được bật cho zone đó
  • Khi bật DNSSEC, việc tạo khóa ký, công bố lên parent zone và ký toàn bộ bản ghi DNS sẽ được thực hiện tự động
  • Thiết lập DNSSEC là quy trình một lần; sau đó zone sẽ tiếp tục được giữ ở trạng thái đã ký
  • Thời gian dự kiến được hiển thị là 30 giây

Bắt đầu nhanh và quản lý zone

  • Quy trình bắt đầu nhanh gồm nhập tên thiết bị, chọn domain cơ sở và nhấn Create Zone để tạo zone
  • Từ nút Snippets bên cạnh domain mới, lấy cấu hình, chọn loại thiết bị rồi sao chép khối cấu hình được tạo vào CLI của router
  • IPv4 và IPv6 được tự động phát hiện và cập nhật dựa trên kết nối đến
  • Danh sách zone hiển thị domain và công cụ, IP hiện tại, TSIG Secret, DNSSEC và trạng thái chứng chỉ SSL
  • Trong mỗi zone có thể quản lý trạng thái khóa, snippet, xóa, thông báo, thời điểm đồng bộ, bật/tắt DNSSEC và tải xuống/gia hạn/cấp chứng chỉ SSL

Sử dụng domain riêng

  • Tính năng Custom Namespaces (BYOD) cho phép kết nối domain đang sở hữu với DynIP và tạo các subdomain động dưới namespace đó
  • Để kích hoạt namespace, cần tạo đầy đủ hai bản ghi NS tại nhà đăng ký domain
  • Ủy quyền chỉ một NS sẽ bị từ chối
  • Các bản ghi NS cần thiết là ns1.dynip.devns2.dynip.dev
  • Xác minh cấu hình được cung cấp theo luồng kiểm tra trạng thái ủy quyền hoặc xác nhận các thao tác cần thiết tại nhà đăng ký

Đồng bộ nhanh và tự động hóa

  • Quick Sync là tính năng đồng bộ ngay zone đã chọn với địa chỉ IP bên ngoài hiện tại của thiết bị
  • Hiển thị IP mạng được phát hiện và cho phép cập nhật các zone do người dùng chọn cùng lúc
  • Có thể đăng ký zone mới theo cách lập trình bằng cách gửi yêu cầu POST đến endpoint /register với session token
curl -X POST "{{ backendUrl }}/register?subdomain=my-new-router&base_domain={{ baseDomains[0] }}" \
     -H "Authorization: Bearer {{ token }}"
  • Session token sẽ hết hạn khi đăng xuất, vì vậy cần dùng API token cho tự động hóa dài hạn
  • API tokens là tính năng từ gói Pro trở lên, có thể dùng cho các tác vụ tự động như script giám sát, pipeline CI và tích hợp MSP
  • API token không hết hạn khi đăng xuất, có thể giới hạn ở phạm vi chỉ đọc hoặc toàn quyền và có thể thu hồi bất cứ lúc nào
  • API token mới chỉ được hiển thị một lần khi tạo, vì vậy cần lưu trong trình quản lý mật khẩu hoặc kho lưu trữ bí mật

Gói cước và bảo mật tài khoản

  • Màn hình gói cước hiển thị tier đăng ký, trạng thái, ngày gia hạn hoặc ngày hết quyền truy cập, chu kỳ thanh toán, số zone đang dùng và số domain tối đa
  • Nếu hạ cấp gói, chỉ số zone cũ nhất trong giới hạn cho phép được giữ hoạt động; các zone còn lại sẽ bị khóa và không thể nhận cập nhật IP
  • Nếu thanh toán thất bại, cần cập nhật phương thức thanh toán để duy trì quyền truy cập
  • Bảo mật tài khoản hỗ trợ 2FA qua email và TOTP; khi bật TOTP, nó sẽ thay thế 2FA qua email
  • Thiết lập TOTP gồm quét mã QR bằng Google Authenticator, Authy hoặc ứng dụng 2FA ưa thích, rồi xác minh mã

Liên kết liên quan

1 bình luận

 
Ý kiến trên Hacker News
  • Tôi là Daniel, một kỹ sư mạng ở Thụy Điển, và đã tạo ra DynIP vì cảm thấy các dịch vụ DDNS hiện có vẫn mắc kẹt trong kiểu mạng của thập niên 2010
    Việc lặp đi lặp lại giao thức cập nhật độc quyền chỉ hỗ trợ HTTP, hỗ trợ IPv6 yếu, thiếu DNSSEC, và không hỗ trợ tốt thiết bị hiện đại khiến DynIP coi RFC 2136 / TSIG update là con đường hạng nhất
    FortiGate generic DDNS và MikroTik /tool dns-update hoạt động mà không cần client riêng, và cũng có cung cấp HTTP API cho các mục đích khác
    Máy chủ DNS có thẩm quyền có thể được truy cập qua IPv6, AAAA glue đã được công bố trong zone cha .dev, và zone của khách hàng phát hành A/AAAA đồng thời hỗ trợ cả client chỉ dùng IPv6
    Với các zone được chọn, có thể bật DNSSEC chỉ bằng một công tắc, và có thể mang theo domain riêng thông qua việc ủy quyền subdomain
    Kiến trúc gồm một primary ẩn không nhận lưu lượng công khai, cùng 2 secondary phân tán địa lý tại Thụy Điển và Thụy Sĩ, nơi xác thực TSIG cục bộ rồi chuyển tiếp về primary
    Cũng cho phép địa chỉ RFC 1918 và CGNAT trong record, để các đội thiết bị di động dùng private APN có thể dùng hostname DNS công khai ổn định trỏ tới IP nội bộ
    Ngoài ra còn có một container Docker nhỏ là ghcr.io/33k-org/dynip-updater, và stack gồm PowerDNS 4.8 authoritative, FastAPI, Postgres, Postfix, Cloudflare, Paddle; dịch vụ đang chạy tại dynip.dev và có cả gói miễn phí

    • Tôi không phải chuyên gia trong mảng DDNS, nhưng desec.io với tính năng tương tự cũng đáng để xem qua
      Nó cung cấp các tính năng như IPv6, DNSSEC, dùng domain riêng, và là một dự án mã nguồn mở đồng thời vận hành dịch vụ hosting miễn phí ổn định
      Có thể tôi không tìm thấy trong tài liệu, nhưng bên này có hỗ trợ IPv6 prefix delegation, nên khi IPv6 prefix mà ISP cấp cho router thay đổi thì chỉ cần cập nhật network prefix của một domain bất kỳ
      Ở châu Âu, prefix này không cố định và thay đổi mỗi lần kết nối lại với ISP, nên tính năng tự động cập nhật chỉ phần mạng trong khi giữ nguyên phần host rất hữu ích
      Ví dụ: /update?myipv6:nas.home.mydomain.tld=2003:e6:bee:affe::/56
    • Trên Firefox Focus cho Android, trang sẽ không hoạt động nếu không tắt chặn theo dõi, vốn là mặc định
      Khi bấm vào liên kết xác nhận email thì hoàn toàn không có thông báo đã xác nhận xong hay hiển thị trạng thái nào, nên khá khó hiểu
    • Nếu bấm “change password” trên dashboard thì liên kết đặt lại sẽ được gửi qua email, nhưng trang đặt lại chỉ hiện trong phiên đã đăng xuất
      Khi đang đăng nhập, liên kết sẽ chuyển hướng về trang chủ dashboard, nên người dùng bình thường sẽ nhận email ngay sau khi bấm nút đổi mật khẩu và vì vậy phải đăng xuất trước
      Sẽ mượt hơn nếu email ghi rõ “hãy đăng xuất trước”, hoặc liên kết tự kết thúc phiên hiện tại rồi hiển thị trang đặt lại
    • Tôi tò mò không biết có thể cân nhắc hỗ trợ L402 để agent có thể mua dịch vụ hay không
    • Tôi lo rằng nếu cho phép địa chỉ RFC 1918 và CGNAT trong record thì có thể phát sinh vấn đề bảo mật, kiểu đưa private server của người khác vào domain của mình để thực hiện các cuộc tấn công dạng XSS
      Tôi nhớ mang máng đây từng là điều cấm kỵ về mặt bảo mật
  • Phần chào hàng trông khá ổn, nhưng hiện giờ tôi chưa có thời gian dùng thử ngay
    Tuy vậy, nếu tôi không đọc phần giải thích trong các bình luận ở đây thì có lẽ tôi đã đóng tab ngay từ landing page
    Xin lỗi vì nói quá thẳng, nhưng trang này trông giống một landing page sản xuất hàng loạt mang cảm giác AI thường thấy; không có nghĩa là thực sự như vậy, nhưng vì phần giải thích rất tốt nên sẽ hay hơn nếu thêm cá tính để tạo khác biệt
    Ngoài ra, tốt hơn là không nên tạo tài khoản Hacker News riêng cho dự án
    “Đừng đặt tên người dùng là tên công ty hoặc tên dự án. Điều đó tạo cảm giác đang dùng HN để quảng bá và như thể bạn không tham gia với tư cách một con người. Không nhất thiết phải dùng tên thật, nhưng cần có tín hiệu cho thấy ở đây là con người chứ không phải thương hiệu. Nếu muốn đổi tên người dùng, hãy gửi mail tới hn@ycombinator.com.”
    https://news.ycombinator.com/item?id=22336638
    Cũng có thể tham khảo https://news.ycombinator.com/showhn.html

    • Góp ý hay đấy, và không cần phải xin lỗi đâu
      Hiện giờ tôi đang ở giai đoạn có những điều mình biết và chưa biết, có hy vọng và ước mơ, cùng một khối kiến thức kỹ thuật khá lớn; phần thiết kế thì không mạnh, nhưng trước mắt tôi thấy như vậy cũng ổn
    • Cả bình luận dài ở đây cũng trông như một đoạn văn sản xuất hàng loạt bởi LLM rất lộ liễu
      Theo tiêu chuẩn của Pangram thì là 100%, và thật ra kể cả không có công cụ đó cũng dễ nhận ra, nên việc vẫn có không ít người ở đây không phân biệt được điều đó khá là u ám
  • Thật vui khi thấy có thêm cạnh tranh trong lĩnh vực này
    Tuy vậy, nếu muốn tự host mà không quá bận tâm đến độ ổn định hay mức độ dễ dùng thì bind9 cũng hỗ trợ RFC 2136 DNS UPDATE và DNSSEC
    Trong cấu hình của tôi, router ở nhà không biết nói DNS UPDATE nên tôi cũng tự viết một file thực thi Go nhỏ để chuyển đổi các yêu cầu HTTP

    • BIND có thể làm được nhiều thứ, bao gồm cả RFC 2136, và tôi đã xem qua nhiều lựa chọn trước khi chốt kiến trúc hiện tại
      Tôi đã tạo một vài test case trên FortiGate, và DynIP ban đầu cũng xuất phát từ việc sao chép-dán đơn giản, chuyên cho FortiGate, chạy trên DNS nội bộ
      Có các ví dụ mã có thể dùng nội bộ trên nhiều host Windows hay Linux, và nếu bạn có thiết bị IoT trong homelab thì cũng có cả ví dụ Arduino
      Việc tạo file thực thi Go cũng là một hướng tốt, nên hãy theo dõi các cập nhật dưới /docs
  • Việc hỗ trợ RFC 2136 xứng đáng được cộng điểm thưởng, và hoạt động dễ dàng với external-dns
    Tôi đã dùng Kubernetes on-premise cùng external-dns trong nhiều năm, kết hợp với một máy chủ BIND tự host cấu hình tối thiểu trên host công khai

    • Tổ hợp external-dns + RFC 2136 là một điểm rất đáng giá
      Đã có sẵn hướng dẫn vận hành fleet, và mẫu Kubernetes là phần mở rộng tự nhiên nên có lẽ nên viết hướng dẫn
  • Trước đây tôi tự viết script OpenWrt DDNS để cập nhật AWS Route 53 hoặc Cloudflare DNS, và như vậy là đủ giải quyết vấn đề
    Sau khi Tailscale xuất hiện thì tôi không còn phải bận tâm đến DDNS hay CGNAT nữa

    • Tailscale, Netbird, WireGuard đều rất tuyệt, và bây giờ có những công cụ như vậy đúng là một thời điểm thật tốt
      Tôi đã viết hướng dẫn ở https://dynip.dev/guides/tailscale giải thích chúng có thể cùng tồn tại với nhau như thế nào và vì sao
      Script OpenWrt DDNS hơi phiền vì key và secret, nhưng tôi khá hài lòng vì tính năng snippet giúp không phải đoán “nó hoạt động như thế nào?”
    • Giờ tôi dùng cả hai
      Tôi dùng DynIP cho dịch vụ công khai, còn thứ gì chỉ mình tôi cần truy cập thì dùng Tailscale, nhờ vậy bề mặt tấn công giảm đi đáng kể
      May là không cần phải lo về CGNAT
  • Tôi đã thử đăng ký nhưng email xác minh không đến
    Ngay sau khi đăng ký cũng không thấy dấu vết tương tự trong log máy chủ mail, và dù đã yêu cầu gửi lại vài lần thì đến 6–7 tiếng sau hộp thư vẫn không có gì

    • Tôi đã kích hoạt gửi lại cho tất cả email chưa xác minh, nên có thể đã tạo token xác minh mới
    • Nếu cho tôi biết địa chỉ thì tôi sẽ kiểm tra
  • Tôi muốn hỏi liệu token xác thực của gói miễn phí có đúng là hết hạn sau 24 giờ không
    Tôi đã xem claim exp của JWT, và muốn biết điều này trước khi bỏ thời gian cho việc migration
    Điều cốt lõi là gói miễn phí có bền vững hay không

    • “long-lived token” ở đây là token API quản trị dùng cho tạo/xóa/truy vấn zone hoặc tự động hóa kiểu Terraform, chứ không phải TSIG key dùng cho cập nhật DNS thực tế
      Mọi zone đều nhận TSIG key riêng ở tất cả các gói, và chính key đó đảm nhiệm cập nhật thực tế
      Gói miễn phí quản lý zone qua dashboard, còn gói trả phí cung cấp thêm token API để quản lý theo cách lập trình
      Vì vậy token xác thực được dùng làm bearer cho API, còn TSIG vẫn có hiệu lực cho đến khi domain bị xóa
      Gói miễn phí cho phép 5 zone và mỗi zone có TSIG key riêng luôn hoạt động, nên trừ khi bạn tạo, cập nhật và xóa hàng trăm zone thì không cần phải trả tiền
  • Cảm ơn vì có rất nhiều bình luận và câu hỏi tuyệt vời, tôi vừa đưa con gái đi học bơi về trong vài tiếng và sẽ tiếp tục theo dõi thread

    • Bơi thì tốt, và thủy động lực học cũng quan trọng
      Tôi tò mò không biết bạn có từng cân nhắc những thứ như https://github.com/hickory-dns/hickory-dns không
      Dĩ nhiên không phải mọi thứ đều cần làm bằng Rust
  • Trông khá thú vị, và tôi đang dùng DDNS để cung cấp nhiều dịch vụ từ máy chủ tại nhà cho các client bên ngoài
    Hiện tôi dùng NO-IP DDNS, gói miễn phí của nó khá hào phóng, nhưng tôi không hài lòng vì nó không hỗ trợ những thứ như Let’s Encrypt
    Tôi đang cân nhắc mua domain ở Cloudflare, và muốn biết cụ thể DynIP khác biệt ở điểm nào

    • Nếu điều khiến bạn không hài lòng với NO-IP hiện tại là không dùng được Let’s Encrypt, thì bạn đã tìm thấy chính tính năng tạo ra khác biệt cho mình rồi
  • Kiểu cập nhật chỉ qua HTTP(S) theo phong cách những năm 2000 cũng rất hay
    Chỉ cần có curl/wget/fetch là chạy được ở bất cứ đâu, và nếu muốn thì chỉ cần thêm token
    Có vẻ duckdns vẫn còn hỗ trợ cách này, và vì không cần client riêng nên gần như chạy được ở mọi nơi

    • Kiểu dyndns với curl/wget/fetch cũng đúng, và bạn có thể xem /docs để biết thêm các tính năng đặc biệt khác có thể làm
      Ở đây mục tiêu không chỉ bao gồm curl/wget/fetch mà là hướng tới một nền tảng tính năng rộng hơn