Vlad-2 писал(а): ↑18 дек 2018, 16:08
1) Вы не правы, задача любая всегда сложная и хочется её решить красиво и профессионально (внутри себя как бы)
2) Но фраза выше - прозвучала как-то с зацепом, а не слабо ли мне....
3) Я ни раз делился конфигами и их описанием, отобрали мои бы сообщения, с выборкой
по двум-трём провайдерам и так далее.... думаю тоже было бы интересно.
4) Рад что признаётесь что конфиг сборная атомная солянка.
ruslan.liskov писал(а): ↑18 дек 2018, 15:21
На существующей машине все сети маскарадятся через один интерфейс и прописаны через адрес лист.
Реализовано вот так:
action=masquerade chain=srcnat dst-address=!172.31.0.0/16 out-interface=ether1 src-address-list=NAT
По логике надо сделать второй адрес лист NAT2. Пораспихивать в них подсети и создать еще одно правило:
action=masquerade chain=srcnat dst-address=!172.31.0.0/16 out-interface=ether2 src-address-list=NAT1
Возникает вопрос - куда запихивать третью подсеть (биллинг)?
1) делать НАТ по части отрицания = не нравиться мне этот метод, и он не всегда подходит
2) и я немного поленюсь, я не хочу вникать какие сети и так далее у Вас, я сделаю чуть проще,
я покажу на моих примерах, Вы это усвоите, перенесёте на свои сети, и всё заработает).
1) надо сделать конфигурацию не только рабочую, но и понятную.
Поэтому я использую несколько переменных
а)
LocalNet = общая переменная, которая содержит все все Ваши локальные сети.
То есть явно надо описать все сети, пусть даже не пересекающие, но работающие в Интернете
через этот роутер
б) Потом для удобства Вы можете сделать пару адрес-листов с описанием конкретных подсетей,
чтобы уже эти явные адрес-листы явно в одно-двух правилах использовать
в) также я использую адрес-листы для интерфейсов, в частности
ls1-WAN1 = это первый провайдер,
ls2-WAN2 = второй, и
ls3-WAN3 = третий, удобство листов в том, что если у Вас меняется тип подключения
провайдеров, трогать файрвол(манглы) не надо, а также удобно делиться им, я вот взял и Вам откопировал.
Ваша задача привязать к
ls1-WAN1 = интерфейс первого провайдера, к
ls2-WAN2 интерфейс второго провайдера,
и так далее.
г) также я использую адрес-лист
to_ISP1 (в этот адрес лист я помещаю те компы/сети) которые я явно хочу завернуть
на первого провайдера, соответственно в
to_ISP2 - те кто пойдёт на второго и так далее.
(маленький лайфхак = тот провайдер который у Вас будет по-умолчанию, скажем провайдер 1, то для
такова провайдера можно явно адрес-лист to_ISP1 не заполнять, всё равно итак туда пойдут те кто явно
не описан)
Код: Выделить всё
/ip firewall mangle
add action=mark-connection chain=input comment="Mark-conn input on ISP1_in" in-interface-list=ls1-WAN1 new-connection-mark=ISP1_in passthrough=no
add action=mark-connection chain=input comment="Mark-conn input on ISP2_in" in-interface-list=ls2-WAN2 new-connection-mark=ISP2_in passthrough=no
add action=mark-connection chain=input comment="Mark-conn input on ISP3_in" in-interface-list=ls3-WAN3 new-connection-mark=ISP3_in passthrough=no
add action=mark-connection chain=forward comment="Mark-conn forward on ISP1_in to new-mark ISP1_for" in-interface-list=ls1-WAN1 new-connection-mark=ISP1_for passthrough=no
add action=mark-routing chain=prerouting comment="Mark-rout with mark-conn ISP1_for to route via iface of ISP1" connection-mark=ISP1_for new-routing-mark=ISP1_rout passthrough=no src-address-list=LocalNet
add action=mark-connection chain=forward comment="Mark-conn forward on ISP2_in to new-mark ISP2_for" in-interface-list=ls2-WAN2 new-connection-mark=ISP2_for passthrough=no
add action=mark-routing chain=prerouting comment="Mark-rout with mark-conn ISP2_for to route via iface of ISP2" connection-mark=ISP2_for new-routing-mark=ISP2_rout passthrough=no src-address-list=LocalNet
add action=mark-connection chain=forward comment="Mark-conn forward on ISP3_in to new-mark ISP3_for" in-interface-list=ls3-WAN3 new-connection-mark=ISP3_for passthrough=no
add action=mark-routing chain=prerouting comment="Mark-rout with mark-conn ISP3_for to route via iface of ISP3" connection-mark=ISP3_for new-routing-mark=ISP3_rout passthrough=no src-address-list=LocalNet
add action=mark-routing chain=output comment="Mark-rout with mark-conn ISP1_in to route via iface ISP1" connection-mark=ISP1_in new-routing-mark=ISP1_rout passthrough=no
add action=mark-routing chain=output comment="Mark-rout with mark-conn ISP2_in to route via iface ISP2" connection-mark=ISP2_in new-routing-mark=ISP2_rout passthrough=no
add action=mark-routing chain=output comment="Mark-rout with mark-conn ISP3_in to route via iface ISP3" connection-mark=ISP3_in new-routing-mark=ISP3_rout passthrough=no
add action=mark-routing chain=prerouting comment="GO-to-ISP1 (via AddrList)" connection-mark=no-mark dst-address-list=!LocalNet new-routing-mark=ISP1_rout passthrough=no src-address-list=to_ISP1
add action=mark-routing chain=prerouting comment="GO-to-ISP2 (via AddrList)" connection-mark=no-mark dst-address-list=!LocalNet new-routing-mark=ISP2_rout passthrough=no src-address-list=to_ISP2
add action=mark-routing chain=prerouting comment="GO-to-ISP3 (via AddrList)" connection-mark=no-mark dst-address-list=!LocalNet new-routing-mark=ISP3_rout passthrough=no src-address-list=to_ISP3
д) маршруты:
Первые три = смотрят на каждого провайдера, то есть что пришло от первого провайдера, туда и уйдёт.
Обращаю внимание = первые три маршрута = с указанием таблицы маршрутизации,
ЭТО важно
НО важен и последний, обычный (дефолтный) маршрут = он нужен и роутеру, и у меня это
первый провайдер. Без дефолтного маршрута много чего не взлетит.
Так как адреса не могу показать, а понимание у Вас должно быть, вот ещё аспект:
77.xx.xx.xxP - буква
Р в примере - это адрес провайдерского шлюза
77.xx.xx.xА - буква
А в примере - это адрес самого роутера (внешний)
Код: Выделить всё
/ip route
add check-gateway=ping comment="ISP1_rout (1)" distance=1 gateway=77.xx.xx.xxP pref-src=77.xx.xx.xA routing-mark=ISP1_rout
add check-gateway=ping comment="ISP2_rout (2)" distance=1 gateway=195.yy.yy.yyP pref-src=195.yy.yy.yA routing-mark=ISP2_rout
add check-gateway=ping comment="ISP3_rout (3)" distance=1 gateway=78.zz.zz.zzP pref-src=78.zz.zz.zA routing-mark=ISP3_rout
add check-gateway=ping comment="Default GW" distance=1 gateway=77.xx.xx.xxP pref-src=77.xx.xx.xxA
е) последнее - это НАТ,
тут у меня просто, можете сделать одно правило НАТ, и применить ко всем провайдерам,
тут я использую общий адрес лист всех внешних провайдеров: это
list1-WAN-iface
Первым правилом я делаю адрес-лист кому Интернет нельзя, (список LNAT-DENY), а потом выпускаю.
(конфиги я Вам формирую с разных роутеров, поэтому на этом роутере это так сделано)
Код: Выделить всё
/ip firewall nat
add action=accept chain=srcnat log=yes log-prefix="NAT-closed=> " out-interface-list=list1-WAN-iface src-address-list=LNAT-DENY
add action=masquerade chain=srcnat out-interface-list=list1-WAN-iface src-address-list=LNAT-WiFi
NOTE
Большая просьба: не кричать что не работает, а 10-ть раз проверить всё, убедиться в правильности,
всё что выше = готовая шпаргалка, но с учётом тонкостей провайдерских, тонкостей подключения,
10-20% будет точно зависеть от Вас, как Вы всё перенесёте и запустите.
И я Вам показал как управлять (завернуть) разные сети по разным провайдерам, а защиту,ограничения
между сетями, защиту внешнюю я не описывал. Поэтому читайте, анализируйте, ищите, вникайте и запускайте.