Multivan και δρομολόγηση στο Mikrotik RouterOS

Εισαγωγή

Η ανάληψη του άρθρου, εκτός από τη ματαιοδοξία, προκλήθηκε από την καταθλιπτική συχνότητα των ερωτήσεων σχετικά με αυτό το θέμα στις ομάδες προφίλ της ρωσόφωνης κοινότητας τηλεγραφημάτων. Το άρθρο απευθύνεται σε αρχάριους διαχειριστές Mikrotik RouterOS (εφεξής ROS). Ασχολείται μόνο με το multivan, με έμφαση στη δρομολόγηση. Ως μπόνους, υπάρχουν ελάχιστα επαρκείς ρυθμίσεις για να διασφαλιστεί η ασφαλής και άνετη λειτουργία. Όσοι αναζητούν αποκάλυψη των θεμάτων των ουρών, της εξισορρόπησης φορτίου, των vlans, των γεφυρών, της βαθιάς ανάλυσης πολλαπλών σταδίων της κατάστασης του καναλιού και άλλα παρόμοια - μπορεί να μην χάνουν χρόνο και προσπάθεια διαβάζοντας.

Ακατέργαστα δεδομένα

Ως θέμα δοκιμής, επιλέχθηκε ένας δρομολογητής Mikrotik πέντε θυρών με έκδοση ROS 6.45.3. Θα δρομολογεί την κυκλοφορία μεταξύ δύο τοπικών δικτύων (LAN1 και LAN2) και τριών παρόχων (ISP1, ISP2, ISP3). Το κανάλι προς τον ISP1 έχει μια στατική "γκρι" διεύθυνση, ISP2 - "white", που λαμβάνεται μέσω DHCP, ISP3 - "white" με εξουσιοδότηση PPPoE. Το διάγραμμα σύνδεσης φαίνεται στο σχήμα:

Multivan και δρομολόγηση στο Mikrotik RouterOS

Η εργασία είναι να ρυθμίσετε τις παραμέτρους του δρομολογητή MTK με βάση το σχήμα έτσι ώστε:

  1. Παρέχετε αυτόματη εναλλαγή σε εφεδρικό πάροχο. Ο κύριος πάροχος είναι ο ISP2, ο πρώτος αποθεματικός είναι ο ISP1, ο δεύτερος αποθεματικός είναι ο ISP3.
  2. Οργανώστε την πρόσβαση στο δίκτυο LAN1 στο Διαδίκτυο μόνο μέσω ISP1.
  3. Παρέχετε τη δυνατότητα δρομολόγησης της κυκλοφορίας από τα τοπικά δίκτυα στο Διαδίκτυο μέσω του επιλεγμένου παρόχου με βάση τη λίστα διευθύνσεων.
  4. Παροχή δυνατότητας δημοσίευσης υπηρεσιών από το τοπικό δίκτυο στο Διαδίκτυο (DSTNAT)
  5. Ρυθμίστε ένα φίλτρο τείχους προστασίας για να παρέχει την ελάχιστη επαρκή ασφάλεια από το Διαδίκτυο.
  6. Ο δρομολογητής θα μπορούσε να εκδίδει τη δική του κίνηση μέσω οποιουδήποτε από τους τρεις παρόχους, ανάλογα με την επιλεγμένη διεύθυνση πηγής.
  7. Βεβαιωθείτε ότι τα πακέτα απόκρισης δρομολογούνται στο κανάλι από το οποίο προήλθαν (συμπεριλαμβανομένου του LAN).

Σχόλιο. Θα διαμορφώσουμε τον δρομολογητή "από την αρχή" για να εγγυηθούμε την απουσία εκπλήξεων στις αρχικές διαμορφώσεις "out of the box" που αλλάζουν από έκδοση σε έκδοση. Το Winbox επιλέχθηκε ως εργαλείο διαμόρφωσης, όπου οι αλλαγές θα εμφανίζονται οπτικά. Οι ίδιες οι ρυθμίσεις θα οριστούν με εντολές στο τερματικό Winbox. Η φυσική σύνδεση για τη διαμόρφωση γίνεται με απευθείας σύνδεση στη διεπαφή Ether5.

Λίγη συλλογιστική για το τι είναι ένα multivan, είναι πρόβλημα ή είναι πονηροί έξυπνοι άνθρωποι γύρω από την ύφανση δικτύων συνωμοσίας

Ένας περίεργος και προσεκτικός διαχειριστής, που στήνει μόνος του ένα τέτοιο ή παρόμοιο σχέδιο, ξαφνικά συνειδητοποιεί ότι λειτουργεί ήδη κανονικά. Ναι, ναι, χωρίς τους προσαρμοσμένους πίνακες δρομολόγησης και άλλους κανόνες διαδρομής, με τους οποίους είναι γεμάτα τα περισσότερα άρθρα σχετικά με αυτό το θέμα. Ας ελέγξουμε?

