Два провайдера на одном интерфейсе

Описание каждой версии, обсуждение особенностей и недостатков
Ответить
MikhailO
Сообщения: 12
Зарегистрирован: 16 апр 2019, 10:26

Добрый день, коллеги.
Столкнулся с такой задачей, пока не могу сообразить как решить.
Есть роутер Микротик, к которому на один интерфейс по одному кабелю приходят "два провайдера". На самом деле провайдер один, просто исторически сложилось несколько белых адресов из разных подсетей. Т.е. первый белый адрес - 10.10.10.2 со шлюзом 10.10.10.1 , остальные белые адреса 10.20.20.2, 10.20.20.3, 10.20.20.4 со шлюзом 10.20.20.1. Внутри есть несколько подсетей, одной из них (192.168.1.0.24) нужно выходить во внешний мир и получать проброс портов через адрес 10.10.10.2. Остальным - выходить в разных конфигурациях через 10.20.20.Х. Как настроить двух провайдеров на разных интерфейсах - понятно. Как выпустить через разные адреса одной провайдерской подсети - тоже вроде понятно. Но вот как это все увязать на один интерфейс - не очень ясно. Получается для маркировки трафика и маршрутов нужно использовать соответствующий "белый" адрес а не интерфейс? Т.е. в прероутинге маркируем соединения в соответствии с белым адресом своего шлюза (не провайдерского)? Потом в соответствии с этим маркируем маршруты? И строим таблицы маршрутизации? Такая логика должна быть?...Я что-то туплю, подскажите пожалуйста направление мысли...
Спасибо.
Последний раз редактировалось MikhailO 11 июн 2022, 11:12, всего редактировалось 2 раза.


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

Ну как-то примерно так, да.
Тут разница то будет только в том, что src-nat нужно прописывать более детально, раз все адреса на одном интерфейсе.
И возможно ip route rule пригодятся, чтобы жестко разделить трафик между провайдерскими шлюзами.


Telegram: @thexvo
MikhailO
Сообщения: 12
Зарегистрирован: 16 апр 2019, 10:26

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

1. Нужно ли указать в мангл все сети BOGON (не маршрутизируемые) или достаточно прописать только свои внутренние сети? По идеи, если мультикаст от провайдера не ждем - то лучше наверное BOGON...
2. Что делать с исходящим трафиком от самого роутера, для которого не указан исходящий адрес? Или такого быть не может? Поставил одно правило, которое такой трафик отправляет через ISP-2, но при запуске пинга первые пакеты пропадают. Не будет ли проблем?
3. Чувствую, что можно организовать все проще, но не пойму как....
 ВОТ КОД

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

/interface bridge
add comment="Loopback interface" name=br-lo
add comment=WAN name=bridge1-WAN
/interface ethernet
set [ find default-name=ether1 ] disabled=yes
set [ find default-name=ether4 ] comment=LAN-1
set [ find default-name=ether5 ] comment=LAN-2
set [ find default-name=ether6 ] comment=LAN-3
/interface wireless security-profiles
set [ find default=yes ] supplicant-identity=MikroTik
/ip pool
add name=dhcp_pool0 ranges=192.168.1.2-192.168.1.254
add name=dhcp_pool1 ranges=192.168.2.2-192.168.2.254
add name=dhcp_pool2 ranges=192.168.3.2-192.168.3.254
/ip dhcp-server
add address-pool=dhcp_pool0 disabled=no interface=ether4 lease-time=1h10m name=dhcp1
add address-pool=dhcp_pool1 disabled=no interface=ether5 lease-time=1h10m name=dhcp2
add address-pool=dhcp_pool2 disabled=no interface=ether6 lease-time=1h10m name=dhcp3
/interface bridge port
add bridge=bridge1-WAN interface=ether2
add bridge=bridge1-WAN interface=ether3
/ip neighbor discovery-settings
set discover-interface-list=all
/ip address
add address=192.168.1.1/24 interface=ether4 network=192.168.1.0
add address=192.168.2.1/24 interface=ether5 network=192.168.2.0
add address=10.10.10.2/24 interface=bridge1-WAN network=10.10.10.0
add address=10.20.20.2/24 interface=bridge1-WAN network=10.20.20.0
add address=192.168.3.1/24 interface=ether6 network=192.168.3.0
add address=10.20.20.3/24 interface=bridge1-WAN network=10.20.20.0
/ip dhcp-client
add disabled=no interface=ether1
/ip dhcp-server lease
add address=192.168.1.254 client-id=1:50:0:0:b:0:0 mac-address=50:00:00:0B:00:00 server=dhcp1
add address=192.168.2.253 client-id=1:50:0:0:a:0:2 mac-address=50:00:00:0A:00:02 server=dhcp2
add address=192.168.3.254 client-id=1:42:a9:ea:a:ea:e6 mac-address=42:A9:EA:0A:EA:E6 server=dhcp3
/ip dhcp-server network
add address=192.168.1.0/24 dns-server=192.168.1.1 gateway=192.168.1.1
add address=192.168.2.0/24 dns-server=192.168.2.1 gateway=192.168.2.1
add address=192.168.3.0/24 dns-server=192.168.3.1 gateway=192.168.3.1
/ip dns
set allow-remote-requests=yes servers=8.8.8.8
/ip firewall address-list
add address=0.0.0.0/8 comment="\"This\" Network" list=BOGONS
add address=10.0.0.0/8 comment="Private-Use Networks" disabled=yes list=BOGONS
add address=100.64.0.0/10 comment="Shared Address Space. RFC 6598" list=BOGONS
add address=127.0.0.0/8 comment=Loopback list=BOGONS
add address=169.254.0.0/16 comment="Link Local" list=BOGONS
add address=172.16.0.0/12 comment="Private-Use Networks" disabled=yes list=BOGONS
add address=192.0.0.0/24 comment="IETF Protocol Assignments" list=BOGONS
add address=192.0.2.0/24 comment=TEST-NET-1 list=BOGONS
add address=192.168.0.0/16 comment="Private-Use Networks" list=BOGONS
add address=198.18.0.0/15 comment="Network Interconnect Device Benchmark Testing" list=BOGONS
add address=198.51.100.0/24 comment=TEST-NET-2 list=BOGONS
add address=203.0.113.0/24 comment=TEST-NET-3 list=BOGONS
add address=224.0.0.0/4 comment=Multicast list=BOGONS
add address=192.88.99.0/24 comment="6to4 Relay Anycast" list=BOGONS
add address=240.0.0.0/4 comment="Reserved for Future Use" list=BOGONS
add address=255.255.255.255 comment="Limited Broadcast" list=BOGONS
add address=192.168.1.0/24 comment=LocalNet-1 list=LocalNet-1
add address=192.168.2.0/24 comment=LocalNet-2 list=LocalNet-2
add address=192.168.3.0/24 comment=LocalNet-3 list=LocalNet-3
/ip firewall mangle
add action=mark-connection chain=prerouting comment="Connmark in from ISP1" connection-mark=\
    no-mark dst-address=10.10.10.2 in-interface=bridge1-WAN new-connection-mark=conn_isp1 \
    passthrough=no
