Bài 6. DỊCH
VỤ TÊN MIỀN
-
Máy
tính và các thiết bị kết nối mạng, cụ thể là các giao diện mạng (network
interfaces) của chúng, sử dụng địa chỉ IP làm định danh. Con người sử dụng tên
miền thay cho IP để dễ nhớ. Vì vậy, cần phân giải/ánh xạ từ tên miền sang địa
chỉ IP và ngược lại.
-
DNS
(Domain Name System) là một hệ cơ sở dữ liệu phân tán dùng để ánh xạ giữa các
tên miền về các địa chỉ IP.
-
DNS
Client: Chạy trên thiết bị của người dùng, nhận tên miền do người dùng cung
cấp, ví dụ người dùng nhập địa chỉ trang web trên trình duyệt, hỏi DNS để biết
địa chỉ IP của máy đích.
-
DNS
Server: Hệ thống phân cấp các DNS servers.
Xem
Mục “1.3 Phân giải tên” trong “Bài 5. Kết nối mạng.”
DNS phân giải tên miền đầy đủ (FQDN - Fully
Qualified Domain Name), ví dụ như vnu.edu.vn, tới một địa chỉ IP. Việc này được
gọi là phân giải xuôi. Phân giải từ địa chỉ IP ra tên miền đầy đủ được gọi là
phân giải ngược.
Nhiều tên miền có thể ánh xạ tới một địa chỉ IP duy
nhất, nhưng ngược lại thì không đúng, một địa chỉ IP chỉ có thể ánh xạ tới duy
nhất một tên miền. Điều này có nghĩa việc phân giải xuôi và ngược có thể không
cho kết quả giống nhau. Các trường trong DNS dùng cho phân giải ngược thường
thuộc trách nhiệm của nhà cung cấp dịch vụ (ISP), như vậy là khá phổ biến cho
việc phân giải ngược tới tên miền của ISP. Đây không phải là yếu tố quan trọng
đối với các trang web nhỏ, nhưng với một số ứng dụng thương mại điện tử thường
yêu cầu việc phân giải xuôi và ngược phải phù hợp với nhau. Ta có thể yêu cầu
ISP thay đổi DNS cho phù hợp với yêu cầu này.
Dưới
đây là một số lệnh ta có thể dùng để tra cứu tên miền.
Lệnh host chấp nhận các tham số là tên miền
đầy đủ hoặc địa chỉ IP. Để tìm phân giải xuôi (tìm địa chỉ IP của tên miền đầy
đủ), ta sử dụng cú pháp như sau:
[root@localhost ~]# host www.linuxhomenetworking.com
www.linuxhomenetworking.com has address 65.115.71.34
Còn để
tìm phân giải ngược (tìm tên miền đầy đủ từ địa chỉ IP)
[root@localhost ~]# host 65.115.71.34
34.71.115.65.in-addr.arpa domain name pointer
65-115-71-34.myisp.net.
Lệnh
nslookup dùng để tìm kiếm địa chỉ IP từ tên miền
[root@localhost ~]# nslookup www.linuxhomenetworking.com
Server:
192-168-1-200.my-site.com
Address: 192.168.1.200
Non-authoritative answer:
Name:
www.linuxhomenetworking.com
Address: 65.115.71.34
Để
thực hiện tìm kiếm tên miền từ địa chỉ IP:
[root@localhost ~]# nslookup 65.115.71.34
Server:
192-168-1-200.my-site.com
Address: 192.168.1.200
Name:
65-115-71-34.my-isp.com
Address: 65.115.71.34
DNS Server có thể
cung cấp các thông tin do DNS client yêu cầu, hoặc chuyển đến một DNS Server
khác để nhờ phân giải hộ trong trường hợp nó không thể trả lời được các truy
vấn về những tên miền không thuộc quyền quản lý, đồng thời cũng luôn sẵn sàng
trả lời các DNS server khác về các tên miền mà nó quản lý. DNS server cấp cao
nhất là Root Server do tổ chức ICANN quản lý.
o Phân loại:
§ Primary DNS server
§ Secondary DNS server
§ Caching DNS server
Khuyến nghị nên sử dụng ít nhất là hai
DNS Server để lưu cho mỗi một zone. Primary DNS Server quản lý các zone và Secondary
Server lưu trữ dự phòng cho Primary Server. Secondary DNS Server được khuyến
nghị dùng nhưng không nhất thiết phải có.
Caching DNS
server chỉ sử dụng cho việc truy vấn, lưu giữ câu trả lời dựa trên thông
tin có trên cache của máy và cho kết quả truy vấn. Chúng không hề quản lý một
domain nào và thông tin mà nó chỉ giới hạn những gì được lưu trên cache của
Server.
BIND (Berkeley Internet Name
Distributed) là phần mềm DNS Server được sử dụng nhiều nhất hiện nay trên thế
giới. Một chương trình phục vụ DNS trên nền các hệ thống
AIX/BSD/HP-UX/Unix/Linux..., Bind chạy nhanh, hiệu suất cao, đáp ứng được số
lượng user lớn, cấu hình linh hoạt, ...
Chạy
lệnh sau để cài đặt BIND
sudo apt install bind9
dsnutils
Thư mục
chứa các tệp cấu hình là /etc/bind/. Tệp cấu hình chính là /etc/bind/named.conf. Các dòng include bao hàm các tệp chứa
các tùy chọn.
Nếu
chỉ sử dụng bind như caching nameserver, đơn giản chỉ cần thêm các địa chỉ IP
của các nameservers khác (ví dụ của các ISP). Chỉnh sửa tệp
/etc/bind/named.conf.options, bỏ chú thích (#) và chỉnh sửa nội dung forwarders
tương tự sau:
forwarders {
8.8.8.8;
8.8.4.4;
};
Để cấu
hình mới có tác dụng, hãy khởi động lại bind bằng cách chạy lệnh sau:
sudo systemctl restart bind9.service
Phần
này trình bày ví dụ cấu hình phân giải tên cho tên miền example.com. Cấu hình
cho các tên miền khác tương tự.
DNS cho phép chia hệ thống tên miền thành các zones
phân cấp, và phân quyền cho các DNS Server quản lý các zones.
Resource
Records (RR) là các bản ghi trong cơ sở dữ liệu DNS, được sử dụng để trả lời
cho các truy vấn từ DNS Client. Có những loại RR sau:
Loại
RR Mô tả
A Host
– Phân giải tên thành địa chỉ IPv4
AAAA Host
– Phân giải tên thành địa chỉ IPv6
MX Mail
exchange – Chỉ đến Email Server trong domain.
CNAME (Alias) Canonical
name – Cho phép một host có thể có nhiều tên.
NS Name
Server – Chứa địa chỉ IP của DNS Server cùng với các thông tin về domain đó.
SOA Start
of Authority – Bao gồm các thông tin về domain trên DNS Server.
SRV Service
– Được sử dụng bởi Active Directory để lưu thông tin về vị trí của Domain
Controllers
PTR Pointer
– Phân giải địa chỉ IP thành tên máy.
Cấu
trúc bản ghi SOA:
Name Class Type Nameserver. Email-address. (
Serial
Refresh Retry Expire Negative-Cache-TTL
)
trong đó,
Name Tên của zone. Có thể sử dụng
“@” là tham chiếu đến zone gốc hiện tại trong tệp /etc/bind/named.conf.
Class Lớp DNS. Trong bản ghi này là
IN (Internet).
Type DNS RR Type. Trong bản ghi
này là SOA.
Nameserver Tên đầy đủ của nameserver. Theo sau là dấu
chấm (.)
Email-address Địa chỉ email của quản trị viên quản trị
nameserver. Ký tự @ trong email phải được thay bằng dấu chấm. Theo sau email
cũng là dấu chấm.
Serial-no Số tuần tự của cấu hình hiện tại.
Refresh Chu kỳ các secondary DNS server
phải đồng bộ với primary DNS server.
Retry Chu kỳ các secondary DNS
server phải thử kết nội lại để thực hiện đồng bộ nếu có lỗi kết nối.
Expire Thời gian hết hạn của các bản
ghi trên secondary DNS server nếu chúng chưa được đồng bộ từ primary DNS
server.
Negative-Cache-TTL Thời gian DNS client/DSN server thứ cấp
được lưu đệm các trả lời tên miền không tồn tại (negative answer). Lưu đệm các
trả lời này giúp không phải hỏi lại một cách lãng phí.
Cấu trúc các bản ghi NS, MX, A,
AAA, CNAME, SRV và PTR:
Name Class Type Data
trong đó, giá trị của các trường phụ thuộc Type,
được mô tả như sau.
Type |
Name |
Class |
Data |
NS |
Thường để trống. Có thể sử
dụng @ để chỉ tên zone hiện tại. |
IN |
Địa chỉ IP hoặc tên của nameserver.
Tên có dấu chấm ở cuối. |
MX |
Domain được dùng cho email,
thường trùng với domain của zone. |
IN |
Tên của mail server với dấu
chấm ở cuối. |
A |
Tên của một máy trong domain |
IN |
Địa chỉ IPv4 |
AAAA |
Tên của một máy trong domain |
IN |
Địa chỉ IPv6 |
CNAME |
Bí danh |
IN |
Tên của bản ghi "A" |
PTR |
Octet cuối của địa chỉ IP của
máy |
IN |
Tên đầy đủ của máy với dấu
chấm ở cuối. |
Phân giải xuôi
Để bắt
đầu cấu hình phân giải xuôi cho miền example.com, thêm zone xuôi mới như sau
vào tệp /etc/bind/named.conf.local:
zone "example.com" {
type master;
file
"/etc/bind/db.example.com";
};
Bây
giờ, tạo tệp /etc/bind/db.example.com và đưa các bản ghi DNS vào tệp này như ví
dụ sau:
$TTL 604800
@ IN
SOA ns.example.com.
root.example.com. (
2
; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
IN
A 192.168.1.10
;
@ IN
NS ns.example.com.
@ IN
A 192.168.1.10
@ IN
AAAA ::1
ns IN A
192.168.1.10
printer IN A
192.168.1.11
hoapc IN A
192.168.1.12
ftp IN CNAME
hoapc.example.com
Để cấu
hình mới có tác dụng, hãy khởi động lại bind bằng cách chạy lệnh sau:
sudo systemctl restart bind9.service
Phân giải ngược
Để bắt
đầu cấu hình phân giải ngược cho miền example.com, thêm zone ngược mới như sau
vào tệp /etc/bind/named.conf.local:
zone "1.168.192.in-addr.arpa" {
type master;
file
"/etc/bind/db.192";
};
Thay
1.168.192 bằng ba octet đầu của mạng (viết ngược). Đồng thời đặt tên tệp của
zone là /etc/bind/db.192 với số là octet đầu của mạng.
Bây
giờ tạo tệp /etc/bind/db.192 và đưa các
bản ghi DNS vào tệp này như ví dụ sau:
$TTL 604800
@ IN
SOA ns.example.com.
root.example.com. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN
NS ns.
10 IN
PTR ns.example.com.
11 IN
PTR printer.example.com.
12 IN
PTR hoapc.example.com.
Mỗi
bản ghi ‘A’ trong /etc/bind/db.example.com cần có một bản ghi ‘PTR’ trong /etc/bind/db.192.
Để cấu
hình mới có tác dụng, hãy khởi động lại bind bằng cách chạy lệnh sau:
sudo systemctl restart bind9.service
Secondary
DNS Server nên được thiết lập để đảm bảo tính sẵn sàng của dịch vụ DNS. Để thiết
lập DNS server thứ cấp, trước hết cần cấu hình DNS server chính để nó được phép
chuyển zone. Thêm tùy chọn allow-transfer vào cả zone xuôi và zone ngược như
sau:
zone "example.com" {
type master;
file
"/etc/bind/db.example.com";
allow-transfer { 192.168.1.13; };
};
zone "1.168.192.in-addr.arpa" {
type master;
file
"/etc/bind/db.192";
allow-transfer
{ 192.168.1.13; };
};
Trong
ví dụ này, DNS server thứ cấp sẽ có địa chỉ IP là 192.168.1.13.
Khởi động
lại DNS server chính để cấu hình mới có tác dụng.
Tiếp
theo, trên DNS server thứ cấp, cài đặt BIND như bình thường, sau đó chỉnh sửa tệp
/etc/bind/named.conf.local và thêm cả zone xuôi và zone ngược như sau:
zone "example.com" {
type slave;
file
"db.example.com";
masters {
192.168.1.10; };
};
zone "1.168.192.in-addr.arpa" {
type slave;
file
"db.192";
masters {
192.168.1.10; };
};
Lưu ý
192.168.1.10 là địa chỉ IP của
nameserver chính.
Khởi động
lại bind để cấu hình mới có tác dụng.
Cấu
hình DNS phân giải tên miền “mydomain.com.vn”, có các server sau:
-
DNS
Server: mydns.mydomain.com.vn; IP: 192.168.20.10/24
-
Web
Server: myweb.mydomain.com.vn; IP: 192.168.20.20/24
-
Samba
Server: samba.mydomain.com.vn; IP: 192.168.30.30/24