Danh mục sản phẩm
NAT trên FortiGate: Policy NAT với SNAT Overload, One-to-one, Fixed Port Range
1. Liên hệ thực tế
Văn phòng có 50 máy trạm dùng chung 1 địa chỉ IP công cộng để ra Internet — đây là kịch bản NAT quen thuộc nhất, anh Nam đã cấu hình set nat enable trên Firewall Policy hàng chục lần mà không cần nghĩ nhiều.
Lần này, khách hàng yêu cầu thêm: "Riêng server backup của bên em cần có IP công cộng cố định riêng, không share port với máy khác, để đối tác bên ngoài dễ nhận diện và giám sát." Anh Nam không rõ có nên tiếp tục dùng cấu hình NAT mặc định hay cần thay đổi gì.
Chị Lan: "Kiểu NAT mặc định anh đang dùng gọi là Overload — nhiều máy dùng chung 1 IP, phân biệt nhau bằng port. Với server backup, anh cần One-to-one — ánh xạ cố định 1-1 giữa IP nội bộ và IP công cộng, không đụng chạm gì tới port của máy khác."
Bài này giải thích ba kiểu IP Pool cho Source NAT (SNAT) trên FortiGate: Overload, One-to-one, và Fixed Port Range — dùng trong Policy NAT (SNAT gắn trực tiếp trên Firewall Policy).
2. Kiến thức cốt lõi
2.1 Source NAT là gì, và vì sao cần IP Pool
Source NAT (SNAT) dịch địa chỉ IP nguồn của gói tin đi ra ngoài — thường dùng khi máy trạm mang IP nội bộ (private) cần truy cập Internet qua một IP công cộng (public). Cách đơn giản nhất là bật nat enable trực tiếp trên Firewall Policy, FortiGate sẽ tự dùng địa chỉ IP của chính outgoing interface làm địa chỉ dịch:
config firewall policy
edit 1
set name "lan-to-wan"
set srcintf "internal"
set dstintf "wan1"
set srcaddr "all"
set dstaddr "all"
set action accept
set schedule "always"
set service "ALL"
set nat enable
next
end
Khi cần kiểm soát chi tiết hơn — dùng một IP khác với IP của interface, chia nhiều IP công cộng cho các nhóm máy khác nhau, hoặc giữ nguyên port gốc — cần khai báo IP Pool (config firewall ippool) và gán vào Policy thay vì dùng mặc định outgoing interface address.
2.2 Ba kiểu IP Pool cho SNAT
2.3 Overload — kiểu mặc định, tiết kiệm IP nhất
Overload cho phép nhiều địa chỉ IP nội bộ cùng dùng chung một (hoặc một dải) địa chỉ IP công cộng — FortiGate phân biệt các phiên khác nhau bằng cách gán port nguồn khác nhau cho mỗi kết nối, đây chính là kỹ thuật PAT (Port Address Translation) quen thuộc.
config firewall ippool
edit "Overload-pool"
set type overload
set startip 203.0.113.5
set endip 203.0.113.5
next
end
config firewall policy
edit 1
...
set nat enable
set ippool enable
set poolname "Overload-pool"
next
end
Mỗi địa chỉ IP công cộng trong kiểu Overload cung cấp khoảng 60.000+ port nguồn khả dụng cho các phiên đồng thời (giới hạn theo dải port ephemeral) — với văn phòng vài chục tới vài trăm máy trạm, một IP Overload thường là đủ dùng.
⚠️ Lưu ý: Nếu một Policy dùng nhiều IP Pool khác kiểu cùng lúc (ví dụ vừa Overload vừa One-to-one), FortiGate sẽ dùng hết pool đầu tiên trong danh sách trước khi chuyển sang pool tiếp theo — thứ tự khai báo trong Policy quyết định pool nào được ưu tiên dùng trước.
2.4 One-to-one — ánh xạ cố định, không chia sẻ port
One-to-one ánh xạ mỗi địa chỉ IP nội bộ với đúng một địa chỉ IP công cộng cố định — tắt hoàn toàn PAT, tức không đổi port nguồn. Nếu pool có 100 địa chỉ công cộng, pool đó chỉ phục vụ được tối đa 100 địa chỉ nội bộ tương ứng (dùng hết theo thứ tự, không phải theo mapping cụ thể IP nào ứng IP nào).
config firewall ippool
edit "One-to-one-pool"
set type one-to-one
set startip 203.0.113.10
set endip 203.0.113.10
next
end
⚠️ Lưu ý: IP Pool kiểu One-to-one không tự xác định trước IP nội bộ nào ánh xạ với IP công cộng nào trong dải — việc gán diễn ra theo thứ tự kết nối, "đến trước dùng trước". Muốn có ánh xạ xác định tuyệt đối 1-1 giữa từng cặp IP cụ thể (ví dụ IP A luôn ra ngoài bằng đúng IP công cộng X), cách phổ biến là tạo riêng từng Policy + IP Pool one-to-one chỉ chứa đúng một địa chỉ, áp riêng cho từng dải nguồn tương ứng.
Nếu cần bảo toàn cả port nguồn gốc (không đổi cả IP lẫn port), thêm set fixedport enable trên Policy — tuy nhiên cần cẩn trọng vì có thể gây xung đột nếu cùng port đó được dùng bởi nhiều Policy/IP Pool khác nhau.
2.5 Fixed Port Range — ánh xạ N-nội-bộ vào 1 dải port cố định
Fixed Port Range là kiểu Port Address Translation có tính xác định (deterministic) — với một dải IP nội bộ và một dải port công cộng cố định, thuật toán tính toán ra chính xác cặp IP–port dịch tương ứng cho mỗi địa chỉ nội bộ, có thể đảo ngược để tra cứu ai đang dùng port nào mà không cần lưu log riêng từng phiên.
config firewall ippool
edit "FPR-pool"
set type fixed-port-range
set startip 203.0.113.20
set endip 203.0.113.20
set source-startip 10.1.100.1
set source-endip 10.1.100.10
next
end
Với ví dụ trên, 10 địa chỉ nội bộ (10.1.100.1–10.1.100.10) chia nhau dùng chung địa chỉ công cộng 203.0.113.20, mỗi địa chỉ nội bộ được cấp một dải port riêng biệt trong tổng dải port khả dụng của địa chỉ công cộng đó.
⚠️ Lưu ý: Fixed Port Range hỗ trợ oversubscription — công cộng IP và port có thể được tái sử dụng miễn không gây xung đột phiên, nhưng nếu thuật toán duyệt hết dải port trong block đã tính mà không tìm được port trống, phiên đó sẽ bị từ chối kèm log ghi nhận xung đột — cần theo dõi log khi thiết kế dải port quá hẹp so với nhu cầu thực tế.
2.6 Bảng so sánh nhanh
| Kiểu | PAT (đổi port)? | Tỷ lệ IP nội bộ : IP công cộng | Trường hợp dùng |
|---|---|---|---|
| Overload | Có | Nhiều : 1 | Mặc định, tiết kiệm IP, LAN thông thường |
| One-to-one | Không | 1 : 1 | Server cần IP cố định riêng, che giấu IP gốc |
| Fixed Port Range | Có (dải cố định) | N : 1 (chia port xác định) | Cần mapping xác định, dò ngược nhanh ai dùng port nào |
3. Hỏi & Đáp
Vì sao IP Pool One-to-one lại "tốn" IP công cộng hơn nhiều so với Overload?
Vì One-to-one tắt hoàn toàn PAT — mỗi địa chỉ nội bộ cần đúng một địa chỉ công cộng riêng, không chia sẻ port với địa chỉ khác. Overload tận dụng được hàng chục nghìn port trên một địa chỉ công cộng duy nhất, nên phục vụ được nhiều máy hơn hẳn với cùng số IP công cộng.
Có thể vừa dùng Overload cho đa số máy trạm, vừa dùng One-to-one riêng cho một server cụ thể không?
Có — đây là kịch bản rất phổ biến (đúng như tình huống mở đầu bài). Cách làm: tạo Policy riêng cho server đó (đặt trước Policy tổng của toàn LAN trong thứ tự Policy Lookup), dùng địa chỉ nguồn chỉ khớp đúng IP server, gán IP Pool One-to-one riêng; các máy trạm còn lại tiếp tục dùng Policy tổng với Overload.
Fixed Port Range khác gì so với Port Block Allocation?
Cả hai đều là các biến thể PAT có kiểm soát port theo khối, nhưng Fixed Port Range dùng thuật toán xác định (deterministic) để tính trực tiếp cặp IP-port từ địa chỉ nội bộ, còn Port Block Allocation cấp phát động một số khối port cố định kích thước cho mỗi người dùng khi họ bắt đầu kết nối — khác nhau ở cách gán port có được tính sẵn theo công thức hay cấp phát linh hoạt lúc chạy.
Nếu không khai báo IP Pool gì cả mà chỉ bật nat enable, FortiGate NAT theo kiểu nào?
Mặc định sẽ dùng địa chỉ IP của chính outgoing interface, hoạt động theo cơ chế PAT tương tự Overload — chỉ khác là dùng IP interface thay vì một dải IP Pool riêng biệt do người quản trị định nghĩa.
4. Quiz
Câu 1: Kiểu IP Pool nào là mặc định, cho phép nhiều IP nội bộ dùng chung một IP công cộng nhờ phân biệt bằng port?
- A. One-to-one
- B. Overload
- C. Fixed Port Range
- D. Port Block Allocation
Câu 2: IP Pool kiểu One-to-one có đặc điểm gì khác biệt so với Overload?
- A. Tắt hoàn toàn PAT, ánh xạ cố định 1 IP nội bộ với 1 IP công cộng
- B. Cho phép không giới hạn số IP nội bộ dùng chung 1 IP công cộng
- C. Chỉ hoạt động với IPv6
- D. Không cần khai báo địa chỉ IP công cộng nào
Câu 3: Nếu một Policy khai báo nhiều IP Pool khác kiểu theo thứ tự, FortiGate xử lý ra sao?
- A. Chọn ngẫu nhiên pool bất kỳ cho mỗi phiên
- B. Dùng hết pool đầu tiên trong danh sách trước khi chuyển sang pool tiếp theo
- C. Chia đều 50/50 giữa các pool
- D. Báo lỗi cấu hình, không cho phép nhiều pool trong 1 Policy
Câu 4: Fixed Port Range IP Pool phù hợp nhất cho tình huống nào?
- A. Cần mapping IP-port xác định (deterministic), có thể tra ngược ai đang dùng port nào
- B. Chỉ có 1 máy trạm duy nhất cần NAT
- C. Không cần quan tâm tới việc quản lý port
- D. Chỉ dùng được cho traffic UDP
Câu 5: Muốn một server cụ thể luôn ra Internet bằng đúng 1 IP công cộng cố định, không chia sẻ port với máy khác, nên dùng kiểu IP Pool nào?
- A. Overload
- B. One-to-one
- C. Port Block Allocation
- D. Không có kiểu nào phù hợp
👉 Đáp án
Câu 1: B — Overload là kiểu mặc định, dùng cơ chế PAT để nhiều IP nội bộ chia sẻ chung một (hoặc dải) IP công cộng, phân biệt bằng port nguồn.
Câu 2: A — One-to-one tắt hoàn toàn PAT, ánh xạ cố định mỗi IP nội bộ với một IP công cộng riêng, không chia sẻ port.
Câu 3: B — FortiGate dùng hết pool đầu tiên trong danh sách khai báo trước khi chuyển sang pool tiếp theo trong cùng Policy.
Câu 4: A — Fixed Port Range dùng thuật toán xác định để tính ra cặp IP-port dịch, phù hợp khi cần khả năng tra ngược ai đang dùng port nào mà không cần lưu log riêng từng phiên.
Câu 5: B — One-to-one đảm bảo ánh xạ cố định 1 IP nội bộ với 1 IP công cộng, tắt PAT nên không chia sẻ port với máy khác — đúng nhu cầu của server cần IP cố định riêng.
📚 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 ➡️ |
|---|---|---|
| DHCP server/relay trên FortiGate | Mục lục khóa học FortiGate | NAT: Central NAT, Virtual IP (VIP), Port Forwarding, VIP Hairpin NAT |
