DNAT hay Destination Network Address Translation là kỹ thuật thay đổi địa chỉ IP đích của gói tin khi đi qua router hoặc firewall, cho phép traffic từ bên ngoài truy cập vào các dịch vụ nằm trong mạng nội bộ.
Trong DevOps và SRE, DNAT là cơ chế cốt lõi để expose service ra Internet. Mọi thao tác như cấu hình Load Balancer, mở Port Forwarding hay tạo Kubernetes Service type LoadBalancer đều dựa trên nguyên lý của DNAT để điều phối traffic từ Public IP vào đúng container hoặc server đang chạy ứng dụng.
Ví dụ: Khi user truy cập vào Public IP 203.0.113.1 trên port 80, thiết bị NAT sẽ sửa đích đến của gói tin thành Private IP 192.168.1.10 trên port 8080 nơi Web Server đang lắng nghe.
Quá trình này thường diễn ra ở giai đoạn PREROUTING trong bảng NAT của iptables.
DNAT cho biết điều gì?
Cấu hình DNAT giúp xác định kiến trúc Inbound Traffic của hệ thống:
- Service Exposure: Những dịch vụ nào đang được công khai ra Internet.
- Port Mapping: Sự tương quan giữa Public Port và Private Port.
- Load Distribution: DNAT có thể ánh xạ một Public IP tới nhiều Private IP khác nhau để cân bằng tải như cách kube-proxy hoạt động.
DNAT khác SNAT ra sao?
Hai kỹ thuật này xử lý hai chiều traffic ngược nhau:
- SNAT: Thay đổi IP nguồn. Dùng cho traffic chiều đi Outbound từ trong ra ngoài Internet. Mục đích là ẩn danh tính và chia sẻ Public IP.
- DNAT: Thay đổi IP đích. Dùng cho traffic chiều về Inbound từ ngoài vào trong mạng nội bộ. Mục đích là công khai dịch vụ.
Trong một phiên kết nối trọn vẹn, router thường thực hiện DNAT cho gói tin request đi vào và SNAT cho gói tin response đi ra.
Port Forwarding và DNAT
Port Forwarding là ứng dụng phổ biến nhất của DNAT. Nó cho phép router chuyển tiếp traffic đến một port cụ thể trên Public IP vào một server cụ thể trong mạng LAN.
Tuy nhiên, việc lạm dụng Port Forwarding để expose các dịch vụ nhạy cảm như SSH hay Database trực tiếp ra Internet là một rủi ro bảo mật lớn. Hacker có thể scan port và tấn công trực tiếp vào backend server.
Hairpin NAT (Loopback NAT)
Một vấn đề kinh điển khi dùng DNAT là Hairpinning.
Nếu bạn đang ngồi trong mạng nội bộ và cố gắng truy cập server cũng nằm trong mạng nội bộ đó thông qua Public IP của router, kết nối thường sẽ thất bại. Lý do là gói tin đi tới router, được DNAT quay ngược lại mạng nội bộ nhưng server đích lại trả lời trực tiếp cho client vì cùng subnet mà không qua router, khiến quá trình bắt tay TCP bị lỗi.
Giải pháp là cấu hình Hairpin NAT trên router để nó thực hiện thêm SNAT cho traffic nội bộ này, buộc traffic trả về phải đi qua router.
DNAT trong Kubernetes
Kubernetes sử dụng DNAT dày đặc để quản lý service network:
- NodePort: Kube-proxy tạo rule DNAT trên mỗi node để chuyển traffic từ port của node vào IP của Pod.
- ClusterIP: Traffic gọi đến Virtual IP của Service sẽ được DNAT phân phối ngẫu nhiên tới các Pod backend.
Hiểu rõ cơ chế này giúp bạn troubleshoot các lỗi như connection timeout khi gọi service hoặc mất cân bằng tải giữa các pod.
Troubleshooting DNAT
Khi cấu hình DNAT không hoạt động, hãy kiểm tra:
- Default Gateway: Server backend phải trỏ default gateway về thiết bị thực hiện DNAT để gói tin trả lời đi đúng đường.
- Firewall Rules: Đảm bảo firewall cho phép traffic đi qua port đã forward.
- ISP Blocking: Một số nhà mạng chặn các port phổ biến như 80 hoặc 443 trên IP gia đình.
Checklist cấu hình DNAT an toàn
- Đã giới hạn Source IP được phép truy cập DNAT rule nếu chỉ dành cho đối tác chưa?
- Đã thay đổi port mặc định bên ngoài (ví dụ map port 8080 ngoài vào 22 trong) để giảm thiểu port scan chưa?
- Đã kiểm tra log của router để phát hiện các truy cập bất thường vào port được forward chưa?
- Với Kubernetes, đã cân nhắc dùng Ingress Controller thay vì NodePort để quản lý routing linh hoạt hơn chưa?
- Đã cấu hình Hairpin NAT nếu cần truy cập Public IP từ nội bộ chưa?
Kết luận
DNAT là chìa khóa để mở cửa các dịch vụ nội bộ ra thế giới bên ngoài.
Để vận hành hệ thống ổn định và an toàn, bạn cần phân biệt rõ luồng traffic Inbound, tránh expose trực tiếp các port quản trị và hiểu rõ đường đi của gói tin để xử lý các vấn đề routing phức tạp như Hairpin NAT.







