Hướng dẫn cấu hình HairPin NAT trên firewall Fortigate
Trong bài viết này, mình sẽ hướng dẫn các bạn cấu hình Hairpin NAT trên firewall Fortigate.
HairPin NAT là gì?
Hair-Pinning NAT, hay cũng được gọi là NAT loopback, là 1 kỹ thuật NAT, trong đó máy Client sẽ truy cập vào Server thuộc cùng 1 mạng LAN hoặc là trên 2 mạng phân vùng khác nhau, ví dụ như LAN và DMZ. Server này được public ra internet, khi đó thì lưu lượng truy cập sẽ đi từ máy Client ra ngoài Internet, sau đó quay ngược lại Fortigate và được chuyển tiếp tới Server.
Nếu các bạn có các server trong mạng nội bộ, và các bạn muốn các client này hoặc chính bản thân Server đó truy cập vào dịch vụ của mình thông qua IP Public, thì các bạn có thể cấu hình HairPin NAT.
Mô hình HairPin NAT
Ví dụ như mô hình bên dưới của mình. Mình đang có 1 Firewall Fortigate với 2 phân vùng, phân vùng LAN cho nhân viên, còn phân vùng DMZ cho các server public ra Internet. Trong bài lab này thì mình đang dựng 1 web server và NAT ra ngoài với domain là test.vn. Trong thực tế thì các bạn có thể áp dụng cho các ứng dụng khác nhau.
Chúng ta sẽ cùng xem traffic của các Client sẽ đi thế nào nhé.
Trường hợp đầu tiên là với những Client từ Internet. Đối với PC truy cập từ ngoài Internet thì đây là trường hợp thông thường rồi, nó sẽ không phải là Hair-Pin NAT. Các PC chỉ cần truy vấn tên miền test.vn tới DNS Server. DNS Server trả về IP là IP WAN của Fortigate, client truy cập vào IP WAN đó và được NAT vào IP nội bộ thông qua cấu hình NAT port của chúng ta thôi. Khi đó chúng ta cấu hình NAT port trên firewall là được.
Trường hợp thứ 2 là những client truy cập vào Website, nhưng client này lại thuộc cùng mạng LAN với web server đó, ví dụ như PC-LAN trong mô của mình. PC-LAN này có thể cùng subnet hoặc khác subnet với server đều được, nó sẽ không ảnh hưởng gì đến cấu hình của chúng ta.
Khi PC-LAN mở trình duyệt web và truy cập vào website test.vn, nó vẫn sẽ tra cứu DNS, DNS Server sẽ trả về là IP WAN của Fortigate. Khi đó PC-LAN sẽ truy cập vào IP WAN của Fortigate và quay ngược lại, đây chính là HairPin traffic. Nhưng lúc này traffic sẽ bị drop và người dùng trong LAN sẽ không truy cập được vào website này nữa, chúng ta cần cấu hình HairPin NAT để xử lý tình huống này.
Các bạn để ý lúc này traffic nếu được NAT vào server sẽ đi giống như hình cái kẹp tóc, nên nó được gọi là Hairpin trên Fortigate, còn với thiết bị khác thì nó sẽ có tên gọi khác.
Các bạn có thể sử dụng các DNS Server nội bộ với Split DNS để giải quyết trường hợp này, tuy nhiên thì chúng ta cũng có thể cấu hình trên Firewall để cho phép lưu lượng này. Nó sẽ có 5 trường hợp, tuy nhiên trường hợp 5 sử dụng central NAT nên mình sẽ không đề cập đến, do chúng ta cũng ít khi sử dụng central NAT.
Cấu hình HairPin NAT trên Fortigate
Đối với NAT Port thì chúng ta sẽ cần làm 2 bước là tạo Virtual IP và cấu hình Policy cho Virtual IP đó. Khi đó cả 4 trường hợp sẽ khác nhau về các thông số mà chúng ta sẽ cấu hình trong 2 bước này.
Các bạn lưu ý là trong tất cả các trường hợp thì lưu lượng sẽ không đi ra khỏi Fortigate, lưu lượng mạng trong mọi trường hợp đều là Client -> external IP -> FortiGate -> internal IP -> Server.
Case 1 & 2: IP NAT là IP đấu nối
Đầu tiên là khi chúng ta NAT server ra IP chính là IP đấu nối trên Fortigate, trong ví dụ của mình thì IP NAT sẽ là 100.0.0.100.
Trước tiên các bạn cần tạo 1 Virtual IPs với dịch vụ tương ứng. Truy cập vào menu Policy & Objects > Virtual IPs.
Với trường hợp IP NAT là IP đấu nối thì nó cũng chia thành 2 trường hợp liên quan đến cách chúng ta chọn Interface là ANY hay WAN. Tuy nhiên thì cả 2 trường hợp cách cấu hình đều tương tự như nhau, nghĩa là với NAT ra IP đấu nối thì các bạn chọn Interface là ANY hay WAN đều được. Mình sẽ chọn ANY, các thông số khác thì các bạn cấu hình như bình thường.
Tiếp theo các bạn sẽ cần tạo policy để NAT. Policy cho Hairpin NAT trong trường hợp này thì cũng giống các bạn NAT thông thường thôi. Các bạn truy cập vào menu Policy & Objects > Firewall Policy.
Case 3: IP NAT không phải IP đấu nối, Interface là WAN
Trường hợp thứ 3 là IP NAT sẽ không phải là IP đấu nối, mà là 1 IP khác cùng dải với IP đấu nối mà các bạn đã mua, trong ví dụ của mình thì mình sẽ NAT ra IP 100.0.0.101, còn IP đấu nối vẫn là 100.0.0.100.
Đối với trường hợp này, khi các bạn tạo Virtual IPs với Interface khác nhau thì cấu hình Policy cũng sẽ khác nhau. Nếu các bạn chọn Interface là cổng WAN, thì cấu hình nó sẽ tương tự như với trường hợp NAT trên IP đấu nối. Các bạn vẫn thiết lập các thông số như bình thường. IP WAN sẽ là 100.0.0.101.
Policy cũng sẽ tương tự, không có gì đặc biệt, giống hệt với trường hợp trên.
Case 4: IP NAT không phải IP đấu nối, Interface là ANY
Đối với trường hợp các bạn chọn Interface là any thì cấu hình phần Policy sẽ khác. Mình sẽ tạo lại Virtual IPs với Interface là ANY.
Đối với trường hợp Interface là ANY, các bạn sẽ cần phải tạo 2 Policy NAT. Trước tiên thì các bạn cần phải tạo policy NAT như bình thường để các PC ngoài internet có thể truy cập được vào website.
Sau đó các bạn cần phải tạo thêm 1 policy NAT từ mạng LAN sang DMZ nữa, nó chỉ khác các policy khác với phần source là LAN thôi, còn các thông số khác thì vẫn tương tự.
Sau đó các bạn cần chuyển policy này lên trên cùng để đảm bảo policy này được thực thi trước.
Kết luận
Tổng kết lại thì Hairpin NAT sẽ phụ thuộc vào cách chúng ta chọn Interface WAN trong Virtual IP là gì, khi cấu hình các bạn chỉ cần để ý phần này là được. Nếu chúng ta chọn Interface là cổng WAN, thì cấu hình Hairpin NAT cũng tương tự như các bạn NAT port thông thường thôi.
Ok như vậy chắc các bạn đã hiểu về trường hợp sử dụng Hairpin NAT và cách cấu hình rồi. Nếu các bạn có yêu cầu hướng dẫn cấu hình tính năng nào, hãy để lại comment.
Chúc các bạn thành công!