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.

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.

  1. 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.
  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.0.100
  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 Home PC 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.1.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.

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/firewallCode 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 nanoCode 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à.

  1. 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.
  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.1.1 và Destination IP Address được đổi thành 192.168.0.100
  5. 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!

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *