RDP протокол тут не причем, с любым другим протоколом такая же ситуация будет. А трафик инспектор вообще не показатель, у него даже своего НАТа нет (используется Microsoft'овский). С подобной задачей справится KerioWinrouteFirewall(KerioControl) или ISA.
Если рассуждения не интересны, переходите сразу к скринам :).
Давайте разберемся в чем проблема.
На пример у нас есть хост в интернете с адресом 1.1.1.1
микротик с внешним АЙПИ 2.2.2.2 и внутренним 192.168.0.1
и сервер РДП в локальной сети с адресом 192.168.0.111
Нам нужно подключиться с хоста 1.1.1.1 на сервер 192.168.0.111, подключаясь на 2.2.2.2:3392 (случай когда "наружу" открыт порт 3392 с пробросм на 3389 ) .
В случае когда хост 192.168.0.111 использует шлюз 192.168.0.1(микротик), и на микротике проброшен порт 3392 на порт 3389 адрес 192.168.0.111 происходит следующее: пакет с хоста 1.1.1.1 послается на внешний АЙПИ микротика , пакет содержит адрес источника (АИ) 1.1.1.1 и адрес назначения (АН) 2.2.2.2 порт 3392. Пакет попадает на внешний интерфейс микротика, микротик заменяет АН на 192.168.0.111 и порт на 3389 АИ не меняется. Пакет попадет на сервер 192.168.0.111. Сервер хочет отправить ответный пакет хосту из поля АИ, т.е. хосту 1.1.1.1. Сервер 192.168.0.111 определяет, что хост 1.1.1.1 находится не в одной с ним подсети и отправляет ответный пакет на свой шлюз по-умолчанию 192.168.0.1 АИ 192.168.0.111 АН 1.1.1.1 . Микротик заменяет АИ на свой внешний 2.2.2.2 (должно быть правило разрешающее серверу 192.168.0.111 отправлять пакеты в интернет). Хост 1.1.1.1 получает ответ и сеанс связи продолжается.
В случае когда хост 192.168.0.111 использует шлюз на пример 192.168.0.2(внешний адрес которого 3.3.3.3).
Начальный этап происходит так же (пакет с хоста 1.1.1.1 послается на внешний АЙПИ микротика , пакет содержит адрес источника (АИ) 1.1.1.1 и адрес назначения (АН) 2.2.2.2 порт 3392. Пакет попадает на внешний интерфейс микротика, микротик заменяет АН на 192.168.0.111 и порт на 3389 АИ не меняется. Пакет попадет на сервер 192.168.0.111. Сервер хочет отправить ответный пакет хосту из поля АИ, т.е. хосту 1.1.1.1.) Сервер 192.168.0.111 определяет, что хост 1.1.1.1 находится не в одной с ним подсети и отправляет ответный пакет на свой шлюз по-умолчанию 192.168.0.2 АИ 192.168.0.111 АН 1.1.1.1 . Роутер 192.168.0.2 заменяет АИ на свой внешний 3.3.3.3 (в случае если на роутере разрешено серверу 192.168.0.111 отправлять пакеты в инет). Хост 1.1.1.1, получив даный пакет, не воспринимает его как ответ на свой запрос, скорее всего файервол его не пропуcтит вообще, т.к. запрос делался на адрес 2.2.2.2, а ответ приходит с 3.3.3.3 и сеанса связи не происходит.
Если же шлюз не указан , то сервер 192.168.0.111 прото не имеет возможности отправить ответ.
Решение - заменить АИ с 1.1.1.1 на адрес микротика 192.168.0.1 , так как адрес 192.168.0.1 находится в одной подсети что и 192.168.0.111, то шлюз вообще не будет использоваться. Сервер 192.168.0.111 воспринимает такой пакет, как пакет от локального хоста 192.168.0.1 и отправляет ему ответ. Далее микротик меняет АИ и АН и пакет-ответ попадает 1.1.1.1 сеанс связи происходит.
Реализация
из Wiki микротика
"
dst-nat - replaces destination address and/or port of an IP packet to values specified by to-addresses and to-ports parameters и
src-nat - replaces source address of an IP packet to values specified by to-addresses and to-ports parameters.
"
если коротко
dst-nat - заменяет АН,
src-nat - заменяет АИ
как раз то, что нам нужно.
Создаем в микротике два правила
первое это проброс порта, замена АН
Закладка General
chain:dstnat protocol:tcp dst.port:3392
Закладка Action
Action:dst-nat ToAddress:192.168.0.111 ToPorts:3389
второе это замена АИ на локальный адрес микротика
Закладка General
chain:srcnat protocol:tcp dst.address:192.168.0.111 dst.port:3389
Закладка Action
Action:src-nat ToAddress:192.168.0.1
Если поле dst.address: оставить пустым, то правило станет более универсальным, т.е будет работать проброс на любой сервер с иным шлюзом или без него.
Идинственным минусом в такой реализации , это то, что сервер 192.168.0.111, не может различить пакет с интернета от пакета с локалки. Но для РДП протокола считаю это не критичным. Выпуск, на пример, SMTP сервера в инет подобной схемой смерти-подобно :).