LINUX.ORG.RU
ФорумAdmin

DNAT одинаково хорошо как из ВНЕ так и из ЛОКАЛКИ

 , ,


0

2

Всем привет!

Поднят Интернет роутер с 2мя провайдерами и Load Balancing NATом между ними для клиентов по средствам хитрого роутинга и маскардинга. Всё работает.
Так же есть 2 порта, которые пробрасываются DNATом внутр сети. Для них так же добавлены DNAT и правила марштуризации, чтобы не распределялось по внешним интерфейсам, а уж ходило через тот от куда пришло. Тоже работает.
Но тут столкнулся с интересной ситуацией. Есть человек, который тупо вбил в программе внешний IP и даже когда находится внутри сети (Notebook + Wifi) хочет чтобы всё так и работало по внешнему ИП, ведь он по сути доступен из локалки.

От чести ничего криминального. пакет от клиента приходит на внешний ип роутера с локальным ИП источника, рутер как и положено меняет адрес назначения на нужный внутри сети и соединение уже локальное, но нет! роутер зачем-то ещё и источник меняет на свой адресс.
Другими словами происходит сначала DNAT где IP назначения меняется на нужный локальный. А затем видимо происходит SNAT, где IP источника меняется «роутерный» и в таком виде паке выходит по таблице роутинга через внешний интерфейс роутера и конечно же никуда не доходит.

повторюсь, что из ВНЕ всё работает.

Можно что-то придумать?

А затем видимо происходит SNAT, где IP источника меняется «роутерный» и в таком виде паке выходит по таблице роутинга через внешний интерфейс роутера и конечно же никуда не доходит.

Куда смаршрутизируется пакет - зависит не от адреса источника, а от адреса назначения, так что проблема не в этом. Запость вывод iptables-save, ip rule и ip route для каждой таблицы.

anonymous
()
Ответ на: комментарий от anonymous

дело в том, что это RouteOS Там немного иначе, но смыслы те же.

nat print
 0   chain=dstnat action=dst-nat to-addresses=192.168.0.152 to-ports=554
     protocol=tcp in-interface=ether1-TTK dst-port=554 

 1   chain=dstnat action=dst-nat to-addresses=192.168.0.33 to-ports=3389
     protocol=tcp dst-address=<ext_ip_1> dst-port=33335 

 2   chain=dstnat action=dst-nat to-addresses=192.168.0.1 to-ports=3389
     protocol=tcp in-interface=ether1-TTK dst-port=33334 

 3   chain=srcnat action=masquerade dst-address=!192.168.0.0/24 
     out-interface=pppoe-dom.ru 

 4   chain=srcnat action=masquerade dst-address=!192.168.0.0/24
     out-interface=ether1-TTK

mangle print
 0   ;;; Networks marking
     chain=input action=mark-connection new-connection-mark=cin_ISP1 
     passthrough=yes in-interface=ether1-TTK 

 1   chain=input action=mark-connection new-connection-mark=cin_ISP2 
     passthrough=yes in-interface=pppoe-dom.ru 

 2   chain=output action=mark-routing new-routing-mark=main passthrough=yes 
     dst-address=192.168.0.0/24 

 3   ;;; Output marking
     chain=output action=mark-routing new-routing-mark=rout_ISP1 
     passthrough=no connection-mark=cin_ISP1 

 4   ;;; Mixinig
     chain=prerouting action=mark-routing new-routing-mark=mixed 
     passthrough=yes src-address=192.168.0.0/24 dst-address=!<dom.ru_router_ip>

 5   chain=prerouting action=mark-routing new-routing-mark=rout_ISP2 
     passthrough=yes src-address=192.168.0.0/24 dst-address=<dom.ru_router_ip>

 6   ;;; RDP fixing
     chain=prerouting action=mark-routing new-routing-mark=rout_ISP1 
     passthrough=yes protocol=tcp src-address=192.168.0.33 
     dst-address=!192.168.0.0/24 src-port=3389 

 7   ;;; IP Camp fifinig
     chain=prerouting action=mark-routing new-routing-mark=rout_ISP1 
     passthrough=yes src-address=192.168.0.152 dst-address=!192.168.0.0/24 

 8   chain=prerouting action=mark-routing new-routing-mark=rout_ISP1 
     passthrough=yes protocol=tcp src-address=192.168.0.1 
     dst-address=!192.168.0.0/24 src-port=3389 

 9   ;;; Remote RDP Prioroty
     chain=forward action=mark-connection new-connection-mark=rdp 
     passthrough=yes connection-state=established protocol=tcp 
     src-address=192.168.0.33 src-port=3389 

10   ;;; Clients MARK Rule
     chain=forward action=mark-connection new-connection-mark=clients 
     passthrough=yes src-address=192.168.0.130 

11   chain=output action=mark-routing new-routing-mark=rout_ISP2 passthrough=n>
     connection-mark=cin_ISP2 

