Chuyên mục
Network

Hướng dẫn cấu hình Destination NAT & Hairpin NAT trên router Mikrotik

Để có thể truy cập vào server đặt trong homelab tại nhà từ Internet, chúng ta có thể sử dụng 2 cách:

  1. Kết nối thông qua VPN vào mạng nội bộ tại nhà. Tham khảo cách thiết lập WireGuard VPN.
  2. Cấu hình NAT Port (Destination NAT) trên Router chính để truy cập thông qua địa chỉ IP Public.

Với cách 2, bạn có thể thiết lập thêm Dynamic DNS để có thể truy cập vào server bằng cách sử dụng tên miền, khỏi phải nhớ địa chỉ IP Public.

Tuy nhiên có một hạn chế là bạn không thể truy cập vào server thông qua IP Public hoặc tên miền nếu đang ở nhà, nằm chung mạng LAN với Server. Bạn chỉ có thể truy cập server từ mạng Internet bên ngoài (không cùng mạng LAN với server)

Để giải quyết vấn đề này, bắt buộc bạn phải cấu hình thêm Hairpin NAT cho router. Trong bài viết này mình sẽ chia sẻ cách thiết lập Hairpin NAT trên router Mikrotik để có thể truy cập vào dịch vụ mạng trong nhà bằng tên miền, khỏi phải gõ địa chỉ IP của server.

I. NAT là gì? Destination NAT là gì? Hairpin NAT là gì?

1. NAT là gì?

NAT (Network Address Translation) là một tiêu chuẩn mạng cho phép các thiết bị trong mạng nội bộ có thể giao tiếp với nhau thông qua nhóm IP nội mạng và giao tiếp với mạng bên ngoài thông qua một hay nhiều IP ngoại mạng. NAT được thực hiện trên Gateway Router, thiết bị kết nối giữa mạng LAN nội bộ và mạng WAN bên ngoài.

Hai hình thức NAT phổ biến nhất là Source NAT và Destination NAT. Ngoài ra còn có thêm Hairpin NAT ít người biết đến (hoặc ít có nhu cầu dùng đến)

2. Source NAT

Source NAT hay còn gọi là NAT truy cập Internet là hình thức NAT phổ biến nhất, được thực hiện trên mọi Router để giúp mạng LAN có thể truy cập Internet thông qua cổng WAN trên Router.

Cái này chắc khỏi cần phải hướng dẫn vì ai cũng phải biết làm thì mới truy cập Internet được.

3. Destination NAT

Destination NAT hay còn gọi là NAT port được dùng để truy cập vào máy tính trong mạng nội bộ từ Internet thông qua địa chỉ IP Public của Router. Đây là hình thức NAT bắt buộc phải thiết lập nếu bạn muốn truy cập vào mạng ở nhà khi đang sử dụng Internet bên ngoài.

4. Hairpin NAT

Hairpin NAT hay còn gọi là NAT Loopback là hình thức Source NAT đặc biệt, cho phép các thiết bị trong mạng LAN có thể truy cập đến server trong cùng mạng LAN thông qua địa chỉ Public IP của Router hoặc thông qua tên miền (đã được trỏ về Public IP).

Dưới đây là ví dụ về Destination NAT và Hairpin NAT để mọi người dễ hiểu hơn

Trong sơ đồ trên, chúng ta có 4 thiết bị:

  • WORK PC: nằm ngoài mạng LAN, có Public IP là 192.168.88.1
  • Router có Public IP là 172.16.16.1 và LAN IP là 192.168.0.1
  • Home PC: nằm trong LAN, có LAN IP là 192.168.0.100
  • Server: nằm trong LAN có LAN IP là 192.168.0.30

Khi sử dụng WORK PC để truy cập đến Server, Router sẽ thực hiện Destination NAT như sau:

  1. WORK PC gửi gói tin với Source IP Address là 192.168.88.1 và Destination IP Address là 172.16.16.1 trên cổng 443 để yêu cầu gửi dữ liệu từ Server.
  2. Router sẽ thực hiện NAT và chuyển đổi Destination IP Address thành 192.168.0.30 (LAN IP của server). Source IP Address vẫn giữ nguyên là 192.168.88.1
  3. Server nhận được và phản hồi lại gói tin với Source IP Address là 192.168.0.30 và Destination IP Address là 192.168.88.1.
  4. Router nhận được gói tin từ Server và nhận ra gói tin này là một phần của chuỗi kết nối trước đó nên sẽ đảo ngược chu trình NAT, thay thế Source IP Address thành 172.16.16.1. Destination IP Address vẫn giữ nguyên là 192.168.88.1.
  5. WORK PC được gói tin mà nó đang đợi. Quá trình kết nối được thiết lập giữa WORK PC và Server.

Vấn đề nảy sinh khi Home PC muốn truy cập đến Server (cả hai nằm trong cùng mạng LAN) thông qua Public IP của Router, kết nối sẽ bị lỗi.

  1. WORK PC gửi gói tin với Source IP Address là 192.168.88.1 và Destination IP Address là 172.16.16.1 trên cổng 443 để yêu cầu gửi dữ liệu từ Server.
  2. Router sẽ thực hiện NAT và chuyển đổi Destination IP Address thành 192.168.0.30 (LAN IP của server). Source IP Address vẫn giữ nguyên là 192.168.88.1
  3. Server phản hồi gói tin với Destination IP Address là 192.168.0.100 và Source IP Address là 192.168.0.30. Tuy nhiên gói tin nó sẽ gửi thẳng đến PC Office chứ không được xử lý bởi Router vì hai địa chỉ này nằm cùng mạng LAN.
  4. Home PC nhận được gói tin từ Server nhưng nó sẽ tự động huỷ do nó đang đợi gói tin được gửi từ Source IP Address 172.16.16.1, chứ không phải từ 192.168.0.30
  5. Kết nối vì thế không thể thiết lập. Truy cập từ Home PC đến Server sẽ báo lỗi không truy cập được.

