Вроде разобрался. Покурил tcpdump и получается следуещее. Идет SYN запрос от 192.168.88.x на внешний IP, где адрес получателя переписывается (dst-nat действие, которое описано ранее) на внутренний. Получаем новый пакет с внутренними адресами в отправителе и получателе, сервак отвечает SYN+ACK пакетом, но уже на локальный адрес, а этот пакет конечно отправителю SYN запроса не нравится и он немедленно делает RST - соединение не устанвлено.
Схема работает для внешних запросов из-за маскарадинга, который ответы внутренних серверов маскирует под внешний IP.
В итого мне нужно переписать адрес отправителя в пакетах, которые адресованы на внешний IP из локальной сети, чтобы ответы от серверов шли на него же и переписывались опять и переправлялись на внутренний ресурс.
Сделал я это через выставление метки (mangle) в preroute цепи и srcnat действием.
Код: Выделить всё
/ip firewall mangle print
1 chain=prerouting action=mark-packet new-packet-mark=local via gate passthrough=yes
protocol=tcp src-address=192.168.88.0/24 dst-address=внешний IP
/ip firewall nat print
1 chain=srcnat action=src-nat to-addresses=внещний IP packet-mark=local via gate
Вот так. Вроде должно работать для любых пробросов портов.
Есть замечания?