Μπορούμε να ρυθμίσουμε τη διευθυνσιοδότηση σε διεπαφές και προεπιλεγμένες πύλες; Ναί:

Στον ISP1, η διεύθυνση και η πύλη καταχωρήθηκαν με απόσταση=2 и check-gateway=ping.
Στον ISP2, η προεπιλεγμένη ρύθμιση πελάτη dhcp - κατά συνέπεια, η απόσταση θα είναι ίση με ένα.
Στον ISP3 στις ρυθμίσεις του προγράμματος-πελάτη pppoe όταν add-default-route=ναι βάζω default-route-distance=3.

Μην ξεχάσετε να εγγραφείτε NAT στην έξοδο:

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

Ως αποτέλεσμα, οι χρήστες τοπικών τοποθεσιών διασκεδάζουν κατεβάζοντας γάτες μέσω του κύριου παρόχου ISP2 και υπάρχει κράτηση καναλιού χρησιμοποιώντας τον μηχανισμό ελέγξτε την πύλη Βλέπε σημείωση 1

Το σημείο 1 της εργασίας υλοποιείται. Πού είναι το multivan με τα σημάδια του; Οχι…

Περαιτέρω. Πρέπει να απελευθερώσετε συγκεκριμένους πελάτες από το LAN μέσω ISP1:

/ip firewall mangle add action=route chain=prerouting dst-address-list=!BOGONS
passthrough=yes route-dst=100.66.66.1 src-address-list=Μέσω_ISP1
/ip firewall mangle add action=route chain=prerouting dst-address-list=!BOGONS
passthrough=χωρίς διαδρομή-dst=100.66.66.1 src-address=192.168.88.0/24

Τα σημεία 2 και 3 της εργασίας έχουν υλοποιηθεί. Ετικέτες, γραμματόσημα, κανόνες διαδρομής, πού είσαι;!

Θέλετε να δώσετε πρόσβαση στον αγαπημένο σας διακομιστή OpenVPN με τη διεύθυνση 172.17.17.17 για πελάτες από το Διαδίκτυο; Σας παρακαλούμε:

/ip σύννεφο σύνολο ddns-enabled=yes

Ως ομότιμος, δίνουμε στον πελάτη το αποτέλεσμα εξόδου::put [ip cloud get dns-name]"

Καταγράφουμε την προώθηση θυρών από το Διαδίκτυο:

/ip firewall nat add action=dst-nat chain=dstnat dst-port=1194
in-interface-list=πρωτόκολλο WAN=udp to-addresses=172.17.17.17

Το στοιχείο 4 είναι έτοιμο.

Στήσαμε ένα τείχος προστασίας και άλλη ασφάλεια για το σημείο 5, ταυτόχρονα χαιρόμαστε που όλα λειτουργούν ήδη για τους χρήστες και φτάνουμε σε ένα δοχείο με ένα αγαπημένο ποτό ...
ΕΝΑ! Τα τούνελ έχουν ξεχαστεί.

Το l2tp-client, που διαμορφώθηκε από το άρθρο της Google, έχει φτάσει στο αγαπημένο σας ολλανδικό VDS; Ναί.
Ο l2tp-server με IPsec έχει αυξηθεί και οι πελάτες με όνομα DNS από το IP Cloud (βλ. παραπάνω.) προσκολλώνται; Ναί.
Ακουμπώντας πίσω στην καρέκλα μας, πίνοντας ένα ποτό, εξετάζουμε νωχελικά τα σημεία 6 και 7 της εργασίας. Σκεφτόμαστε - το χρειαζόμαστε; Παρόλα αυτά, λειτουργεί έτσι (γ) ... Οπότε, αν δεν χρειάζεται, τότε είναι όλο. Multivan που υλοποιείται.

Τι είναι ένα multivan; Αυτή είναι η σύνδεση πολλών καναλιών Διαδικτύου σε έναν δρομολογητή.

Δεν χρειάζεται να διαβάσετε περαιτέρω το άρθρο, γιατί τι μπορεί να υπάρχει εκτός από μια επίδειξη αμφίβολης εφαρμογής;

Για όσους μένουν, που ενδιαφέρονται για τα σημεία 6 και 7 της εργασίας, και αισθάνονται επίσης τη φαγούρα της τελειομανίας, βουτάμε πιο βαθιά.