Để giải quyết vấn đề này, chúng ta cần thiết lập Hairpin NAT trên Router.

II. Cấu hình Destination NAT & Hairpin NAT trên router Mikrotik

Có nhiều phương pháp cấu hình Destination NAT và Hairpin NAT trên Mikrotik. Dưới đây là cách thiết lập mình đang sử dụng cho combo Destination NAT và Harpin NAT.

1. Tạo WAN-IP Address List

Trước tiên mình sẽ tạo 1 Address List đại diên cho Public IP của WAN để có thể sử dụng khi tạo NAT.

Truy cập vào Router Mikrotik bằng Winbox. Sau đó truy cập vào IP -> Firewall -> Address Lists. Bấm + để thêm Address List mới.

2. Cấu hình Destination NAT

Mình sẽ cấu hình NAT port cho hai cổng 80 và 43 chuyển hướng về LAN IP 192.168.0.30 của server đang cài Nginx Proxy Manager.

Vẫn trong cửa sổ Firewall, bấm chọn tab NAT và bấm dấu + để thêm NAT Rule mới

  • Chain: chọn dstnat
  • Protocol: chọn 6 (tcp)
  • Dst. Port: 80,443

Chuyển qua tab Advanced

  • Dst. Address List: mở ra chọn WAN-IP (đã tạo ở bước 1 trước đó)

Chuyển qua tab Action

  • Action: chọn dst-nat
  • To Addresses: 192.168.0.30

Bấm Apply và OK để lưu lại.

Sau khi thiết lập thành công, mỗi khi sử dụng mạng Internet bên ngoài, mỗi lần mình truy cập vào địa chỉ https://alibaba.thuanbui.me (đã được trỏ về Public IP của Router), Router sẽ tự động chuyển hướng truy cập về server NPM ở địa chỉ 192.168.0.30

4. Cấu hình Hairpin NAT

Để có thể truy cập vào server trong cùng mạng LAN bằng cách gõ tên miền hay Public IP, mình thiết lập thêm Hairpin NAT.

Tạo NAT Rule mới trong cửa sổ Firewall -> NAT

  • Chain: srcnat
  • Src. Address: 192.168.0.0/24 (địa chỉ IP của mạng LAN nội bộ)
  • Dst. Address: 192.168.0.0/24 (địa chỉ IP của mạng LAN nội bộ)

Chuyển qua tab Action

  • Action: chọn masquerade

Bấm vào nút Comment, nhập vào HAIRPIN NAT để sau này dễ nhớ. Bấm OK.

Bấm tiếp Apply và OK để lưu lại.

Tiếp theo mình giữ chuột và kéo NAT Rule HAIRPIN NAT lên trên cùng, chỉ nằm sau dòng NAT Rule dùng để truy cập Internet và NAT Rule của WireGuard (nếu có).

III. Kiểm tra kết nối

Sau khi thiết lập Hairpin NAT thành công, quy trình kết nối từ Home PC đến Server sử dụng Public IP 172.16.16.1 sẽ diễn ra như sau:

  1. PC Office gửi gói tin với Source IP Address là 192.168.0.100 và Destination IP Address là 172.16.16.1 trên cổng 443 để yêu cầu gửi dữ liệu từ Server.
  2. Router sẽ thực hiện Destination NAT và chuyển đổi Destination IP Address thành 192.168.0.30 (Local IP của server). Router đồng thời thực hiện Hairpin NAT, thay thế Source IP Address của gói tin 192.168.0.100 thành IP address của LAN Interface 192.168.0.1. Gói tin sau khi được xử lý sẽ có Destination IP Address là 192.168.0.30 và Source IP Address là 192.168.0.1
  3. Server phản hồi gói tin với Destination IP Address là 192.168.0.1 và Source IP Address là 192.168.0.30.
  4. Router nhận ra gói tin này thuộc chuỗi kết nối trước đó nên sẽ đảo ngược chu trình Destination NAT và Hairpin NAT trước đó. Source IP Address được đổi thành 172.16.16.1 và Destination IP Address được đổi thành 192.168.0.100
  5. PC Office nhận được đúng gói tin phản hồi nó mà nó đang đợi. Quá trình kết nối được thiết lập thành công giữa PC Home và Server.

Kết hợp Destination NAT, Hairpin NAT, Nginx Proxy ManagerDynamic DNS, mình có thể tạo các tên miền phụ dạng aaa.thuanbui.me hay xxx.thuanbui.me để sử dụng cho từng dịch vụ mạng khác nhau được thiết lập trong Homelab. Mình có thể truy cập vào các dịch vụ này thông qua tên miền ở bất cứ đâu, khi dùng mạng ở nhà hay dùng mạng ở quán cafe. Việc quản lý trở nên đơn giản và tinh gọn hơn rất nhiều.

Hướng dẫn Hairpin NAT đến đây là hết. Chúc bạn thực hiện thành công!

Nếu bài viết của mình mang đến thông tin, kiến thức hữu ích cho bạn, đừng ngại mời mình ly bia để có thêm động lực chia sẻ nhiều hơn nữa. Cám ơn bạn!

Bởi Thuận Bùi

Runner at Yêu Chạy Bộ. Blogger at Ba Lô & Dép Lào. Web Developer at TB's Blog.
Follow me: Facebook / Instagram

Trả lời