Multivan ir maršruto parinkimas naudojant Mikrotik RouterOS

įvedimas

Imtis straipsnio, be tuštybės, paskatino slegiantis klausimų šia tema dažnis rusakalbių telegramų bendruomenės profilių grupėse. Straipsnis skirtas pradedantiesiems Mikrotik RouterOS (toliau – ROS) administratoriams. Jame kalbama tik apie multivaną, daugiausia dėmesio skiriant maršruto parinkimui. Kaip premija yra minimaliai pakankamai nustatymų, užtikrinančių saugų ir patogų darbą. Tie, kurie ieško eilių, apkrovų balansavimo, vlanų, tiltų, daugiapakopės gilios kanalo būklės analizės ir panašių temų atskleidimo – gali negailėti laiko ir pastangų skaitymui.

Neapdoroti duomenys

Kaip bandomasis asmuo buvo pasirinktas penkių prievadų Mikrotik maršrutizatorius su ROS 6.45.3 versija. Jis nukreips srautą tarp dviejų vietinių tinklų (LAN1 ir LAN2) ir trijų tiekėjų (ISP1, ISP2, ISP3). Kanalas į ISP1 turi statinį „pilką“ adresą, ISP2 – „baltą“, gautą per DHCP, ISP3 – „baltą“ su PPPoE leidimu. Sujungimo schema parodyta paveikslėlyje:

Multivan ir maršruto parinkimas naudojant Mikrotik RouterOS

Užduotis yra sukonfigūruoti MTK maršrutizatorių pagal schemą taip, kad:

  1. Pateikite automatinį perjungimą į atsarginės kopijos teikėją. Pagrindinis tiekėjas yra ISP2, pirmasis rezervas yra ISP1, antrasis rezervas yra ISP3.
  2. Organizuokite LAN1 tinklo prieigą prie interneto tik per ISP1.
  3. Suteikite galimybę nukreipti srautą iš vietinių tinklų į internetą per pasirinktą teikėją pagal adresų sąrašą.
  4. Suteikti galimybę skelbti paslaugas iš vietinio tinklo į internetą (DSTNAT)
  5. Nustatykite ugniasienės filtrą, kad užtikrintumėte minimalų pakankamą saugumą iš interneto.
  6. Maršrutizatorius gali perduoti savo srautą per bet kurį iš trijų tiekėjų, priklausomai nuo pasirinkto šaltinio adreso.
  7. Užtikrinkite, kad atsakymo paketai būtų nukreipti į kanalą, iš kurio jie buvo atsiųsti (įskaitant LAN).

Pastaba Maršrutizatorių sukonfigūruosime „nuo nulio“, kad garantuotume, kad pradinėse konfigūracijose „iš dėžutės“, kurios keičiasi iš versijos į versiją, nekiltų netikėtumų. Winbox buvo pasirinktas kaip konfigūravimo įrankis, kuriame pakeitimai bus rodomi vizualiai. Patys nustatymai bus nustatyti komandomis Winbox terminale. Fizinis konfigūravimo ryšys atliekamas tiesioginiu ryšiu su Ether5 sąsaja.

Šiek tiek pamąstymų apie tai, kas yra multivanas, ar tai problema, ar gudrūs protingi žmonės mezga sąmokslo tinklus

Smalsus ir dėmesingas administratorius, savarankiškai susidėliojęs tokią ar panašią schemą, staiga suvokia, kad ji jau veikia normaliai. Taip, taip, be jūsų tinkintų maršruto parinkimo lentelių ir kitų maršruto taisyklių, kurių gausu daugumoje straipsnių šia tema. Patikrinkime?

Ar galime konfigūruoti adresavimą sąsajose ir numatytuosiuose šliuzuose? Taip:

ISP1 adresas ir šliuzas buvo užregistruoti atstumas = 2 и check-gateway=ping.
ISP2 numatytasis dhcp kliento nustatymas - atitinkamai atstumas bus lygus vienetui.
ISP3 pppoe kliento nustatymuose, kai add-default-route=taip įdėti default-route-distance=3.

Nepamirškite užregistruoti NAT prie išėjimo:

/ip ugniasienė nat add action=masquerade chain=srcnat out-interface-list=WAN

Dėl to vietinių svetainių naudotojai smagiai atsisiunčia kates per pagrindinį teikėją ISP2, o kanalas rezervuojamas naudojant mechanizmą. patikrinti šliuzą Žr. 1 pastabą

Įgyvendinamas 1 užduoties punktas. Kur yra multivenas su savo ženklais? Ne…

Toliau. Turite išleisti konkrečius klientus iš LAN per ISP1:

