我在 Mikrotik 路由器上设置了端口转发,但路由器操作系统(v6.39.2)看起来比我习惯的标准现成路由器界面要复杂得多。我按照说明从这里这些是我在 IP/防火墙/NAT 中输入的设置:
- Chain: dstnat
- Protocol: 6 (tcp)
- Dst Port: 8000
- In. Interface: all Ethernet (for testing purposes)
- Action: dst-nat
- Log: yes (for testing purposes)
- To Addresses: 192.168.1.33
- To Ports: 8000
由于外部网络似乎尚未正式开放 8000 端口(等待有人这样做,同时我检查它是否已打开yougetsignal.com)如果可能的话,我至少想测试一下我的端口转发规则是否在本地网络中起作用。
当我尝试192.168.1.1:8000
在 Web 浏览器中访问时,我在 NAT 规则设置中的速率图中看到一些活动。但 Web 浏览器仍然只给我一个“无法访问此站点”的响应。
我希望它能将我转发给192.168.1.33:8000
。这应该可行吗?还是我做错了什么?
答案1
Mikrotik RouterOS 基于 Linux 内核,继承了大部分网络概念。
因此,我将描述 Mikrotik 路由器中端口转发的设置。并尝试描述您的问题。
如果你想更深入地理解,你可以阅读iptables 教程。这是非常酷的文档,有详细的解释。
- 我们来画一下网络拓扑图:
- 创建端口转发规则。更好的方法是指定原始目标地址而不是接口。这允许使用单个规则重写来自外部的数据包和来自 LAN 的数据包的目标地址。因此,您的规则是正确的:
- Chain: dstnat
- Protocol: 6 (tcp)
- Dst Address: <wan-ip>
- Dst Port: 8000
- In. Interface: all Ethernet (for testing purposes)
- Action: dst-nat
- Log: yes (for testing purposes)
- To Addresses: 192.168.1.33
- To Ports: 8000
当数据包从外部(WAN 接口)到达时,情况很简单。但是,当应该进行端口转发的数据包从 LAN 到达时,就会发生一些有趣的事情。
- 假设局域网主机的用户尝试浏览
http://<wan-ip>:8000
网页。表格中的 TCP 数据包192.168.1.Z:Y -> <wan-ip>:8000 TCP [SYN]
源自局域网主机并被发送到默认网关(Mikrotik 路由器)。 - mikrotik路由器接收该数据包。
- 然后根据你的规则重写目标地址
dst-nat
。执行此操作后,数据包将如下所示192.168.1.Z:Y -> 192.168.1.33:8000 TCP [SYN]
- 路由器查找进一步的路径并将数据包发送到 LAN 中的主机
192.168.1.33
。 - 主机
192.168.1.33
以 的形式接收 TCP 数据包TCP SYN 192.168.1.Z:Y -> 192.168.1.33:8000
,以 的形式创建答复192.168.1.33:8000 -> 192.168.1.Z:Y TCP [SYN-ACK]
并将其发送到 LAN 主机直接地。 - LAN 主机接收到数据包
192.168.1.33:8000 -> 192.168.1.Z:Y TCP [SYN-ACK]
,但这不是主机所期望的!并且此数据包将被丢弃。 - 如您所见,为了使一切正常,主机
192.168.1.33
应将回复发送到 mikrotik 路由器,而不是直接发送到 LAN 主机。为此,您可以src-nat
向 Mikrotik 添加其他规则。
- 假设局域网主机的用户尝试浏览
- Chain: srcnat
- Protocol: 6 (tcp)
- Dst Address: 192.168.1.33
- Dst Port: 8000
- Src Address: 192.168.1.0/24
- Action: src-nat
- Log: yes (for testing purposes)
- To Addresses: 192.168.1.1
它使 Mikrotik 重写来自 LAN 的端口转发数据包中的源地址。之后,主机192.168.1.33
将把这些数据包视为192.168.1.1:X -> 192.168.1.33:8000 TCP [SYN]
,并将回复发送给 Mikrotik。Mikrotik 将进行反向地址转换,然后一切正常。
- 另外,您应该配置的是防火墙过滤规则。简单情况下,默认规则就足够了。如果您更喜欢自己配置,那么您需要在链中配置几条规则
filter/FORWARD
:
- Chain: filter/FORWARD
- Protocol: 6 (tcp)
- Connection state: new
- Dst address: 192.168.1.33
- Dst port: 8000
- Action: accept
- Chain: filter/FORWARD
- Connection state: established,related
- Action: accept
显然,有足够的方法可以改进,但现在主要概念应该很清楚了。
答案2
dst-nat 规则看起来没问题。您可以从网络内部浏览到 192.168.1.33:8000 吗?如果是,我会配置一个与生产子网不同的子网的第二个 LAN 接口,并使用 Mikrotik 作为默认网关将笔记本电脑连接到这个新的 LAN 端口进行测试。
问候,莱斯利