Sổ tay kỹ thuật / AI Engineering Notebook
AI Engineer
Blog
BlogDomain, DNS, TLS: đưa website ra Internet có tên và có ổ khóa
Hệ thốngCơ bản

Domain, DNS, TLS: đưa website ra Internet có tên và có ổ khóa

Ba mảnh để một website có địa chỉ đẹp và HTTPS: domain là cái tên, DNS là bản đồ tên tới máy chủ, TLS là ổ khóa mã hóa, rồi ghép lại bằng Cloudflare.

Nguyên26 tháng 8, 20268 phút đọcBài 03 / 05
Domain, DNS, TLS: đưa website ra Internet có tên và có ổ khóa

Ba mảnh để một website có địa chỉ đẹp và HTTPS: domain là cái tên, DNS là bản đồ tên tới máy chủ, TLS là ổ khóa mã hóa, rồi ghép lại bằng Cloudflare.

0. Vấn đề

Một website có thể đã chạy thật rồi nhưng chỉ với tới được bằng một địa chỉ dài, khó nhớ, và có khi đổi mỗi lần khởi động lại, bên cạnh cũng không có cái ổ khóa quen thuộc. Muốn nó có một địa chỉ đẹp, cố định như blog.tenban.com kèm ổ khóa HTTPS, cần hiểu ba thứ tách bạch: domain (cái tên), DNS (bản đồ từ tên tới máy chủ), và TLS (ổ khóa mã hóa). Bài này đi qua từng cái, rồi ghép lại thành cách làm với Cloudflare.

Trước khi mổ từng mảnh, nhìn qua bức tranh chung: khi một người gõ tên site vào trình duyệt, chuyện gì thực sự xảy ra để họ tới đúng máy chủ và thấy ổ khóa.

How a named site with a lock reaches its server: the browser first resolves the name blog.tenban.com through DNS at Cloudflare, then opens an HTTPS connection to the Cloudflare edge, and the edge forwards the request inward to the origin server, which keeps no port open.
How a named site with a lock reaches its server: the browser first resolves the name blog.tenban.com through DNS at Cloudflare, then opens an HTTPS connection to the Cloudflare edge, and the edge forwards the request inward to the origin server, which keeps no port open.

Cách kể của bài: đi từ khái niệm của từng mảnh rồi mới ghép chúng lại, chứ không phải cầm tay bấm từng nút trong dashboard. Hiểu vì sao ba mảnh này tồn tại và ăn khớp ra sao mới là phần dùng được lâu.

1. Domain là gì, thuê ở đâu

Bắt đầu từ mảnh dễ thấy nhất là cái tên. Máy tính trên Internet tìm nhau bằng địa chỉ số gọi là IP, ví dụ 203.0.113.24. Địa chỉ số khó nhớ, nên có domain: một cái tên dễ đọc đại diện cho địa chỉ đó.

Domain không mua đứt mà thuê theo năm, từ một nơi gọi là nhà đăng ký (registrar). Vài chỗ phổ biến: Cloudflare Registrar, Namecheap, Porkbun, GoDaddy, Squarespace. Giá tùy phần đuôi (gọi là TLD): .com thường rẻ và quen, .dev .io .app đắt hơn. Thuê ở đâu cũng được, vì domain là một thứ chuẩn chung, không khóa vào nhà bán. Nhớ bật gia hạn để khỏi mất tên khi hết hạn.

2. DNS và nameserver: tấm bản đồ tên tới địa chỉ

Có cái tên rồi thì cần một cuốn danh bạ để tra ra nó chỉ về đâu. Đó là DNS: hệ thống danh bạ của Internet, dịch từ tên (blog.tenban.com) ra địa chỉ hoặc đích thực sự. Khi trình duyệt cần mở một tên, nó hỏi DNS trước để biết đi đâu.

Danh bạ của một domain nằm trên các máy chủ gọi là nameserver. Ai giữ nameserver thì người đó nắm quyền khai báo các bản ghi DNS cho domain. Mặc định khi thuê, nhà đăng ký giữ nameserver, tức DNS do họ quản. Muốn Cloudflare quản DNS thì phải trỏ nameserver của domain sang Cloudflare. Đây chính là bước chuyển quyền quản danh bạ, nói kỹ ở mục 5.

Vài loại bản ghi DNS hay gặp:

  • A: trỏ một tên tới một địa chỉ IP.
  • CNAME: trỏ một tên tới một tên khác.
  • TXT: ghi chú dạng chữ, thường để xác minh quyền sở hữu.

3. TLS là gì, HTTPS, chứng chỉ

Tới đây browser đã biết đi đâu, còn thiếu cái ổ khóa. TLS là giao thức mã hóa đường truyền giữa trình duyệt và máy chủ (tên cũ là SSL, nên hay nghe gộp là SSL/TLS). HTTPS đơn giản là HTTP chạy bên trong TLS. Cái ổ khóa nhỏ trên thanh địa chỉ là dấu hiệu đường truyền đã được TLS bảo vệ, ai chặn giữa đường cũng chỉ thấy dữ liệu đã mã hóa.

Để bật được TLS, máy chủ cần một chứng chỉ TLS. Chứng chỉ là một tờ giấy chứng nhận do một tổ chức tin cậy gọi là CA (Certificate Authority) ký, xác nhận rằng bên đang phục vụ đúng là chủ của tenban.com. Trình duyệt kiểm tờ giấy này, thấy do một CA nó tin ký, thì mới bật ổ khóa. Chứng chỉ có hạn và phải gia hạn định kỳ.