/ip ugniasienės mangle pridėti veiksmas=maršruto grandinė=išankstinis maršrutas dst-address-list=!BOGONS
passthrough=yes route-dst=100.66.66.1 src-address-list=Via_ISP1
/ip ugniasienės mangle pridėti veiksmas=maršruto grandinė=išankstinis maršrutas dst-address-list=!BOGONS
passthrough=nėra maršruto-dst=100.66.66.1 src-address=192.168.88.0/24

2 ir 3 užduoties punktai įgyvendinti. Etiketės, antspaudai, maršruto taisyklės, kur tu?!

Reikia klientams iš interneto suteikti prieigą prie mėgstamo OpenVPN serverio adresu 172.17.17.17? Prašau:

/ip debesies rinkinys ddns-enabled=yes

Kaip bendraamžis, mes suteikiame klientui išvesties rezultatą: „:put [ip cloud get dns-name]"

Registruojame prievadų peradresavimą iš interneto:

/ip ugniasienė nat pridėti veiksmas=dst-nat grandinė=dstnat dst-port=1194
in-interface-list=WAN protokolas=udp to-adresai=172.17.17.17

4 punktas paruoštas.

Įrengėme 5 taško užkardą ir kitą apsaugą, tuo pačiu džiaugiamės, kad vartotojams viskas jau veikia ir prieiname prie indo su mėgstamu gėrimu...
A! Tuneliai pamiršti.

„l2tp-client“, sukonfigūruotas pagal „Google“ straipsnį, tapo jūsų mėgstamiausiu olandų VDS? Taip.
l2tp serveris su IPsec pakilo ir klientai pagal DNS pavadinimą iš IP debesies (žr. aukščiau.) prilimpa? Taip.
Atsilošę kėdėje, gurkšnodami gėrimą, tingiai svarstome 6 ir 7 užduoties punktus. Galvojame – ar mums to reikia? Vis dėlto jis veikia taip (c) ... Taigi, jei jis vis tiek nereikalingas, tada viskas. Įdiegtas multivanas.

Kas yra multivanas? Tai kelių interneto kanalų prijungimas prie vieno maršrutizatoriaus.

Jums nereikia toliau skaityti straipsnio, nes kas čia gali būti be abejotino pritaikomumo demonstravimo?

Tiems, kurie liko, kurie domisi užduoties 6 ir 7 punktais, o taip pat jaučia perfekcionizmo niežėjimą, neriame gilyn.

Svarbiausias uždavinys įgyvendinant multivaną yra teisingas eismo maršrutas. Būtent: nepriklausomai nuo to, kuris (ar kuris) Žr. 3 pastaba IPT kanalas (-ai) žiūri į numatytąjį maršruto parinktuvo maršrutą, jis turėtų atsakyti tiksliai į kanalą, iš kurio atkeliavo paketas. Užduotis aiški. Kur yra problema? Iš tiesų, paprastame vietiniame tinkle užduotis ta pati, tačiau niekas nesivargina dėl papildomų nustatymų ir nejaučia problemų. Skirtumas tas, kad bet kuris nukreipiamas mazgas internete pasiekiamas per kiekvieną mūsų kanalą, o ne per griežtai konkretų kanalą, kaip paprastame LAN. Ir „bėda“ ta, kad jei mums buvo pateikta užklausa dėl ISP3 IP adreso, mūsų atveju atsakymas bus pateiktas per ISP2 kanalą, nes ten yra nukreipti numatytieji šliuzai. Palieka ir paslaugų teikėjas išmes kaip neteisingą. Problema nustatyta. Kaip tai išspręsti?

Sprendimas yra padalintas į tris etapus:

  1. Išankstinis nustatymas. Šiame etape bus nustatyti pagrindiniai maršrutizatoriaus nustatymai: vietinis tinklas, ugniasienė, adresų sąrašai, plaukų segtukas NAT ir kt.
  2. Multivan. Šiame etape būtini ryšiai bus pažymėti ir surūšiuoti į maršruto lenteles.
  3. Prisijungimas prie IPT. Šiame etape bus sukonfigūruotos sąsajos, užtikrinančios ryšį su internetu, maršrutizavimas ir interneto kanalų rezervavimo mechanizmas.

1. Išankstinis nustatymas

1.1. Išvalome maršrutizatoriaus konfigūraciją komanda:

/system reset-configuration skip-backup=yes no-defaults=yes

sutinku su "Pavojinga! Vis tiek iš naujo nustatyti? [y/N]:“ ir perkrovę per MAC prisijungiame prie „Winbox“. Šiame etape išvaloma konfigūracija ir vartotojų bazė.

1.2. Sukurti naują vartotoją:

/user add group=full name=knight password=ultrasecret comment=”Not horse”