add action=mark-connection chain=prerouting comment="Connmark in from ISP2" connection-mark=\
    no-mark dst-address=10.20.20.2 in-interface=bridge1-WAN new-connection-mark=conn_isp2
add action=mark-connection chain=prerouting comment="Connmark in from ISP3" connection-mark=\
    no-mark dst-address=10.20.20.3 in-interface=bridge1-WAN new-connection-mark=conn_isp3
add action=mark-connection chain=prerouting comment="Output from router if not out IP" \
    connection-mark=no-mark dst-address-list=!BOGONS new-connection-mark=conn_isp2 \
    src-address-type=local
add action=mark-routing chain=prerouting comment="Routemark transit out via ISP1" \
    connection-mark=conn_isp1 dst-address-type=!local in-interface=!bridge1-WAN new-routing-mark=\
    to-isp1
add action=mark-routing chain=prerouting comment="Routemark transit out via ISP2" \
    connection-mark=conn_isp2 dst-address-type=!local in-interface=!bridge1-WAN new-routing-mark=\
    to-isp2
add action=mark-routing chain=prerouting comment="Routemark transit out via ISP3" \
    connection-mark=conn_isp3 dst-address-type=!local in-interface=!bridge1-WAN new-routing-mark=\
    to-isp3
add action=mark-routing chain=output comment="Routemark local out via ISP1" connection-mark=\
    conn_isp1 dst-address-type=!local new-routing-mark=to-isp1
add action=mark-routing chain=output comment="Routemark local out via ISP2" connection-mark=\
    conn_isp2 dst-address-type=!local new-routing-mark=to-isp2
add action=mark-routing chain=output comment="Routemark local out via ISP3" connection-mark=\
    conn_isp3 dst-address-type=!local new-routing-mark=to-isp3
add action=mark-routing chain=prerouting comment="PC via ISP1" dst-address-list=!BOGONS \
    new-routing-mark=to-isp1 src-address=192.168.1.0/24
add action=mark-routing chain=prerouting comment="PC via ISP2" dst-address-list=!BOGONS \
    new-routing-mark=to-isp2 src-address=192.168.2.0/24
add action=mark-routing chain=prerouting comment="PC via ISP3" dst-address-list=!BOGONS \
    new-routing-mark=to-isp3 src-address=192.168.3.0/24
/ip firewall nat
add action=src-nat chain=srcnat comment=Nat-ISP-1 out-interface=bridge1-WAN src-address-list=\
    LocalNet-1 to-addresses=10.10.10.2
add action=src-nat chain=srcnat comment=Nat-ISP2 out-interface=bridge1-WAN src-address-list=\
    LocalNet-2 to-addresses=10.20.20.2
add action=src-nat chain=srcnat comment=Nat-ISP3 out-interface=bridge1-WAN src-address-list=\
    LocalNet-3 to-addresses=10.20.20.3