12   ;;; Couriers MARK Rule
     chain=forward action=mark-connection new-connection-mark=couriers 
     passthrough=yes src-address=192.168.0.132 

13   ;;; Office MARK Rule
     chain=forward action=mark-connection new-connection-mark=managment 
     passthrough=yes connection-state=new src-address=192.168.0.0/24 

14   chain=forward action=mark-packet new-packet-mark=couriers passthrough=no 
     connection-mark=couriers 

15   chain=forward action=mark-packet new-packet-mark=managment passthrough=no 
     connection-mark=managment 

16   chain=forward action=mark-packet new-packet-mark=rdp passthrough=no 
     connection-mark=rdp 

17   chain=forward action=mark-packet new-packet-mark=clients passthrough=yes 
     connection-mark=clients


всё остальное пусто и по умолочанию ACCEPT

пытаюсь из сети подключиться на <ext_ip_1>:33335

Spider55
() автор топика
Ответ на: комментарий от Spider55
chain=srcnat action=masquerade protocol=tcp src-address=192.168.0.0/24
dst-address=192.168.0.33 dst-port=33335

Добавь такое правило, и должно заработать из подсети 192.168.0.0/24

anonymous
()
Ответ на: комментарий от anonymous

неа... пакеты правило проходят, счётчик увеличивается. Но сниффером видно, что выходят они с внешнего IP и интерфейса.

Spider55
() автор топика

Одновременно SNAT & DNAT ? Есть подозрение, что в линуксе это не сделать или оно не будет работать.

Пойми простую вещь - чтобы NAT работал, нужно чтобы пакеты в обе стороны проходили через роутер с NAT. DNAT в одной подсети не работает т.к. сервер отвечает на адрес клиента доступный ему напрямую.

Есть вариант - вынести сервер в отдельную локальную подсеть, тогда трафик будет ходить через роутер в обе стороны и NAT будет работать.

vel ★★★★★
()
Ответ на: комментарий от vel

Одновременно SNAT & DNAT ? Есть подозрение, что в линуксе это не сделать или оно не будет работать.

Почему? Это вполне работает. У пакета сохраняется state NEW до тех пор, пока он не уйдет через какой-то интерфейс.

anonymous
()
Ответ на: комментарий от Spider55

неа... пакеты правило проходят, счётчик увеличивается. Но сниффером видно, что выходят они с внешнего IP и интерфейса.

Тогда правь таблицы маршрутизации, т.к. пакет с dst адресом твоей локалки не должен уходить во внешку.

anonymous
()
Ответ на: комментарий от Spider55

То правило будет нужно для того, чтобы работало, но для теста можно его убрать.

anonymous
()
Ответ на: комментарий от anonymous

Оно и без него меняет адресс. И роутинг не совсем понимаю.
А таблице роутинга 2 правила работающие с метками rout_ISP1 и rout_ISP2, это понтяно. И регулярные правила созданные автоматически с подняетием инетрфейсов на основе адреса назначения.

теперь почему пакеты выходит через rout_ISP1.
Адресс назначения у него 192.168.0.33, что логично предположит, что если бы метки у пакета не было то оно бы попало под правило маршрутизации с назначением 192.168.0.0/24. Но т.к. оно уходит на внешний интерфейс можно предположить что таблица mangle его метит как rout_ISP1. Я добавял в prerouting перед всеми правило которое бы жёстко ставило метку main для адреса 192.168.0.33 и видно, что пакеты в него попадают, но всё равно выходят на внешку. Где ещё можно исправить роутинг? на сколько я понял только в preroute и output. Я в оба добавлял... Не помогает.

Spider55
() автор топика
Ответ на: комментарий от Spider55

Где ещё можно исправить роутинг?

Роутинг исправляется не в настройках фаерволла, а в таблицах маршрутизации. Посмотри во всех таблицах наличие маршрута до сети 192.168.0.0/24. В линуксах, по крайней мере, link-local маршруты не добавляются автоматически во все таблицы маршрутизации.

anonymous
()

Вот именно для того, чтобы на ЛОРе не было таких тредов, боженька и создал DNS-серверы.

роутер зачем-то ещё и источник меняет на свой адрес

Ему в любом случае надо менять источник, только не на внешний, а на внутренний. Иначе ответы пойдут мимо роутера прямиком к удивленному клиенту. Извращение ли это? Да, это извращение.

thesis ★★★★★
()

Пока решал это обнаружил, что при таких настройках локальный трафик от самого роутера не может найти маршрутизацию во внешку.

Разве локальный трафик не попадает под правило?

4   ;;; Mixinig
     chain=prerouting action=mark-routing new-routing-mark=mixed 
     passthrough=yes src-address=192.168.0.0/24 dst-address=!<dom.ru_router_ip>

Spider55
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.