prisijunkite po juo ir ištrinkite numatytąjį:

/user remove admin

Pastaba Autoriaus nuomone, saugesnis yra numatytojo vartotojo pašalinimas, o ne išjungimas ir rekomenduoja jį naudoti.

1.3. Kuriame pagrindinius sąsajų sąrašus, kad būtų patogiau dirbti ugniasienėje, aptikimo nustatymuose ir kituose MAC serveriuose:

/interface list add name=WAN comment="For Internet"
/interface list add name=LAN comment="For Local Area"

Pasirašymo sąsajos su komentarais

/interface ethernet set ether1 comment="to ISP1"
/interface ethernet set ether2 comment="to ISP2"
/interface ethernet set ether3 comment="to ISP3"
/interface ethernet set ether4 comment="to LAN1"
/interface ethernet set ether5 comment="to LAN2"

ir užpildykite sąsajų sąrašus:

/interface list member add interface=ether1 list=WAN comment=ISP1
/interface list member add interface=ether2 list=WAN comment=ISP2 
/interface list member add interface=ether3 list=WAN comment="to ISP3"
/interface list member add interface=ether4 list=LAN  comment="LAN1"
/interface list member add interface=ether5 list=LAN  comment="LAN2"

Pastaba Rašydami suprantamus komentarus verta skirti tam laiko, be to, tai labai palengvina trikčių šalinimą ir konfigūracijos supratimą.

Autorius mano, kad saugumo sumetimais būtina ether3 sąsają įtraukti į „WAN“ sąsajų sąrašą, nepaisant to, kad ip protokolas per ją neperžengs.

Nepamirškite, kad po to, kai PPP sąsaja bus pakelta ether3, ją taip pat reikės įtraukti į sąsajų sąrašą „WAN“

1.4. Slepiame maršrutizatorių nuo kaimynystės aptikimo ir valdymo iš tiekėjų tinklų per MAC:

/ip neighbor discovery-settings set discover-interface-list=!WAN
/tool mac-server set allowed-interface-list=LAN
/tool mac-server mac-winbox set allowed-interface-list=LAN

1.5. Sukuriame minimalų pakankamą ugniasienės filtro taisyklių rinkinį, kad apsaugotume maršrutizatorių:

/ip firewall filter add action=accept chain=input comment="Related Established Untracked Allow" 
connection-state=established,related,untracked

(taisyklė suteikia leidimą užmegztiems ir susijusiems ryšiams, kurie inicijuojami tiek iš prijungtų tinklų, tiek iš paties maršrutizatoriaus)

/ip firewall filter add action=accept chain=input comment="ICMP from ALL" protocol=icmp

(ping ir ne tik ping. Visi icmp yra leidžiami. Labai naudinga ieškant MTU problemų)

/ip firewall filter add action=drop chain=input comment="All other WAN Drop" in-interface-list=WAN

(taisyklė, kuri uždaro įvesties grandinę, draudžia visa kita, kas ateina iš interneto)

/ip firewall filter add action=accept chain=forward 
comment="Established, Related, Untracked allow" 
connection-state=established,related,untracked

(Taisyklė leidžia užmegztus ir susijusius ryšius, kurie praeina per maršrutizatorių)

/ip firewall filter add action=drop chain=forward comment="Invalid drop" connection-state=invalid

(Taisyklė iš naujo nustato ryšius su connect-state=invalid, einančius per maršrutizatorių. Tai labai rekomenduoja Mikrotik, tačiau kai kuriais retais atvejais ji gali blokuoti naudingą srautą)

/ip firewall filter add action=drop chain=forward comment="Drop all from WAN not DSTNATed"  
connection-nat-state=!dstnat connection-state=new in-interface-list=WAN

(Taisyklė draudžia paketams, kurie ateina iš interneto ir nepraėjo dstnat procedūros, pereiti per maršrutizatorių. Tai apsaugos vietinius tinklus nuo įsibrovėlių, kurie, būdami tame pačiame transliavimo domene su mūsų išoriniais tinklais, užregistruos mūsų išorinius IP adresus kaip vartai ir tokiu būdu pabandykite „naršyti“ mūsų vietinius tinklus.)

Pastaba Tarkime, kad tinklai LAN1 ir LAN2 yra patikimi, o srautas tarp jų ir iš jų nėra filtruojamas.

1.6. Sukurkite sąrašą su nenukreiptų tinklų sąrašu:

/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" 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" 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

(Tai yra adresų ir tinklų, kurie nėra nukreipiami į internetą, sąrašas ir bus atitinkamai laikomasi.)

Pastaba Sąrašas gali keistis, todėl patariu periodiškai tikrinti tinkamumą.

