English · Ελληνικά
Ο πίνακας δρομολόγησης προωθεί με βάση τον προορισμό — αυτή είναι όλη του η δουλειά. Αλλά μερικές φορές χρειάζεσαι να δρομολογήσεις με βάση ποιος το έστειλε, όχι πού πάει: το VLAN guest από τον φθηνό ISP, το προσωπικό από τον καλό· το VoIP από το link χαμηλού latency. Το Policy-Based Routing παρακάμπτει τον πίνακα δρομολόγησης για κίνηση που διαλέγεις εσύ. Ο δίδυμος της προσέγγισης routing-rules-and-mangle του MikroTik.
Η κανονική δρομολόγηση βασίζεται στον προορισμό και είναι ίδια για όλους: ένα πακέτο προς 8.8.8.8 παίρνει την ίδια διαδρομή είτε ήρθε από το laptop του CEO είτε από την τηλεόραση του λόμπι. Το Policy-Based Routing (PBR) σπάει αυτή τη συμμετρία — σου αφήνει να ταιριάξεις κίνηση με βάση source, πρωτόκολλο, port, ή μέγεθος και να ορίσεις διαφορετικό next-hop πριν ψηφίσει ο πίνακας δρομολόγησης. Έτσι υλοποιείς το «οι guests φεύγουν μέσω του backup ISP ώστε να μην αγγίζουν ποτέ το ακριβό μετρημένο link», ή «στείλε αυτό το ένα subnet μέσα από το VPN και όλα τα υπόλοιπα κανονικά».
Το PBR είναι ένα route-map εφαρμοσμένο inbound σε ένα interface: οι προτάσεις match διαλέγουν την κίνηση (συνήθως μέσω ενός ACL), οι προτάσεις set διαλέγουν το next-hop. Τρέχει στον router που δέχεται την κίνηση, πριν από το lookup στο FIB. Αυτό συνδυάζεται φυσικά με το edge dual-ISP και το post IP SLA failover, και το αντίστοιχό του σε RouterOS είναι τα routing rules & mangle.
01
Ταξινόμησε με ένα ACL, μετά ένα route-map που ορίζει το next-hop για τα ταιριάσματα και πέφτει σε κανονική δρομολόγηση για όλα τα υπόλοιπα. Εφάρμοσέ το inbound στο interface όπου φτάνει αυτή η κίνηση.
# 1. Ταξινόμησε: ποια κίνηση παίρνει ειδική μεταχείριση; R1(config)# ip access-list extended GUEST-OUT R1(config-ext-nacl)# permit ip 10.10.20.0 0.0.0.255 any # 2. Η πολιτική: ταίριασε το ACL, όρισε το next-hop του ISP-B. R1(config)# route-map PBR-GUEST permit 10 R1(config-route-map)# match ip address GUEST-OUT R1(config-route-map)# set ip next-hop 203.0.113.9 # πύλη ISP-B # Μια πρόταση permit χωρίς set = «δρομολόγησέ τα κανονικά» (ρητό passthrough). R1(config)# route-map PBR-GUEST permit 20 # 3. Εφάρμοσέ το INBOUND στο interface όπου φτάνει η κίνηση guest. R1(config)# interface Vlan20 R1(config-if)# ip policy route-map PBR-GUEST
Το PBR εφαρμόζεται με ip policy στο interface όπου η κίνηση μπαίνει στον router, όχι εκεί που φεύγει. Οι καινούργιοι μηχανικοί αντανακλαστικά το βάζουν στο interface WAN και δεν συμβαίνει τίποτα. Πρόσεξε επίσης την κατεύθυνση: το route-map επηρεάζει μόνο την κίνηση διέλευσης που φτάνει σε αυτό το interface — για κίνηση που παράγει ο ίδιος ο router (pings, διαχείριση), χρειάζεσαι ξεχωριστά το ip local policy route-map. Ταίριασε το interface με το πού εμφανίζεται η ενδιαφέρουσα κίνηση.
02
Υπάρχουν αρκετά ρήματα set και διαφέρουν στο πότε νικούν τον πίνακα δρομολόγησης. Διάλεξε το λάθος και το PBR είτε παρακάμπτει υπερβολικά επιθετικά είτε καθόλου.
Προταση set | Συμπεριφορα |
|---|---|
| set ip next-hop X | Επίβαλε το next-hop X — παρακάμπτει τον πίνακα δρομολόγησης. Γίνεται blackhole αν το X είναι down. |
| set ip next-hop verify-availability | Το ίδιο, αλλά παράλειψέ το αν το X είναι απρόσιτο (χρησιμοποιεί CDP/tracking) — πιο ασφαλές. |
| set interface Tunnel0 | Επίβαλε έξοδο από ένα interface (καλό για point-to-point / tunnels). |
| set ip default next-hop X | Χρησιμοποίησε το X μόνο αν ο πίνακας δρομολόγησης δεν έχει συγκεκριμένη διαδρομή — ένα απαλό σπρώξιμο. |
Ένα γυμνό set ip next-hop κάνει blackhole την ταιριασμένη κίνηση τη στιγμή που πεθαίνει εκείνο το next-hop — το PBR δεν συμβουλεύεται την προσβασιμότητα by default. Συνδύασέ το με ένα track IP SLA και set ip next-hop verify-availability <nh> <seq> track <n> ώστε η πολιτική να παραμερίζει όταν η διαδρομή είναι down και το πακέτο να πέφτει στην κανονική δρομολόγηση (ή την επόμενη πρόταση set). Το policy routing χωρίς έλεγχο υγείας είναι μια αυτοπροκαλούμενη διακοπή που περιμένει να χρειαστεί το backup link.
03
Η δύναμη του PBR είναι ότι το match μπορεί να είναι οτιδήποτε εκφράζει ένα ACL — πρωτόκολλο, port, DSCP, ακόμα και μήκος πακέτου. Έτσι δρομολογείς με βάση την εφαρμογή, όχι μόνο το subnet.
# Ταίριασε με DSCP (VoIP σημαδεμένο EF) ή port, μετά στρέψε στο καλό link. R1(config)# ip access-list extended VOICE R1(config-ext-nacl)# permit ip any any dscp ef R1(config)# route-map PBR-APP permit 10 R1(config-route-map)# match ip address VOICE R1(config-route-map)# set ip next-hop verify-availability 198.51.100.1 1 track 1 # το match ip address με ένα ACL μήκους, ή το match length, είναι επίσης έγκυρο — # π.χ. στείλε μεγάλα backups από το μετρημένο link, κράτα το interactive στην ίνα.
04
Οι αστοχίες PBR είναι σιωπηλές — η κίνηση απλώς δρομολογείται κανονικά. Επιβεβαίωσε ότι η πολιτική είναι προσαρτημένη, ταιριάζει, και οι μετρητές της ανεβαίνουν.
R1# show ip policy # ποια interfaces έχουν route-map R1# show route-map PBR-GUEST # "policy routing matches: N packets" # Ιχνηλάτησε την απόφαση για μια συγκεκριμένη ροή: R1# debug ip policy # (προσεκτικά, σε lab / χαμηλή κίνηση) # Από έναν host guest, ένα traceroute τώρα θα πρέπει να βγαίνει από την πύλη του ISP-B.
Συμπερασματα
ip policy — όχι στην έξοδο, και κίνηση που παράγει ο ίδιος ο router χρειάζεται ip local policy.set: το next-hop παρακάμπτει τον πίνακα (και κάνει blackhole αν είναι down)· το default next-hop γεμίζει μόνο ένα κενό· το verify-availability προσθέτει έλεγχο ασφαλείας.show ip policy και τους μετρητές match του route-map.Δεν χρειάζεται όλη η κίνηση το ίδιο link, και μια νεκρή διαδρομή δεν πρέπει ποτέ να γίνεται σιωπηλά μαύρη τρύπα. Σχεδιάζω edges dual-WAN με policy routing σε Cisco και MikroTik που βάζουν τη σωστή κίνηση στο σωστό link, με ελέγχους υγείας να παρακολουθούν και τα δύο.
Κλεισε μια Discovery Call →