Loading...

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.

Policy NAT vs Central NAT (FortiGate) Policy NAT (Mặc định) Policy 1: NAT Enable + IP Pool A Policy 2: NAT Enable + IP Pool B NAT được cấu hình trực tiếp trên từng Firewall Policy Phù hợp: Mô hình đơn giản, số lượng Policy ít Central NAT (Kích hoạt riêng) Central SNAT Policy (Bảng NAT tập trung) Firewall Policy (Chỉ kiểm soát luồng, tắt NAT) Tách biệt hoàn toàn giữa Security Policy và quy tắc NAT Phù hợp: Doanh nghiệp lớn, chuyển đổi từ CheckPoint/PaloAlto

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 enable riê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 sang central-snat-map tươ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 đó.

VIP Port Forwarding & Hairpin NAT (FortiGate) 1. Standard VIP Port Forwarding (Inbound từ Internet) Internet Client 203.0.113.5:443 FortiGate (VIP) DNAT / Port Translation 10.0.1.10:8443 Web Server Nội Bộ 2. Hairpin NAT — Client Nội Bộ Truy Cập VIP Công Cộng Client Nội Bộ 10.0.1.50 Dst: 203.0.113.5 FortiGate (Hairpin) DNAT + SNAT (Quay đầu) Dst: 10.0.1.10 Web Server Nội Bộ 10.0.1.10:8443 Gói tin "quay đầu" (Hairpin): Cần cả DNAT (đổi IP/Port đích) lẫn SNAT (đổi IP nguồn sang Firewall) để Response phản hồi đúng luồng

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 service khớp với extportđã đị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ệmLoại NATMụ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ọcBà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