1.7. Nustatykite paties maršrutizatoriaus DNS:

/ip dns set servers=1.1.1.1,8.8.8.8

Pastaba Dabartinėje ROS versijoje dinaminiai serveriai turi viršenybę prieš statinius. Vardo nustatymo užklausa siunčiama pirmajam serveriui sąraše eilės tvarka. Perėjimas prie kito serverio atliekamas, kai dabartinis nepasiekiamas. Laikas yra didelis - daugiau nei 5 sekundes. Grįžimas atgal, kai „nukritęs serveris“ atnaujinamas, automatiškai neįvyksta. Atsižvelgdamas į šį algoritmą ir multivaną, autorius rekomenduoja nenaudoti tiekėjų teikiamų serverių.

1.8. Nustatykite vietinį tinklą.
1.8.1. Konfigūruojame statinius IP adresus LAN sąsajose:

/ip address add interface=ether4 address=192.168.88.254/24 comment="LAN1 IP"
/ip address add interface=ether5 address=172.16.1.0/23 comment="LAN2 IP"

1.8.2. Mes nustatome maršrutų į vietinius tinklus taisykles per pagrindinę maršruto parinkimo lentelę:

/ip route rule add dst-address=192.168.88.0/24 table=main comment=”to LAN1”
/ip route rule add dst-address=172.16.0.0/23 table=main comment="to LAN2"

Pastaba Tai yra vienas iš greitų ir paprastų būdų pasiekti LAN adresus naudojant maršrutizatorių sąsajų išorinių IP adresų šaltinius, kurie neeina per numatytąjį maršrutą.

1.8.3. Įgalinti plaukų segtuko NAT LAN1 ir LAN2:

/ip firewall nat add action=src-nat chain=srcnat comment="Hairpin to LAN1" 
out-interface=ether4 src-address=192.168.88.0/24 to-addresses=192.168.88.254
/ip firewall nat add action=src-nat chain=srcnat comment="Hairpin to LAN2" 
out-interface=ether5 src-address=172.16.0.0/23 to-addresses=172.16.1.0

Pastaba Tai leidžia pasiekti savo išteklius (dstnat) per išorinį IP, kai esate tinkle.

2. Tiesą sakant, labai teisingas multivanas

Norėdami išspręsti problemą „atsakyti, iš kur jie klausė“, naudosime du ROS įrankius: jungties ženklas и maršruto žyma. jungties ženklas leidžia pažymėti norimą ryšį ir tada dirbti su šiuo ženklu kaip paraiškos sąlyga maršruto žyma. Ir jau su maršruto žyma galima dirbti IP maršrutas и maršruto taisyklės. Įrankius išsiaiškinome, dabar reikia nuspręsti, kurias jungtis pažymėti – vieną kartą, tiksliai kur – du.

Su pirmuoju viskas paprasta - turime pažymėti visas jungtis, kurios ateina į maršrutizatorių iš interneto per atitinkamą kanalą. Mūsų atveju tai bus trys etiketės (pagal kanalų skaičių): „conn_isp1“, „conn_isp2“ ir „conn_isp3“.

Antrojo niuansas yra tas, kad gaunami ryšiai bus dviejų tipų: tranzitiniai ir tie, kurie skirti pačiam maršrutizatoriui. Lentelėje veikia jungties žymėjimo mechanizmas raištis. Apsvarstykite pakuotės judėjimą supaprastintoje diagramoje, kurią maloniai sudarė mikrotik-trainings.com šaltinio specialistai (ne reklama):

Multivan ir maršruto parinkimas naudojant Mikrotik RouterOS

Po rodyklėmis matome, kad paketas atvyksta į „įvesties sąsaja“, eina per grandinę “Išankstinis maršruto nustatymas“ ir tik tada jis skirstomas į tranzitinį ir vietinį bloke “Maršruto sprendimas“. Todėl, norėdami vienu akmeniu nužudyti du paukščius, mes naudojame Ryšio ženklas į lentelę Mangle Išankstinis maršruto parinkimas grandines Išankstinis maršruto nustatymas.

Pastaba. ROS etiketės „Maršruto žymeklis“ pateikiamos kaip „Lentelė“ skiltyje Ip/Routes/Rules, o kitose – kaip „Maršruto žymėjimas“. Tai gali sukelti painiavą suprantant, bet iš tikrųjų tai yra tas pats dalykas ir yra rt_tables analogas iproute2 sistemoje Linux.

2.1. Mes pažymime gaunamus ryšius iš kiekvieno tiekėjo:

/ip firewall mangle add action=mark-connection chain=prerouting 
comment="Connmark in from ISP1" connection-mark=no-mark in-interface=ether1  new-connection-mark=conn_isp1 passthrough=no