Το πιο σημαντικό καθήκον της υλοποίησης ενός multivan είναι η σωστή δρομολόγηση της κυκλοφορίας. Δηλαδή: ανεξάρτητα από ποια (ή ποια) Βλ. σημείωση 3 τα κανάλια του ISP εξετάζουν την προεπιλεγμένη διαδρομή στο δρομολογητή μας, θα πρέπει να επιστρέψει μια απάντηση στο ακριβές κανάλι από το οποίο προήλθε το πακέτο. Το καθήκον είναι ξεκάθαρο. Πού είναι το πρόβλημα? Πράγματι, σε ένα απλό τοπικό δίκτυο, η εργασία είναι η ίδια, αλλά κανείς δεν ενοχλεί με πρόσθετες ρυθμίσεις και δεν αισθάνεται πρόβλημα. Η διαφορά είναι ότι κάθε δρομολογήσιμος κόμβος στο Διαδίκτυο είναι προσβάσιμος μέσω κάθε καναλιού μας και όχι μέσω ενός αυστηρά συγκεκριμένου, όπως σε ένα απλό LAN. Και το «πρόβλημα» είναι ότι αν μας ήρθε ένα αίτημα για τη διεύθυνση IP του ISP3, τότε στην περίπτωσή μας η απάντηση θα περάσει από το κανάλι ISP2, αφού η προεπιλεγμένη πύλη κατευθύνεται εκεί. Φεύγει και θα απορριφθεί από τον πάροχο ως εσφαλμένο. Το πρόβλημα έχει εντοπιστεί. Πώς να το λύσετε;

Η λύση χωρίζεται σε τρία στάδια:

  1. Προρύθμιση. Σε αυτό το στάδιο, θα οριστούν οι βασικές ρυθμίσεις του δρομολογητή: τοπικό δίκτυο, τείχος προστασίας, λίστες διευθύνσεων, φουρκέτα NAT κ.λπ.
  2. Multivan. Σε αυτό το στάδιο, οι απαραίτητες συνδέσεις θα επισημανθούν και θα ταξινομηθούν σε πίνακες δρομολόγησης.
  3. Σύνδεση σε έναν ISP. Σε αυτό το στάδιο θα διαμορφωθούν οι διεπαφές που παρέχουν σύνδεση στο Διαδίκτυο, θα δρομολογηθεί και θα ενεργοποιηθεί ο μηχανισμός κράτησης καναλιών Διαδικτύου.

1. Προρύθμιση

1.1. Καθαρίζουμε τη διαμόρφωση του δρομολογητή με την εντολή:

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

Συμφωνείτε με "Επικίνδυνος! Επαναφορά πάντως; [ε/Δ]:” και, μετά την επανεκκίνηση, συνδεόμαστε με το Winbox μέσω MAC. Σε αυτό το στάδιο, η διαμόρφωση και η βάση χρήστη διαγράφονται.

1.2. Δημιουργία νέου χρήστη:

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

συνδεθείτε κάτω από αυτό και διαγράψτε την προεπιλεγμένη:

/user remove admin

Σχόλιο. Είναι η αφαίρεση και η μη απενεργοποίηση του προεπιλεγμένου χρήστη που ο συγγραφέας θεωρεί πιο ασφαλή και προτείνει για χρήση.

1.3. Δημιουργούμε βασικές λίστες διεπαφής για ευκολία λειτουργίας σε τείχος προστασίας, ρυθμίσεις εντοπισμού και άλλους διακομιστές MAC:

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

Υπογραφή διασυνδέσεων με σχόλια

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

και συμπληρώστε τις λίστες διεπαφής:

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

Σχόλιο. Η σύνταξη κατανοητών σχολίων αξίζει τον χρόνο που αφιερώνεται σε αυτό, καθώς επίσης διευκολύνει σημαντικά την αντιμετώπιση προβλημάτων και την κατανόηση της διαμόρφωσης.

Ο συγγραφέας θεωρεί απαραίτητο, για λόγους ασφαλείας, να προσθέσει τη διεπαφή ether3 στη λίστα διεπαφής «WAN», παρά το γεγονός ότι το πρωτόκολλο ip δεν θα περάσει από αυτήν.

Μην ξεχνάτε ότι μετά την ανύψωση της διεπαφής PPP στον ether3, θα πρέπει επίσης να προστεθεί στη λίστα διεπαφής "WAN"

1.4. Κρύβουμε τον δρομολογητή από τον εντοπισμό και τον έλεγχο γειτονιάς από δίκτυα παρόχων μέσω 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. Δημιουργούμε το ελάχιστο επαρκές σύνολο κανόνων φίλτρου τείχους προστασίας για την προστασία του δρομολογητή:

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

(ο κανόνας παρέχει άδεια για εγκατεστημένες και σχετικές συνδέσεις που ξεκινούν τόσο από συνδεδεμένα δίκτυα όσο και από τον ίδιο τον δρομολογητή)

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

