Danh mục sản phẩm
NAT trên FortiGate: Central NAT, Virtual IP (VIP), Port Forwarding, VIP Hairpin NAT
1. Liên hệ thực tế
Công ty khách hàng của anh Nam có một web server nội bộ cần public ra Internet để đối tác truy cập. Anh Nam tạo Virtual IP (VIP) ánh xạ 203.0.113.5:443 vào 10.0.1.10:443, viết Firewall Policy cho phép traffic từ WAN vào VIP đó — mọi thứ hoạt động tốt với người dùng ngoài Internet.
Nhưng nhân viên trong chính văn phòng đó lại không truy cập được website bằng đúng địa chỉ public 203.0.113.5 — dù đứng ngay trong mạng LAN. Anh Nam bối rối vì VIP rõ ràng đã hoạt động đúng với traffic từ ngoài vào.
Chị Lan giải thích: "Đây là vấn đề kinh điển gọi là NAT loopback hay Hairpin — traffic từ client nội bộ gọi ra chính địa chỉ public của công ty mình rồi vòng lại vào máy chủ nội bộ. Muốn traffic 'quay đầu' đúng cách, phải bật thêm Hairpin NAT cho VIP đó."
Bài này giải thích các khái niệm NAT nâng cao: Central NAT (quản lý NAT tập trung), Virtual IP (VIP), Port Forwarding, và VIP Hairpin NAT — những công cụ bắt buộc phải nắm khi triển khai dịch vụ public ra Internet qua FortiGate.
2. Kiến thức cốt lõi
2.1 Central NAT là gì, khác Policy NAT (bài trước) ra sao
Ở bài trước, NAT được gắn trực tiếp vào từng Firewall Policy (set nat enable + ippool) — đây gọi là Policy NAT, cách mặc định và phổ biến nhất. Central NAT là chế độ thay thế, tách hẳn cấu hình NAT ra khỏi Firewall Policy, đưa vào một bảng riêng biệt (config firewall central-snat-map), quản lý tập trung.
config system settings
set central-nat enable
end
config firewall central-snat-map
edit 1
set srcintf "internal"
set dstintf "wan1"
set srcaddr "all"
set dstaddr "all"
set nat-ippool "Overload-pool"
next
end
Central NAT phù hợp cho mạng lớn, nhiều Policy dùng chung một logic NAT — thay vì lặp lại cấu hình NAT trên từng Policy, quản lý tập trung tại một chỗ giúp dễ audit và sửa đổi hàng loạt.
⚠️ Lưu ý: Bật Central NAT là thay đổi toàn cục (
config system settings), ảnh hưởng cách xử lý NAT của toàn bộ VDOM — khi bật, các Policy cũ cóset nat enableriêng sẽ không còn tác dụng theo cách cũ, cần rà soát và chuyển toàn bộ logic NAT sangcentral-snat-maptương ứng để tránh gián đoạn dịch vụ.
2.2 Virtual IP (VIP) — public dịch vụ nội bộ ra ngoài
Virtual IP (VIP) là một dạng Destination NAT (DNAT) tĩnh, ánh xạ một địa chỉ IP công cộng (và có thể cả port) sang một địa chỉ IP nội bộ cụ thể — dùng để công bố (publish) dịch vụ trong mạng LAN ra Internet.
config firewall vip
edit "web-server-vip"
set extip 203.0.113.5
set extintf "wan1"
set mappedip "10.0.1.10"
next
end
config firewall policy
edit 10
set name "wan-to-web-server"
set srcintf "wan1"
set dstintf "internal"
set srcaddr "all"
set dstaddr "web-server-vip"
set action accept
set schedule "always"
set service "HTTPS"
next
end
VIP hoạt động độc lập với Firewall Policy về mặt khai báo — VIP chỉ định nghĩa ánh xạ địa chỉ, còn Firewall Policy mới là nơi cho phép traffic đi qua ánh xạ đó. Thiếu Policy tương ứng, VIP tồn tại trong cấu hình nhưng không traffic nào đi qua được.
2.3 Port Forwarding trên VIP — đổi cả IP lẫn port
Khi cần đổi cả địa chỉ IP đích lẫn port đích (ví dụ public ra ngoài bằng cổng 443 tiêu chuẩn nhưng server nội bộ thực tế lắng nghe ở cổng 8443), bật thêm Port Forwarding ngay trên chính VIP đó.
config firewall vip
edit "web-server-vip"
set extip 203.0.113.5
set extintf "wan1"
set portforward enable
set mappedip "10.0.1.10"
set extport 443
set mappedport 8443
next
end
⚠️ Lưu ý: Khi bật Port Forwarding, Firewall Policy tham chiếu VIP đó cần khai báo
servicekhớp vớiextportđã định nghĩa trên VIP — sai lệch giữa service trên Policy và port khai trên VIP là nguyên nhân phổ biến khiến traffic bị chặn dù VIP đã cấu hình đúng.
2.4 Hairpin NAT — giải quyết vấn đề client nội bộ gọi vào VIP công cộng
Hairpin NAT (hay NAT loopback/reflection) xử lý đúng tình huống mở đầu bài — khi client nội bộ cố gắng truy cập dịch vụ bằng chính địa chỉ IP công cộng của công ty mình, dù server đích thực chất cũng nằm trong cùng mạng LAN.
Về nguyên tắc, gói tin cần cả hai chiều NAT cùng lúc: DNAT để đổi địa chỉ đích (từ VIP công cộng sang IP nội bộ thật của server), và SNAT để đổi địa chỉ nguồn (từ IP client thật sang địa chỉ nội bộ của FortiGate) — nếu không có SNAT, gói phản hồi từ server sẽ cố định tuyến thẳng về client theo địa chỉ gốc thay vì đi qua FortiGate, khiến phiên kết nối không bao giờ hoàn tất đúng cách.
config firewall policy
edit 15
set name "hairpin-internal-to-vip"
set srcintf "internal"
set dstintf "internal"
set srcaddr "all"
set dstaddr "web-server-vip"
set action accept
set schedule "always"
set service "HTTPS"
set nat enable
next
end
Điểm khác biệt so với Policy VIP thông thường: cả srcintf và dstintf của Policy hairpin đều trỏ về cùng một interface nội bộ (internal), vì bản chất traffic vừa đi ra vừa đi vào trên cùng một zone/interface — đúng nghĩa "quay đầu" như tên gọi. Cần bật thêm set nat enable trên chính Policy này để xử lý phần SNAT bổ sung.
⚠️ Lưu ý: Trên FortiOS, một số phiên bản GUI có tùy chọn gọi thẳng là "NAT Hairpin" ngay trong màn hình tạo VIP thay vì phải tự viết Policy riêng — nếu tùy chọn đó khả dụng, dùng trực tiếp sẽ đơn giản hơn. Nếu không có tùy chọn tương ứng trên phiên bản đang dùng, phải tự tạo Policy hairpin tường minh như ví dụ trên.
2.5 Bảng tổng hợp các khái niệm NAT nâng cao
| Khái niệm | Loại NAT | Mục đích |
|---|---|---|
| Central NAT | SNAT (quản lý tập trung) | Gom logic NAT ra khỏi từng Policy, dễ audit |
| Virtual IP (VIP) | DNAT tĩnh | Public dịch vụ nội bộ ra ngoài qua 1 IP công cộng |
| Port Forwarding (trên VIP) | DNAT + đổi port | Ánh xạ khác port ngoài với port thật của server |
| Hairpin NAT | DNAT + SNAT kết hợp | Cho client nội bộ gọi đúng vào VIP công cộng của chính mình |
3. Hỏi & Đáp
Vì sao không thể chỉ dùng VIP thông thường mà bắt buộc phải có Hairpin NAT riêng cho traffic nội bộ?
Vì Policy VIP thông thường được thiết kế cho traffic đi từ WAN vào LAN (srcintf wan1 → dstintf internal) — khi traffic lại xuất phát từ chính LAN, không khớp điều kiện srcintf của Policy đó nên bị rơi vào implicit deny. Cần một Policy hairpin riêng với cả nguồn và đích cùng là interface nội bộ để xử lý đúng luồng đặc biệt này.
Central NAT có bắt buộc phải dùng không, hay Policy NAT là đủ cho hầu hết trường hợp?
Với phần lớn triển khai vừa và nhỏ, Policy NAT (mặc định) là đủ và đơn giản hơn để quản lý. Central NAT phát huy giá trị rõ rệt khi số lượng Policy lớn, nhiều Policy cần dùng chung một logic NAT giống hệt nhau — tránh lặp lại cấu hình NAT ở từng Policy riêng lẻ.
VIP có hỗ trợ ánh xạ một địa chỉ IP công cộng sang nhiều server nội bộ khác nhau theo port không?
Có — có thể tạo nhiều VIP Port Forwarding khác nhau trên cùng một extip nhưng khác extport, mỗi VIP trỏ tới một mappedip khác nhau. Ví dụ cùng địa chỉ công cộng nhưng cổng 443 trỏ tới web server, cổng 3389 trỏ tới một máy chủ RDP khác trong LAN.
Nếu quên viết Firewall Policy cho VIP đã tạo thì điều gì xảy ra?
VIP vẫn tồn tại trong cấu hình như một object ánh xạ địa chỉ, nhưng không có traffic nào thực sự đi qua được — vì Firewall Policy mới là thành phần quyết định traffic có được phép đi qua ánh xạ đó hay không. Đây là lỗi phổ biến khi mới làm quen VIP, dễ nhầm tưởng chỉ cần tạo VIP là đã đủ để dịch vụ hoạt động.
4. Quiz
Câu 1: Central NAT khác Policy NAT ở điểm nào?
- A. Central NAT không hỗ trợ Overload
- B. Central NAT tách cấu hình NAT ra khỏi từng Policy, quản lý tập trung tại một bảng riêng
- C. Central NAT chỉ dùng được cho IPv6
- D. Không có sự khác biệt nào
Câu 2: Virtual IP (VIP) trên FortiGate thuộc loại NAT nào?
- A. Source NAT động
- B. Destination NAT tĩnh
- C. NAT hai chiều tự động
- D. Không phải là một dạng NAT
Câu 3: Khi bật Port Forwarding trên VIP, tham số nào trên Firewall Policy cần khớp với extport đã khai trên VIP?
- A.
srcintf - B.
service - C.
schedule - D.
action
Câu 4: Vì sao cần Hairpin NAT khi client nội bộ truy cập vào chính địa chỉ VIP công cộng của công ty mình?
- A. Vì VIP thông thường không hỗ trợ HTTPS
- B. Vì Policy VIP thông thường chỉ xử lý traffic từ WAN vào LAN, không khớp khi traffic xuất phát từ chính LAN
- C. Vì Hairpin NAT nhanh hơn VIP thông thường
- D. Không có lý do kỹ thuật nào, chỉ là khuyến nghị
Câu 5: Trong Policy Hairpin NAT, srcintf và dstintf thường được cấu hình như thế nào?
- A. Luôn khác nhau, một WAN một LAN
- B. Cùng trỏ về một interface nội bộ (ví dụ cùng "internal")
- C. Không cần khai báo srcintf/dstintf
- D. Luôn là "any"
👉 Đáp án
Câu 1: B Central NAT tách hẳn cấu hình NAT ra khỏi từng Firewall Policy, đưa vào bảng central-snat-map riêng để quản lý tập trung, khác với Policy NAT gắn NAT trực tiếp trên từng Policy.
Câu 2: B VIP là một dạng Destination NAT (DNAT) tĩnh, ánh xạ cố định một địa chỉ IP công cộng sang một địa chỉ IP nội bộ cụ thể để công bố dịch vụ ra ngoài.
Câu 3: B Tham số service trên Firewall Policy cần khớp với extport đã khai trên VIP; sai lệch giữa hai giá trị này là nguyên nhân phổ biến khiến traffic bị chặn dù VIP đã đúng.
Câu 4: B Policy VIP thông thường được thiết kế cho traffic từ WAN vào LAN; khi traffic xuất phát từ chính LAN, nó không khớp điều kiện srcintf của Policy đó nên bị rơi vào implicit deny, cần Policy hairpin riêng để xử lý.
Câu 5: B Trong Policy hairpin, cả srcintf và dstintf đều trỏ về cùng một interface nội bộ, phản ánh đúng bản chất traffic "quay đầu" — vừa đi ra vừa đi vào trên cùng một zone/interface.
📚 Bài viết thuộc khóa học FortiGate của VNExperts
🧭 Điều hướng
| ⬅️ Bài trước | 🏠 Mục lục khóa học | Bài kế tiếp ➡️ |
|---|---|---|
| NAT: Policy NAT — SNAT Overload / One-to-one / Fixed port | Mục lục khóa học FortiGate | DNS trên FortiGate: DNS server, DNS filter sơ lược |
