DNS có nhiệm vụ phân giải Domain Name thành IP. Ngoài ra có những DNS làm thêm nhiệm vụ khác như chặn các domain có vấn đề…
DNS của ISP thường nhanh hơn các DNS công cộng vì nó cache các domain name mà khách hàng thường dùng và việc trả lại kết quả nhanh còn do khoảng cách địa lý đến máy khách hàng.
Tốc độ trả kết quả còn nhanh hơn nữa nếu DNS được đặt trong cùng mạng cục bộ với máy truy cập và cache theo thói quen truy cập của một nhóm nhỏ người dùng. Các DNS này được gọi là Local DNS.
Local DNS còn giúp đặt tên miền cục bộ, trỏ đến ip trong mạng cục bộ. Điều này giúp giải quyết vấn đề tên miền internet có thể phân giải trong mạng cục bộ.
Dùng RPi để tạo Local DNS rất đơn giản, chỉ với một dòng lệnh cài đặt . Tuy nhiên để tránh xung đột trên cổng 53, trước hết sửa file cấu hình resolved.conf
sudo nano /etc/systemd/resolved.conf
sửa lại dòng cuối thành
DNSStubListener=no
Khởi đông lại systemd-resolved
sudo systemctl restart systemd-resolved
sudo systemctl daemon-reload
Cài đặt dnsmasq
sudo apt-get install dnsmasq
Sau khi cài đặt, sửa file /etc/dnsmasq.conf một chút cho phù hợp với mạng cục bộ. Khởi động lại dnsmasq là xong
service dnsmasq restart
Để kiểm tra hiệu quả của local dns, trên console của RPi chạy dòng lệnh
dig pi.ly-le.info
Kết quả tương tự như sau
; <<>> DiG 9.9.5-9+deb8u11-Raspbian <<>> pi.ly-le.info ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13559 ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;pi.ly-le.info. IN A ;; ANSWER SECTION: pi.ly-le.info. 39218 IN CNAME aaa.bbb.ccc. aaa.bbb.ccc. 60 IN CNAME zzz.aaa.bbb.ccc. zzz.aaa.bbb.ccc. 150 IN CNAME ecz-00-00-123-123.compute-1.amazonaws.com. ecz-00-00-123-123.compute-1.amazonaws.com. 600817 IN A 00.00.000.000 ;; Query time: 35 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Fri Jun 23 13:44:13 +07 2017 ;; MSG SIZE rcvd: 180
Chạy lại lần nữa câu lệnh trên, Query time giảm còn 1 ms vì domain name đã được dnsmasq cache rồi
Thí dụ về dnsmasq.conf
bogus-priv no-hosts cache-size=4096 addn-hosts=/etc/hosts.dnsmasq no-poll domain-needed domain=lyle local=/lyle/ expand-hosts #strict-order server=203.162.4.191 server=203.162.4.190 #server=208.67.222.123 #server=208.67.220.123 #dhcp-range=10.0.0.20,10.0.0.80,240h #dhcp-option=option:netmask,255.255.255.0 #dhcp-option=option:router,10.0.0.1 #dhcp-option=option:dns-server,10.0.0.7 log-facility=/var/log/dnsmasq.log log-async #log-queries log-dhcp
Chú thích
- dnsmasq có thể chỉ hoạt động trên máy cài đặt thay vì trên local network, nếu không bật tính năng dhcp
- Kiểm tra local dns bằng câu lệnh host, thí dụ
host local.name host local.ip
- Kiểm tra dnsmasq có hoạt động trên đúng port hay không bằng câu lệnh
netstat -nlp |grep dnsmasq
Kết quả nhận được phải tương tự như sau
tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 27538/dnsmasq tcp6 0 0 :::53 :::* LISTEN 27538/dnsmasq udp 0 0 0.0.0.0:53 0.0.0.0:* 27538/dnsmasq udp 0 0 0.0.0.0:67 0.0.0.0:* 27538/dnsmasq udp6 0 0 :::53 :::* 27538/dnsmasq