/ip firewall mangle add action=mark-connection chain=prerouting 
comment="Connmark in from ISP2" connection-mark=no-mark in-interface=ether2  new-connection-mark=conn_isp2 passthrough=no

/ip firewall mangle add action=mark-connection chain=prerouting 
comment="Connmark in from ISP3" connection-mark=no-mark in-interface=pppoe-isp3  new-connection-mark=conn_isp3 passthrough=no

Pastaba Kad nebūtų pažymėtos jau pažymėtos jungtys, aš naudoju sąlygą connection-mark=no-mark vietoj connection-state=new, nes manau, kad tai teisingiau, taip pat įvesties filtre atmetami netinkami ryšiai.


passthrough=no – nes taikant šį įgyvendinimo būdą pakartotinis žymėjimas neįtraukiamas ir, kad pagreitintumėte, galite nutraukti taisyklių išvardijimą po pirmos atitikties.

Reikėtų nepamiršti, kad mes dar niekaip nesikišame į maršruto parinkimą. Dabar liko tik pasiruošimo etapai. Kitas diegimo etapas bus tranzito srauto, kuris grįžta per nustatytą ryšį iš paskirties vietos vietiniame tinkle, apdorojimas. Tie. tie paketai, kurie (žr. diagramą) perėjo per maršrutizatorių:

"Įvesties sąsaja"=>"Prerouting"=>"Routing Decision"=>"Forward"=>"Post Routing"=>"Išvesties sąsaja" ir pasiekė jų adresatą vietiniame tinkle.

Svarbu! ROS nėra loginio padalijimo į išorines ir vidines sąsajas. Jei atseksime atsakymo paketo kelią pagal aukščiau pateiktą diagramą, tada jis seks tuo pačiu loginiu keliu kaip ir užklausa:

"Įvesties sąsaja"=>"Prerouting"=>"Routing Decision"=>"Forward"=>"Post Routing"=>"Išvesties sąsaja" tik dėl prašymo"Įvesties sąsaja“ buvo IPT sąsaja, o atsakymui – LAN

2.2. Mes nukreipiame atsako tranzito srautą į atitinkamas maršruto lenteles:

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Routemark transit out via ISP1" connection-mark=conn_isp1 
dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp1 passthrough=no

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Routemark transit out via ISP2" connection-mark=conn_isp2 
dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp2 passthrough=no

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Routemark transit out via ISP3" connection-mark=conn_isp3 
dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp3 passthrough=no

komentuoti. in-interface-list=!WAN - dirbame tik su srautu iš vietinio tinklo ir dst-address-type=!local, kuris neturi paties maršrutizatoriaus sąsajų adreso paskirties adreso.

Tas pats ir vietiniams paketams, kurie pakeliui atkeliavo į maršrutizatorių:

“Įvesties sąsaja”=>”Prerouting”=>”Routing Decision”=>”Input”=>”Local Process”

Svarbu! Atsakymas bus pateiktas tokiu būdu:

”Local Process”=>”Routing Decision”=>”Output”=>”Post Routing”=>”Išvesties sąsaja”

2.3. Mes nukreipiame atsakymą į vietinį srautą į atitinkamas maršruto lenteles:

/ip firewall mangle 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 passthrough=no

/ip firewall mangle 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 passthrough=no

/ip firewall mangle 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 passthrough=no

Šiame etape užduotis pasiruošti išsiųsti atsakymą į interneto kanalą, iš kurio gauta užklausa, gali būti laikoma išspręsta. Viskas pažymėta, paženklinta ir paruošta nukreipti.
Puikus „šalutinis“ šios sąrankos poveikis yra galimybė vienu metu dirbti su DSNAT prievadų peradresavimu iš abiejų (ISP2, ISP3) tiekėjų. Visai ne, nes ISP1 turime nenukreipiamą adresą. Šis efektas yra svarbus, pavyzdžiui, pašto serveriui su dviem MX, kurie žiūri į skirtingus interneto kanalus.

Norėdami pašalinti vietinių tinklų su išoriniais IP maršrutizatoriais veikimo niuansus, naudojame sprendimus iš pastraipų. 1.8.2 ir 3.1.2.6.

Be to, norėdami išspręsti 3 problemos pastraipą, galite naudoti įrankį su žymėjimais. Mes tai įgyvendiname taip:

2.4. Mes nukreipiame srautą iš vietinių klientų iš maršrutų sąrašų į atitinkamas lenteles:

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Address List via ISP1" dst-address-list=!BOGONS new-routing-mark=to_isp1 
passthrough=no src-address-list=Via_ISP1

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Address List via ISP2" dst-address-list=!BOGONS new-routing-mark=to_isp2 
passthrough=no src-address-list=Via_ISP2

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Address List via ISP3" dst-address-list=!BOGONS new-routing-mark=to_isp3 
passthrough=no src-address-list=Via_ISP3

