Cụm DNS
Cụm DNS giữ mọi vùng mà máy chủ này host đồng bộ với các nameserver khác, giống như DNS cluster của cPanel hay DNS đa máy chủ của DirectAdmin. Khi được bật, mọi thay đổi vùng - một website được thêm hoặc gỡ, một bản ghi được sửa trong panel người dùng hoặc trình sửa vùng của quản trị, một cập nhật DNS động, một bản ghi DKIM hay TLSA do hệ thống mail ghi - đều được đẩy tới mọi peer đã đăng ký trong vài giây, và một lần đối soát hằng đêm đẩy lại mọi thứ và dọn những gì không còn tồn tại.
Hỗ trợ hai loại peer:
| Loại peer | Nó là gì | Vùng được chuyển tới đó thế nào |
|---|---|---|
| HiTechCloud Panel (khuyến nghị) | Một máy chủ HiTechCloud khác: một máy chủ đầy đủ, hoặc một máy chủ được cài với vai trò DNS-only không host website nào. | Được đẩy tới panel quản trị của peer trên cổng 2087 (POST /api/dns/cluster/sync), xác thực bằng HMAC trên cluster token của peer. Peer phục vụ vùng từ BIND riêng của nó, dưới dạng bản sao master của tệp vùng hoặc dưới dạng slave chuyển vùng từ máy chủ này (AXFR + NOTIFY). |
| Nhà cung cấp DNS bên thứ ba | Một máy chủ cPanel/WHM (thường là node WHM DNS-only), một máy chủ DirectAdmin, một máy chủ Plesk, hoặc một tài khoản Cloudflare. | Các bản ghi của vùng được phản chiếu qua API riêng của nhà cung cấp. Nhà cung cấp giữ bản ghi SOA và NS ở đỉnh vùng của riêng họ. |
Hãy dùng HiTechCloud Panel DNS - cụm BIND có sẵn - cho các nameserver của bạn: cài HiTechCloud trên hai máy chủ nhỏ trở lên, trỏ ns1/ns2 về chúng, và thêm từng máy làm peer. Cách này không cần tài khoản bên thứ ba, giữ việc ký DNSSEC trên máy chủ này, và hỗ trợ cả chế độ copy lẫn AXFR.
Nhà cung cấp bên thứ ba được hỗ trợ cho di chuyển và cùng tồn tại: giữ một node WHM DNS-only luôn cập nhật trong khi các tài khoản chuyển khỏi cPanel, giữ vùng tại Cloudflare vì nhà đăng ký đã trỏ về đó, hoặc chạy DNS của một máy Plesk song song. Chúng không phải thiết lập nameserver chính được khuyến nghị.
Yêu cầu
- Panel quản trị (cổng 2087) của mọi peer HiTechCloud phải truy cập được từ máy chủ này; BIND9 được cài ở đó (trình cài native làm việc này; vai trò dns-only là đủ).
jqtrên máy chủ này (đượcINSTALL.shcài).- Với nhà cung cấp bên thứ ba, một thông tin xác thực API có quyền quản lý vùng DNS (xem từng nhà cung cấp bên dưới).
Bật cụm
HiTechAdmin > Tên miền > Cụm DNS > Enable DNS Clustering, hoặc:
hitechcloudcli dns-cluster enable
Khi bật, cluster token của máy chủ này được tạo (hiển thị trên trang và qua hitechcloudcli dns-cluster token), cron đối soát hằng đêm được cài (/etc/cron.d/hitechcloud-dns-cluster, giờ chạy cấu hình được trên trang), và các mục allow-transfer / also-notify mà BIND cần cho peer chế độ slave được ghi.
Trang có ba phần:
- Máy chủ này - URL và token mà một master cần để đẩy vùng tới đây. Máy chủ DNS-only chỉ cung cấp những thông tin này; nó không có peer riêng.
- Cài đặt cụm - vai trò của máy chủ (master hoặc DNS-only), BIND cục bộ có tiếp tục là máy chủ có thẩm quyền khi phản chiếu sang nhà cung cấp bên thứ ba hay không, và giờ chạy đối soát hằng đêm.
- Peer và nhà cung cấp DNS - bảng các đích, với từng peer: loại, chế độ, đã bật, lần đồng bộ gần nhất, lần thành công gần nhất, số vùng đã đẩy, và lỗi gần nhất. Mỗi hàng có Kiểm tra, Đồng bộ, Bật/Tắt và Gỡ bỏ; Đồng bộ tất cả ngay đẩy mọi vùng tới mọi peer ở chế độ nền.
Cấu hình nằm trong /etc/hitechcloud/bind9/cluster.json (quyền 0600 - nó chứa thông tin xác thực); bảng trạng thái trong /etc/hitechcloud/bind9/cluster-status.json; nhật ký đẩy trong /var/log/hitechcloud/dns-cluster.log.
Thêm một peer HiTechCloud
Trên peer (máy chủ sẽ nhận vùng):
hitechcloudcli dns-cluster enable # prints the peer's token
Trên máy chủ này, tại trang Cụm DNS chọn HiTechCloud Panel, nhập tên, URL của peer (https://ns2.example.com:2087), token, và chế độ; hoặc:
hitechcloudcli dns-cluster add-peer ns2 https://ns2.example.com:2087 <token> --mode copy
hitechcloudcli dns-cluster add-peer ns3 https://203.0.113.3:2087 <token> --mode slave --ip 203.0.113.3
| Chế độ | Điều gì xảy ra | Khi nào dùng |
|---|---|---|
| copy (mặc định) | Toàn bộ tệp vùng được gửi đi; peer lưu nó trong thư mục BIND của mình (.../hitechcloud/cluster/db.<zone>) và phục vụ nó như một vùng master của riêng nó. | Đơn giản nhất; hoạt động qua NAT và tường lửa chặn cổng 53 TCP giữa các máy chủ; peer vẫn tiếp tục phục vụ kể cả khi máy chủ này ngừng hoạt động nhiều ngày. |
| slave | Peer đăng ký vùng dưới dạng type slave với máy chủ này làm master. Máy chủ này thêm IP của peer vào allow-transfer và also-notify, nên BIND thông báo cho peer và nó chuyển vùng (AXFR). | Mô hình primary/secondary truyền thống; bản sao của peer luôn là thứ chính BIND đã chuyển, kể cả chữ ký DNSSEC. Cần mở cổng 53 TCP từ peer tới máy chủ này. |
Một peer có chứng chỉ tự ký trên 2087 có thể được thêm với Chấp nhận chứng chỉ tự ký (--insecure): mọi yêu cầu vẫn được ký HMAC, chỉ bước kiểm tra chứng chỉ bị bỏ qua. Only these zones (--zones a.com,*.b.net) giới hạn một peer trong một tập con.
Sau khi lưu, mọi vùng hiện có được đẩy tới peer mới ở chế độ nền. Peer không bao giờ ghi đè một vùng mà chính nó host: nếu cùng một tên miền tồn tại dưới dạng website trên cả hai máy chủ, việc đẩy sẽ bị từ chối và hiển thị ở cột Lỗi gần nhất.
Các vùng nhận từ peer được liệt kê trên peer bằng hitechcloudcli dns-cluster received.
Thêm nhà cung cấp DNS bên thứ ba
Mọi nhà cung cấp chạy ở chế độ mirror: ở mỗi lần đẩy, các bản ghi A, AAAA, CNAME, MX, TXT, SRV, CAA, NS (không phải đỉnh vùng) và PTR của vùng được so sánh với những gì nhà cung cấp đang giữ và phần chênh lệch được áp dụng - bản ghi bị xoá ở đây cũng bị xoá ở đó. Bản ghi SOA, NS ở đỉnh vùng và DNSSEC được để nhà cung cấp quản lý. Chọn Tạo zone tại nhà cung cấp nếu chưa tồn tại (mặc định) để tạo các vùng còn thiếu; bỏ chọn để chỉ cập nhật các vùng đã có ở đó.
cPanel / WHM
Dùng API token của WHM (WHM > Development > Manage API Tokens) cho root hoặc một reseller sở hữu các vùng. Các lời gọi được dùng: listzones, dumpzone, adddns, addzonerecord, removezonerecord, removezone (WHM API 1).
hitechcloudcli dns-cluster add-provider cpanel whm-dns --url https://whm.example.com:2087 --user root --token <api token>
Máy chủ WHM DNS-only là đích thường dùng; một máy chủ cPanel đầy đủ cũng hoạt động theo cùng cách.
DirectAdmin
Dùng login key (Admin > Login Keys) cho một người dùng admin có quyền DNS. Các lời gọi được dùng: CMD_API_DNS_ADMIN (create/delete/exists) và CMD_API_DNS_CONTROL (add/select records), đầu ra JSON.
hitechcloudcli dns-cluster add-provider directadmin da-dns --url https://da.example.com:2222 --user admin --token <login key>
Plesk
Dùng API key của Plesk (plesk bin secret_key --create hoặc Tools & Settings > API keys). Các lời gọi được dùng: REST API v2 /api/v2/domains và /api/v2/dns/records. Vùng chưa tồn tại sẽ được tạo dưới dạng một tên miền không có hosting.
hitechcloudcli dns-cluster add-provider plesk plesk-dns --url https://plesk.example.com:8443 --token <api key>
Cloudflare
Dùng API token có quyền Zone:Read và DNS:Edit trên các vùng (và Zone:Edit cùng Account ID để tạo vùng). Các lời gọi được dùng: API v4 /zones và /zones/{id}/dns_records. Bản ghi được tạo không qua proxy (đám mây xám).
hitechcloudcli dns-cluster add-provider cloudflare cf --token <api token> --account-id <account id>
hitechcloudcli dns-cluster add-provider cloudflare cf --token <api token> --no-create-zones --zones example.com
Kiểm tra, đồng bộ và trạng thái
hitechcloudcli dns-cluster list # peers
hitechcloudcli dns-cluster test ns2 # credentials and reachability
hitechcloudcli dns-cluster sync example.com # push one zone (what the panel runs after every change)
hitechcloudcli dns-cluster sync --all # push everything
hitechcloudcli dns-cluster sync --all --peer cf
hitechcloudcli dns-cluster status # per-peer last sync / last error
hitechcloudcli dns-cluster reconcile # what the nightly cron runs
reconcile đẩy mọi vùng rồi báo cho từng peer HiTechCloud danh sách đầy đủ các vùng máy chủ này đang giữ, để peer gỡ những bản sao nhận từ máy chủ này mà không còn tồn tại ở đây.
Cách việc đẩy được kích hoạt
Mọi luồng ghi một vùng đều kết thúc bằng lời gọi hitechcloudcli dns-cluster sync <zone>, chạy ở chế độ nền để không yêu cầu nào phải chờ máy chủ từ xa:
hitechcloudcli zone add|delete|set-address|publish-dkim|tlsa|bimi|...(dịch vụ trên host), vàdomains-dnstrên container stack;- trình sửa vùng DNS, DNS động và API tên miền của panel người dùng;
- trình sửa vùng của panel quản trị và
POST /api/domains/{domain}/dns.
Việc đồng bộ được bỏ qua trong chưa tới một phần nghìn giây khi cụm bị tắt.
API của peer
Một peer HiTechCloud cung cấp, trên cổng quản trị của nó:
| Endpoint | Mục đích |
|---|---|
GET /api/dns/cluster/ping | Xác minh chữ ký; trả về vai trò và phiên bản của peer. |
GET /api/dns/cluster/zones | Các vùng peer đang giữ thay cho các master. |
POST /api/dns/cluster/sync | {"action":"upsert","zone":"...","mode":"copy","content":"..."}, {"action":"upsert","mode":"slave","master":"<ip>"}, {"action":"delete","zone":"..."} hoặc {"action":"reconcile","zones":[...]}. |
Các yêu cầu mang X-HiTechCloud-Timestamp (giây Unix, chấp nhận trong vòng 5 phút) và X-HiTechCloud-Signature: sha256=<hex HMAC-SHA256(token, "<timestamp>.<body>")>. Các endpoint này hoạt động dù REST API JSON có được bật hay không - một peer DNS-only không có người dùng API nào để cấp token. Xoay vòng token trên trang (hoặc hitechcloudcli dns-cluster token --rotate) sẽ làm mất hiệu lực mọi master đang đẩy tới đây cho tới khi chúng được cập nhật.
Danh sách slave kiểu cũ
Mục Legacy slave nameservers giữ cơ chế trước đây: các BIND slave thông thường được thêm theo IP, kết nối qua rndc hoặc SSH, với IP của chúng trong allow-transfer/also-notify. Các thiết lập mới nên thêm máy chủ làm peer HiTechCloud ở chế độ slave, cách này làm việc tương tự đồng thời bổ sung báo cáo trạng thái và tự động đăng ký vùng.
Kết nối SSH tới một slave kiểu cũ ghi lại khóa máy chủ của slave ở lần đầu (/var/lib/hitechcloud/dns-cluster/known_hosts) và từ chối khóa khác sau đó. Slave đã được cài lại, hoặc đổi khóa có chủ ý, sẽ bị từ chối cho đến khi dòng cũ của nó được gỡ: thông báo lỗi kèm sẵn lệnh, ssh-keygen -R '<địa chỉ slave>' -f /var/lib/hitechcloud/dns-cluster/known_hosts.