Trước đây mình đã từng chia sẻ cách cấu hình Hairpin NAT trên router Mikrotik (RouterOS) để có thể truy cập vào server trong cùng mạng LAN nội bộ thông qua IP Public hoặc tên miền. Bài viết này sẽ hướng dẫn cách cấu hình Hairpin NAT trên router OpenWRT.
Chi tiết về DNAT / Hairpin NAT mình đã giải thích trong bài viết cũ, mọi người có thể tham khảo lại ở đó. Dưới đây mình sẽ tóm tắt nhanh về việc tại sao cần thiết lập Hairpin NAT trên Rrouter.
Mục Lục
1. Tại sao cần Hairpin NAT?
Nếu không cấu hình Hairpin NAT bạn không thể sử dụng Home PC để truy cập đến Home 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.
- Home PC gửi gói tin với Source IP Address là
192.168.0.100
và Destination IP Address là172.16.1.1
trên cổng 443 để yêu cầu gửi dữ liệu từ Server. - 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.0.100
- 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 Home PC chứ không được xử lý bởi Router vì hai địa chỉ này nằm cùng mạng LAN. - 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.1.1
, chứ không phải từ192.168.0.30
- 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.
2. Cấu hình Destination NAT trên OpenWRT
Trước khi cấu hình Hairpin NAT, mình sẽ cấu hình Destination NAT (DNAT) trên router cho 2 cổng 80 và 443.
Truy cập vào trang quản lý Luci của OpenWRT, mở mục Firewall (Network -> Firewall), sau đó chuyển qua tab Port Forwards.
Bấm vào nút Add để tạo mới
Nhập vào các thông số cần thiết
- Protocol: TCP / UDP
- Source zone: wan
- External Port:80
- Destination zone: lan
- Internal IP Address: chọn local IP đang chạy home server
- Internal port: 80
Nhấn save để lưu lại
Thao tác lại tương tự, lần này cho cổng 443
Bấm Save & Apply để lưu lại cấu hình Firewall.
3. Cấu hình Hairpin NAT trên OpenWRT
Để cấu hình Hairpin NAT, mình cần phải truy cập SSH vào Router. Sau đó chỉnh sửa file /etc/config/firewall
nano /etc/config/firewall
Code language: Nginx (nginx)
Nếu bị báo lỗi nano: command not found thì bạn cần cài đặt nano bằng lệnh sau
opkg update
opkg install nano
Code language: Nginx (nginx)
Di chuyển đến cuối file cấu hình, bạn sẽ thấy nội dung tương tư như sau
config redirect
option dest 'lan'
option target 'DNAT'
option name 'HTTP'
option src 'wan'
option src_dport '80'
option dest_ip '192.168.0.165'
option dest_port '80'
config redirect
option dest 'lan'
option target 'DNAT'
option name 'HTTPS'
option src 'wan'
option src_dport '443'
option dest_ip '192.168.0.165'
option dest_port '443'
Code language: Nginx (nginx)
Trong mỗi mục cấu hình redirect, thêm vào dòng list reflection_zone 'lan'
, kết quả sẽ như bên dưới. Sau đó lưu lại (Ctrl + O rồi Ctrl + X)
config redirect
option dest 'lan'
option target 'DNAT'
option name 'HTTP'
option src 'wan'
option src_dport '80'
option dest_ip '192.168.0.165'
option dest_port '80'
list reflection_zone 'lan'
config redirect
option dest 'lan'
option target 'DNAT'
option name 'HTTPS'
option src 'wan'
option src_dport '443'
option dest_ip '192.168.0.165'
option dest_port '443'
list reflection_zone 'lan'
Code language: Nginx (nginx)
Khởi động lại router, bạn đã có thể truy cập vào Home Server từ Home PC nằm trong cùng mạng LAN tại nhà.
- Home PC gửi gói tin với Source IP Address là
192.168.0.100
và Destination IP Address là172.16.1.1
trên cổng 443 để yêu cầu gửi dữ liệu từ Server. - 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 tin192.168.0.100
thành IP address của LAN Interface192.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
- 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
. - 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.1.1
và Destination IP Address được đổi thành192.168.0.100
- Home PC 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 Home PC và Server.
Cấu hình Hairpin NAT trên OpenWRT đã xong. Chúc bạn thực hiện thành công
Lưu ý: Nếu bạn cần hỗ trợ kỹ thuật, vui lòng gửi câu hỏi trực tiếp ở phần Thảo luận bên dưới, mình sẽ trả lời sớm. Đừng vào hỏi trong fanpage Yêu Chạy Bộ, sẽ không có phản hồi đâu!