DNS dịch tên miền mà con người có thể đọc được thành địa chỉ IP mà máy tính sử dụng để liên lạc. Khi DNS bị hỏng, mọi thứ đều bị hỏng - người dùng không thể truy cập trang web của bạn, các API không thể giao tiếp và các dịch vụ bị lỗi theo những cách khó hiểu. Hiểu DNS giúp bạn khắc phục những sự cố này và đặt cấu hình khám phá dịch vụ đáng tin cậy.
Điều kiện tiên quyết
- Hiểu về địa chỉ IP từ Phần 2
- Truy cập thiết bị đầu cuối để kiểm tra các lệnh DNS
- Tùy chọn: Tên miền bạn kiểm soát (để cấu hình thực hành)
Cách hoạt động của độ phân giải DNS
Khi bạn nhập api.github.com vào trình duyệt, máy tính của bạn cần tìm địa chỉ IP. Đây là những gì thực sự xảy ra:
- Kiểm tra bộ đệm cục bộ (máy tính của bạn ghi nhớ các lần tra cứu gần đây)
- Hỏi máy chủ DNS đã định cấu hình của bạn (thường là ISP của bạn hoặc 8.8.8.8)
- Máy chủ đó có thể yêu cầu máy chủ DNS gốc cung cấp thông tin
.com - Cuối cùng ai đó trả lại địa chỉ IP như
140.82.112.3 - Trình duyệt của bạn kết nối với địa chỉ IP đó
Hãy theo dõi quá trình này:
# See basic DNS resolution
nslookup api.github.com
# Get more detailed information
dig api.github.com
# Trace the full resolution path
dig +trace api.github.com
Tùy chọn +trace hiển thị từng bước trong quy trình giải quyết, điều này rất có giá trị trong việc gỡ lỗi các sự cố DNS.
Các loại bản ghi DNS
DNS lưu trữ các loại thông tin khác nhau bằng cách sử dụng nhiều loại bản ghi khác nhau. Dưới đây là những thứ bạn sẽ gặp thường xuyên nhất:
A Bản ghi: Địa chỉ IPv4
Bản ghi ánh xạ tên miền tới địa chỉ IPv4:
# Look up A records
dig api.stripe.com A
Bạn sẽ thấy đầu ra như:
api.stripe.com. 300 IN A 54.187.174.169
api.stripe.com. 300 IN A 54.187.205.235
Nhiều bản ghi A cung cấp khả năng cân bằng tải và dự phòng. Máy tính của bạn sẽ thử các địa chỉ IP khác nếu một địa chỉ bị lỗi.
Bản ghi AAAA: Địa chỉ IPv6
Bản ghi AAAA hoạt động giống như bản ghi A nhưng dành cho IPv6:
# Check for IPv6 addresses
dig google.com AAAA
Bản ghi CNAME: Bí danh
Bản ghi CNAME tạo bí danh trỏ đến các tên miền khác:
# Many CDNs use CNAME records
dig www.github.com CNAME
Bạn có thể thấy:
www.github.com. 3600 IN CNAME github.com.
Điều này có nghĩa www.github.com là bí danh của github.com.
Bản ghi MX: Máy chủ thư
Bản ghi MX chỉ định nơi email sẽ được gửi:
# Check mail servers
dig github.com MX
Đầu ra hiển thị số ưu tiên (thấp hơn = mức ưu tiên cao hơn) và tên máy chủ máy chủ thư.
Bản ghi TXT: Văn bản tùy ý
Bản ghi TXT lưu trữ thông tin văn bản, thường được sử dụng để xác minh và cấu hình:
# TXT records often contain verification tokens
dig github.com TXT
Bạn sẽ thấy các bản ghi được sử dụng để xác minh miền, chính sách bảo mật email và siêu dữ liệu khác.
Bộ nhớ đệm DNS và TTL
Phản hồi DNS bao gồm giá trị TTL (Thời gian tồn tại) cho khách hàng biết thời gian lưu thông tin vào bộ đệm:
# Notice the TTL values in DNS responses
dig api.example.com
Tìm kiếm các số như 300 hoặc 3600 trong đầu ra - đây là các giá trị TTL tính bằng giây.
Tại sao bộ nhớ đệm lại quan trọng
Bộ nhớ đệm DNS cải thiện hiệu suất nhưng có thể gây nhầm lẫn:
- TTL ngắn (60-300 giây): Các thay đổi có hiệu lực nhanh chóng nhưng có nhiều truy vấn DNS hơn
- Long TTL (3600+ giây): Hiệu suất tốt hơn nhưng các thay đổi lan truyền chậm
Khi bạn cập nhật bản ghi DNS, các giá trị cũ được lưu trong bộ nhớ đệm có thể vẫn tồn tại cho đến khi TTL của chúng hết hạn.
Xóa bộ đệm DNS
Đôi khi bạn cần xóa các mục DNS được lưu trong bộ nhớ cache:
# Linux: flush systemd-resolved cache
sudo systemd-resolve --flush-caches
# macOS: flush DNS cache
sudo dscacheutil -flushcache
# Windows: flush DNS resolver cache
ipconfig /flushdns
Thiết lập bản ghi DNS
Nếu quản lý một miền, bạn sẽ định cấu hình bản ghi DNS thông qua công ty đăng ký hoặc nhà cung cấp DNS của mình.
Cấu hình DNS chung
Đây là thiết lập DNS điển hình cho ứng dụng web:
# Main website
example.com A 203.0.113.10
www.example.com CNAME example.com
# API endpoint
api.example.com A 203.0.113.20
# Mail servers
example.com MX 10 mail.example.com
mail.example.com A 203.0.113.30
# Verification and security
example.com TXT "v=spf1 include:_spf.google.com ~all"
Tuyên truyền DNS
Sau khi thay đổi bản ghi DNS, những thay đổi đó cần được phổ biến trên internet. Quá trình này có thể mất từ vài phút đến 48 giờ, tùy thuộc vào giá trị TTL và bộ nhớ đệm.
Kiểm tra sự lan truyền từ các vị trí khác nhau:
# Check from different DNS servers
dig @8.8.8.8 example.com
dig @1.1.1.1 example.com
dig @208.67.222.222 example.com
Các máy chủ DNS khác nhau có thể trả về các kết quả khác nhau trong quá trình truyền bá.
Khắc phục sự cố DNS
Sự cố DNS thường biểu hiện dưới dạng sự cố kết nối không liên tục và khó chẩn đoán.
Các sự cố DNS thường gặp
DDomain hoàn toàn không giải quyết được:
# Test basic resolution
nslookup problematic-domain.com
Nếu điều này không thành công thì có nghĩa là miền không tồn tại hoặc máy chủ DNS của bạn không thể kết nối với các máy chủ có thẩm quyền.
Độ phân giải DNS chậm:
# Time DNS lookups
time nslookup slow-domain.com
Nếu truy vấn DNS mất hơn vài giây, bạn có thể gặp sự cố với máy chủ DNS.
Kết quả không nhất quán:
# Query multiple DNS servers
dig @8.8.8.8 inconsistent-domain.com
dig @1.1.1.1 inconsistent-domain.com
Các kết quả khác nhau cho biết sự cố truyền hoặc sự cố máy chủ DNS.
Cấu hình máy chủ DNS
Kiểm tra máy chủ DNS nào mà hệ thống của bạn sử dụng:
# Linux/macOS: check resolver configuration
cat /etc/resolv.conf
# Show current DNS settings
systemd-resolve --status
Bạn sẽ thấy các mục như:
nameserver 8.8.8.8
nameserver 8.8.4.4
Nếu bạn gặp sự cố DNS, hãy thử chuyển sang máy chủ DNS khác:
- Google:
8.8.8.8,8.8.4.4 - Đám mây bùng phát:
1.1.1.1,1.0.0.1 - OpenDNS:
208.67.222.222,208.67.220.220
DNS trong phát triển ứng dụng
Các ứng dụng hiện đại thường sử dụng DNS để khám phá và cấu hình dịch vụ.
DNS dành riêng cho môi trường
Sử dụng các tên DNS khác nhau cho các môi trường khác nhau:
# Development
api-dev.example.com A 10.0.1.100
# Staging
api-staging.example.com A 10.0.2.100
# Production
api.example.com A 203.0.113.100
Điều này cho phép bạn sử dụng cùng một mã ứng dụng trên các môi trường bằng cách chỉ thay đổi cấu hình DNS.
Chuỗi kết nối cơ sở dữ liệu
Thay vì mã hóa địa chỉ IP, hãy sử dụng tên DNS:
# Instead of hardcoding IP addresses
DATABASE_URL = "postgresql://user:pass@10.0.3.100:5432/app"
# Use DNS names for flexibility
DATABASE_URL = "postgresql://user:pass@db.internal.example.com:5432/app"
Điều này giúp việc di chuyển các dịch vụ hoặc thực hiện cân bằng tải trở nên dễ dàng hơn.
Kiểm tra sức khỏe và DNS
Một số ứng dụng sử dụng DNS để kiểm tra tình trạng:
# Remove unhealthy servers from DNS
# Healthy servers: api.example.com points to multiple IPs
dig api.example.com A
# If one server fails, remove its A record
# Users automatically use remaining healthy servers
Cân nhắc về bảo mật DNS
Lưu lượng DNS thường không được mã hóa, điều này tạo ra rủi ro bảo mật.
DNS qua HTTPS (DoH)
Các trình duyệt hiện đại hỗ trợ DNS qua HTTPS, mã hóa các truy vấn DNS:
# Test DNS over HTTPS
curl -H 'accept: application/dns-json' \
'https://cloudflare-dns.com/dns-query?name=example.com&type=A'
Lọc và chặn DNS
Một số mạng chặn hoặc chuyển hướng truy vấn DNS:
# Test if DNS is being filtered
dig @8.8.8.8 blocked-site.example.com
dig @1.1.1.1 blocked-site.example.com
Nếu kết quả khác biệt đáng kể thì quá trình lọc DNS có thể đang diễn ra.
Khám phá dịch vụ và DNS động
Trong môi trường đám mây, địa chỉ IP thay đổi thường xuyên. DNS có thể cung cấp khả năng khám phá dịch vụ động.
DNS container
Nền tảng container thường cung cấp DNS tích hợp:
# In Docker, containers can reach each other by name
docker run --name database postgres
docker run --name webapp --link database myapp
# webapp can connect to "database" hostname
DNS Kubernetes
Kubernetes tự động tạo các mục DNS cho các dịch vụ:
# Services get DNS names automatically
kubectl create service clusterip my-service --tcp=80:8080
# Other pods can reach: my-service.default.svc.cluster.local
Dịch vụ DNS đám mây
Các nhà cung cấp đám mây cung cấp DNS được quản lý tích hợp API:
# AWS Route 53 health checks
# Automatically remove unhealthy targets from DNS
# Azure Traffic Manager
# Route traffic based on performance or geography
# Google Cloud DNS
# Integrate with load balancers and auto-scaling
Tối ưu hóa hiệu suất DNS
Hiệu suất DNS ảnh hưởng đến khả năng phản hồi của ứng dụng.
Kết nối tổng hợp và DNS
Các ứng dụng thực hiện nhiều yêu cầu gửi đi nên xem xét việc lưu trữ DNS:
# Python example: cache DNS lookups
import socket
socket.getaddrinfo('api.example.com', 443) # Cached after first lookup
Tìm nạp trước DNS
Đối với các ứng dụng web, tìm nạp trước DNS cho các tài nguyên bên ngoài:
<!-- Preload DNS for external assets -->
<link rel="dns-prefetch" href="//fonts.googleapis.com" />
<link rel="dns-prefetch" href="//cdn.example.com" />
Giám sát hiệu suất DNS
Giám sát thời gian phân giải DNS như một phần của hiệu suất ứng dụng:
# Simple DNS timing
time nslookup api.example.com
# More detailed timing with dig
dig api.example.com | grep "Query time"
Kiểm tra DNS cục bộ
Để phát triển, bạn có thể ghi đè DNS cục bộ:
Tập tin /etc/hosts
Thêm mục bỏ qua DNS để kiểm tra:
# Edit /etc/hosts (requires sudo)
sudo vim /etc/hosts
# Add test entries
127.0.0.1 local-api.example.com
10.0.1.100 staging-api.example.com
Các ứng dụng sẽ sử dụng các ánh xạ này thay vì truy vấn DNS.
Máy chủ DNS cục bộ
Chạy máy chủ DNS cục bộ để phát triển:
# dnsmasq provides simple local DNS
# Add to /etc/dnsmasq.conf:
address=/dev.example.com/127.0.0.1
address=/test.example.com/10.0.1.100
Điều này cho phép bạn kiểm soát DNS cục bộ linh hoạt hơn.
Giám sát và cảnh báo DNS
Lỗi DNS có thể rất nhỏ nhưng có sức tàn phá lớn. Theo dõi tình trạng DNS một cách chủ động:
# Simple DNS monitoring script
#!/bin/bash
DOMAIN="api.example.com"
IP=$(dig +short $DOMAIN | head -n1)
if [ -z "$IP" ]; then
echo "DNS resolution failed for $DOMAIN"
# Send alert
fi
Giám sát production nên kiểm tra:
- Thời gian phân giải DNS
- Ghi lại tính nhất quán trên nhiều máy chủ DNS
- tuân thủ TTL
- Gia hạn chứng chỉ cho tên miền
Trong phần tiếp theo, chúng ta sẽ tìm hiểu về bảo mật mạng và tường lửa - bảo vệ các kênh liên lạc mà DNS giúp thiết lập.
DNS thường vô hình khi nó hoạt động bình thường, nhưng khi nó bị hỏng thì mọi thứ đều ngừng hoạt động. Đầu tư thời gian để tìm hiểu cấu hình DNS của bạn và chủ động theo dõi nó.
Chúc mừng giải quyết!