MikroTik и два канала в интернет. Часть 2 - Публикация интернет-сервисов за NATом

. Просмотров: 10259

Рейтинг:  5 / 5

Звезда активнаЗвезда активнаЗвезда активнаЗвезда активнаЗвезда активна
 

В предыдущей статье "MikroTik и два канала в интернет. Часть 1" было рассказано про базовые настройки маршрутизатора под управлением MikroTik RouterOS v3.20. Теперь же я расскажу о самом интересном: публикации интернет-сервисов для работы за NATом, при этом они автоматически будут работать с двумя провайдерами, т.е. от какого провайдера пришел запрос, тому провайдеру и будет выдан ответ.

Вообще, история данного решения такова: После безуспешных попыток сделать такое на Cisco PIX 515E, наткнулся на статью, где сама cisco заявляет "load balancing or load sharing as it is not supported on ASA/PIX" и понял, что это просто невозможно Вспомнил, что давным давно, когда вода была мокрее , а сахар слаще, я такое реализовывал на маршрутизаторе MikroTik с RouterOS v.2.7. Тогда же мной был создан сайт pcrouter.ru, и написано несколько статей про настройку RouterOS. Но, это было давно, и как говориться, не правда. Сайт давно сменил хозяина, я сменил место работы, и мне больше не приходилось иметь дело с несколькими каналами в одном маршрутизаторе, поэтому на какое-то время забросил опыты с MiroTIk. Но, вот опять, два канала и надо чтобы оба работали. Так как времени прошло много, то и версия RouterOS поменялось не мало, и соответственно моё решение уже не работало современных версиях. Обыскав весь интернет ничего дельного не нашел. Попадались только варианты с заранее прописанной статической маршрутизацией на каждого провайдера, а мне то надо динамически. Службой поддержки MikroTik был сразу послан. В итоге, несколько вечеров за чтением документации и экспериментов, и вот,  все получилось. Как говориться "решение на 1000$", пользуйтесь на здоровье !
Желающие отблагодарить - могут перечислить любую сумму на Яндекс.Деньги № 4100145284318.
Это было предисловие, а теперь к делу.

Часть 2. Публикация интернет-сервисов на примере почтового сервера.

Для примера буду использовать почтовый сервер находящийся по ip адресу 192.168.8.21 на 25 порту протокола tcp.
Для корректной работы шлюзом по умолчанию должен быть MikroTik, в моём примере его ip адрес 192.168.8.35

 

Делаем переадресацию входящих запросов приходящих на маршрутизатор на реальные адреса на почтовый сервер, внутренний адрес.
Два правила, по одному для каждого провайдера.

ip firewall nat add chain=dstnat action=dst-nat in-interface=vlan40 protocol=tcp dst-port=25 to-address=192.168.8.21 to-ports=25
ip firewall nat add chain=dstnat action=dst-nat in-interface=vlan54 protocol=tcp dst-port=25 to-address=192.168.8.21 to-ports=25

 

Разрешаем прохождение пакетов через маршрутизатор адресованных почтовому серверу:

ip firewall filter add chain forward in-interface=vlan40 protocol=tcp dst-port=25 dst-address=192.168.8.21 action=accept comment="vlan40 to smtp"
ip firewall filter add chain forward in-interface=vlan54 protocol=tcp dst-port=25 dst-address=192.168.8.21 action=accept comment="vlan54 to smtp"

 

Если вы, как в первой части статьи, разрешили выход в интернет всем, то следующее правило вам не нужно вводить.
В противном случае, разрешаем с почтового сервера создание новых соединений на другие почтовый серверы в интернете:

ip firewall filter add chain forward in-interface=ether2 src-address=192.168.8.21/32 protocol=tcp dst-port=25 action=accept comment="Access to SMTP servers from local mail server"

 

Результат должен быть таким:

[admin@MikroTik] > ip firewall filter print chain forward
Flags: X - disabled, I - invalid, D - dynamic
0   ;;; Drop invalid connection packets
chain=forward action=drop connection-state=invalid

1   ;;; Allow established connections
chain=forward action=accept connection-state=established

2   ;;; Allow related connections
chain=forward action=accept connection-state=related

3   ;;; Allow UDP
chain=forward action=accept protocol=udp

4   ;;; Allow ICMP Ping
chain=forward action=accept protocol=icmp

5   ;;; Access to internet from local network
chain=forward action=accept src-address=192.168.8.0/24 in-interface=ether2

6   ;;; All other forwards drop
chain=forward action=drop

7   ;;; vlan40 to smtp
chain=forward action=accept protocol=tcp dst-address=192.168.8.21 in-interface=vlan40 dst-port=25

8   ;;; vlan54 to smtp
chain=forward action=accept protocol=tcp dst-address=192.168.8.21 in-interface=vlan54 dst-port=25

9   ;;; Access to SMTP servers from local mail server
chain=forward action=accept protocol=tcp src-address=192.168.8.21 in-interface=ether2 dst-port=25
[admin@MikroTik] >

 

