Một website đã bật HTTP/3 nhưng browser chỉ biết điều đó sau khi kết nối bằng HTTP/2, nhận Alt-Svc rồi quay lại ở lần sau. DNS HTTPS record cho phép công bố thông tin endpoint sớm hơn: protocol qua alpn, hostname đích, port và address hints. Nó thuộc cùng họ Service Binding với SVCB.
RFC 9460 định nghĩa SVCB/HTTPS Resource Records và mapping cho HTTP. Đây không phải “bản ghi ép website dùng HTTPS”, cũng không thay A/AAAA, TLS certificate hay HSTS. Bài này giải thích cách đọc record, triển khai HTTP/3 an toàn và rollback không làm hỏng client cũ.
1. Bài toán trước HTTPS record
DNS truyền thống trả A/AAAA để client biết IP, nhưng không mô tả endpoint thay thế hoặc protocol được hỗ trợ. Client thường phải:
- Resolve hostname.
- Mở TCP/TLS và negotiate HTTP/2 hoặc HTTP/1.1.
- Nhận
Alt-Svcthông báo HTTP/3. - Ở request sau mới thử QUIC/HTTP/3.
HTTPS RR đưa metadata kết nối vào DNS lookup, cho phép client hỗ trợ chuẩn chuẩn bị endpoint/protocol sớm hơn và có thể giảm độ trễ lần đầu. Client không hỗ trợ type 65 vẫn tiếp tục đường A/AAAA truyền thống.
2. SVCB và HTTPS khác nhau ở đâu?
| Record | Mục đích | Ví dụ dùng |
|---|---|---|
SVCB (type 64) | Cơ chế Service Binding tổng quát, cần mapping theo service | Dịch vụ DNS mã hóa hoặc protocol khác có specification riêng |
HTTPS (type 65) | Biến thể tối ưu cho HTTP/HTTPS origin | Công bố HTTP/2, HTTP/3, endpoint và hints |
Không dùng SVCB tổng quát cho web chỉ vì tên nghe rộng hơn. Với origin HTTPS, record HTTPS là lựa chọn đúng theo mapping RFC 9460. RFC 9461 là mapping SVCB cho chính dịch vụ DNS (DoT/DoH/DoQ), không phải hướng dẫn thay HTTPS RR của website.
3. Cấu trúc một HTTPS record
example.com. 300 IN HTTPS 1 . (
alpn="h2,h3"
ipv4hint=192.0.2.10,192.0.2.11
ipv6hint=2001:db8::10,2001:db8::11
)
Các phần chính:
- Owner name: origin được query, ở đây là
example.com. - SvcPriority:
1; số thấp hơn được ưu tiên trong ServiceMode. - TargetName: dấu chấm
.ở ServiceMode nghĩa là dùng owner name làm target. - SvcParams: danh sách key/value như
alpn,port,ipv4hint,ipv6hint.
Cú pháp zone file có thể khác nhẹ trong control panel của DNS provider. Luôn đọc lại record từ authoritative server và public resolver thay vì tin giao diện đã lưu đúng.
4. AliasMode và ServiceMode
AliasMode: priority bằng 0
example.com. 300 IN HTTPS 0 svc.example.net.
AliasMode chuyển việc tra HTTPS RR sang target, tương tự alias dành riêng cho service. Record priority 0 không được mang SvcParams. Nó hữu ích ở apex nơi CNAME truyền thống gây xung đột với SOA/NS và record khác, nhưng hành vi chính xác còn phụ thuộc DNS provider và client.
ServiceMode: priority lớn hơn 0
example.com. 300 IN HTTPS 1 edge-a.example.net. alpn="h2,h3"
example.com. 300 IN HTTPS 2 edge-b.example.net. alpn="h2"
ServiceMode mô tả endpoint có thể kết nối. Client ưu tiên SvcPriority thấp hơn trong các record tương thích. Target phải có address resolution phù hợp và endpoint phải trình TLS certificate hợp lệ cho origin mà client đang truy cập, không chỉ cho hostname target.
5. alpn công bố protocol, không bỏ qua TLS negotiation
alpn="h2,h3" cho biết endpoint cung cấp protocol suites tương ứng. Với h3, client biết có thể thử QUIC/UDP; với h2, nó có thể dùng HTTP/2 trên TLS/TCP.
HTTPS RR không ép client dùng protocol mà nó không hỗ trợ. Client lấy giao giữa ALPN set trong record và tập protocol của mình, sau đó vẫn thực hiện handshake/ALPN thực tế. Nếu server công bố h3 nhưng UDP/443 bị chặn hoặc QUIC listener không hoạt động, kết nối có thể chậm vì fallback.
no-default-alpn loại bỏ default ALPN set và phải đi kèm alpn. Chỉ dùng khi hiểu rõ compatibility; cấu hình sai có thể làm record không còn endpoint tương thích.
6. port cho endpoint thay thế
example.com. 300 IN HTTPS 1 edge.example.net. (
alpn="h2,h3"
port=8443
)
port yêu cầu client dùng port thay thế cho endpoint. Điều này không đổi origin semantics hay TLS identity. Firewall doanh nghiệp, captive portal và network policy có thể chỉ cho phép 443, nên non-default port cần telemetry và fallback đã test.
Đừng dùng port để “che giấu” dịch vụ hoặc thay authentication. Nó chỉ là routing metadata công khai trong DNS.
7. ipv4hint và ipv6hint chỉ là hint
Address hints giúp client bắt đầu kết nối trong lúc hoặc trước khi có A/AAAA của TargetName. Chúng không phải nguồn địa chỉ authoritative thay cho address records:
- Duy trì A/AAAA đúng cho target.
- Đồng bộ hints với traffic steering, health và geo routing.
- Nếu có
ipv4hint, nên cân nhắcipv6hintđể không làm xấu đường IPv6/NAT64. - Không giả định thứ tự hint là ưu tiên; danh sách địa chỉ là tập không thứ tự.
- Không thêm hints nếu resolver/client đã nhận address record kèm theo và chúng không mang lợi ích đo được.
Hint stale là failure mode nguy hiểm: client có thể thử IP đã bỏ trước khi cập nhật từ A/AAAA. Tự động hóa DNS phải cập nhật target address và hints trong cùng rollout có thứ tự.
8. mandatory quản lý khả năng hiểu key
example.com. 300 IN HTTPS 1 . (
mandatory=alpn
alpn="h2,h3"
)
mandatory liệt kê các SvcParamKey mà client phải hiểu để dùng record. Mỗi key được liệt kê phải thực sự xuất hiện. Nó không có nghĩa “bắt buộc server bật tính năng” mà là cơ chế tránh client bỏ qua một tham số thiết yếu rồi kết nối sai.
Không đưa key thử nghiệm vào mandatory trên toàn traffic trước khi xác nhận client population. Client không hiểu key bắt buộc sẽ coi record đó là incompatible và chọn record/fallback khác theo quy tắc.
9. HTTPS RR không thay TLS certificate hay HSTS
Record cho client biết cách tìm endpoint; TLS vẫn xác thực service identity. Target edge.example.net phục vụ origin example.com phải đáp ứng validation cho example.com. Record DNS không cho phép bỏ qua hostname verification.
DNS resolution được RFC 9460 mô hình hóa như kênh có thể không tin cậy; DNSSEC là tùy chọn và có thể thêm tính xác thực DNS, nhưng TLS vẫn bắt buộc. Kẻ sửa DNS có thể gây mất kết nối/fallback; không được dựa vào record để giảm mức kiểm tra certificate.
HSTS giải quyết browser nâng cấp HTTP sang HTTPS và chống downgrade ở lớp khác. HTTPS RR không phải tín hiệu tương đương HSTS.
10. HTTP/3 cần kiểm tra cả UDP path
Trước khi công bố h3:
- QUIC listener chạy trên đúng IP/port ở mọi region được công bố.
- UDP được mở ở host firewall, security group, load balancer và upstream network.
- TLS certificate, SNI và ALPN hoạt động cho origin.
- Connection migration, MTU/fragmentation và timeout được test trên mobile/enterprise networks.
- HTTP/2 hoặc HTTP/1.1 vẫn là fallback trong giai đoạn rollout.
Publish DNS không thể sửa một QUIC path bị chặn. Ngược lại, server hỗ trợ HTTP/3 nhưng record sai có thể làm browser thử endpoint chết trước khi quay về TCP.
11. Quan hệ với Alt-Svc
ServiceMode HTTPS RR gần với ý tưởng Alt-Svc: cả hai công bố endpoint/protocol thay thế. Khác biệt thực dụng là HTTPS RR có thể đến trước HTTP connection đầu tiên, còn Alt-Svc chỉ xuất hiện sau khi đã nhận response.
Trong rollout, có thể giữ Alt-Svc và HTTPS RR nhất quán. Nếu hai nguồn mâu thuẫn, client chỉ nên thử kết nối phù hợp với quy tắc của cả hai. Tránh để DNS chỉ tới cluster A trong khi Alt-Svc quảng bá cluster B có certificate, port hoặc health policy khác.
12. ECH là bước riêng, không nên cấu hình theo bài cũ
Encrypted ClientHello có thể bootstrap qua service binding với SvcParam ech. Chuẩn hiện hành nằm ở RFC 9848, không phải các tên draft/parameter cũ. ECH che thông tin ClientHello phù hợp, nhưng yêu cầu frontend, key rotation và client support đồng bộ.
Hãy rollout HTTP/3/SVCB cơ bản trước nếu tổ chức chưa vận hành ECH. Không copy blob ECH từ môi trường khác; config gắn với key và public name của deployment.
13. Quy trình rollout ít rủi ro
- Kiểm kê client, DNS provider, authoritative server, CDN/LB và certificate coverage.
- Bật endpoint h2/h3, test trực tiếp bằng SNI/origin đúng trước khi sửa DNS.
- Giảm TTL trước cửa sổ thay đổi đủ sớm.
- Publish một ServiceMode record đơn giản, giữ A/AAAA và fallback hiện tại.
- Chưa thêm hints, port hoặc mandatory nếu chưa có nhu cầu đo được.
- Đọc lại authoritative và nhiều public resolvers; kiểm tra type 65 không bị control panel làm sai.
- Canary theo hostname/region nếu hạ tầng cho phép, rồi tăng dần traffic.
- Theo dõi protocol adoption, handshake, fallback và latency theo network family.
14. Kiểm thử và chẩn đoán
# Đọc HTTPS RR
dig HTTPS example.com +short
dig @authoritative.example HTTPS example.com
# Đọc address của target
dig A edge.example.net +short
dig AAAA edge.example.net +short
# Kiểm tra HTTP/3 nếu curl build hỗ trợ
curl --http3 -I https://example.com/
# So sánh fallback HTTP/2
curl --http2 -I https://example.com/
Kiểm tra từ nhiều resolver/network vì cache, filtering type mới, IPv6 và UDP policy khác nhau. Packet capture hoặc browser netlog giúp biết client có query type 65, chọn target nào, thử QUIC hay fallback.
NXDOMAIN, NODATA, malformed RRset và timeout DNS không giống nhau. Dashboard nên tách DNS lookup failure khỏi QUIC handshake failure và TLS certificate error.
15. Các lỗi cấu hình thường gặp
- AliasMode priority 0 lại mang SvcParams.
- Dùng target không có A/AAAA đúng hoặc certificate không phủ origin.
- Quảng bá
h3khi UDP chưa mở ở một số region. - Hints cũ sau khi CDN đổi IP hoặc geo steering.
- Dùng non-default port bị firewall chặn mà không có fallback.
- Đưa unknown key vào
mandatoryquá sớm. - Chỉ kiểm tra resolver nội bộ, không kiểm tra authoritative/public path.
- Xóa A/AAAA vì nghĩ HTTPS RR thay thế hoàn toàn.
- TTL quá dài làm rollback mất nhiều giờ.
16. Checklist production
- Đã chọn đúng HTTPS RR cho web và hiểu rõ AliasMode/ServiceMode.
- Target, priority, ALPN, port và parameter syntax được đọc lại từ DNS thật.
- Certificate xác thực origin, không chỉ target hostname.
- A/AAAA của owner/target và address hints nhất quán.
- HTTP/3 hoạt động qua UDP ở mọi region; TCP fallback vẫn khỏe.
- Record không phụ thuộc unknown mandatory key ngoài client support.
- Alt-Svc và HTTPS RR không quảng bá topology mâu thuẫn.
- TTL, canary, rollback và cache propagation có runbook.
- Metrics tách DNS, QUIC, TLS, protocol adoption và fallback latency.
- Client cũ bỏ qua type 65 vẫn truy cập bình thường.
HTTPS/SVCB record là cơ chế discovery, không phải phép màu tăng tốc. Nó có giá trị khi metadata DNS phản ánh chính xác endpoint đang khỏe, certificate đúng và đường UDP thật sự hoạt động. Bắt đầu bằng record đơn giản, giữ fallback, đo client thật rồi mới thêm hints, port, mandatory hoặc ECH.




Chưa có bình luận. Hãy là người đầu tiên chia sẻ ý kiến.