Hướng dẫn cấu hình Hairpin NAT trên Router MikroTik (IP Động & IP Tĩnh)
Khi bạn tự vận hành các dịch vụ mạng tại nhà như Home Server, NAS, Camera giám sát, hay Web Server và đã cấu hình mở cổng (Port Forwarding) thành công, bạn sẽ gặp phải một hiện tượng cực kỳ phổ biến:
- Người dùng ở ngoài Internet truy cập vào tên miền của bạn (ví dụ:
https://keoquy.com) rất nhanh và mượt mà. - Nhưng khi bạn kết nối vào Wi-Fi hoặc mạng LAN trong nhà, bạn không thể truy cập được dịch vụ bằng tên miền này nữa mà bắt buộc phải gõ IP nội bộ (ví dụ:
192.168.1.3).
Đây không phải là lỗi server, mà là do cơ chế định tuyến NAT mặc định của Router. Để giải quyết triệt để, chúng ta cần cấu hình Hairpin NAT (hay còn gọi là NAT Loopback).
Bài viết này sẽ giải thích chi tiết bản chất của Hairpin NAT, cung cấp sơ đồ hoạt động trực quan và hướng dẫn các bước thiết lập chuẩn xác nhất trên Router MikroTik (RouterOS v7) cho cả đường truyền IP tĩnh lẫn IP động (Dynamic IP).
1. Bản chất vấn đề: Tại sao truy cập từ nội bộ lại thất bại?
Để hiểu tại sao kết nối bị lỗi, hãy phân tích luồng đi của gói tin khi máy tính của bạn (192.168.1.50) truy cập tên miền keoquy.com (trỏ về IP WAN của nhà mạng: 14.246.4.52) để kết nối tới Web Server trong nhà (192.168.1.3).
Luồng đi của gói tin khi LỖI (Chưa có Hairpin NAT):
- Gửi yêu cầu: Máy tính gửi gói tin tới IP WAN với:
- Source IP:
192.168.1.50 - Destination IP:
14.246.4.52(IP WAN)
- Source IP:
- Xử lý tại Router: Router nhận gói tin trên cổng LAN. Nhờ cấu hình Port Forwarding (Dst-NAT), Router đổi địa chỉ đích thành IP nội bộ của Web Server:
- Source IP:
192.168.1.50(Giữ nguyên) - Destination IP:
192.168.1.3(Đã đổi)
- Source IP:
- Server phản hồi: Web Server nhận gói tin và thấy Source IP là
192.168.1.50(nằm chung mạng LAN). Server trả lời trực tiếp cho máy tính qua Switch mà không thông qua Router nữa:- Source IP:
192.168.1.3 - Destination IP:
192.168.1.50
- Source IP:
- Client từ chối: Máy tính nhận được phản hồi từ
192.168.1.3, nhưng nó đang chờ phản hồi từ14.246.4.52(IP WAN). Máy tính lập tức hủy gói tin này vì cho rằng đây là kết nối rác. Kết nối bị treo và Timeout!
2. Giải pháp Hairpin NAT hoạt động thế nào?
Để kết nối thành công, gói tin phản hồi của Server buộc phải quay ngược lại Router để Router dịch lại IP WAN ban đầu rồi mới trả về Client.
Muốn vậy, Router không chỉ đổi Destination IP (Dst-NAT) mà phải đổi cả Source IP (Src-NAT / Masquerade) của gói tin yêu cầu thành IP LAN của Router (thường là 192.168.1.1). Khi Server thấy gói tin đến từ Router, nó sẽ phản hồi về Router, cho phép Router định tuyến ngược lại Client một cách trọn vẹn.
3. Hướng dẫn cấu hình Hairpin NAT trên Router MikroTik
Sau đây là hướng dẫn chi tiết từng bước bằng giao diện Winbox trực quan và Command Line (CLI).
Trường hợp 1: Đường truyền Internet sử dụng IP Tĩnh (Static IP)
Nếu nhà mạng cấp cho bạn một IP Tĩnh cố định, việc cấu hình rất đơn giản.
Bước 1: Cấu hình Port Forwarding (Dst-NAT) cho dịch vụ
Vào IP -> Firewall -> tab NAT, nhấn nút + để thêm rule mới:
- Tab General:
- Chain:
dstnat - Dst. Address: Điền IP Public tĩnh của bạn (Ví dụ:
42.116.184.137). - Protocol:
tcp - Dst. Port: Điền port của dịch vụ (Ví dụ: Web
80,443, NAS5000...).
- Chain:
- Tab Action:
- Action:
dst-nat - To Addresses: Điền IP LAN của Server (Ví dụ:
192.168.1.221). - To Ports: Điền port dịch vụ nội bộ (Ví dụ:
5000).
- Action:
Hình 1: Thiết lập tab General của Dst-NAT với IP Public tĩnh.
Hình 2: Chọn Action dst-nat và trỏ về IP cùng Port của Server trong LAN.
Bước 2: Thêm Rule Hairpin NAT (Masquerade LAN-to-LAN)
Vẫn tại cửa sổ IP -> Firewall -> tab NAT, nhấn nút + để tạo rule Masquerade:
- Tab General:
- Chain:
srcnat - Src. Address: Điền dải mạng LAN của bạn (Ví dụ:
192.168.1.0/24). - Dst. Address: Điền chính dải mạng LAN của bạn (
192.168.1.0/24).
- Chain:
- Tab Action:
- Action:
masquerade
- Action:
Hình 3: Thiết lập quy tắc Masquerade nguồn cho luồng traffic LAN-to-LAN.
Trường hợp 2: Đường truyền Internet sử dụng IP Động (Dynamic IP)
Với các gói cước gia đình (VNPT, Viettel, FPT), IP WAN sẽ tự động thay đổi sau mỗi lần reset router. Nếu điền cứng IP Public như Trường hợp 1, rule sẽ lập tức bị vô hiệu khi đổi IP.
Để giải quyết triệt để, chúng ta sử dụng dịch vụ DDNS (MikroTik Cloud) để lấy một tên miền động, sau đó cấu hình Firewall bám theo tên miền này.
Bước 1: Kích hoạt DDNS trên Router MikroTik
- Vào mục IP -> Cloud.
- Tích chọn DDNS Enabled.
- Nhấn Apply và copy dòng tên miền do MikroTik cung cấp ở mục DNS Name (dạng
xxxxxx.mynetname.net).
Hình 4: Kích hoạt dịch vụ Dynamic DNS miễn phí của MikroTik.
Bước 2: Tạo Address List tự động cập nhật IP WAN
Do Firewall MikroTik hỗ trợ phân giải tên miền động trong Address List, chúng ta sẽ gán tên miền Cloud ở Bước 1 vào một danh sách:
- Vào IP -> Firewall -> tab Address Lists, nhấn +.
- Name: Đặt tên là
WAN_IP(hoặc tên tùy ý). - Address: Paste tên miền
.mynetname.netđã copy ở Bước 1. - Nhấn OK. Router sẽ tự động phân giải tên miền này ra IP WAN thực tế mỗi khi IP thay đổi.
Hình 5: Tạo Address List tự động cập nhật IP WAN dựa trên DDNS.
Bước 3: Cấu hình Port Forwarding (Dst-NAT) theo Address List
Thay vì điền cứng IP ở mục Dst. Address, chúng ta sẽ sử dụng danh sách WAN_IP vừa tạo:
- Tab General:
- Chain:
dstnat - Dst. Address List: Chọn
WAN_IP(nằm ở phía cuối danh sách xổ xuống). - Protocol:
tcp - Dst. Port: Điền cổng dịch vụ (Ví dụ:
80,443).
- Chain:
- Tab Action:
- Action:
dst-nat - To Addresses: IP Server nội bộ (Ví dụ:
192.168.1.3). - To Ports: Cổng Server nội bộ.
- Action:
Bước 4: Tạo Rule Hairpin NAT Masquerade
Tương tự như trường hợp IP Tĩnh, bạn tạo thêm một rule srcnat với nguồn và đích đều là dải LAN (192.168.1.0/24), chọn Action là masquerade.
Cách 3: Giải pháp tối ưu và nhanh nhất bằng CLI (Khuyên dùng)
Nếu bạn muốn cấu hình nhanh chóng, không lo lỗi giao diện và tương thích hoàn hảo với mọi loại IP (cả tĩnh lẫn động), hãy mở New Terminal trên Winbox và copy dòng lệnh sau:
# 1. Đánh dấu kết nối (Connection Mark) từ LAN đi tới chính IP WAN của Router
/ip firewall mangle
add chain=prerouting in-interface=LAN dst-address-type=local \
dst-address=!192.168.1.0/24 action=mark-connection \
new-connection-mark=hairpin passthrough=yes comment="Mark Hairpin NAT Connections"
# 2. Thực hiện Masquerade nguồn cho các gói tin đã được đánh dấu
/ip firewall nat
add chain=srcnat connection-mark=hairpin action=masquerade \
comment="Hairpin NAT Masquerade"
Giải thích kỹ thuật: Lệnh trên sử dụng thuộc tính dst-address-type=local. Thuộc tính này sẽ tự động khớp với bất kỳ địa chỉ IP nào đang gán trên các cổng của Router (bao gồm cả IP WAN động). Cách làm này cực kỳ gọn gàng, chạy ổn định tuyệt đối và không phụ thuộc vào DDNS.
4. Kiểm tra hoạt động
Sau khi thiết lập xong, bạn hãy kết nối thiết bị của mình vào mạng Wi-Fi nội bộ và truy cập thử vào tên miền của dịch vụ.
Để kiểm tra xem rule có thực sự hoạt động hay không:
- Vào IP -> Firewall -> tab NAT (hoặc Mangle).
- Tìm rule Hairpin NAT vừa tạo và theo dõi cột Packets / Bytes.
- Nếu các chỉ số này liên tục tăng lên mỗi khi bạn load trang, cấu hình của bạn đã hoạt động hoàn hảo!
Chúc các bạn cấu hình thành công! Nếu gặp bất kỳ khó khăn nào trong quá trình cài đặt, hãy để lại bình luận phía dưới nhé.