dstNAT Через два шлюза

RIP, OSFP, BGP, MPLS/VPLS
sd--Anti
Сообщения: 1
Зарегистрирован: 26 окт 2022, 17:38

dstNAT Через два шлюза

Сообщение sd--Anti »

Здравствуйте!

Имею два маршрутизатора подключенных друг за другом:
Маршрут 1 - 192.168.3.1 смотрит в интернет
Маршрут 2 - 192.168.3.2 смотрит в 192.168.3.1
На 192.168.3.2 подключен резервный канал интернет, получается, что в сети два шлюза.

192.168.3.2 раздает по DHCP пул 192.168.3.100-192.168.3.200 где он указан как шлюз по умолчанию

Собственно задача в том, чтоб пробросить порты dstnat'ом на машины за 192.168.3.2

Сейчас это реализовано через костыль, т.к. у меня явно не хватает знаний в этой области.
Прошу совета и помощи, вероятно есть более элегантный способ это сделать?


Маршрут 1

Код: Выделить всё

chain=dstnat action=dst-nat to-addresses=192.168.3.2 to-ports=33333 protocol=tcp in-interface=WAN dst-port=33333 log=yes log-prefix="RDP_33"
Маршрут 2

Код: Выделить всё

chain=dstnat action=dst-nat to-addresses=192.168.3.159 to-ports=3389 protocol=tcp dst-port=33333 log=yes log-prefix="RDP_33" 
Аватара пользователя
Chupaka
Сообщения: 3559
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: dstNAT Через два шлюза

Сообщение Chupaka »

Здравствуйте.

Это проблема Hairpin NAT: у клиента шлюз по умолчанию - 3.2, поэтому если ему приходит запрос из Интернета (даже через 3.1) - он шлёт ответные пакеты на 3.2. Один из вариантов решения (если не рассматривать вариант сделать по-нормальному у всех клиентов один шлюз) - маскарадить проброшенный трафик, чтобы клиент думал, что подключение идёт не из Интернета, а от 3.1 (а уж где находится 3.1 - клиент знает и без 3.2):

Код: Выделить всё

chain=dstnat action=dst-nat protocol=tcp dst-port=33333 to-addresses=192.168.3.159 to-ports=3389 log=yes log-prefix="RDP_33"
chain=srcnat action=masquerade protocol=tcp dst-address=192.168.3.159 dst-port=3389