我有一个安装了 v7.1beta2 固件的 MikroTik 路由器
其 WAN(eth1)的 IP 地址为192.168.7.122
有两个设备连接到其 LAN
- 设备#1 是网络服务器,通过端口进行通信
80
TCP
192.168.88.254
- 设备 #2 是一个通过端口进行通信的 PLC
9999
UDP
192.168.88.250
我已经成功设置了 dst-nat 来8080
从 WAN 端口公开设备#1 网络服务器。
但是,我无法让 PLC 通过 NAT 进行通信。我已将 dstnat 配置为与 Web 服务器类似,仅更改了端口、地址和协议。以下是我现在配置的内容:
Chain: dstnat
Protocol: 17 (udp)
Dst. Port: 9999
Action: dst-nat
Log: x
To Addressess: 192.168.88.250
To Ports: 9999
我已禁用drops
防火墙上的所有内容。
当我使用通信实用程序时,我将其指向 WAN 地址和配置的端口:192.168.7.122:9999
并搜索设备,MikroTik RateGraph 显示一个峰值(因此它正在进入)但实用程序将该设备报告为“丢失”(例如它没有得到响应)。
当我直接连接到 LAN 并192.168.88.250:9999
直接指向时,该设备立即显示为“可用”。
据我所知,PLC 设备并不关心源地址是否来自本地网络,因为我们过去曾使用过通过 NAT 进行通信的相同型号(我不认为进行了任何特殊处理)。现场的其他硬件目前通过 Linux 机器(不是 NAT)使用 UDP 9999 的 socat,并且运行良好,因此我愿意了解如何配置类似 socat 的 NAT 进行测试。
我还尝试配置 srcnat,以防 dstnat 不将流量反向传输。如下所示:
Chain: srcnat
Src. Address: 192.168.88.250
Protocol: 17 (udp)
Dst. Port: 9999
Action: src-nat
To Addresses: 192.168.7.122
To Ports: 9999
这也不起作用,并且这个 srcnat 没有在速率图上显示任何流量。
我是 RouterOS 的新手,而且网络从来都不是我的强项(我的职业是软件工程师),所以我不熟悉如何正确调试这种情况,尤其是使用 RouterOS 时。
在直接连接到 LAN 的同时在主机上使用 WireGuard,我可以看到流量既出去了,又有响应。
使用它通过 WAN 进行监控,虽然它出去了,但我从未看到响应。
帮助?
答案1
我遇到了同样的问题,但看起来 Mikrotic wiki 上有一个解决方案: https://wiki.mikrotik.com/wiki/Tips_and_Tricks_for_Beginners_and_Experienced_Users_of_RouterOS#Port_forwarding_on_RouterOS
除了我添加的 srcnat 规则之外
/ip firewall filter add chain=forward action=accept in-interface=wan_interface connection-nat-state=dstnat connection-state=established,related
前FastTrack 规则看起来起了作用
答案2
最后,我找到的解决方案是使用 OpenWrt 刷新路由器 (RB750Gr3),并以与我在 RouterOS 中完全相同的方式进行配置。一切都按预期完美运行。
虽然我不一定认为“更改操作系统”是解决问题的可行方法,但我花了几天时间试图找出简单的 NAT 端口转发方面的问题,但却能够在不到半天的时间内在同一硬件上完成完全相同的事情(其中包括弄清楚如何将不同的操作系统刷入硬件上)。
这很遗憾,因为我真的很喜欢具有深入功能的 RouterOS,但 OpenWrt 也相当不错。