(ping και όχι μόνο ping. Όλα τα icmp επιτρέπονται. Πολύ χρήσιμο για την εύρεση προβλημάτων MTU)

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

(ο κανόνας που κλείνει την αλυσίδα εισόδου απαγορεύει οτιδήποτε άλλο προέρχεται από το Διαδίκτυο)

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

(ο κανόνας επιτρέπει τις καθιερωμένες και σχετικές συνδέσεις που διέρχονται μέσω του δρομολογητή)

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

(ο κανόνας επαναφέρει τις συνδέσεις με σύνδεση-κατάσταση=μη έγκυρη διέλευση από το δρομολογητή. Συνιστάται ανεπιφύλακτα από τη Mikrotik, αλλά σε ορισμένες σπάνιες περιπτώσεις μπορεί να εμποδίσει τη χρήσιμη κίνηση)

/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

(ο κανόνας απαγορεύει τα πακέτα που προέρχονται από το Διαδίκτυο και δεν έχουν περάσει τη διαδικασία dstnat να περάσουν μέσω του δρομολογητή. Αυτό θα προστατεύσει τα τοπικά δίκτυα από εισβολείς οι οποίοι, όντας στον ίδιο τομέα εκπομπής με τα εξωτερικά μας δίκτυα, θα καταχωρούν τις εξωτερικές IP μας ως πύλη και, επομένως, προσπαθήστε να «εξερευνήσετε» τα τοπικά μας δίκτυα.)

Σχόλιο. Ας υποθέσουμε ότι τα δίκτυα LAN1 και LAN2 είναι αξιόπιστα και η κίνηση μεταξύ αυτών και από αυτά δεν φιλτράρεται.

1.6. Δημιουργήστε μια λίστα με μια λίστα δικτύων που δεν μπορούν να δρομολογηθούν:

/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

(Αυτή είναι μια λίστα διευθύνσεων και δικτύων που δεν μπορούν να δρομολογηθούν στο Διαδίκτυο και θα ακολουθηθούν αναλόγως.)

Σχόλιο. Η λίστα υπόκειται σε αλλαγές, επομένως σας συμβουλεύω να ελέγχετε περιοδικά τη συνάφεια.

1.7. Ρυθμίστε το DNS για τον ίδιο τον δρομολογητή:

/ip dns set servers=1.1.1.1,8.8.8.8

Σχόλιο. Στην τρέχουσα έκδοση του ROS, οι δυναμικοί διακομιστές έχουν προτεραιότητα έναντι των στατικών. Το αίτημα επίλυσης ονόματος αποστέλλεται στον πρώτο διακομιστή κατά σειρά στη λίστα. Η μετάβαση στον επόμενο διακομιστή πραγματοποιείται όταν ο τρέχων δεν είναι διαθέσιμος. Το χρονικό όριο είναι μεγάλο - περισσότερο από 5 δευτερόλεπτα. Η επιστροφή, όταν συνεχιστεί ο "έπεσε διακομιστής", δεν πραγματοποιείται αυτόματα. Δεδομένου αυτού του αλγόριθμου και της παρουσίας ενός multivan, ο συγγραφέας συνιστά να μην χρησιμοποιείτε διακομιστές που παρέχονται από παρόχους.

1.8. Ρυθμίστε ένα τοπικό δίκτυο.
1.8.1. Διαμορφώνουμε στατικές διευθύνσεις IP σε διεπαφές LAN:

/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. Ορίζουμε τους κανόνες για τις διαδρομές προς τα τοπικά μας δίκτυα μέσω του κύριου πίνακα δρομολόγησης:

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

Σχόλιο. Αυτός είναι ένας από τους γρήγορους και εύκολους τρόπους πρόσβασης σε διευθύνσεις LAN με πηγές εξωτερικών διευθύνσεων IP των διεπαφών δρομολογητή που δεν περνούν από την προεπιλεγμένη διαδρομή.

1.8.3. Ενεργοποίηση Hairpin NAT για LAN1 και 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

Σχόλιο. Αυτό σας επιτρέπει να έχετε πρόσβαση στους πόρους σας (dstnat) μέσω μιας εξωτερικής IP ενώ βρίσκεστε εντός του δικτύου.

2. Στην πραγματικότητα, η υλοποίηση του πολύ σωστού multivan

