我们刚刚设置了 Mikrotik 路由器,并拥有公共 IP 地址和服务器的本地 IP 地址。 我们创建了一个
dst-nat
规则,任何访问者
public_ip:80
将 dst_nat
应用于 local_ip:8082
端口
但是,从我们的本地 IP 地址我们无法访问该公共 IP 地址。
如果在主机文件中写入 local_ip
public_dns_name
,它将起作用。
为什么 mikrotik 不发送到 public_ip 地址,即不应用 dst-nat 规则?
通过添加 srcnat 规则解决了这个问题,该规则伪装了来自本地网络的所有流量
Chain
srcnat
Src. Address -> our local network
192.168.88.0/24
Dst. Address -> our server
192.168.88.249
Protocol
6 (tcp)
Action
masquerade
这个问题及其解决方案在 microtik 的文档中有解释:https://help.mikrotik.com/docs/display/ROS/NAT#NAT-HairpinNAT
基本上,路由器在回复网络内的机器时将所有内容转换为本地 IP 地址。您的客户端向某个公共 IP 发送了请求,因此它正在等待来自同一公共 IP 的回复。 microtik 将请求转换为本地 IP,因此它发送了带有错误“发件人”地址的回复,而您的客户端忽略了它。您可以通过设置伪装规则或添加绕过公共 IP 需求的静态 DNS 条目来解决此问题。
就我而言,问题在于该规则设置为仅适用于 WAN(而非 LAN)上传入的流量。我将其更改为从任何地方路由流量,只要它请求我的公共 IP。
chain: dstnat
dst address: <public ip>
protocol: 6 (tcp)
dst port: 80
in. interface list: all
action: dst-nat
to addresses: <server local ip>
to ports: <server port>
谢谢这对我有很大帮助