add action=dst-nat chain=dstnat dst-address=10.10.10.2 dst-port=1111 in-interface=bridge1-WAN \
    protocol=tcp to-addresses=192.168.1.254 to-ports=8291
add action=dst-nat chain=dstnat dst-address=10.20.20.2 dst-port=1111 in-interface=bridge1-WAN \
    protocol=tcp to-addresses=192.168.2.253 to-ports=8291
add action=dst-nat chain=dstnat dst-address=10.20.20.3 dst-port=1111 in-interface=bridge1-WAN \
    protocol=tcp to-addresses=192.168.3.254 to-ports=8291
/ip route
add comment="Marked via ISP1 Main" distance=1 gateway=10.10.10.1 pref-src=10.10.10.2 \
    routing-mark=to-isp1
add comment="Marked via ISP2 Main" distance=1 gateway=10.20.20.1 pref-src=10.20.20.2 \
    routing-mark=to-isp2
add comment="Marked via ISP3 Main" distance=1 gateway=10.20.20.1 pref-src=10.20.20.3 \
    routing-mark=to-isp3
add comment="Emergency route" distance=254 gateway=br-lo
/ip route rule
add comment="to LAN1" dst-address=192.168.1.0/24 table=main
add comment="to LAN2" dst-address=192.168.2.0/24 table=main
add comment="to LAN3" dst-address=192.168.3.0/24 table=main
add comment="From ISP1 IP to Inet" src-address=10.10.10.2/32 table=to-isp1
add comment="From ISP2 IP to Inet" src-address=10.20.20.2/32 table=to-isp2
add comment="From ISP2 IP to Inet" src-address=10.20.20.3/32 table=to-isp3


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

Зачем в вашем случае вообще мангл на входящий трафик?
Прилетело что-то - ушло куда надо по dst-nat'у, а ответ отправляем в зависимости от того откуда этот ответ - разве есть какие-то хитрые случаи, когда может прилететь не на тот адрес?

А учитывая, что и в обратную сторону у вас все просто: одна подсеть - один внешний адрес (или это только на стенде?), то можно вообще без mange обойтись - просто route rule

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

/ip route rule
add comment="to LAN" dst-address=192.168.0.0/16 table=main
add comment="From ISP1 IP to Inet" src-address=192.168.1.0/24 table=to-isp1
add comment="From ISP2 IP to Inet" src-address=192.168.2.0/24 table=to-isp2
add comment="From ISP2 IP to Inet" src-address=192.168.3.0/24 table=to-isp3
Только если там должно быть жестко, чтобы заведомо не ушло через чужого, action=lookup-only-in-table надо.

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


Telegram: @thexvo
MikhailO
Сообщения: 12
Зарегистрирован: 16 апр 2019, 10:26

Через второго провайдера (второй адрес) будет ходить много подсетей. Отдельные клиенты из разных подсетей - через третий адрес (но это в проекте). Пока, по факту- одна подсеть полностью ходит через первый адрес с первым шлюзом, куча подсетей - через первый адрес пула со вторым шлюзом. Остальные адреса не используются....


mafijs
Сообщения: 533
Зарегистрирован: 03 сен 2017, 03:08
Откуда: Marienburga

MikhailO писал(а): 11 июн 2022, 09:56 На самом деле провайдер один, просто исторически сложилось несколько белых адресов из разных подсетей
А смысл какой разделять? Провайдер та один. Скорость больше будет ?
Вот не могу уловить смысл.


MikhailO
Сообщения: 12
Зарегистрирован: 16 апр 2019, 10:26

Так сложилось исторически.
Был один белый адрес с одним шлюзом. Все ходили через него. Потом под проект понадобился пул адресов. Провайдер смог выдать только отдельный пул с отдельным шлюзом. Плюс скорость с каждого белого IP регулируется провайдером. Т.е. канал один -100 мбит. Но динамически скорость провайдер отдать не может. Только определенная скорость на определенный адрес. Скорость меняют по запросу, общая не больше 100. Поменять провайдера возможности вообще нет, отдельный адрес нужен под проект, который еще идет. Пока вопрос решен бриджом на внешнюю сеть на одном из микротиков в который воткнут второй микротик со вторым внешним адресом. Внутренние сети разделены физически. Одна выходит через один роутер, остальные через второй. Хотим избавиться от этой конструкции...
По факту получается два провайдера на оном кабеле :-)


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

MikhailO писал(а): 12 июн 2022, 18:29 Через второго провайдера (второй адрес) будет ходить много подсетей. Отдельные клиенты из разных подсетей - через третий адрес (но это в проекте). Пока, по факту- одна подсеть полностью ходит через первый адрес с первым шлюзом, куча подсетей - через первый адрес пула со вторым шлюзом. Остальные адреса не используются....
Ну тогда сами смотрите, что легче и целесообразнее: в route rule к сожалению нет возможности использовать списки - один адрес/подсеть, одно правило.
В мангл все описывается буквально несколькими правилами через списки, но зато например мангл не сочетается с fasttrack'ом.


Telegram: @thexvo
Ответить