Για να λύσουμε το πρόβλημα της «απάντησης από πού ζήτησαν», θα χρησιμοποιήσουμε δύο εργαλεία ROS: σημάδι σύνδεσης и σημάδι δρομολόγησης. σημάδι σύνδεσης σας επιτρέπει να επισημάνετε την επιθυμητή σύνδεση και στη συνέχεια να εργαστείτε με αυτήν την ετικέτα ως προϋπόθεση για την εφαρμογή σημάδι δρομολόγησης. Και ήδη με σημάδι δρομολόγησης είναι δυνατό να εργαστείτε διαδρομή IP и κανόνες διαδρομής. Καταλάβαμε τα εργαλεία, τώρα πρέπει να αποφασίσετε ποιες συνδέσεις θα επισημάνετε - μία φορά, ακριβώς πού να σημειώσετε - δύο.

Με το πρώτο, όλα είναι απλά - πρέπει να επισημάνουμε όλες τις συνδέσεις που έρχονται στο δρομολογητή από το Διαδίκτυο μέσω του κατάλληλου καναλιού. Στην περίπτωσή μας, αυτές θα είναι τρεις ετικέτες (με βάση τον αριθμό των καναλιών): "conn_isp1", "conn_isp2" και "conn_isp3".

Η απόχρωση με το δεύτερο είναι ότι οι εισερχόμενες συνδέσεις θα είναι δύο τύπων: διέλευσης και εκείνες που προορίζονται για τον ίδιο τον δρομολογητή. Ο μηχανισμός σήμανσης σύνδεσης λειτουργεί στον πίνακα μάγγανο. Εξετάστε την κίνηση του πακέτου σε ένα απλουστευμένο διάγραμμα, που συντάχθηκε ευγενικά από τους ειδικούς του πόρου mikrotik-trainings.com (όχι διαφήμιση):

Multivan και δρομολόγηση στο Mikrotik RouterOS

Ακολουθώντας τα βέλη, βλέπουμε ότι το πακέτο φτάνει στο "διεπαφή εισόδου", περνάει από την αλυσίδα"Προδρομολόγηση" και μόνο τότε χωρίζεται σε διαμετακομιστικό και τοπικό στο μπλοκ "Απόφαση δρομολόγησης". Επομένως, για να σκοτώσουμε δύο πουλιά με μια πέτρα, χρησιμοποιούμε Σημάδι σύνδεσης στο τραπέζι Mangle Pre-routing αλυσίδες Προδρομολόγηση.

Σημείωση:. Στο ROS, οι ετικέτες "Σήμα δρομολόγησης" αναφέρονται ως "Πίνακας" στην ενότητα Ip/Routes/Rules και ως "Routing Mark" σε άλλες ενότητες. Αυτό μπορεί να δημιουργήσει κάποια σύγχυση στην κατανόηση, αλλά, στην πραγματικότητα, αυτό είναι το ίδιο πράγμα και είναι ένα ανάλογο των rt_tables στο iproute2 στο linux.

2.1. Σημειώνουμε τις εισερχόμενες συνδέσεις από κάθε έναν από τους παρόχους:

/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

Σχόλιο. Για να μην επισημάνω τις ήδη επισημασμένες συνδέσεις, χρησιμοποιώ την συνθήκη connection-mark=no-mark αντί για connection-state=new γιατί νομίζω ότι αυτό είναι πιο σωστό, καθώς και την απόρριψη της απόρριψης μη έγκυρων συνδέσεων στο φίλτρο εισόδου.


passthrough=no - επειδή σε αυτήν τη μέθοδο υλοποίησης, η επανασήμανση αποκλείεται και, για να επιταχύνετε, μπορείτε να διακόψετε την απαρίθμηση των κανόνων μετά τον πρώτο αγώνα.

Θα πρέπει να ληφθεί υπόψη ότι δεν παρεμβαίνουμε με κανέναν τρόπο στη δρομολόγηση ακόμη. Τώρα υπάρχουν μόνο στάδια προετοιμασίας. Το επόμενο στάδιο υλοποίησης θα είναι η επεξεργασία της διαμετακομιστικής κίνησης που επιστρέφει μέσω της δημιουργηθείσας σύνδεσης από τον προορισμό στο τοπικό δίκτυο. Εκείνοι. αυτά τα πακέτα που (δείτε το διάγραμμα) πέρασαν από το δρομολογητή στην πορεία:

“Input Interface”=>”Prerouting”=>”Routing Decision”=>”Forward”=>”Post Routing”=>”Διεπαφή εξόδου” και έφτασαν στον παραλήπτη τους στο τοπικό δίκτυο.

Σημαντικό! Στο ROS, δεν υπάρχει λογική διαίρεση σε εξωτερικές και εσωτερικές διεπαφές. Εάν ανιχνεύσουμε τη διαδρομή του πακέτου απόκρισης σύμφωνα με το παραπάνω διάγραμμα, τότε θα ακολουθήσει την ίδια λογική διαδρομή με το αίτημα:

