iKuai+OpenWrt旁路由端口映射不生效的解决办法
最近在办公室折腾网络配置,终于把心心念念的「iKuai主路由+OpenWrt旁路由」方案部署完成了。本以为能安心享受双路由的便利,没想到今早调试服务时,发现设置好的端口映射居然失效了!看着SSH客户端反复显示的Connection timeout
提示,我对着屏幕陷入了沉思——这问题到底出在主路由、旁路由还是防火墙?
一、排查之旅
事情是这样的:我需要将公网IP的2222端口映射到内网NAS的2222端口。按照常规操作,在iKuai后台的「网络设置 > 端口映射」添加规则后,却始终无法连接。以下是当时排查的完整流程:
-
第一反应:检查内网连通性
-
直接通过内网IP(192.168.1.5:2222)访问成功
-
确认NAS的SSH服务监听0.0.0.0
-
排查主路由防火墙
-
临时关闭iKuai的ACL规则
-
关闭SPI全状态检测
-
玄学尝试:更换公网端口
-
测试2223/2224等相邻端口均失败
-
通过在线工具检测确认端口未开放
-
最终杀手锏:移除旁路由
-
断开OpenWrt旁路由后映射立即生效
-
确认问题出在旁路由的流量转发环节
二、为什么旁路由会「吃掉」我的流量?
盯着拓扑图突然醒悟——当内网设备的网关指向旁路由(192.168.1.2)时,所有响应流量都会经过OpenWrt。而iKuai的DNAT只做了单层转发,导致回程流量被旁路由拦截,形成「有去无回」的死循环。
# 故障时的错误路径 公网请求 → iKuai DNAT → NAS直连 NAS响应 → 旁路由网关 → 未配置SNAT → 公网丢弃
三、双层端口映射解决方案
步骤1:主路由首次转发
登录iKuai后台,创建指向旁路由的端口映射:
外网端口:2222 内网地址:192.168.1.2(旁路由IP) 内网端口:保留2222不变 协议类型:TCP(按需选择)
步骤2:旁路由二次转发
在OpenWrt的防火墙配置中添加规则:
# 路径:网络 → 防火墙 → 端口转发 来源区域:LAN 来源IP:留空(允许所有) 外部端口:2222 内部IP:192.168.1.5 内部端口:2222
关键配置提醒:
-
确保OpenWrt已启用
iptables-mod-fullconenat
-
检查
/etc/sysctl.conf
中net.ipv4.conf.all.route_localnet=1
四、不同网络架构的配置策略
客户端网关指向 | 需要操作的设备 | 转发层级 |
---|---|---|
主路由(192.168.1.1) | 仅iKuai | 单层转发 |
旁路由(192.168.1.2) | iKuai+OpenWrt | 双层转发 |
五、避坑指南
-
如果使用Docker版OpenWrt,需添加
--cap-add=NET_ADMIN
参数 -
遇到回环问题可尝试在iKuai开启NAT1+Fullcone
-
复杂环境建议在OpenWrt用tcpdump抓包诊断:
tcpdump -i br-lan host 192.168.1.5 and port 2222
经过这次踩坑,深刻体会到网络架构中「流量路径可视化」的重要性。下次升级网络时,或许该考虑在核心交换机上配置端口镜像了...
解决办法
如果没有旁路由的情况下,模式是这样的:
公网IP(8.8.8.8:2222) -> iKuai路由器(192.168.1.1) -> 内网主机(192.168.1.5:2222)
这样并没有问题,但是如果加了旁路由后,发现无法访问,这时我们需要先将流量转发到旁路由,再由旁路由转发至内网目标主机,模式是这样的:
公网IP(8.8.8.8:2222) -> iKuai路由器(192.168.1.1) -> 旁路由(192.168.1.2:2222) -> 内网主机(192.168.1.5:2222)
总结
如果您内网机器的网关指向的是主路由(192.168.1.1),则不需要在旁路由进行映射。
但如果您内网机器网关指向的是旁路由(192.168.1.2),需要在主路由添加端口映射外,还需要在旁路由额外添加端口映射
点击链接加入群聊四群:722808830
点击链接加入群聊三群:751529538(已满)
点击链接加入群聊二群:376877156(已满)
点击链接加入群聊一群:622891808(已满)
饿了么红包
本站附件分享,如果附件失效,可以去找找看