Три провайдера. Криво работает проброс портов.

Обсуждение оборудования и его настройки
abwabw
Сообщения: 12
Зарегистрирован: 01 сен 2015, 10:30

RB2011UIAS-RM
Ситуация: имеем 3 провайдера и 3 независящих друг от друга офиса (см.рис. http://s018.radikal.ru/i525/1509/7c/f4d9e20a4f90.jpg). Настройку микротика взял здесь (http://geektimes.ru/post/186284/). Функционал именно тот, что нужен. Реализована схема резервирования следующая:
office1: ISP1->ISP2->ISP3
office2: ISP2->ISP1->ISP3
office3: ISP1->ISP2->ISP3

Проблема: криво работает проброс портов, а именно:
1. Очень редко обращение к любому внешнему интерфейсу (ether6, ether7, ether8) по любому из портов (8080, 8081, 8082) приводит к правильному срабатыванию всего задуманного функционала. Т.е. мы нормально попадаем на соответствующий WEBLocal. Но это происходит о-о-о-очень редко.
2. Как правило работает только следующий вариант:
a. На WEBLocal_0 можно попасть только обратившись на внешний интерфейс ether6 на порт 8080
b. На WEBLocal_1 можно попасть только обратившись на внешний интерфейс ether7 на порт 8081
c. На WEBLocal_2 можно попасть только обратившись на внешний интерфейс ether6 на порт 8082
все остальные комбинации внешних интерфейсов и портов не приводят к попаданию на нужные WEBLocal (в этом варианте WEBLocal получают сегмент TCP на установление соединения и переходят в режим SYN-RECEIVED, но на этом всё останавливается).
Вопрос: что допилить в настройках, чтобы всё нормально работало постоянно?

Настройка микротика:
 
/ip pool
add name=default-dhcp1 ranges=192.168.0.210-192.168.0.254
add name=default-dhcp2 ranges=192.168.1.210-192.168.1.254
add name=default-dhcp3 ranges=192.168.2.210-192.168.2.254
/ip dhcp-server
add address-pool=default-dhcp1 interface=ether1 lease-time=1d name=dhcp1
add address-pool=default-dhcp2 interface=ether2 lease-time=1d name=dhcp2
add address-pool=default-dhcp3 interface=ether3 lease-time=1d name=dhcp3
/ip address
add address=206.188.193.174/29 comment=ISP1 interface=ether6 network=206.188.193.168
add address=72.52.4.119/26 comment=ISP2 interface=ether7 network=72.52.4.64
add address=2.20.254.82/24 comment=ISP3 interface=ether8 network=2.20.254.0
add address=192.168.0.5/24 comment="Office1 (OPTK)" interface=ether1 network=192.168.0.0
add address=192.168.1.5/24 comment="Office2 (OP)" interface=ether2 network=192.168.1.0
add address=192.168.2.5/24 comment="Office3 (GRV)" interface=ether3 network=192.168.2.0
/ip dhcp-server network
add address=192.168.0.0/24 dns-server=192.168.0.5 gateway=192.168.0.5
add address=192.168.1.0/24 dns-server=192.168.1.5 gateway=192.168.1.5
add address=192.168.2.0/24 dns-server=192.168.2.5 gateway=192.168.2.5
/ip dns
set allow-remote-requests=yes servers=8.8.8.8,8.8.4.4
/ip firewall address-list
add address=192.168.0.0/24 list=LocalNet
add address=192.168.1.0/24 list=LocalNet
add address=192.168.2.0/24 list=LocalNet
/ip firewall filter
add action=drop chain=forward connection-nat-state=!dstnat connection-state=new in-interface=ether6
add action=drop chain=forward connection-nat-state=!dstnat connection-state=new in-interface=ether7
add action=drop chain=forward connection-nat-state=!dstnat connection-state=new in-interface=ether8
/ip firewall mangle
add action=mark-connection chain=input dst-address=206.188.193.174 in-interface=ether6 new-connection-mark="ISP 1->Input" passthrough=no
add action=mark-routing chain=output connection-mark="ISP 1->Input" new-routing-mark="ISP 1" passthrough=no
add action=mark-connection chain=input dst-address=72.52.4.119 in-interface=ether7 new-connection-mark="ISP 2->Input" passthrough=no
add action=mark-routing chain=output connection-mark="ISP 2->Input" new-routing-mark="ISP 2" passthrough=no
add action=mark-connection chain=input dst-address=2.20.254.82 in-interface=ether8 new-connection-mark="ISP 3->Input" passthrough=no
add action=mark-routing chain=output connection-mark="ISP 3->Input" new-routing-mark="ISP 3" passthrough=no
add action=mark-routing chain=prerouting dst-address-list=!LocalNet new-routing-mark="office 1" passthrough=no src-address=192.168.0.0/24
add action=mark-routing chain=prerouting dst-address-list=!LocalNet new-routing-mark="office 2" passthrough=no src-address=192.168.1.0/24
add action=mark-routing chain=prerouting dst-address-list=!LocalNet new-routing-mark="office 3" passthrough=no src-address=192.168.2.0/24
/ip firewall nat
add action=dst-nat chain=dstnat comment=WEBLocal_0 dst-port=8080 in-interface=ether6 protocol=tcp to-addresses=192.168.0.2 to-ports=80
add action=dst-nat chain=dstnat dst-port=8080 in-interface=ether7 protocol=tcp to-addresses=192.168.0.2 to-ports=80
add action=dst-nat chain=dstnat dst-port=8080 in-interface=ether8 protocol=tcp to-addresses=192.168.0.2 to-ports=80
add action=dst-nat chain=dstnat comment=WEBLocal_1 dst-port=8081 in-interface=ether6 protocol=tcp to-addresses=192.168.1.2 to-ports=80
add action=dst-nat chain=dstnat dst-port=8081 in-interface=ether7 protocol=tcp to-addresses=192.168.1.2 to-ports=80
add action=dst-nat chain=dstnat dst-port=8081 in-interface=ether8 protocol=tcp to-addresses=192.168.1.2 to-ports=80
add action=dst-nat chain=dstnat comment=WEBLocal_2 dst-port=8082 in-interface=ether6 protocol=tcp to-addresses=192.168.2.2 to-ports=80
add action=dst-nat chain=dstnat dst-port=8082 in-interface=ether7 protocol=tcp to-addresses=192.168.2.2 to-ports=80
add action=dst-nat chain=dstnat dst-port=8082 in-interface=ether8 protocol=tcp to-addresses=192.168.2.2 to-ports=80
add action=masquerade chain=srcnat comment="ISP 1" out-interface=ether6
add action=masquerade chain=srcnat comment="ISP 2" out-interface=ether7
add action=masquerade chain=srcnat comment="ISP 3" out-interface=ether8
/ip route
add distance=1 gateway=206.188.193.169 routing-mark="ISP 1"
add distance=1 gateway=72.52.4.65 routing-mark="ISP 2"
add distance=1 gateway=2.20.254.1 routing-mark="ISP 3"
add check-gateway=arp distance=10 gateway=206.188.193.169 routing-mark="office 1"
add check-gateway=arp distance=11 gateway=72.52.4.65 routing-mark="office 1"
add check-gateway=arp distance=12 gateway=2.20.254.1 routing-mark="office 1"
add check-gateway=arp distance=11 gateway=206.188.193.169 routing-mark="office 2"
add check-gateway=arp distance=10 gateway=72.52.4.65 routing-mark="office 2"
add check-gateway=arp distance=12 gateway=2.20.254.1 routing-mark="office 2"
add check-gateway=arp distance=10 gateway=206.188.193.169 routing-mark="office 3"
add check-gateway=arp distance=11 gateway=72.52.4.65 routing-mark="office 3"
add check-gateway=arp distance=12 gateway=2.20.254.1 routing-mark="office 3"
add distance=1 dst-address=8.8.4.4/32 gateway=72.52.4.65
add distance=1 dst-address=8.8.8.8/32 gateway=206.188.193.169
/system script
add name=ISP2-DOWN policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive source="/ip rou\
te disable [find dst-address=0.0.0.0/0 and gateway=72.52.4.65 and distance >= 10];"
add name=ISP2-UP policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive source="/ip rou\
te enable [find dst-address=0.0.0.0/0 and gateway=72.52.4.65 and distance >= 10];"
add name=ISP1-UP policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive source="/ip rou\
te enable [find dst-address=0.0.0.0/0 and gateway=206.188.193.169 and distance >= 10];"
add name=ISP1-DOWN policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive source="/ip rou\
te disable [find dst-address=0.0.0.0/0 and gateway=206.188.193.169 and distance >= 10];"
/tool netwatch
add down-script=ISP1-DOWN host=8.8.8.8 up-script=ISP1-UP
add down-script=ISP2-DOWN host=8.8.4.4 up-script=ISP2-UP
Последний раз редактировалось abwabw 02 сен 2015, 10:12, всего редактировалось 1 раз.


vqd
Модератор
Сообщения: 3605
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

Ну логично.
Вот тут правильно

 

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

/ip firewall mangle
add action=mark-connection chain=input dst-address=206.188.193.174 in-interface=ether6 new-connection-mark="ISP 1->Input" passthrough=no
add action=mark-routing chain=output connection-mark="ISP 1->Input" new-routing-mark="ISP 1" passthrough=no
add action=mark-connection chain=input dst-address=72.52.4.119 in-interface=ether7 new-connection-mark="ISP 2->Input" passthrough=no
add action=mark-routing chain=output connection-mark="ISP 2->Input" new-routing-mark="ISP 2" passthrough=no
add action=mark-connection chain=input dst-address=2.20.254.82 in-interface=ether8 new-connection-mark="ISP 3->Input" passthrough=no
add action=mark-routing chain=output connection-mark="ISP 3->Input" new-routing-mark="ISP 3" passthrough=no


теперь аналогично на forward и будет счастье


Есть интересная задача и бюджет? http://mikrotik.site
abwabw
Сообщения: 12
Зарегистрирован: 01 сен 2015, 10:30

vqd писал(а):теперь аналогично на forward и будет счастье


Если можно поконкретней, что надо для forward?
Ведь указанные правила работают так:
Правило 1
Если в пакете пришедшем на первый интерфейс (ISP 1) в адресе назначения указан IP адрес 206.188.193.174(ISP 1), то маркируем соединение именем (ISP 1 -> Input)
Правило 2
Если исходящий пакет принадлежит соединению с маркировкой (ISP 1 -> Input), то для него используем маршрут ISP 1

Т.е. в п.1 мы маркируем соединение, а в п.2 направляем (маршрутизируем) ответ.

Что делать в правиле с forward?


vqd
Модератор
Сообщения: 3605
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

ну все верно, только вы на Input Это делаете, а это соединения для самого роутера, не транзит.

Транзитные соединения идут через forward а это как раз и есть ваш случай.

Тобиш на форваре размечаете и на преороутинге отправляете обратно


Есть интересная задача и бюджет? http://mikrotik.site
abwabw
Сообщения: 12
Зарегистрирован: 01 сен 2015, 10:30

Понятно.


abwabw
Сообщения: 12
Зарегистрирован: 01 сен 2015, 10:30

С forward/prerouting такая же ситуация, как и с input/output. Т.е. поменял я правила:

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

add action=mark-connection chain=input dst-address=206.188.193.174 in-interface=ether6 new-connection-mark="ISP 1->Input" passthrough=no
add action=mark-routing chain=output connection-mark="ISP 1->Input" new-routing-mark="ISP 1" passthrough=no

на правила

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

add action=mark-connection chain=forward dst-address=206.188.193.174 in-interface=ether6 new-connection-mark="ISP 1->Input" passthrough=no
add action=mark-routing chain=prerouting connection-mark="ISP 1->Input" new-routing-mark="ISP 1" passthrough=no

Кривость работы проброса портов осталась. Т.е.
- на WEBLocal_0 можно зайти только с интерфейса ether6 по порту 8080
- на WEBLocal_1 можно зайти только с интерфейса ether7 по порту 8081
- на WEBLocal_2 можно зайти только с интерфейса ether6 по порту 8082.

И при этом заметил такую особенность. После замены правила, если раньше с winbox в таблице IP-Firewall-Mangle в столбце Bytes и Packets напротив правил c input, при обращении извне увеличивались значения, то после замены на forward в этих столбцах стоит постоянно "0", т.е. ни один пакет через эти правила не проходит.


vqd
Модератор
Сообщения: 3605
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

Я писал "теперь так же для форварда"
Про замену правил я ничего не писал )))


