English · Ελληνικά
Όλη η σειρά σταματά στο OSPF, που τρέχει το inside σου. Το BGP τρέχει το outside — το πρωτόκολλο που κολλάει μαζί το internet και αυτό στο οποίο στρέφεσαι τη μέρα που ένα μόνο default route μέσω ενός ISP δεν είναι πια αρκετό. Αυτό χτίζει ένα πραγματικό dual-ISP edge: δύο upstreams, λογικό έλεγχο path inbound και outbound, και failover που απλώς συμβαίνει όταν πέσει ένα session.
Το OSPF είναι interior gateway protocol — εμπιστεύεται κάθε router στο domain σου και μοιράζεται πλήρη τοπολογία. Το BGP είναι το αντίθετο: ένα path-vector, policy-driven πρωτόκολλο φτιαγμένο για το internet, όπου δεν εμπιστεύεσαι κανέναν και διαφημίζεις προσβασιμότητα, όχι τοπολογία. Το τρέχεις τη στιγμή που έχεις δύο ISP και δικό σου address space (ένα PI /24 και ένα ASN), και θέλεις να επιβιώσεις όταν πεθάνει ένας upstream χωρίς τηλεφώνημα.
Οι τρεις δουλειές ενός multihomed edge: στήσε eBGP sessions προς τους δύο ISP, έλεγξε την επιλογή path outbound (από ποιον upstream φεύγει η κίνησή σου) και inbound (από ποιον upstream σε φτάνει το internet), και κάνε το failover αυτόματο. Το outbound το κατευθύνεις με local-preference· το inbound το σπρώχνεις με AS-path prepending — δεν μπορείς να διατάξεις το internet, μόνο να το νύξεις. Αυτή είναι η γέφυρα από το post του OSPF προς το πώς το edge πραγματικά μιλάει με τον κόσμο, και έχει δίδυμο σε MikroTik στο RouterOS BGP.
01
Ένα neighbor statement ανά ISP, το prefix σου διαφημισμένο, και — μη διαπραγματεύσιμα στο edge — filters ώστε να μην κάνεις ποτέ leak ένα route που δεν πρέπει. Ένα unfiltered multihomed router μπορεί κατά λάθος να γίνει transit provider ανάμεσα σε δύο Tier-1.
R1(config)# router bgp 65001 R1(config-router)# bgp router-id 203.0.113.1 R1(config-router)# no bgp default ipv4-unicast # το ρητό είναι πιο ασφαλές # ISP-A και ISP-B, ο καθένας ένα external AS R1(config-router)# neighbor 198.51.100.1 remote-as 64500 R1(config-router)# neighbor 203.0.113.9 remote-as 64501 R1(config-router)# address-family ipv4 unicast R1(config-router-af)# neighbor 198.51.100.1 activate R1(config-router-af)# neighbor 203.0.113.9 activate # Διαφήμισε ΜΟΝΟ το δικό μας aggregate. R1(config-router-af)# network 192.0.2.0 mask 255.255.255.0 # Ποτέ μην ξανα-διαφημίζεις τα routes ενός ISP στον άλλον — φίλτραρε outbound. R1(config-router-af)# neighbor 198.51.100.1 prefix-list OUR-NETS out R1(config-router-af)# neighbor 203.0.113.9 prefix-list OUR-NETS out R1(config)# ip prefix-list OUR-NETS permit 192.0.2.0/24
Χωρίς αυτό το outbound filter, το router σου θα διαφημίζει ευχαρίστως routes που έμαθε από τον ISP-A πίσω στον ISP-B. Και οι δύο upstreams τότε νομίζουν ότι μπορούν να φτάσουν όλο το internet μέσα από το μικρό σου edge router, και τα uplinks σου λιώνουν κάτω από transit κίνηση που ποτέ δεν σκόπευες να κουβαλήσεις. Ένα outbound prefix-list που επιτρέπει μόνο το δικό σου aggregate είναι υποχρεωτικό σε κάθε multihomed edge — είναι η διαφορά ανάμεσα σε multihoming και ένα χάλια απόγευμα. Προαιρετικά περιόρισε τη ζημιά με neighbor … maximum-prefix.
02
Το local-preference είναι το knob με το μεγαλύτερο βάρος που ελέγχεις πλήρως, και αποφασίζει από ποιον upstream φεύγει η δική σου κίνηση. Το μεγαλύτερο κερδίζει. Βάλ' το inbound από τον προτιμώμενο ISP.
# Σήμανε ό,τι μαθεύτηκε από τον ISP-A με υψηλότερο local-pref (default 100). R1(config)# route-map PREFER-A-IN permit 10 R1(config-route-map)# set local-preference 200 R1(config)# router bgp 65001 R1(config-router-af)# neighbor 198.51.100.1 route-map PREFER-A-IN in # Τώρα όλη η outbound κίνηση προτιμά τον ISP-A· ο ISP-B είναι hot standby. # Αν πέσει το session του ISP-A, εκείνα τα routes εξαφανίζονται και αναλαμβάνει ο ISP-B. R1# show ip bgp | include 0.0.0.0|200
03
Δεν ελέγχεις πώς σε φτάνει το internet — τα απομακρυσμένα δίκτυα διαλέγουν το πιο σύντομο AS-path προς το prefix σου. Για να κάνεις τον ISP-B backup για το inbound, κάνε το path μέσα από αυτόν να φαίνεται πιο μακρύ κάνοντας prepend το δικό σου AS μερικές φορές.
# Διαφήμισε στον ISP-B με το AS μας prepended 3x -> μακρύτερο path -> λιγότερο # προτιμώμενο από το υπόλοιπο internet. Ο ISP-A κουβαλά το inbound. R1(config)# route-map PREPEND-B-OUT permit 10 R1(config-route-map)# set as-path prepend 65001 65001 65001 R1(config)# router bgp 65001 R1(config-router-af)# neighbor 203.0.113.9 route-map PREPEND-B-OUT out
Το outbound και το inbound είναι ξεχωριστά προβλήματα με ξεχωριστά knobs, και το να ξεχάσεις το ένα σου δίνει ασύμμετρο routing που κατά βάση δουλεύει μέχρι που σταματά. Το local-preference είναι τοπική απόφαση — ποτέ δεν φεύγει από το AS σου — άρα κατευθύνει μόνο το δικό σου egress. Το AS-path prepend ταξιδεύει μαζί με τη διαφήμιση, άρα είναι το εργαλείο για ingress — αλλά είναι νύξη, όχι διαταγή· ένα δίκτυο κοντά στον ISP-B μπορεί να έρχεται ακόμα από εκεί. Για πραγματικό έλεγχο inbound θα χρησιμοποιούσες BGP communities που τιμά ο ISP (π.χ. «βάλε local-pref χαμηλά στην πλευρά σου»). Το prepending είναι η φορητή λύση του 80%.
04
Τα περισσότερα edges δεν χρειάζονται 950k+ internet routes. Το να παίρνεις default route από κάθε ISP κρατά τη μνήμη χαμηλά και το failover απλό· πάρε full tables μόνο όταν χρειάζεσαι βελτιστοποίηση path ανά προορισμό.
# Ζήτα από κάθε ISP να μας στέλνει μόνο ένα default (ή φίλτραρε σε 0.0.0.0/0 inbound). R1(config-router-af)# neighbor 198.51.100.1 prefix-list DEFAULT-ONLY in R1(config)# ip prefix-list DEFAULT-ONLY permit 0.0.0.0/0 # --- Επαληθευση --- R1# show ip bgp summary # και οι δύο neighbors σε Established, prefixes > 0 R1# show ip bgp 0.0.0.0 # best path = ISP-A (local-pref 200) R1# show ip route bgp # το επιλεγμένο default στο RIB # Δοκιμή failover: κλείσε το interface του ISP-A, δες το BGP να επανασυγκλίνει στον ISP-B.
| Συμπτωμα | Που να κοιταξεις |
|---|---|
| Neighbor κολλημένος σε Active/Idle | Καμία προσβασιμότητα TCP 179 ή AS mismatch — show ip bgp neighbors. |
| Session up, χωρίς routes | Λείπει activate στο address-family, ή το inbound filter είναι πολύ σφιχτό. |
| Η κίνηση φεύγει από λάθος ISP | Το local-preference δεν έχει εφαρμοστεί inbound από τον προτιμώμενο peer. |
| Το inbound ακόμα ευνοεί το backup | Το prepend είναι πολύ αδύναμο, ή ένα απομακρυσμένο δίκτυο είναι απλώς πιο κοντά στον ISP-B — χρησιμοποίησε communities. |
Βασικα Συμπερασματα
Ένα floating static route δεν είναι multihoming, είναι ένα fallback με ένα single point of failure. Χτίζω BGP edges σε Cisco και MikroTik με πραγματικό έλεγχο path inbound και outbound, και failover που επανασυγκλίνει μόνο του — χωρίς χειροκίνητη παρέμβαση, χωρίς προσευχή.
Κλεισε μια Discovery Call →