Πίσω στο blog

English  ·  Ελληνικά

Cisco / IOS  ·  Routing  ·  Ιουλιος 2026

Cisco IOS
BGP & Dual-ISP Multihoming

Όλη η σειρά σταματά στο OSPF, που τρέχει το inside σου. Το BGP τρέχει το outside — το πρωτόκολλο που κολλάει μαζί το internet και αυτό στο οποίο στρέφεσαι τη μέρα που ένα μόνο default route μέσω ενός ISP δεν είναι πια αρκετό. Αυτό χτίζει ένα πραγματικό dual-ISP edge: δύο upstreams, λογικό έλεγχο path inbound και outbound, και failover που απλώς συμβαίνει όταν πέσει ένα session.

Cisco IOS BGP Multihoming Dual-ISP Routing CCNP

Το 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

Στησε και τα Δυο eBGP Sessions

Ένα neighbor statement ανά ISP, το prefix σου διαφημισμένο, και — μη διαπραγματεύσιμα στο edge — filters ώστε να μην κάνεις ποτέ leak ένα route που δεν πρέπει. Ένα unfiltered multihomed router μπορεί κατά λάθος να γίνει transit provider ανάμεσα σε δύο Tier-1.

IOS — δυο eBGP peers, διαφημισε το /24 μας, φιλτραρε αυστηρα
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
⚠ Παγιδα — Ενα Unfiltered Edge Γινεται Κατα Λαθος Transit

Χωρίς αυτό το 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

Outbound — Το Local-Preference Διαλεγει την Εξοδο

Το local-preference είναι το knob με το μεγαλύτερο βάρος που ελέγχεις πλήρως, και αποφασίζει από ποιον upstream φεύγει η δική σου κίνηση. Το μεγαλύτερο κερδίζει. Βάλ' το inbound από τον προτιμώμενο ISP.

IOS — προτιμησε τον ISP-A outbound μεσω local-preference
# Σήμανε ό,τι μαθεύτηκε από τον 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

Inbound — AS-Path Prepend (Μονο Νυξη Μπορεις)

Δεν ελέγχεις πώς σε φτάνει το internet — τα απομακρυσμένα δίκτυα διαλέγουν το πιο σύντομο AS-path προς το prefix σου. Για να κάνεις τον ISP-B backup για το inbound, κάνε το path μέσα από αυτόν να φαίνεται πιο μακρύ κάνοντας prepend το δικό σου AS μερικές φορές.

IOS — κανε τον ISP-B το λιγοτερο προτιμωμενο inbound path
# Διαφήμισε στον 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

Default-Only vs Full Tables, και Επαληθευση Ασφαλες να το Τρεξεις

Τα περισσότερα edges δεν χρειάζονται 950k+ internet routes. Το να παίρνεις default route από κάθε ISP κρατά τη μνήμη χαμηλά και το failover απλό· πάρε full tables μόνο όταν χρειάζεσαι βελτιστοποίηση path ανά προορισμό.

IOS — δεξου μονο default inbound, μετα ελεγχος υγειας
# Ζήτα από κάθε 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.

Βασικα Συμπερασματα

  1. Το BGP τρέχει το edge, το OSPF τρέχει το inside. Στρέφεσαι σε αυτό όταν έχεις δύο ISP και δικό σου address space και θέλεις να επιβιώσεις όταν πεθάνει ο ένας.
  2. Φίλτραρε outbound, πάντα. Ένα unfiltered multihomed edge γίνεται κατά λάθος transit ανάμεσα στους δύο ISP σου — διαφήμισε μόνο το δικό σου aggregate.
  3. Outbound = local-preference (το μεγαλύτερο κερδίζει, βάλ' το inbound από τον προτιμώμενο ISP). Ποτέ δεν φεύγει από το AS σου, άρα κατευθύνει μόνο το egress σου.
  4. Inbound = AS-path prepend — νύξη, όχι διαταγή. Κάνε το backup path να φαίνεται πιο μακρύ· χρησιμοποίησε communities του ISP όταν χρειάζεσαι πραγματικό έλεγχο.
  5. Το outbound και το inbound είναι ξεχωριστά προβλήματα. Λύσε και τα δύο ή δέξου ασύμμετρο routing.
  6. Το default-only φτάνει για τα περισσότερα edges. Πάρε full tables μόνο όταν χρειάζεσαι βελτιστοποίηση ανά προορισμό· το failover είναι αυτόματο όταν πέσει ένα session.

Δυο ISP αλλα μονο ο ενας χρησιμοποιειται στην πραξη;

Ένα floating static route δεν είναι multihoming, είναι ένα fallback με ένα single point of failure. Χτίζω BGP edges σε Cisco και MikroTik με πραγματικό έλεγχο path inbound και outbound, και failover που επανασυγκλίνει μόνο του — χωρίς χειροκίνητη παρέμβαση, χωρίς προσευχή.

Κλεισε μια Discovery Call →