Есть интересная задача и бюджет? http://mikrotik.site
abwabw
Сообщения: 12
Зарегистрирован: 01 сен 2015, 10:30

Да, я не правильно понял. Сейчас добавил к существующим input/output ещё по два правила на forward/prerouting в итоге получилось по 4 правила на каждый из 3-х интерфейсов, в виде:

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

add action=mark-connection chain=input dst-address=206.188.193.174 in-interface=ether6 new-connection-mark="ISP 1->Input" passthrough=no
add action=mark-routing chain=output connection-mark="ISP 1->Input" new-routing-mark="ISP 1" passthrough=no
add action=mark-connection chain=forward dst-address=206.188.193.174 in-interface=ether6 new-connection-mark="ISP 1->Input" passthrough=no
add action=mark-routing chain=prerouting connection-mark="ISP 1->Input" new-routing-mark="ISP 1" passthrough=no

но результат тот же , что и при двух правилах input/output. Достучаться можно только по действующему сейчас интерфейсу на соответсвующий WEBLocal.

Я тут экспериментировал и получил требуемый функционал, если input/output заменить на prerouting, т.е. если оставить по 2 правила, но оба с prerouting

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

add action=mark-connection chain=prerouting dst-address=206.188.193.174 in-interface=ether6 new-connection-mark="ISP 1->Input" passthrough=no
add action=mark-routing chain=prerouting connection-mark="ISP 1->Input" new-routing-mark="ISP 1" passthrough=no

всё работает доступ со всех интерфейсов, единственная проблема, я не знаю насколько это правильно.


vqd
Модератор
Сообщения: 3605
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

тут
add action=mark-routing chain=prerouting connection-mark="ISP 1->Input" new-routing-mark="ISP 1" passthrough=no

стоит указать в src-address вашу сеть...


Есть интересная задача и бюджет? http://mikrotik.site
abwabw
Сообщения: 12
Зарегистрирован: 01 сен 2015, 10:30

vqd писал(а):тут
add action=mark-routing chain=prerouting connection-mark="ISP 1->Input" new-routing-mark="ISP 1" passthrough=no

стоит указать в src-address вашу сеть...


Немного не понятно, src-address это адрес источника пакета.
В этом правиле мы перемечаем исходящий пакет из локальных сетей для отправки через внешний интерфейс ISP1. Но локальных сетей у мну три (192.168.0.0/24 и 192.168.1.0/24 и 192.168.2.0/24). И при этом этот пакет может быть из любой из этих трёх локальных сетей.
Вопрос: что ставить в src-address?


Ответить