Dėl to jis atrodo maždaug taip:

Multivan ir maršruto parinkimas naudojant Mikrotik RouterOS

3. Nustatykite ryšį su IPT ir įjunkite firminį maršrutą

3.1. Nustatykite ryšį su ISP1:
3.1.1. Konfigūruokite statinį IP adresą:

/ip address add interface=ether1 address=100.66.66.2/30 comment="ISP1 IP"

3.1.2. Nustatykite statinį maršrutą:
3.1.2.1. Pridėti numatytąjį „avarijos“ maršrutą:

/ip route add comment="Emergency route" distance=254 type=blackhole

Pastaba Šis maršrutas leidžia vietinių procesų srautui pereiti sprendimo dėl maršruto etapą, neatsižvelgiant į bet kurio tiekėjo nuorodų būseną. Išeinančio vietinio srauto niuansas yra tas, kad tam, kad paketas bent kur nors persikeltų, pagrindinė maršruto parinkimo lentelė turi turėti aktyvų maršrutą į numatytąjį šliuzą. Jei ne, pakuotė bus tiesiog sunaikinta.

Kaip įrankio plėtinys patikrinti šliuzą Gilesnei kanalo būsenos analizei siūlau naudoti rekursinio maršruto metodą. Metodo esmė ta, kad mes liepiame maršrutizatoriui ieškoti kelio į savo šliuzą ne tiesiogiai, o per tarpinį šliuzą. 4.2.2.1, 4.2.2.2 ir 4.2.2.3 bus pasirinkti kaip tokie „bandomieji“ šliuzai atitinkamai ISP1, ISP2 ir ISP3.

3.1.2.2. Maršrutas į „patvirtinimo“ adresą:

/ip route add check-gateway=ping comment="For recursion via ISP1"  
distance=1 dst-address=4.2.2.1 gateway=100.66.66.1 scope=10

Pastaba Mes sumažiname apimties reikšmę iki numatytosios ROS tikslinėje srityje, kad ateityje naudotume 4.2.2.1 kaip rekursinį šliuzą. Pabrėžiu: maršruto apimtis iki „bandomojo“ adreso turi būti mažesnė arba lygi maršruto tikslinei apimčiai, kuri nukreips į bandomąjį.

3.1.2.3. Rekursyvus numatytasis eismo maršrutas be maršruto ženklo:

/ip route add comment="Unmarked via ISP1" distance=2 gateway=4.2.2.1

Pastaba Naudojama reikšmė atstumas=2, nes pagal užduoties sąlygas ISP1 deklaruojamas kaip pirmoji atsarginė kopija.

3.1.2.4. Rekursyvus numatytasis eismo maršrutas su maršruto žyma „to_isp1“:

/ip route add comment="Marked via ISP1 Main" distance=1 gateway=4.2.2.1 
routing-mark=to_isp1

Pastaba Tiesą sakant, mes pagaliau pradedame mėgautis parengiamojo darbo, atlikto 2 dalyje, vaisiais.


Šiame maršrute visas srautas, kurio maršrutas pažymėtas „to_isp1“, bus nukreiptas į pirmojo teikėjo šliuzą, neatsižvelgiant į tai, kuris numatytasis šliuzas šiuo metu yra aktyvus pagrindinėje lentelėje.

3.1.2.5. Pirmasis atsarginis rekursinis numatytasis maršrutas ISP2 ir ISP3 pažymėtam srautui:

/ip route add comment="Marked via ISP2 Backup1" distance=2 gateway=4.2.2.1 
routing-mark=to_isp2
/ip route add comment="Marked via ISP3 Backup1" distance=2 gateway=4.2.2.1 
routing-mark=to_isp3

Pastaba Šie maršrutai reikalingi, be kita ko, norint rezervuoti srautą iš vietinių tinklų, kurie yra adresų sąrašo „to_isp*“ nariai.

3.1.2.6. Užregistruojame maršruto parinktuvo vietinio srauto į internetą maršrutą per ISP1:

/ip route rule add comment="From ISP1 IP to Inet" src-address=100.66.66.2 table=to_isp1

Pastaba Kartu su taisyklėmis iš 1.8.2 pastraipos jis suteikia prieigą prie norimo kanalo su nurodytu šaltiniu. Tai labai svarbu kuriant tunelius, kuriuose nurodomas vietinis IP adresas (EoIP, IP-IP, GRE). Kadangi taisyklės IP maršruto taisyklėse vykdomos iš viršaus į apačią, iki pirmo sąlygų atitikimo, tai ši taisyklė turėtų būti po 1.8.2 punkto taisyklių.