Как видите, наши новые правила оказались после запрещающего правила, поэтому это запрещающее правило удаляем и заново создаем (перед удалением всегда надо сначала сделать print):

ip firewall filter print chain forward
ip firewall filter remove 6
ip firewall filter add chain forward action=drop comment="All other forwards drop"

 

Должно получиться следующее:

[admin@MikroTik] > ip firewall filter print chain forward
Flags: X - disabled, I - invalid, D - dynamic
0   ;;; Drop invalid connection packets
chain=forward action=drop connection-state=invalid

1   ;;; Allow established connections
chain=forward action=accept connection-state=established

2   ;;; Allow related connections
chain=forward action=accept connection-state=related

3   ;;; Allow UDP
chain=forward action=accept protocol=udp

4   ;;; Allow ICMP Ping
chain=forward action=accept protocol=icmp

5   ;;; Access to internet from local network
chain=forward action=accept src-address=192.168.8.0/24 in-interface=ether2

6   ;;; vlan40 to smtp
chain=forward action=accept protocol=tcp dst-address=192.168.8.21 in-interface=vlan40 dst-port=25

7   ;;; vlan54 to smtp
chain=forward action=accept protocol=tcp dst-address=192.168.8.21 in-interface=vlan54 dst-port=25

8   ;;; Access to SMTP servers from local mail server
chain=forward action=accept protocol=tcp src-address=192.168.8.21 in-interface=ether2 dst-port=25

9   ;;; All other forwards drop
chain=forward action=drop
[admin@MikroTik] >

 

Ну, а теперь самое интересно, помечаем входящие соединения, чтобы ответы шли через того провайдера с которого получен запрос:

ip firewall mangle add chain=forward in-interface=vlan40 action=mark-connection new-connection-mark=vlan40_c passthrough=yes
ip firewall mangle add chain=forward in-interface=vlan54 action=mark-connection new-connection-mark=vlan54_c passthrough=yes
ip firewall mangle add chain=prerouting src-address=192.168.8.0/24 connection-mark=vlan40_c action=mark-routing new-routing-mark=vlan40_r passthrough=yes
ip firewall mangle add chain=prerouting src-address=192.168.8.0/24 connection-mark=vlan54_c action=mark-routing new-routing-mark=vlan54_r passthrough=yes

Проверяем результат:

[admin@MikroTik] > ip firewall mangle print
Flags: X - disabled, I - invalid, D - dynamic
0   chain=forward action=mark-connection new-connection-mark=vlan40_c passthrough=yes in-interface=vlan40

1   chain=forward action=mark-connection new-connection-mark=vlan54_c passthrough=yes in-interface=vlan54

2   chain=prerouting action=mark-routing new-routing-mark=vlan40_r passthrough=yes src-address=192.168.8.0/24 connection-mark=vlan40_c

3   chain=prerouting action=mark-routing new-routing-mark=vlan54_r passthrough=yes src-address=192.168.8.0/24 connection-mark=vlan54_c
[admin@MikroTik] >

 

Добавляем правила маршрутизации:

ip route add routing-mark=vlan40_r gateway=82.19.115.97
ip route add routing-mark=vlan54_r gateway=89.15.64.2

Должно получиться следующее:

[admin@MikroTik] > ip route print detail
Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, B - blackhole, U - unreachable, P - prohibit
0 A S  dst-address=0.0.0.0/0 gateway=82.19.115.97 interface=vlan40 gateway-state=reachable distance=1 scope=30 target-scope=10

1 A S  dst-address=0.0.0.0/0 gateway=82.19.115.97 interface=vlan40 gateway-state=reachable distance=1 scope=30 target-scope=10 routing-mark=vlan40_r

2 A S  dst-address=0.0.0.0/0 gateway=89.15.64.2 interface=vlan54 gateway-state=reachable distance=1 scope=30 target-scope=10 routing-mark=vlan54_r

3 ADC  dst-address=82.19.115.96/29 pref-src=82.19.115.100 interface=vlan40 distance=0 scope=10

4 ADC  dst-address=89.15.64.0/26 pref-src=89.15.64.9 interface=vlan54 distance=0 scope=10

5 ADC  dst-address=192.168.8.0/24 pref-src=192.168.8.35 interface=ether2 distance=0 scope=10
[admin@MikroTik] >

 

Проверяем, и радуемся как все работает.

 

Продолжение в статье MikroTik и два канала в интернет. Часть 3 - Маршрутизация

 

Комментарии  

0 # Taras 07.04.2014 16:35
Добрый день!
Подскажите как правильно написать правило для фаервола? если у меня переадресация идет между разными портами?
ip firewall nat add chain=dstnat action=dst-nat in-interface=et her1 protocol=tcp dst-port=1610 to-address=192. 168.0.77 to-ports=9787

Недостаточно прав для комментирования