OpenWRT环境下NAT发夹(Hairpinning)配置咨询
OpenWRT环境下NAT发夹(Hairpinning)配置咨询
兄弟,你要实现的就是**NAT发夹(Hairpinning)**功能,刚好我在OpenWRT上折腾过类似的多网段场景,给你一步步捋清楚怎么弄:
先讲下原理
你的LAN和MANAGEMENT是完全隔离的两个网段,当LAN用户访问myservers.com时,流量会先指向你的公网IP(WAN口),正常情况下OpenWRT会把这部分流量转发到MANAGEMENT的服务器,但如果没配置发夹NAT,服务器返回的流量会直接打回LAN用户,导致路由不对称,连接就断了。所以我们要让返回的流量也走WAN口的NAT转换,形成一个“闭环”。
具体配置步骤
1. 先确认端口转发规则已生效
首先你肯定已经配置了WAN到MANAGEMENT的端口转发(不然外网访问不了你的服务器),如果还没弄,先在LuCI里走这步:
- 进入「网络→防火墙→端口转发」
- 新建规则:源区域选
WAN,目标区域选MANAGEMENT,目标IP填你服务器的内网IP,端口对应好(比如80/443),保存应用。
2. 开启Hairpin NAT(核心步骤)
方法一:LuCI界面操作
找到你刚才创建的端口转发规则,点「编辑」,拉到「高级设置」,勾选「启用发夹NAT」(有些版本叫Hairpin NAT),保存后重启防火墙就行。
方法二:命令行操作(适合SSH登录的老玩家)
登录OpenWRT的SSH,编辑防火墙配置文件:
vi /etc/config/firewall
找到你的端口转发规则段(config redirect开头的),添加一行:
option hairpin '1'
保存退出后,重启防火墙生效:
/etc/init.d/firewall restart
3. 允许LAN到MANAGEMENT的流量转发
因为你的两个网段是隔离的,得给LAN开个权限访问MANAGEMENT:
- LuCI里进入「网络→防火墙→通信规则」,新建规则:
源区域选LAN,目标区域选MANAGEMENT,动作选「接受」,协议选「全部」(或者你需要的TCP/UDP),保存应用。 - 命令行的话,同样在
/etc/config/firewall里加一段:
然后重启防火墙。config rule option src 'lan' option dest 'management' option target 'ACCEPT' option proto 'all'
4. 可选:本地DNS优化(更高效)
如果你的LAN用的是OpenWRT自带的DNS,不如直接把myservers.com解析到MANAGEMENT服务器的内网IP,这样就不用绕公网IP一圈,速度更快还稳定:
- 进入「网络→DHCP和DNS→主机名」,添加一条记录:主机名填
myservers.com,IP填服务器的内网IP,保存应用就行。
注意事项
- 确保MANAGEMENT网段的服务器默认网关是OpenWRT,不然返回的流量不会经过OpenWRT处理,发夹NAT就白配了。
- 如果你的WAN是动态IP,记得开DDNS服务保持域名和公网IP同步,不然发夹NAT会失效。
备注:内容来源于stack exchange,提问作者Moth
相关产品推荐
相关产品推荐