“Input Interface”=>”Prerouting”=>”Routing Decision”=>”Forward”=>”Post Routing”=>”Διεπαφή εξόδου” μόνο για ένα αίτημα"Διεπαφή εισόδου” ήταν η διεπαφή ISP, και για την απάντηση - LAN

2.2. Κατευθύνουμε την κίνηση διέλευσης απόκρισης στους αντίστοιχους πίνακες δρομολόγησης:

/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

Σχόλιο. in-interface-list=!WAN - εργαζόμαστε μόνο με κίνηση από το τοπικό δίκτυο και dst-address-type=!local που δεν έχει τη διεύθυνση προορισμού της διεύθυνσης των διεπαφών του ίδιου του δρομολογητή.

Το ίδιο και για τα τοπικά πακέτα που ήρθαν στο δρομολογητή στην πορεία:

"Input Interface"=>"Prerouting"=>"Routing Decision"=>"Input"=>"Τοπική διαδικασία"

Σημαντικό! Η απάντηση θα έχει ως εξής:

"Τοπική διαδικασία"=>"Απόφαση δρομολόγησης"=>"Έξοδος"=>"Δρομολόγηση μετάδοσης"=>"Διεπαφή εξόδου"

2.3. Απαντάμε την τοπική κίνηση στους αντίστοιχους πίνακες δρομολόγησης:

/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

Σε αυτό το στάδιο, το έργο της προετοιμασίας για αποστολή απάντησης στο κανάλι του Διαδικτύου από το οποίο προήλθε το αίτημα μπορεί να θεωρηθεί λυθεί. Όλα είναι επισημασμένα, επισημασμένα και έτοιμα για δρομολόγηση.
Ένα εξαιρετικό «παρενέργεια» αυτής της ρύθμισης είναι η δυνατότητα συνεργασίας με την προώθηση θύρας DSNAT και από τους δύο παρόχους (ISP2, ISP3) ταυτόχρονα. Καθόλου, αφού στον ISP1 έχουμε μια διεύθυνση που δεν μπορεί να δρομολογηθεί. Αυτό το εφέ είναι σημαντικό, για παράδειγμα, για έναν διακομιστή αλληλογραφίας με δύο MX που εξετάζουν διαφορετικά κανάλια Διαδικτύου.

Για να εξαλείψουμε τις αποχρώσεις της λειτουργίας των τοπικών δικτύων με εξωτερικούς δρομολογητές IP, χρησιμοποιούμε τις λύσεις από τις παραγράφους. 1.8.2 και 3.1.2.6.

Επιπλέον, μπορείτε να χρησιμοποιήσετε ένα εργαλείο με σημάνσεις για να λύσετε την παράγραφο 3 του προβλήματος. Το υλοποιούμε ως εξής:

2.4. Κατευθύνουμε την κίνηση από τοπικούς πελάτες από τις λίστες δρομολόγησης στους κατάλληλους πίνακες:

/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

Ως αποτέλεσμα, φαίνεται κάπως έτσι:

Multivan και δρομολόγηση στο Mikrotik RouterOS

3. Ρυθμίστε μια σύνδεση με τον ISP και ενεργοποιήστε την επώνυμη δρομολόγηση

3.1. Ρυθμίστε μια σύνδεση με τον ISP1:
3.1.1. Διαμορφώστε μια στατική διεύθυνση IP:

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

3.1.2. Ρύθμιση στατικής δρομολόγησης:
3.1.2.1. Προσθέστε μια προεπιλεγμένη διαδρομή "έκτακτης ανάγκης":

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

Σχόλιο. Αυτή η διαδρομή επιτρέπει στην κυκλοφορία από τοπικές διαδικασίες να περάσει το στάδιο Απόφασης διαδρομής, ανεξάρτητα από την κατάσταση των συνδέσμων οποιουδήποτε από τους παρόχους. Η απόχρωση της εξερχόμενης τοπικής κίνησης είναι ότι για να μετακινηθεί το πακέτο τουλάχιστον κάπου, ο κύριος πίνακας δρομολόγησης πρέπει να έχει μια ενεργή διαδρομή προς την προεπιλεγμένη πύλη. Αν όχι, τότε το πακέτο απλώς θα καταστραφεί.

Ως επέκταση εργαλείου ελέγξτε την πύλη Για μια βαθύτερη ανάλυση της κατάστασης του καναλιού, προτείνω τη χρήση της μεθόδου αναδρομικής διαδρομής. Η ουσία της μεθόδου είναι ότι λέμε στον δρομολογητή να αναζητήσει μια διαδρομή προς την πύλη του όχι απευθείας, αλλά μέσω μιας ενδιάμεσης πύλης. Τα 4.2.2.1, 4.2.2.2 και 4.2.2.3 θα επιλεγούν ως τέτοιες «δοκιμαστικές» πύλες για ISP1, ISP2 και ISP3 αντίστοιχα.

