Introduktion
Att ta itu med artikeln, förutom fÄfÀnga, drevs av den nedslÄende frekvensen av frÄgor kring detta Àmne i profilerade grupper inom det rysksprÄkiga Telegram-samhÀllet. Artikeln riktar sig till nybörjare inom Mikrotik RouterOS (hÀdanefter ROS). Den behandlar endast multipath-routing med fokus pÄ routning. Som bonus finns det minimalt tillrÀckliga instÀllningar för att sÀkerstÀlla sÀker och bekvÀm anvÀndning. De som söker djupgÄende analyser av köer, belastningsbalansering, VLAN, bryggor, flerstegs djupanalys av kanalens tillstÄnd och liknande - kan spara tid och anstrÀngning pÄ att lÀsa.
Ursprungliga data
Som försöksobjekt valdes en femportar Mikrotik-router med ROS version 6.45.3. Den kommer att ruttla trafik mellan tvÄ lokala nÀtverk (LAN1 och LAN2) och tre internetleverantörer (ISP1, ISP2, ISP3). Kanalen till ISP1 har en statisk "grÄ" adress, ISP2 - en "vit" adress som erhÄlls via DHCP, ISP3 - en "vit" adress med PPPoE-autentisering. Anslutningsskeman visas i bilden:

Uppgiften Àr att konfigurera routern "MTK" utifrÄn schemat sÄ att:
- Automatisk vÀxling till reservleverantören Àr möjlig. Huvudleverantören Àr ISP2, första reservleverantören Àr ISP1, andra reservleverantören Àr ISP3.
- Möjliggöra att nÀtverket LAN1 fÄr tillgÄng till internet endast genom ISP1.
- Möjliggöra att routa trafik frÄn lokala nÀtverk till internet genom vald internetleverantör baserat pÄ address-list.
- Möjliggöra publicering av tjÀnster frÄn det lokala nÀtverket till internet (DSTNAT).
- Konfigurera brandvÀggens filter för att sÀkerstÀlla minimalt nödvÀndig sÀkerhet mot internet.
- Routern ska kunna slÀppa ut sin egen trafik genom en av de tre leverantörerna beroende pÄ vald kÀlladress.
- SÀkerstÀlla routning av svarspaket tillbaka till den kanal de kom frÄn (inklusive LAN).
AnmÀrkning. Vi kommer att konfigurera routern "frÄn grunden" för att garantera att det inte uppstÄr nÄgra överraskningar i de förÀnderliga startkonfigurationerna "ur lÄdan" mellan versioner. Som verktyg för konfiguration valdes Winbox, dÀr Àndringarna kommer att visas tydligt. SjÀlva instÀllningarna kommer att anges med kommandon i Winbox-terminalen. Den fysiska anslutningen för konfigurationen görs genom en direkt anslutning till grÀnssnittet Ether5.
Lite reflektioner över vad en multivan Àr, om det Àr ett problem eller om kloka personer vÀver konspirationsnÀt omkring det.
En nyfiken och uppmÀrksam administratör, nÀr han sjÀlv konfigurerar ett sÄdant eller liknande schema, inser plötsligt att det fungerar fint som det Àr. Ja, utan alla dessa anvÀndartabeller för routing och andra route rules som de flesta artiklar i Àmnet kryllar av. Ska vi kolla?
Kan vi konfigurera adressering pÄ grÀnssnitten och standardgateway? Ja:
PĂ„ ISP1 har vi angett adress och gateway med distance=2 och check-gateway=ping.
PĂ„ ISP2 Ă€r konfigurationen av DHCP-klienten som standard â dĂ€rför kommer distance att vara en.
PÄ ISP3 i instÀllningarna för PPPoE-klienten vid add-default-route=yes sÀtter vi default-route-distance=3.
Kom ihÄg att ange NAT vid utgÄng:
/ip firewall nat add action=masquerade chain=srcnat out-interface-list=WAN
Slutligen, anvÀndarna pÄ lokala nÀtverk laddar glatt genom huvudleverantören ISP2 och det finns redundans i kanalen genom mekanismen check gateway Se kommentar 1
Punkt 1 av uppgiften Àr genomförd. Var Àr multivan med sina etiketter? Nej...
Vidare. Vi behöver slÀppa specifika klienter frÄn LAN genom ISP1:
/ip firewall mangle add action=route chain=prerouting dst-address-list=!BOGONS
passthrough=yes route-dst=100.66.66.1 src-address-list=Via_ISP1
/ip firewall mangle add action=route chain=prerouting dst-address-list=!BOGONS
passthrough=no route-dst=100.66.66.1 src-address=192.168.88.0/24
Punkterna 2 och 3 av uppgiften Àr genomförda. Etiketter, mÀrken, route rules, var Àr ni?!
Ska vi ge Ätkomst till den Àlskade OpenVPN-servern med adress 172.17.17.17 för kunder frÄn Internet? VarsÄgod:
/ip cloud set ddns-enabled=yes
Ge klienterna som peer resultatet av utskriften: â:put [ip cloud get dns-name]â
Vi anger portforwarding frÄn internet:
/ip firewall nat add action=dst-nat chain=dstnat dst-port=1194
in-interface-list=WAN protocol=udp to-addresses=172.17.17.17
Punkt 4 Àr klar.
Vi konfigurerar brandvÀggen och annan sÀkerhet för punkt 5, samtidigt som vi glÀder oss Ät att anvÀndarna redan har allt som fungerar och vi strÀcker oss mot behÄllaren med vÄr favoritdryck...
A! Vi har glömt tunnlarna.
Ăr l2tp-klienten, konfigurerad enligt den googlade artikeln, uppe pĂ„ den Ă€lskade hollĂ€ndska VDS? Ja.
Ăr l2tp-servern med IPsec uppe och klienterna kopplar via DNS-namn frĂ„n IP Cloud (se ovan)? Ja.
Lutande tillbaka i stolen, sippar pĂ„ drycken, betraktar vi slösa pĂ„ punkterna 6 och 7 av uppgiften. TĂ€nker â behövs det ens? Allt fungerar ju (s)... SĂ„ om det verkligen inte behövs, sĂ„ Ă€r det hĂ€r allt. Multivan Ă€r implementerad.
Vad Àr en multivan? Det Àr anslutningen av flera Internetkanaler till en router.
Vidare behöver vi inte lÀsa artikeln, eftersom vad kan det finnas dÀr förutom pretentiöst skryt med tveksam tillÀmpning?
Med dem som stannade, som Àr intresserade av punkterna 6 och 7 i uppgiften, samt kÀnner en klÄda av perfektionism, dyker vi djupare.
Den viktigaste uppgiften i genomförandet av multisite Ă€r korrekt trafikdirigering. Det handlar om att oavsett vilken (eller vilka) kanaler frĂ„n leverantören som standardrutten tittar pĂ„ pĂ„ vĂ„r router, ska den alltid returnera svaret till den kanal dĂ€r paketet kom frĂ„n. Uppgiften Ă€r tydlig. Var ligger problemet? I ett enkelt lokalt nĂ€tverk Ă€r uppgiften densamma, men ingen bryr sig om extra instĂ€llningar och nĂ„gra problem uppstĂ„r inte. Skillnaden Ă€r att varje routable nod pĂ„ Internet Ă€r tillgĂ€nglig via var och en av vĂ„ra kanaler, och inte via en specifik, som i ett enkelt lokalt nĂ€tverk. Och âproblemetâ Ă€r att om vi fĂ„r en förfrĂ„gan till IP-adressen ISP3, sĂ„ kommer i vĂ„rt fall svaret att skickas via kanalen ISP2, eftersom dit standardgateway Ă€r riktad. Det kommer att försvinna och kastas bort av leverantören som felaktigt. Problemet Ă€r identifierat. Hur löser vi det?
Vi kommer att dela upp lösningen i tre steg:
- Förberedande instÀllning. I detta steg kommer grundlÀggande instÀllningar för routern att anges: lokalt nÀtverk, brandvÀgg, adresslistor, hairpin NAT och mer.
- Multisite. I detta steg kommer nödvÀndiga anslutningar att mÀrkas och sorteras i routingtavlor.
- Anslutning till ISP. I detta steg kommer grÀnssnitten som sÀkerstÀller anslutning till Internet att konfigureras, routingkomponenten att aktiveras och mekanismen för reservkanaler att inrÀttas.
1. Förberedande instÀllning
1.1. Rensa routerns konfiguration med kommandot:
/system reset-configuration skip-backup=yes no-defaults=yesvi accepterar "Dangerous! Reset anyway? [y/N]:" och efter omstart ansluter vi med Winbox via MAC. Vid denna tidpunkt har konfigurationen och anvÀndardatabasen rensats.
1.2. Skapa en ny anvÀndare:
/user add group=full name=knight password=ultrasecret comment=âNot horseâlogga in som den och ta bort den standardanvĂ€ndare:
/user remove adminAnmÀrkning. Just att ta bort och inte inaktivera den standardanvÀndaren anser författaren vara sÀkrare och rekommenderas.
1.3. Skapa grundlÀggande interface-listor för att underlÀtta hanteringen i brandvÀggen, i instÀllningarna för discovery och andra MAC-servrar:
/interface list add name=WAN comment="For Internet"
/interface list add name=LAN comment="For Local Area"Vi undertecknar grÀnssnitten med kommentarer
/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"och fyller i interface-listorna:
/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"
AnmÀrkning. Att skriva förstÄeliga kommentarer Àr vÀrt den tid som spenderas pÄ det plus underlÀttar felsökning och förstÄelse av konfigurationen.
För att sÀkerstÀlla sÀkerheten anser författaren att man bör lÀgga till grÀnssnittet ether3 i interface list "WAN", trots att det inte kommer att köra IP-protokollet.
Kom ihÄg att efter att PPP-grÀnssnittet har aktiverats pÄ ether3, mÄste det ocksÄ lÀggas till i interface list "WAN".
1.4. Döljer routern frÄn att upptÀckas av grannskap och hantering frÄn leverantörens nÀtverk via 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=LAN1.5. Skapar ett minimalt antal brandvÀggsregler för att skydda routern:
/ip firewall filter add action=accept chain=input comment="Related Established Untracked Allow"
connection-state=established,related,untracked(regeln tillÄter etablerade och relaterade anslutningar, oavsett om de initierades frÄn de anslutna nÀtverken eller av routern sjÀlv)
/ip firewall filter add action=accept chain=input comment="ICMP from ALL" protocol=icmp(ping och inte bara ping. All ICMP Àr tillÄten inÄt. Mycket anvÀndbart för att hitta problem med MTU)
/ip firewall filter add action=drop chain=input comment="All other WAN Drop" in-interface-list=WAN(det stÀngande inputregeln förbjuder allt annat som kommer frÄn Internet)
/ip firewall filter add action=accept chain=forward
comment="Established, Related, Untracked allow"
connection-state=established,related,untracked(regeln tillÄter etablerade och relaterade anslutningar som passerar genom routern)
/ip firewall filter add action=drop chain=forward comment="Invalid drop" connection-state=invalid(regeln ÄterstÀller anslutningar med connection-state=invalid som passerar genom routern. Den rekommenderas starkt av Mikrotik, men i vissa sÀllsynta fall kan den blockera nyttig trafik)
/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(regeln förhindrar paket som kommer frÄn Internet och inte har genomgÄtt dstnat-processen frÄn att passera genom routern. Detta skyddar lokala nÀtverk frÄn angripare som, för att ligga i samma broadcasthuvud som vÄra externa nÀtverk, anger vÄra externa IP-numer som gateway och dÀrmed försöker "utforska" vÄra lokala nÀtverk.)
AnmÀrkning. Vi accepterar att nÀtverken LAN1 och LAN2 Àr betrodda och att trafik mellan dem och frÄn dem inte filtreras.
1.6. Skapar en lista med icke-routbara nÀtverk:
/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(Det hÀr Àr en lista över adresser och nÀtverk som inte routas till Internet och som vi ocksÄ kommer att följa.)
AnmÀrkning. Listan kan Àndras, dÀrför rekommenderar jag att periodiskt kontrollera att den Àr aktuell.
1.7. Konfigurerar DNS för routern sjÀlv:
/ip dns set servers=1.1.1.1,8.8.8.8AnmĂ€rkning. I den aktuella versionen av ROS Ă€r dynamiska servrar har prioritet framför statiskt angivna. FörfrĂ„gan om namnöversĂ€ttning skickas till den första servern i ordning i listan. Ăverföring till nĂ€sta server sker vid otillgĂ€nglighet av den aktuella. Timeout Ă€r lĂ„ng â mer Ă€n 5 sekunder. Ă tergĂ„ng, vid Ă„terupptagen drift av den "kraschade servern", sker automatiskt inte. Med tanke pĂ„ denna algoritm och tillgĂ„ngen till multipath, rekommenderar författaren att inte anvĂ€nda servrar som tillhandahĂ„lls av leverantörerna.
1.8. StÀller in det lokala nÀtverket.
1.8.1. Konfigurerar statiska IP-adresser pÄ grÀnssnitten för lokala nÀtverk:
/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. StÀller in ruttregler för vÄra lokala nÀtverk genom den huvudsakliga routingtabellen:
/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"AnmÀrkning. Detta Àr ett av de enkla och snabba sÀtten att fÄ tillgÄng till adresser för lokala nÀtverk med externa IP-adresser frÄn routern, genom vilka det inte finns nÄgon standardrutt.
1.8.3. Aktivera Hairpin NAT för LAN1 och 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.0AnmÀrkning. Detta möjliggör Ätkomst via extern IP till sina resurser (dstnat) medan man Àr inuti nÀtverket.
2. Egentligen implementeringen av just den korrekta multipath
För att lösa uppgiften "att svara dĂ€rifrĂ„n man ombads" kommer vi att anvĂ€nda tvĂ„ verktyg frĂ„n ROS: connection mark och routing mark. Connection mark möjliggör mĂ€rkning av den nödvĂ€ndiga anslutningen och vidare arbete med denna etikett, som ett villkor för tillĂ€mpning routing mark. Och redan med routing mark kan man arbeta i ip route och route rules. Vi har gĂ„tt igenom verktygen, nu mĂ„ste vi lösa vilka anslutningar som ska mĂ€rkas â först, var exakt ska vi mĂ€rka â tvĂ„.
Med det första Ă€r allt enkelt â vi mĂ„ste mĂ€rka alla anslutningar som kommer till routern frĂ„n internet via den matchande kanalen. I vĂ„rt fall kommer det att vara tre etiketter (i antal kanaler): "conn_isp1", "conn_isp2" och "conn_isp3".
Nyansen med det andra Àr att inkommande anslutningar kommer att vara av tvÄ typer: transit och de som avses för sjÀlva routern. Mechanismen för connection mark fungerar i tabellen mangle. LÄt oss titta pÄ paketets rörelse i ett förenklat diagram, vÀnligt sammansatt av specialister frÄn resursen mikrotik-trainings.com (inte reklam):