3.1.3. Mes registruojame NAT taisyklę išeinančiam srautui:

/ip firewall nat add action=src-nat chain=srcnat comment="NAT via ISP1"  
ipsec-policy=out,none out-interface=ether1 to-addresses=100.66.66.2

Pastaba NATim viską, kas užgęsta, išskyrus tai, kas patenka į IPsec politiką. Stengiuosi nevartoti action=masquerade, nebent tai absoliučiai būtina. Jis yra lėtesnis ir reikalauja daugiau išteklių nei src-nat, nes apskaičiuoja kiekvieno naujo ryšio NAT adresą.

3.1.4. Klientus iš sąrašo, kuriems draudžiama prieiti per kitus tiekėjus, siunčiame tiesiai į ISP1 teikėjo šliuzą.

/ip firewall mangle add action=route chain=prerouting comment="Address List via ISP1 only" 
dst-address-list=!BOGONS passthrough=no route-dst=100.66.66.1 
src-address-list=Via_only_ISP1 place-before=0

Pastaba action=route turi didesnį prioritetą ir taikomas prieš kitas maršruto parinkimo taisykles.


place-befor=0 – mūsų taisyklę pateikia sąraše pirmoje vietoje.

3.2. Nustatykite ryšį su ISP2.

Kadangi ISP2 teikėjas suteikia mums nustatymus per DHCP, tikslinga atlikti reikiamus pakeitimus naudojant scenarijų, kuris paleidžiamas, kai suaktyvinamas DHCP klientas:

/ip dhcp-client
add add-default-route=no disabled=no interface=ether2 script=":if ($bound=1) do={r
    n    /ip route add check-gateway=ping comment="For recursion via ISP2" distance=1 
           dst-address=4.2.2.2/32 gateway=$"gateway-address" scope=10r
    n    /ip route add comment="Unmarked via ISP2" distance=1 gateway=4.2.2.2;r
    n    /ip route add comment="Marked via ISP2 Main" distance=1 gateway=4.2.2.2 
           routing-mark=to_isp2;r
    n    /ip route add comment="Marked via ISP1 Backup1" distance=2 gateway=4.2.2.2 
           routing-mark=to_isp1;r
    n    /ip route add comment="Marked via ISP3 Backup2" distance=3 gateway=4.2.2.2 
           routing-mark=to_isp3;r
    n    /ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none 
           out-interface=$"interface" to-addresses=$"lease-address" comment="NAT via ISP2" 
           place-before=1;r
    n    if ([/ip route rule find comment="From ISP2 IP to Inet"] ="") do={r
    n        /ip route rule add comment="From ISP2 IP to Inet" 
               src-address=$"lease-address" table=to_isp2 r
    n    } else={r
    n       /ip route rule set [find comment="From ISP2 IP to Inet"] disabled=no 
              src-address=$"lease-address"r
    n    }      r
    n} else={r
    n   /ip firewall nat remove  [find comment="NAT via ISP2"];r
    n   /ip route remove [find comment="For recursion via ISP2"];r
    n   /ip route remove [find comment="Unmarked via ISP2"];r
    n   /ip route remove [find comment="Marked via ISP2 Main"];r
    n   /ip route remove [find comment="Marked via ISP1 Backup1"];r
    n   /ip route remove [find comment="Marked via ISP3 Backup2"];r
    n   /ip route rule set [find comment="From ISP2 IP to Inet"] disabled=yesr
    n}r
    n" use-peer-dns=no use-peer-ntp=no

Pats scenarijus Winbox lange:

Multivan ir maršruto parinkimas naudojant Mikrotik RouterOS
Pastaba Pirmoji scenarijaus dalis suveikia sėkmingai gavus nuomos sutartį, antroji – atleidus nuomos sutartį.Žr. 2 pastabą

3.3. Mes nustatome ryšį su ISP3 teikėju.

Kadangi nustatymų teikėjas suteikia mums dinamiškumo, tikslinga atlikti reikiamus pakeitimus naudojant scenarijus, kurie prasideda pakėlus ppp sąsają ir po kritimo.

3.3.1. Pirmiausia sukonfigūruojame profilį:

/ppp profile
add comment="for PPPoE to ISP3" interface-list=WAN name=isp3_client 
on-down="/ip firewall nat remove  [find comment="NAT via ISP3"];r
    n/ip route remove [find comment="For recursion via ISP3"];r
    n/ip route remove [find comment="Unmarked via ISP3"];r
    n/ip route remove [find comment="Marked via ISP3 Main"];r
    n/ip route remove [find comment="Marked via ISP1 Backup2"];r
    n/ip route remove [find comment="Marked via ISP2 Backup2"];r
    n/ip route rule set [find comment="From ISP3 IP to Inet"] disabled=yes;" 
