RouterOS 端口映射排坑记:外网访问不通的七种可能

发布于2026-09-11 10:08 阅读14次 好不容易在 RouterOS 上做好了端口映射,外网却怎么都访问不通?本文整理了七种最常见的原因:从 NAT 规则链选错、防火墙 input 拦截,到运营商封端口、回环访问限制,每一种都给出判断方法和修改思路,照着这份清单排查基本能一次搞定。
# 一、问题背景
在 RouterOS 里做了 dst-nat 把外网 8080 映射到内网 NAS 的 80 端口,内网访问一切正常,**外网就是连不上**。这种"内网通外网不通"的问题其实就那么几类原因,本文按排查顺序一次讲透。
# 二、七种常见原因(按概率排序)
## 1. 防火墙 forward 链没放行
很多人只加了 NAT 规则忘了 filter 规则,转发包在 forward 链被丢。先看计数器:
```routeros
/ip firewall filter print stats
```
如果 drop 规则计数在涨,说明就是它。在 forward 链前面加 accept:
```routeros
/ip firewall filter add chain=forward \
connection-nat-state=dstnat action=accept \
place-before=0 comment="allow port forward"
```
## 2. NAT 规则的 in-interface 匹配错
dst-nat 一定要写清 `in-interface=pppoe-out1`(或你的 WAN 口),漏了它有时候会被内网流量抢先匹配。
## 3. 内网设备自己的防火墙挡了
NAS、Windows 自带的防火墙经常只放行了本地网段。**排除法**:在内网用另一台机器访问内网 IP:80,能通说明问题在路由器,不通说明是目标机防火墙。
## 4. 运营商封了低位端口或 80、443
家宽普遍封 80、443、8080 等。换成 10000 以上的高位端口再测,能通基本就是被封了。
## 5. 光猫还是路由模式
光猫若是路由模式且没做 DMZ,RouterOS 拿到的其实是内网 IP。**判断方法**:看 RouterOS WAN 口拿到的地址是不是 100.64.x.x(运营商大内网 CGNAT)或 10.x。是的话要么让光猫桥接,要么在光猫上再做一层映射。
## 6. 回环访问(hairpin NAT)没做
内网设备用**公网域名**访问自己服务不通,是缺少 hairpin。加一条:
```routeros
/ip firewall nat add chain=srcnat \
src-address=192.168.88.0/24 dst-address=192.168.88.0/24 \
out-interface=bridge-lan action=masquerade
```
## 7. 测试方法和工具的问题
手机流量测、用在线端口检测工具测都要试。**别只用一个测法就下结论**,有时只是本地 DNS 缓存或运营商出口限制。
# 三、快速排查顺序
按这个顺序走,基本 5 分钟定位:计数器是否增长 → NAT 规则是否匹配 → 内网直连是否通 → 换高位端口 → 查 WAN 口是否为私网地址 → 补 hairpin。
# 四、备忘
把最终生效的 NAT + filter 规则导出 `.rsc` 存一份;每次改动前 `/export file=backup`。端口映射的坑翻来覆去就是这几条,整理成清单后效率提升非常明显。