3.1.2.2. Διαδρομή προς τη διεύθυνση "επαλήθευσης":

/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

Σχόλιο. Μειώνουμε την τιμή του εύρους στην προεπιλεγμένη εμβέλεια στόχου ROS για να χρησιμοποιήσουμε την 4.2.2.1 ως αναδρομική πύλη στο μέλλον. Τονίζω: το εύρος της διαδρομής προς τη «δοκιμαστική» διεύθυνση πρέπει να είναι μικρότερο ή ίσο με το εύρος στόχου της διαδρομής που θα αναφέρεται στη δοκιμαστική.

3.1.2.3. Αναδρομική προεπιλεγμένη διαδρομή για κυκλοφορία χωρίς σημάδι δρομολόγησης:

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

Σχόλιο. Η τιμή distance=2 χρησιμοποιείται επειδή ο ISP1 δηλώνεται ως το πρώτο αντίγραφο ασφαλείας σύμφωνα με τις συνθήκες εργασίας.

3.1.2.4. Αναδρομική προεπιλεγμένη διαδρομή για κυκλοφορία με σημάδι δρομολόγησης "to_isp1":

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

Σχόλιο. Στην πραγματικότητα, εδώ αρχίζουμε επιτέλους να απολαμβάνουμε τους καρπούς της προπαρασκευαστικής εργασίας που πραγματοποιήθηκε στην παράγραφο 2.


Σε αυτήν τη διαδρομή, όλη η κίνηση που έχει το σημάδι διαδρομής "to_isp1" θα κατευθύνεται στην πύλη του πρώτου παρόχου, ανεξάρτητα από το ποια προεπιλεγμένη πύλη είναι ενεργή αυτήν τη στιγμή για τον κύριο πίνακα.

3.1.2.5. Πρώτη εναλλακτική αναδρομική προεπιλεγμένη διαδρομή για κυκλοφορία με ετικέτα ISP2 και 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_isp3

Σχόλιο. Αυτές οι διαδρομές χρειάζονται, μεταξύ άλλων, για την κράτηση κίνησης από τοπικά δίκτυα που είναι μέλη της λίστας διευθύνσεων "to_isp*"

3.1.2.6. Καταχωρούμε τη διαδρομή για την τοπική κίνηση του δρομολογητή στο Διαδίκτυο μέσω του ISP1:

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

Σχόλιο. Σε συνδυασμό με τους κανόνες της παραγράφου 1.8.2, παρέχει πρόσβαση στο επιθυμητό κανάλι με μια δεδομένη πηγή. Αυτό είναι κρίσιμο για την κατασκευή σηράγγων που καθορίζουν την τοπική πλευρική διεύθυνση IP (EoIP, IP-IP, GRE). Εφόσον οι κανόνες στους κανόνες διαδρομής ip εκτελούνται από πάνω προς τα κάτω, μέχρι την πρώτη αντιστοίχιση των συνθηκών, τότε αυτός ο κανόνας θα πρέπει να ακολουθεί τους κανόνες από την ενότητα 1.8.2.

3.1.3. Καταχωρούμε τον κανόνα NAT για την εξερχόμενη κίνηση:

/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

Σχόλιο. NATim ό,τι σβήνει, εκτός από ό,τι περιλαμβάνεται στις πολιτικές IPsec. Προσπαθώ να μην χρησιμοποιώ action=masquerade εκτός και αν είναι απολύτως απαραίτητο. Είναι πιο αργό και απαιτεί περισσότερους πόρους από το src-nat επειδή υπολογίζει τη διεύθυνση NAT για κάθε νέα σύνδεση.

3.1.4. Στέλνουμε πελάτες από τη λίστα στους οποίους απαγορεύεται η πρόσβαση μέσω άλλων παρόχων απευθείας στην πύλη του παρόχου ISP1.

/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

Σχόλιο. Το action=route έχει υψηλότερη προτεραιότητα και εφαρμόζεται πριν από άλλους κανόνες δρομολόγησης.


place-before=0 - τοποθετεί τον κανόνα μας πρώτο στη λίστα.

3.2. Ρυθμίστε μια σύνδεση με τον ISP2.

Εφόσον ο πάροχος ISP2 μας δίνει τις ρυθμίσεις μέσω DHCP, είναι λογικό να κάνουμε τις απαραίτητες αλλαγές με ένα σενάριο που ξεκινά όταν ενεργοποιείται ο πελάτης DHCP:

/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

Το ίδιο το σενάριο στο παράθυρο του Winbox:

