This is a hairpin nat issue.
What happens: your LAN client sends a request to your WAN ip w/ port forward.
The packet arrives at the server w/ your LAN address as src-address. Your server replies to your src-address - which is in the same network as the server, so it sends it out directly without going back through the router.
Your LAN client discards trhat packet because it iis expecting a reply from yooour WAN IP.
Try this:
/ip firewall nat
add chain=src-nat action=src-nat to-address=<your LAN IP, for example 192.168.88.1> src-address=<your lan network, for example 192.168.88.0/24> dst-address=<your WAN IP> out-interface=<your LAN interface, most likely bridge-local>
and put in on top of your set of NAT rules.
If you have more than one WAN address, it’s a good practice to add those to an address list and use dst-address-list instead of dst-address in the nat rule.
-Chris
/ip firewall nat add chain=src-nat action=masquerade out-interface=<your LAN interface> src-address=<your LAN IP range like 192.168.88.0/24> dst-address=<your LAN IP range like 192.168.88.0/24>
This is not tested, but I don’t see a reason why it shouldn’t work.
I am having the same problem.
I would have expected a dst-nat, not src-nat, though. Something to change my destination public address to my private LAN server address when accessing the LAN server through its public IP!
You’ll need both the port forward (dstnat) rule and hairpin rule(srcnat, masquerade) to work together.
dstnat:
Make sure your port forward/dstnat does NOT use an in-interface filter from WAN otherwise hairpin will not work as you are comming from bridge-local (or whatever your LAN is).
Instead use the filter dst-address-type=local on your dstnat which will match any IP directly bound to router. You can also filter by WAN ip if you need to access a service on the router that uses the same port# (webfig port 80 for example).
srcnat, masquerade:
/ip firewall nat add chain=src-nat action=masquerade out-interface=<your LAN interface> src-address=<your LAN IP range like 192.168.88.0/24>
You may also want to fiter this by protocol and port#.