Genom att följa pilarna ser vi att paketet, som kommer in i "input interface", gÄr igenom kedjan "Prerouting" och delas sedan upp i transit och lokal i blocket "Routing Decision". DÀrför, för att döda tvÄ flugor i en smÀll, involverar vi Connection Mark i tabellen Mangle Prerouting kedjor Prerouting.
AnmÀrkning. I ROS markeras "Routing mark" i avsnittet Ip/Routes/Rules som "Table", medan i övriga avsnitt anvÀnds termen "Routing Mark". Detta kan skapa viss förvirring, men i grunden Àr det samma sak och motsvarar rt_tables i iproute2 pÄ linux.
2.1. Vi markerar inkommande anslutningar frÄn varje leverantör:
/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=noAnmÀrkning. För att undvika att mÀrka redan mÀrkta anslutningar anvÀnder jag villkoret connection-mark=no-mark istÀllet för connection-state=new, eftersom jag anser att det Àr mer korrekt, liksom att undvika drop invalid anslutningar i input-filtret.
passthrough=no â eftersom denna implementering inte tillĂ„ter ommĂ€rkning och för att snabba upp processen kan vi avbryta genomgĂ„ngen av regler efter den första trĂ€ff.
Det Àr viktigt att notera att vi för nÀrvarande inte ingriper i routingen. Just nu Àr vi endast i förberedelsestadiet. NÀsta steg i implementeringen kommer att vara att hantera transittrafik som returneras via etablerad anslutning frÄn vÀrden i det lokala nÀtverket. D.v.s. de paket som (se diagram) har passerat genom routern enligt vÀgen:
âInput Interfaceâ=>âPreroutingâ=>âRouting Decisionâ=>âForwardâ=>âPost Routingâ=>âOutput Interfaceâ och nĂ„tt sin destination i det lokala nĂ€tverket.
Viktigt! I ROS finns det ingen logisk indelning mellan externa och interna grÀnssnitt. Om vi följer vÀgen för det svarande paketet enligt diagrammet sÄ kommer det att följa samma logiska vÀg som förfrÄgan:
âInput Interfaceâ=>âPreroutingâ=>âRouting Decisionâ=>âForwardâ=>âPost Routingâ=>âOutput Interfaceâ bara för förfrĂ„gan âInput Interfaceâ var ISP-grĂ€nssnittet, medan det för svaret var LAN
2.2. Vi dirigerar svarande transittrafik enligt motsvarande routingtabeller:
/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=noAnmĂ€rkning. in-interface-list=!WAN â vi arbetar endast med trafik frĂ„n det lokala nĂ€tverket och dst-address-type=!local utan destination till grĂ€nssnittens egna adresser.
Samma sak gÀller för lokala paket som har kommit till routern via vÀgen:
âInput Interfaceâ=>âPreroutingâ=>âRouting Decisionâ=>âInputâ=>âLocal Processâ
Viktigt! Svaret kommer att gÄ pÄ följande vÀg:
âLocal Processâ=>âRouting Decisionâ=>âOutputâ=>âPost Routingâ=>âOutput Interfaceâ
2.3. Vi dirigerar svarande lokal trafik enligt motsvarande routingtabeller:
/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=noI detta skede kan vi anse att förberedelsen för att svara pÄ den kanal frÄn vilken förfrÄgan kom Àr slutförd. Allt Àr markerat, omarkerat och redo för routing.
En utmÀrkt "biverkning" av denna instÀllning Àr möjligheten att köra DNSAT-portöppning frÄn bÄda (ISP2, ISP3) leverantörerna samtidigt. Inte hos alla, eftersom vi har en icke-routbar adress hos ISP1. Denna effekt Àr viktig, till exempel för en e-postserver med tvÄ MX-poster som pekar pÄ olika internetkanaler.
För att ÄtgÀrda nyanserna kring lokala nÀtverksarbeten med externa IP-adresser pÄ routern anvÀnder vi lösningar frÄn punkterna 1.8.2 och 3.1.2.6.
Dessutom kan vi anvÀnda verktyget med mÀrkningar Àven för att lösa punkt 3 av uppgiften. Vi genomför det sÄ hÀr:
2.4. Vi dirigerar trafik frÄn lokala klienter enligt routinglistor till de motsvarande tabellerna:
/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_ISP3Det hÀr ser ungefÀr ut sÄ hÀr:

3. Vi konfigurerar anslutningen till ISP och anvÀnder mÀrkbaserad routing.
3.1. Vi konfigurerar anslutningen till ISP1:
3.1.1. Vi konfigurerar en statisk IP-adress:
/ip address add interface=ether1 address=100.66.66.2/30 comment="ISP1 IP"3.1.2. Vi stÀller in statisk routing:
3.1.2.1. Vi lÀgger till en "nödrutt" som standard:
/ip route add comment="Emergency route" distance=254 type=blackholeAnmÀrkning. Denna rutt gör det möjligt för trafik frÄn lokala processer att gÄ igenom Route Decision-steget oavsett tillstÄndet för kanalerna hos nÄgon av leverantörerna. PoÀngen med utgÄende lokal trafik Àr att för att ett paket ska kunna skickas nÄgonstans mÄste det finnas en aktiv rutt till standardgatewayen i huvudroutingtabellen. Om det inte finns nÄgon aktiv rutt kommer paketet helt enkelt att förstöras.
Som en utvidgning av verktyget check gateway för en djupare analys av kanalens tillstÄnd föreslÄr jag att anvÀnda metoden för rekursiva rutter. Metoden gÄr ut pÄ att vi instruerar routern att söka efter en vÀg till sin gateway inte direkt, utan via en mellanliggande gateway. De "kontroll-gateways" som vÀljs Àr 4.2.2.1, 4.2.2.2 och 4.2.2.3, respektive för ISP1, ISP2 och ISP3.
3.1.2.2. Rutt till "kontroll"-adressen:
/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=10AnmÀrkning. Vi sÀnker vÀrdet pÄ scope till standardvÀrdet i ROS target scope, för att anvÀnda 4.2.2.1 som rekursiv gateway i framtiden. Jag understryker: scope för rutten till "kontroll"-adressen mÄste vara mindre Àn eller lika med target scope för den rutt som kommer att referera till kontrollen.
3.1.2.3. Standard rekursiv rutt för trafik utan routingmarkering:
/ip route add comment="Unmarked via ISP1" distance=2 gateway=4.2.2.1AnmÀrkning. VÀrdet distance=2 anvÀnds eftersom ISP1 enligt uppgift anges som den första reserv.
3.1.2.4. Standard rekursiv rutt för trafik med routingmarkeringen "to_isp1":
/ip route add comment="Marked via ISP1 Main" distance=1 gateway=4.2.2.1
routing-mark=to_isp1AnmÀrkning. HÀr börjar vi Àntligen dra nytta av resultaten frÄn det förberedande arbete som genomfördes i punkt 2.
Genom denna rutt kommer all trafik med markering "to_isp1" att dirigeras till den första leverantörens gateway oavsett vilken gateway som för nÀrvarande Àr aktiv som standard för huvudtabellen.
3.1.2.5. Den första reservrekursiva rutt som standard för markerad trafik frÄn ISP2 och ISP3:
/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_isp3AnmÀrkning. Dessa rutter behövs bland annat för att reservera trafik frÄn lokala nÀtverk, som bestÄr av medlemmar i address list "to_isp*".
3.1.2.6. Vi skriver rutt för lokal trafik frÄn routern till internet via ISP1:
/ip route rule add comment="From ISP1 IP to Inet" src-address=100.66.66.2 table=to_isp1AnmÀrkning. I kombination med reglerna frÄn punkt 1.8.2, sÀkerstÀlls att utgÄngen gÄr till rÀtt kanal med angiven kÀlla. Detta Àr kritiskt för att bygga tunnlar dÀr lokal sida IP-adressen anges (EoIP, IP-IP, GRE). Eftersom reglerna i ip route rules utförs uppifrÄn och ner, tills första matchande villkor, sÄ ska denna regel placeras efter reglerna frÄn punkt 1.8.2.
3.1.3. Vi skriver en NAT-regel för utgÄende trafik:
/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.2AnmÀrkning. NATar all utgÄende trafik, förutom det som hamnar under IPsec-policyer. Jag försöker undvika action=masquerade utan ett verkligt behov. Det fungerar lÄngsammare och Àr mer resurskrÀvande Àn src-nat, eftersom det berÀknar adressen för NAT för varje ny anslutning.
3.1.4. Vi skickar kunder frÄn listan som inte fÄr ut via andra leverantörer direkt till ISP1:s gateway.
/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=0AnmÀrkning. action=route har högre prioritet och tillÀmpas före andra routingregler.
place-before=0 â placerar vĂ„r regel först i listan.
3.2. Vi konfigurerar anslutningen till ISP2.
Eftersom ISP2 tillhandahÄller instÀllningarna via DHCP, Àr det rimligt att göra nödvÀndiga Àndringar med ett skript som startar nÀr DHCP-klienten aktiveras:
/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=noSjÀlva skriptet i Winbox-fönstret:

AnmĂ€rkning. Den första delen av skriptet utförs vid framgĂ„ngsrik hyra, den andra â efter att hyra har avslutats.Se anmĂ€rkning 2
3.3. Vi konfigurerar anslutningen till ISP3.
Eftersom leverantören tillhandahÄller dynamiska instÀllningar, Àr det rimligt att göra nödvÀndiga Àndringar med skript som startar efter att grÀnssnittet ppp har aktiverats och avaktiverats.
3.3.1. Först konfigurerar vi profilen:
/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"SjÀlva skriptet i Winbox-fönstret:

AnmÀrkning. StrÀng
/ip firewall mangle set [find comment=«Connmark in from ISP3»] in-interface=$«interface»;
möjliggör korrekt hantering av namnÀndringar i grÀnssnittet eftersom det arbetar med dess kod och inte det visade namnet.
3.3.2. Nu, med hjÀlp av profilen, skapar vi en PPP-anslutning:
/interface pppoe-client add allow=mschap2 comment="to ISP3" disabled=no
interface=ether3 name=pppoe-isp3 password=isp3_pass profile=isp3_client user=isp3_clientSom sista steg ska vi stÀlla in klockan:
/system ntp client set enabled=yes server-dns-names=0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.orgFör dem som har lÀst till slutet
Den föreslagna metoden för implementering av multipath Àr ett personligt val av författaren och Àr inte den enda möjliga. ROS-verktygen Àr omfattande och flexibla, vilket Ä ena sidan orsakar svÄrigheter för nybörjare, Ä andra sidan Àr anledningen till populariteten. Fördjupa dig, testa och upptÀck nya verktyg och lösningar. Till exempel kan man i denna multipath-implementering byta ut verktyget Check-gateway med rekursiva rutter till Netwatch.
Anteckningar
- Check-gateway Àr en mekanism som gör det möjligt att inaktivera en rutt efter tvÄ pÄ varandra följande misslyckade kontroller av gatewayens tillgÀnglighet. Kontroll görs var 10:e sekund plus svarstidsgrÀns. Totalt ligger den faktiska tidsperioden för vÀxling mellan 20-30 sekunder. Om denna vÀxlingstid Àr otillrÀcklig finns det en möjlighet att anvÀnda verktyget Netwatch, dÀr kontrolltimern kan stÀllas in manuellt. Mekanismen Check-gateway aktiveras inte vid periodiska paketförluster i kanalen.
Viktigt! Inaktivering av huvudrutten medför inaktivering av alla andra rutter som hÀnvisar till den. DÀrför Àr det inte nödvÀndigt att ange check-gateway=ping .
- Det kan hÀnda att det uppstÄr ett fel i DHCP:s funktion som ser ut som om klienten fastnat i tillstÄndet renew. I sÄdana fall kommer den andra delen av skriptet inte att köras, men det hindrar inte trafiken frÄn att flöda, eftersom tillstÄndet övervakas av den motsvarande rekursiva rutten.
- ECMP (Equal Cost Multi-Path) â i ROS finns möjligheten att stĂ€lla in en rutt med flera gateways och samma distance. I sĂ„ fall kommer anslutningarna att fördelas över kanalerna med hjĂ€lp av en round robin-algoritm, proportionellt mot antalet angivna gateways.
För drivkraften bakom att skriva artikeln, hjĂ€lpen vid utformningen av dess struktur och i placeringen av viktiga punkter â ett personligt tack till Evgeny
KĂ€lla: habr.com