on-up="/ip route add check-gateway=ping comment="For recursion via ISP3" distance=1 
    dst-address=4.2.2.3/32 gateway=$"remote-address" scope=10r
    n/ip route add comment="Unmarked via ISP3" distance=3 gateway=4.2.2.3;r
    n/ip route add comment="Marked via ISP3 Main" distance=1 gateway=4.2.2.3 
    routing-mark=to_isp3;r
    n/ip route add comment="Marked via ISP1 Backup2" distance=3 gateway=4.2.2.3 
    routing-mark=to_isp1;r
    n/ip route add comment="Marked via ISP2 Backup2" distance=3 gateway=4.2.2.3 
    routing-mark=to_isp2;r
    n/ip firewall mangle set [find comment="Connmark in from ISP3"] 
    in-interface=$"interface";r
    n/ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none 
    out-interface=$"interface" to-addresses=$"local-address" comment="NAT via ISP3" 
    place-before=1;r
    nif ([/ip route rule find comment="From ISP3 IP to Inet"] ="") do={r
    n   /ip route rule add comment="From ISP3 IP to Inet" src-address=$"local-address" 
    table=to_isp3 r
    n} else={r
    n   /ip route rule set [find comment="From ISP3 IP to Inet"] disabled=no 
    src-address=$"local-address"r
    n};r
    n"

Pats scenarijus Winbox lange:

Multivan ir maršruto parinkimas naudojant Mikrotik RouterOS
Pastaba Linija
/ip firewall mangle set [find comment="Connmark in from ISP3"] in-interface=$"sąsaja";
leidžia teisingai tvarkyti sąsajos pervadinimą, nes ji veikia su jos kodu, o ne rodomu pavadinimu.

3.3.2. Dabar, naudodami profilį, sukurkite ppp ryšį:

/interface pppoe-client add allow=mschap2 comment="to ISP3" disabled=no 
interface=ether3 name=pppoe-isp3 password=isp3_pass profile=isp3_client user=isp3_client

Paskutiniame etape nustatykime laikrodį:

/system ntp client set enabled=yes server-dns-names=0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.org

Tiems, kurie perskaitė iki galo

Siūlomas multiveno įrengimo būdas yra asmeninis autoriaus pasirinkimas ir nėra vienintelis galimas. ROS įrankių rinkinys yra platus ir lankstus, o tai, viena vertus, sukelia sunkumų pradedantiesiems ir, kita vertus, yra jo populiarumo priežastis. Mokykitės, išbandykite, atraskite naujų įrankių ir sprendimų. Pavyzdžiui, kaip įgytų žinių pritaikymą, įrankį galima pakeisti šiame multivano įgyvendinime patikrinimo vartai su rekursiniais maršrutais į tinklo laikrodis.

Pažymi,

  1. patikrinimo vartai - mechanizmas, leidžiantis išjungti maršrutą po dviejų iš eilės nesėkmingų šliuzo pasiekiamumo patikrinimų. Patikrinimas atliekamas kartą per 10 sekundžių, pridėjus atsakymo skirtąjį laiką. Iš viso tikrasis perjungimo laikas yra 20–30 sekundžių. Jei tokio perjungimo laiko nepakanka, yra galimybė naudoti įrankį tinklo laikrodis, kur tikrinimo laikmatį galima nustatyti rankiniu būdu. patikrinimo vartai neveikia dėl pertraukiamo paketo praradimo nuorodoje.

    Svarbu! Išjungus pagrindinį maršrutą bus išjungti visi kiti su juo susiję maršrutai. Todėl jiems patikslinti check-gateway=ping nereikalinga.

  2. Taip atsitinka, kad DHCP mechanizme įvyksta gedimas, kuris atrodo kaip klientas, įstrigęs atnaujinimo būsenoje. Tokiu atveju antroji scenarijaus dalis neveiks, tačiau tai netrukdys eismui teisingai vaikščioti, nes būsena seka atitinkamą rekursinį maršrutą.
  3. ECMP (lygios kainos kelių kelių) - ROS galima nustatyti maršrutą su keliais vartais ir tuo pačiu atstumu. Tokiu atveju ryšiai bus paskirstyti kanalais, naudojant apvalaus veikimo algoritmą, proporcingai nurodytų šliuzų skaičiui.

Už postūmį rašyti straipsnį, pagalbą formuojant jo struktūrą ir akcentų išdėstymą – asmeninė padėka Jevgenijui @jscar

Šaltinis: www.habr.com