Tìm hiểu về domain name system
Tổng quan
DNS - Domain Name System hay hệ thống tên miền là một cơ sở dữ liệu phân tán nằm trên các server khác nhau lưu thông tin ánh xạ giữa domain name và địa chỉ IP. DNS thực hiện dịch domain name tới một địa chỉ IP và ngược lại.
Sau đây là sơ đồ hoạt động của DNS.
Một số khái niệm trong DNS
Domain name space
Là một cấu trúc dạng cây chứa toàn bộ không gian domain như hình ảnh sau đây:
Domain
Là một nhánh của domain name space. Sau đây ví dụ về domain "purdue.edu".
Domain name
Mỗi node trong cây có một nhãn. Một domain name của bất kỳ một node nào trong cây là thứ tự các nhãn trong đường dẫn từ node đó đến root, tên mỗi node được phân cách bằng dấu chấm
.
Resource Record
Thông tin về domain name được lưu trong các resource record. Mỗi resource record đặc tả thông tin về một đối tượng cụ thể. DNS server sử dụng các record này để trả lời các DNS query. Dưới đây là một vài resource record phổ biến:
- SOA - Start of authority: Record lưu thông tin quản trị zone và mỗi zone chỉ có duy nhất một SOA.
- NS - Name server: Record lưu ánh xạ domain name tới một danh sách các name server.
- A: Record lưu ánh xạ domain name tới một địa chỉ IP.
- PTR - Reverse-lookup pointer: Record lưu ánh xạ địa chỉ IP tới một domain name.
- MX - Mail exchange: Record lưu ánh xạ domain name tới một danh sách các mail server. Ví dụ khi bạn gửi mail tới contact@example.com thì mail sẽ được chuyển tới mail server được đặc tả trong MX Record.
- CNAME: Record lưu ánh xạ một domain name tới một domain name khác.
Top level domain
Là domain ở cấp cao nhất ngay bên dưới root domain trong hệ thống phân cấp của DNS. Top level domain được chia ra làm 2 loại chính:
- Generic TLD (gTLD)
- Country Code TLD (ccTLD)
Ví dụ một vài gTLD:
- .com: Cho các website thương mại
- .org: Cho các tổ chức phi lợi nhuận
- .edu: Giới hạn trong các trường học và tổ chức
- .net: Ban đầu giới hạn trong các tổ chức hạ tầng mạng nhưng bây giờ thì không hạn chế
Ví dụ một vài ccTLD:
- .us: United States
- .in: India
- .uk: United Kingdom
- .vn: Vietnam
Hình ảnh cấu trúc cây DNS:
Delegation và Authority
Một trong những mục tiêu chính của thiết kế hệ thống DNS là phân cấp quản trị. Nó đạt được thông qua delegation - uỷ thác.
Cơ quan quản lý domain gọi là Authority. Cơ quan quản lý root domain và gTLD thuộc về ICANN - Internet Corporation for Assigned Names and Numbers. Tên miền ccTLD thì được quản lý bởi các quốc gia.
Một tổ chức quản lý domain có thể chia nó thành các sub-domain. Mỗi sub-domain có thể ủy quyền quản trị cho các tổ chức khác. Ví dụ domain "standford.edu" được uỷ quyền quản trị tới trường đại học Standard.
Name server và Zone
Name server: Là server lưu trữ các resource record về domain và thông tin name server của các sub-domain của nó. Các name server thường chỉ chứa thông tin đầy đủ về một phần của domain name space được gọi là zone.
Lưu ý: Root name server là name server của root domain hay name server gốc của toàn bộ hệ thống DNS.
Sau đây là ví dụ domain
edu
được chia thành các zone như: zone berkeley.edu, zone purdue.edu và zone nwu.edu zone. Và bản thân edu
cũng là một zone.DNS Resolver
Phía client của DNS gọi là DNS Resolver. DNS Resolver chịu trách nhiệm thực hiện các DNS query.
DNS Query
Có 3 loại DNS query:
- Recursive query: Truy vấn đệ quy
- Iterative query: Truy vấn lặp đi lặp lại
- Inverse query: Truy vấn domain name cho địa chỉ IP chỉ định
Sau đây là các bước khi thực hiện phân giải tên miền chẳng hạn
rutgers.edu
.- Resolver sẽ gửi một query tới DNS local
- DNS local sẽ tìm kiếm
rutgers.edu
trong cơ sở liệu của nó. Nếu có trả về địa chỉ IP cho Resolver. Nếu không thực hiện bước tiếp theo. - Resolver sẽ gửi query tới root name server
- Root name server sẽ uỷ thác trả lời query đến name server của domain
.edu
- Name server của domain
.edu
tiếp tục uỷ thác trả lời query đến name server của domainrutgers.edu
- Trả về thông tin IP được lấy từ A record cho Resolver.
Một vài mẹo khi sử dụng DNS
Cấu hình DNS local sử dụng hosts file
Tôi gặp một tình huống như sau: Khách hàng sẽ migration server sang một server mới mà không stop service trên server cũ + một số rule sercurity mà khách hàng config 2 server vs thông tin kiểu như sau:
- Domain name
example.com
được gắn với IP của server A. - Cả server A và server B đều có cùng config
server_name = example.com
trên web server.
Vậy làm thế nào để access vào website
example.com
của server B?
Tôi thêm config sau vào file hosts với path là
/etc/hosts
ở các máy hệ linux hay mac.SERVER-B_IP_ADDRESS example.com
Lưu ý: Host file được sử dụng giống như một resource record để phân giải domain name tới địa chỉ IP.
Khi đó nếu bạn gõ
example.com
lên browser nó sẽ chạy đến website example.com
của server B thay vì server A. Để xác nhận xem config đã hoạt động ổn chưa bạn bật Develop Tools
của browser rồi kiểm tra thông tin Headers
của request có dạng như sau:Request URL: http://example.com/
Request Method: GET
Status Code: 200 OK
Remote Address: SERVER_ADDRESS
Referrer Policy: no-referrer-when-downgrade
Cấu hình DNS cho domain name
Để một website hoạt động thì ta phải thực hiện thao tác trỏ domain name về website đó. Và có 2 cách để làm việc này đó là:
- Trỏ thẳng domain name tới địa chỉ IP của server chứa website đó.
hoặc - Thêm thông tin name server của nhà cung cấp server vào domain name.
Sau khi config xong bạn có thể sử dụng tool sau để kiểm tra thông tin cấu hình domain name:
https://ipinfo.info/html/ip_checker.php/
https://ipinfo.info/html/ip_checker.php/
Sử dụng CNAME record
Giả sử bạn có 2 website là
example.com
và example.vn
trên cùng một server. Khi đó bạn có thể config 2 domain name trỏ đến cùng một địa chỉ IP nhưng nếu bạn có ý định đổi địa chỉ IP của server thì bạn phải config IP lại cho cả 2 domain name trên.
Tuy nhiên nếu sử dụng CNAME record chẳng hạn trỏ domain name
example.vn
tới domain name example.com
như ví dụ bên dưới thì khi đó bạn cần config IP lại chỉ ở domain main example.com
mà thôi.NAME TYPE VALUE
---------------------------------------
example.vn. CNAME example.com.
example.com. A 192.0.2.23