Multivan και δρομολόγηση στο Mikrotik RouterOS
Σχόλιο. Το πρώτο μέρος του σεναρίου ενεργοποιείται όταν η μίσθωση αποκτηθεί με επιτυχία, το δεύτερο - μετά την απελευθέρωση της μίσθωσης.Βλέπε σημείωση 2

3.3. Δημιουργήσαμε μια σύνδεση με τον πάροχο ISP3.

Εφόσον ο πάροχος ρυθμίσεων μας δίνει δυναμικά, είναι λογικό να κάνουμε τις απαραίτητες αλλαγές με σενάρια που ξεκινούν μετά την ανύψωση της διεπαφής ppp και μετά την πτώση.

3.3.1. Πρώτα διαμορφώνουμε το προφίλ:

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

Το ίδιο το σενάριο στο παράθυρο του Winbox:

Multivan και δρομολόγηση στο Mikrotik RouterOS
Σχόλιο. Σειρά
/ip firewall mangle set [find comment="Connmark in from ISP3"] in-interface=$"interface";
σας επιτρέπει να χειριστείτε σωστά τη μετονομασία της διεπαφής, καθώς λειτουργεί με τον κωδικό της και όχι με το εμφανιζόμενο όνομα.

3.3.2. Τώρα, χρησιμοποιώντας το προφίλ, δημιουργήστε μια σύνδεση ppp:

/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

Ως τελευταία πινελιά, ας ρυθμίσουμε το ρολόι:

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

Για όσους διαβάζουν μέχρι το τέλος

Ο προτεινόμενος τρόπος υλοποίησης ενός multivan είναι η προσωπική προτίμηση του συγγραφέα και δεν είναι ο μόνος δυνατός. Το πακέτο εργαλείων ROS είναι εκτεταμένο και ευέλικτο, το οποίο, αφενός, προκαλεί δυσκολίες στους αρχάριους και, αφετέρου, είναι ο λόγος της δημοτικότητάς του. Μάθετε, δοκιμάστε, ανακαλύψτε νέα εργαλεία και λύσεις. Για παράδειγμα, ως εφαρμογή της αποκτηθείσας γνώσης, είναι δυνατή η αντικατάσταση του εργαλείου σε αυτήν την υλοποίηση του multivan check-gateway με αναδρομικές διαδρομές προς ρολόι δικτύου.

Σημειώσεις

  1. check-gateway - ένας μηχανισμός που σας επιτρέπει να απενεργοποιήσετε τη διαδρομή μετά από δύο διαδοχικούς ανεπιτυχείς ελέγχους της πύλης για διαθεσιμότητα. Ο έλεγχος εκτελείται μία φορά κάθε 10 δευτερόλεπτα, συν το χρονικό όριο απόκρισης. Συνολικά, ο πραγματικός χρονισμός μεταγωγής κυμαίνεται από 20-30 δευτερόλεπτα. Εάν αυτός ο χρονισμός εναλλαγής δεν είναι επαρκής, υπάρχει η επιλογή χρήσης του εργαλείου ρολόι δικτύου, όπου ο χρονοδιακόπτης ελέγχου μπορεί να ρυθμιστεί χειροκίνητα. check-gateway δεν ενεργοποιείται σε διαλείπουσα απώλεια πακέτων στη σύνδεση.

    Σπουδαίος! Η απενεργοποίηση της κύριας διαδρομής συνεπάγεται την απενεργοποίηση όλων των άλλων διαδρομών που αναφέρονται σε αυτήν. Επομένως, για να υποδείξουν check-gateway=ping όχι απαραίτητο.

  2. Συμβαίνει να παρουσιαστεί μια αποτυχία στον μηχανισμό DHCP, ο οποίος μοιάζει με πελάτη που έχει κολλήσει σε κατάσταση ανανέωσης. Σε αυτήν την περίπτωση, το δεύτερο μέρος του σεναρίου δεν θα λειτουργήσει, αλλά δεν θα εμποδίσει την κυκλοφορία να περπατήσει σωστά, καθώς η κατάσταση παρακολουθεί την αντίστοιχη αναδρομική διαδρομή.
  3. ECMP (Πολλαπλές διαδρομές ίσου κόστους) - στο ROS είναι δυνατό να ορίσετε μια διαδρομή με πολλές πύλες και την ίδια απόσταση. Σε αυτήν την περίπτωση, οι συνδέσεις θα διανέμονται μεταξύ των καναλιών χρησιμοποιώντας τον αλγόριθμο round robin, ανάλογα με τον αριθμό των καθορισμένων πυλών.

Για την ώθηση για τη συγγραφή του άρθρου, βοηθήστε στη διαμόρφωση της δομής του και την τοποθέτηση προφορών - προσωπική ευγνωμοσύνη στον Ευγένιο @jscar

Πηγή: www.habr.com