Điểm hay nhầm: thuê domain và có HTTPS là hai việc khác nhau. Thuê domain chỉ cho cái tên. HTTPS cần thêm một chứng chỉ, vốn gắn với máy chủ phục vụ site chứ không gắn với việc bán tên. Vì thế nhà bán domain thường không kèm sẵn HTTPS. Ngày xưa còn phải mua chứng chỉ riêng, khá phiền. Nay có hai đường miễn phí: Let's Encrypt (một CA miễn phí, tự cấp và gia hạn), và các nền tảng như Cloudflare cấp tự động.

4. Vì sao Cloudflare có sẵn TLS

Ba mảnh trên tự chúng còn rời rạc. Cloudflare là chỗ gắn chúng lại, và để hiểu vì sao nó cấp TLS gần như tự động, cần thấy nó đứng ở đâu trong đường đi.

Cloudflare đứng làm lớp trung gian trước site, gọi là edge hoặc reverse proxy. Trình duyệt không nối thẳng vào máy chủ của bạn, mà nối vào Cloudflare; Cloudflare mới chuyển tiếp vào máy chủ. Đó chính là hai bước sau cùng trong sơ đồ ở đầu bài.

Vì mọi kết nối vào đều đi qua Cloudflare, Cloudflare tự xin và tự gia hạn chứng chỉ cho domain của bạn, rồi bật TLS ngay tại lớp edge của nó. Bạn không phải mua, không phải cài, không phải nhớ gia hạn. Đó là lý do nghe như Cloudflare có sẵn TLS: thực ra nó đứng ra lo toàn bộ khâu chứng chỉ thay bạn.

Có một điều kiện để làm được: domain phải do Cloudflare quản DNS. Vì Cloudflare chỉ gắn chứng chỉ vào một tên khi chính nó là bên trả lời DNS cho tên đó, đồng thời đứng làm edge nhận kết nối. Đó là vì sao phải trỏ nameserver sang Cloudflare, phần kế tiếp nói kỹ.

5. Ủy quyền DNS cho Cloudflare

Mục trước kết ở một điều kiện: Cloudflare phải là bên quản DNS. Điều kiện đó gợi lại mục 2, rằng một domain có hai vai tách bạch mà lúc mới thuê thường do cùng một bên giữ.

Ủy quyền DNS: chuyển quyền trả lời các câu hỏi DNS cho một domain từ nameserver mặc định của nhà đăng ký sang nameserver của một bên khác, ở đây là Cloudflare.

The two separate jobs of a domain: a registrar is where you rent the name and renew it, while a nameserver is what answers where the name points. Pointing the nameserver at Cloudflare hands the DNS map to Cloudflare, which then also issues TLS.
The two separate jobs of a domain: a registrar is where you rent the name and renew it, while a nameserver is what answers where the name points. Pointing the nameserver at Cloudflare hands the DNS map to Cloudflare, which then also issues TLS.

Đọc theo sơ đồ, một domain có hai việc rời nhau. Nhà đăng ký giữ hợp đồng thuê: quyền sở hữu và gia hạn cái tên. Nameserver giữ tấm bản đồ: nó trả lời tên này chỉ về đâu. Khi mới thuê, nhà đăng ký thường ôm cả hai. Trỏ nameserver sang Cloudflare là tách vai thứ hai ra: cái tên vẫn thuê ở chỗ cũ, nhưng từ nay Cloudflare là bên trả lời DNS.

Khi Cloudflare vừa cầm bản đồ vừa đứng làm edge, hai điều kiện của mục 4 được thỏa, nên nó tự cấp và tự bật TLS cho domain. Thao tác bấm nút cụ thể nằm trong dashboard của Cloudflare và của nhà đăng ký, thay đổi theo từng bên và không phải trọng tâm ở đây; điều đáng nhớ là bản chất: một lần chuyển quyền quản danh bạ, đổi lại được DNS và HTTPS lo tự động. Sau bước này, việc gắn domain vào máy chủ làm hoàn toàn phía Cloudflare, không đụng gì tới máy chủ.

6. Bảng thuật ngữ nhanh

  • Domain: tên dễ đọc đại diện cho một địa chỉ trên Internet.
  • TLD: phần đuôi của domain, ví dụ .com .dev .io.
  • Registrar (nhà đăng ký): nơi thuê domain.
  • IP: địa chỉ số của một máy trên mạng.
  • DNS: hệ thống dịch tên thành địa chỉ hoặc đích.
  • Nameserver: máy chủ giữ danh bạ DNS cho một domain, ai giữ thì quản DNS.
  • Bản ghi DNS: từng dòng khai báo trong danh bạ, ví dụ A, CNAME, TXT.
  • TLS (SSL): giao thức mã hóa đường truyền.
  • HTTPS: HTTP chạy trong TLS, có ổ khóa.
  • Chứng chỉ TLS: giấy chứng nhận chủ quyền tên miền, do CA ký.
  • CA (Certificate Authority): tổ chức tin cậy đứng ra ký chứng chỉ.
  • Let's Encrypt: một CA miễn phí, cấp và gia hạn tự động.
  • Reverse proxy / edge: lớp trung gian đứng trước máy chủ, nhận kết nối thay.
  • Propagation: thời gian thay đổi DNS lan ra toàn cầu, thường vài phút tới vài giờ.

7. Liên quan

Bài này là lớp tên miền và ổ khóa đặt lên trên một site đã chạy: có domain thật thì site có địa chỉ cố định và HTTPS. Nó nối với: