防火墙后面的 Mikrotic 750 端口转发

网络工程 路由
2022-02-14 08:17:23

我有一个 Mikrotik 750 路由器。我有一个 SVN 服务器设置为在服务器 192.168.1.111 上通过 https 运行。我将有多台机器使用标准的 ssl 端口,所以我决定使用端口转发。从防火墙外部,某些东西会通过 svn.mydomain.com:5555 访问我的公共 IP,它会转发到我的机器 192.168.1.111:443

使用规则:

chain=dstnat action=dst-nat to-addresses=192.168.1.111 to-ports=443 
 protocol=tcp in-interface=ether1-gateway dst-port=5555

一切正常,直到我尝试在防火墙后面使用 SVN。当然我可以直接访问服务器;但是,这意味着每次我想在网络内外工作时都要更改配置。我宁愿能够从防火墙后面访问 svn.mydomain.com:5555。我缺少什么规则?

编辑:添加的规则

注意:我正在使用主/从配置

;;; hairpin rule (not sure if to port is causing problems) 
chain=srcnat action=masquerade to-ports=443 protocol=tcp 
  src-address=192.168.1.0/24 dst-address=192.168.1.111
  out-interface=ether2-master-local dst-port=5555

;;; another rule I tried
chain=dstnat action=dst-nat to-addresses=192.168.1.111 to-ports=443 
  protocol=tcp dst-address=192.168.1.111 dst-address-type=local 
  in-interface=ether2-master-local dst-port=5555
1个回答

根据您发布的规则,它仅适用于来自ether1-gateway. 这意味着当您的数据包来自您的 LAN(假设它在不同的接口上)时,Mikrotik 永远不会端口转发您的数据包。

现在,问题是即使您将规则更改为也适用于来自 LAN 的数据包,它仍然无法正常工作。

假设您的工作站 IP 是192.168.1.200并且您向svn.mydomain.com:5555. 这意味着 svn.mydomain.com 将解析为您的公共 IP(假设此 IPmikrotik 本身上),并且请求数据包将离开您的工作站,源地址为192.168.1.200,目标地址为your public ip

现在 Mikrotik 将匹配这些数据包并尝试将它们端口转发到192.168.1.111:443.
192.168.1.111将愉快地接受然后数据包,处理它们,然后向源地址发送回复192.168.1.200

问题就从这里开始了。您的工作站将数据包发送到您的公共 IP,但回复来自“未知”IP(就您的工作站而言),因此它只是丢弃它们。
您需要的是不是从公共 IP 返回的数据包192.168.1.111

因此,为了使其正常工作,您需要在您已经在 mikrotik 上创建的规则之后添加一个额外的 src-nat 规则,该规则将匹配并执行以下操作:

  • 如果源地址是您的 LAN 子网
  • 并且目的地址和端口是192.168.1.111:443
  • 然后执行 src-nat 并将 IP 地址设置为 Mikrotik 的地址(例如192.168.1.1)。

这样,SVN 服务器会将回复发送回 mikrotik,然后 Mikrotik 会将回复发送回您的工作站,并使用公共 IP 作为源地址,一切正常。

现在考虑到使用这种方法,从您的 LAN 到 SVN 服务器的所有请求都将具有 Mikrotik 的源 IP,而不是发出请求的实际 PC。所以所有的日志只会显示 Mikrotik 的 IP。

根据您的设置和用户数量,这可能不适合您。

因此,另一种方法是简单地在您的主机文件中添加以下内容:
192.168.1.111 svn.mydomain.com并重新配置您的 SVN 服务器以侦听端口 5555。

或者,如果您的 LAN 使用 Mikrotik 作为 DNS 服务器,您可以简单地在 Mikrotik ( /ip dns static) 上添加静态 dns 记录,以便 LAN 上的每台 PC 将 svn.mydomain.com 解析为内部 IP,而 LAN 之外的其他所有人将解析为和以前一样的公共IP。