NAT và IP Riêng/Công Khai
Ở Bài 4, traceroute cho thấy một điều lạ: máy bạn có IP riêng 192.168.71.168, nhưng máy chủ trên Internet lại thấy bạn đến từ IP công khai 203.0.113.45. Phép biến đổi giữa hai địa chỉ này là NAT (Network Address Translation) — và nó là lý do Internet IPv4 còn sống được dù đã cạn địa chỉ.
Vấn đề NAT giải quyết
Nhớ Bài 2: IP riêng (192.168.x.x...) không định tuyến được trên Internet. Nhưng mọi thiết bị trong nhà bạn đều dùng IP riêng. Vậy làm sao chúng ra Internet được?
Và vấn đề lớn hơn: IPv4 chỉ có ~4,3 tỉ địa chỉ, đã cạn từ lâu. Không thể cấp một IP công khai cho từng điện thoại, laptop, TV trên đời.
NAT giải quyết cả hai: cho phép nhiều thiết bị dùng IP riêng chia sẻ một (vài) IP công khai để ra Internet. Cả nhà bạn — laptop, điện thoại, TV — ra Internet qua đúng một IP công khai 203.0.113.45 của router.
NAT hoạt động thế nào
Router (đứng giữa LAN riêng và Internet công khai) làm việc biến đổi địa chỉ. Khi gói tin từ trong nhà đi ra:
Trong nhà (riêng) Router/NAT Internet (công khai)
192.168.71.168:51000 ──────► viết lại IP nguồn ──────► 203.0.113.45:40000
(laptop bạn) 192.168.71.168 → 203.0.113.45 (máy chủ thấy)
Router thay IP nguồn riêng bằng IP công khai của nó trước khi đẩy gói ra Internet. Máy chủ đích chỉ thấy 203.0.113.45, trả lời về địa chỉ đó.
Nhưng có một vấn đề: nếu cả laptop và điện thoại cùng ra Internet, cả hai đều được viết lại thành 203.0.113.45. Khi phản hồi về, router làm sao biết gói nào của ai?
Cổng là chìa khóa: NAPT
Câu trả lời là dùng cổng (port) để phân biệt (cơ chế này gọi đầy đủ là NAPT/PAT — Port Address Translation, dạng NAT phổ biến nhất). Router giữ một bảng biến đổi, ghi nhớ mỗi kết nối kèm cổng:
Bảng NAT của router:
┌──────────────────────────────────────────────────────────┐
│ Nội bộ ↔ Công khai (gửi ra Internet) │
│ 192.168.71.168:51000 ↔ 203.0.113.45:40000 │
│ 192.168.71.200:48211 ↔ 203.0.113.45:40001 │ (điện thoại)
└──────────────────────────────────────────────────────────┘
Mỗi kết nối ra được gán một cổng công khai riêng. Khi phản hồi về 203.0.113.45:40000, router tra bảng → biết đây là của 192.168.71.168:51000 → viết lại địa chỉ đích về máy đó. Nhờ cổng làm "nhãn", hàng trăm thiết bị chia sẻ một IP công khai mà không lẫn lộn. (Cổng là gì, ta đào kỹ ở Bài 6.)
Hệ quả: kết nối từ ngoài vào không tự nhiên tới được
NAT hoạt động trơn cho kết nối đi ra (bạn chủ động kết nối tới máy chủ). Nhưng nó tạo một rào cản cho kết nối đi vào: nếu ai đó trên Internet muốn kết nối tới laptop của bạn, họ chỉ thấy 203.0.113.45 — router không biết phải chuyển vào thiết bị nào trong nhà (bảng NAT chỉ có entry cho kết nối bạn đã chủ động mở).
Đây thực ra là một lớp bảo vệ tình cờ: máy trong nhà không bị truy cập trực tiếp từ Internet. Nhưng khi bạn muốn cho vào (ví dụ chạy một server tại nhà), bạn phải cấu hình port forwarding trên router: "gói tới 203.0.113.45:8080 thì chuyển vào 192.168.71.168:80". Lúc đó router mới biết đường đưa kết nối vào.
Internet ──► 203.0.113.45:8080 ──(port forward)──► 192.168.71.168:80
Đây là lý do để "đưa một dịch vụ ở nhà ra Internet", bạn phải mở port forwarding — và là lý do trong cloud, server cần IP công khai hoặc đứng sau load balancer (Bài 11) để nhận kết nối vào.
SNAT và DNAT
Hai chiều biến đổi có tên riêng (bạn sẽ gặp khi cấu hình firewall — Bài 10):
- SNAT (Source NAT) — viết lại IP nguồn. Chính là NAT đi-ra ở trên (laptop → IP công khai router).
- DNAT (Destination NAT) — viết lại IP đích. Chính là port forwarding (gói tới IP công khai → chuyển vào IP nội bộ).
CGNAT: NAT chồng NAT
Nhiều nhà mạng giờ còn không cấp đủ IP công khai cho từng khách hàng, nên họ dùng CGNAT (Carrier-Grade NAT) — NAT thêm một lớp ở phía nhà mạng. Khi đó IP "công khai" router nhà bạn thấy lại là một IP riêng khác, và nhiều hộ gia đình chia sẻ một IP công khai thật. Hệ quả thực tế: port forwarding ở nhà có thể không hoạt động (vì còn lớp NAT của nhà mạng ở trên). Đây là lúc người ta chuyển sang IPv6 (không cần NAT) hoặc dùng dịch vụ tunnel.
NAT trong cloud và container
Khái niệm này lặp lại ở các series khác:
- Docker (series Docker, Bài 7): container có IP riêng trên mạng bridge, ra ngoài qua NAT của host — đúng cơ chế này.
-p 8080:80chính là port forwarding (DNAT) vào container. - AWS (series AWS): instance trong private subnet ra Internet qua NAT Gateway; "Elastic IP" và load balancer là cách cho kết nối từ ngoài vào.
Giờ bạn hiểu vì sao chúng hoạt động như vậy.
Tổng kết
NAT cho phép nhiều thiết bị dùng IP riêng chia sẻ một IP công khai ra Internet — router viết lại IP nguồn riêng thành IP công khai của nó, và dùng cổng để phân biệt từng kết nối (NAPT). Hệ quả: kết nối đi-ra trơn tru, nhưng kết nối đi-vào cần port forwarding (DNAT). NAT vừa tiết kiệm địa chỉ IPv4 vừa vô tình bảo vệ mạng nội bộ. Cùng cơ chế này vận hành trong Docker (-p) và cloud (NAT Gateway).
NAT dùng "cổng" làm nhãn phân biệt kết nối — nhưng cổng thực ra là gì, và kết nối được thiết lập ra sao? Bài 6 đào vào tầng giao vận: TCP, UDP và cổng.