Φιλτράρετε πριν προτιμήσετε. Μια πολιτική BGP edge που αποτυγχάνει με ασφάλεια
Πώς δομείτε ένα multi-homed BGP edge: πρώτα η υγιεινή εισόδου, μετά ένα σχήμα local-preference σε βαθμίδες, πειθαρχία εξόδου και anti-spoofing. Με παραδείγματα.

Το να είστε multi-homed δεν είναι το ίδιο με το να είστε ανθεκτικοί. Δύο carriers transit και μια θύρα σε exchange σάς δίνουν επιλογές. Η πολιτική δρομολόγησης αποφασίζει αν αυτές οι επιλογές σας κάνουν ταχύτερους και ασφαλέστερους, ή απλώς δίνουν σε μια κακή διαδρομή περισσότερους τρόπους να μπει. Έτσι σκεφτόμαστε μια πολιτική edge, με τη σειρά που μια διαδρομή τη συναντά πραγματικά.
Το πρόβλημα που έχει κάθε multi-homed δίκτυο
Τη στιγμή που παίρνετε πλήρεις πίνακες από περισσότερους από έναν carriers, ο router σας επιλέγει ανάμεσα σε διαδρομές όλη μέρα, κάθε μέρα, και επιλέγει με τους κανόνες που γράψατε. Αν δεν γράψατε κανέναν, πέφτει στα προεπιλεγμένα tie breakers του BGP: το συντομότερο AS path, και μετά μια αλυσίδα λεπτομερειών που δεν έχουν καμία σχέση με latency, κόστος ή τους πελάτες σας.
Η συνηθισμένη συντόμευση είναι να κολλήσετε πρώτα προτίμηση στα sessions («προτίμησε τον carrier Α, είναι φθηνότερος») και να προσθέσετε φιλτράρισμα αργότερα, αν ποτέ. Αυτή η σειρά είναι ανάποδη. Η προτίμηση είναι απόφαση για καλές διαδρομές. Αν τα σκουπίδια δεν έχουν αφαιρεθεί πριν ληφθεί αυτή η απόφαση, κατατάσσετε προσεκτικά σκουπίδια.
Στάδιο πρώτο: υγιεινή, πριν από κάθε απόφαση
Κάθε εισερχόμενο session, transit ή peer, περνά από την ίδια πολιτική υγιεινής πριν οτιδήποτε άλλο αγγίξει τη διαδρομή. Η λίστα είναι σύντομη και βαρετή, που είναι και το ζητούμενο:
- Bogons. Ιδιωτικός, δεσμευμένος, τεκμηρίωσης και μη εκχωρημένος χώρος δεν έχει καμία δουλειά να φτάνει από το internet.
- Τα δικά σας prefixes. Μια διαδρομή προς τον δικό σας χώρο που μαθαίνεται από έξω είναι είτε loop είτε hijack. Απορρίψτε την.
- Το default route. Εκτός αν ζητήσατε default από έναν carrier, δεν θέλετε να εμφανιστεί επειδή κάποιος upstream έκανε λάθος.
- Πολύ συγκεκριμένα. Οτιδήποτε μακρύτερο από /24 για IPv4 (και /48 για IPv6) δεν είναι καθολικά δρομολογήσιμο κατά σύμβαση. Αν το δεχτείτε, προσκαλείτε more-specific hijacks.
- Παράλογα AS paths. Paths με ιδιωτικά ASN μέσα τους, ή paths πολύ μακρύτερα απ' όσο χρειάζεται οποιαδήποτε πραγματική διαδρομή.
Σε γενικούς όρους route-policy Cisco IOS-XR, ο σκελετός μοιάζει έτσι:
route-policy TRANSIT-IN
if destination in BOGONS-V4 or destination in OUR-PREFIXES then
drop
endif
if destination in (0.0.0.0/0) then
drop
endif
if destination in (0.0.0.0/0 ge 25) then
drop
endif
if as-path in PRIVATE-ASNS then
drop
endif
apply SET-PREFERENCE
end-policy
Προσέξτε ότι η λογική προτίμησης εφαρμόζεται στο τέλος, ως ξεχωριστή πολιτική. Η υγιεινή είναι πανομοιότυπη σε κάθε session. Η προτίμηση διαφέρει ανά session. Το να τις κρατάτε χωριστά σημαίνει ότι μια αλλαγή στην καθοδήγηση δεν μπορεί ποτέ να αποδυναμώσει κατά λάθος το φιλτράρισμα.
Στάδιο δεύτερο: προτίμηση σε βαθμίδες
Μόλις μείνουν μόνο λογικές διαδρομές, αποφασίστε ποια διαδρομή κερδίζει. Χρησιμοποιούμε βαθμίδες local preference αντί για έναν αριθμό ανά carrier, γιατί οι βαθμίδες περιγράφουν πρόθεση:
- Το άμεσο peering κερδίζει. Μια διαδρομή που μαθαίνεται από το ίδιο το δίκτυο, σε exchange ή μέσω διμερούς session, είναι η συντομότερη διαδρομή που μπορείτε να έχετε.
- Οι δικοί πελάτες ενός carrier έρχονται μετά. Αν ένας carrier transit σημαίνει με community τις διαδρομές που μαθαίνει από τους δικούς του πελάτες, αυτές οι διαδρομές μένουν στο δίκτυο εκείνου του carrier από άκρη σε άκρη.
- Όλα τα υπόλοιπα πηγαίνουν μέσω του transit που μετράει καλύτερα για τον όγκο της κίνησης.
Ένας δεύτερος carrier κρατιέται «ζεστός» ως εφεδρεία: πλήρης πίνακας αποδεκτός, χαμηλότερη προτίμηση, έτοιμος τη στιγμή που ο πρώτος αποσύρεται.
Ένας ακόμα κανόνας αποδίδει αθόρυβα: ποτέ μη χρησιμοποιείτε έναν carrier transit για να φτάσετε τους πελάτες άλλου carrier όταν ο δεύτερος carrier είναι συνδεδεμένος μαζί σας άμεσα. Η αντιστοίχιση στο γειτονικό AS μέσα στο path και η μείωση της προτίμησης σταματά την κίνηση από το να κάνει μια ακριβή παράκαμψη μέσω τρίτου.
Στάδιο τρίτο: πειθαρχία εξόδου
Η πλευρά της εξόδου είναι απλούστερη και πιο σημαντική. Ανακοινώστε ακριβώς τα prefixes που προέρχονται από εσάς, και τίποτα άλλο:
prefix-set OUR-PREFIXES-V4
192.0.2.0/24,
198.51.100.0/24
end-set
route-policy TRANSIT-OUT
if destination in OUR-PREFIXES-V4 then
pass
else
drop
endif
end-policy
Μια ρητή allow list εξόδου σημαίνει ότι ένα λάθος αλλού στο δίκτυό σας (ένα static που αναδιανεμήθηκε, μια διαδρομή πελάτη που έπρεπε να μείνει εσωτερική) δεν μπορεί να σας μετατρέψει σε διαδρομή transit για την κίνηση κάποιου άλλου. Η διαμόρφωση της διαδρομής επιστροφής, όπως το AS-path prepending προς έναν carrier που θέλετε να χρησιμοποιείται λιγότερο στην είσοδο, γίνεται μέσα σε αυτή την πολιτική, ποτέ αντί γι' αυτήν.
Στάδιο τέταρτο: μην παράγετε πλαστογραφημένη κίνηση
Η πολιτική δρομολόγησης ελέγχει τι πιστεύετε. Το anti-spoofing ελέγχει τι στέλνετε. Το BCP38 λέει ότι ένα δίκτυο δεν πρέπει να προωθεί πακέτα των οποίων η διεύθυνση πηγής δεν θα μπορούσε νόμιμα να προέρχεται από πίσω από το interface στο οποίο έφτασαν. Σε interfaces προς το internet και προς πελάτες, αυτό σημαίνει unicast reverse path forwarding σε strict mode όπου η τοπολογία το επιτρέπει, ή ρητά φίλτρα διεύθυνσης πηγής όπου δεν το επιτρέπει. Είναι ένας από τους λίγους ελέγχους που προστατεύουν το υπόλοιπο internet από εσάς, και είναι η διαφορά ανάμεσα στο να είναι ένας παραβιασμένος server στο δίκτυό σας δικό σας πρόβλημα και στο να είναι πρόβλημα όλων.
Ελέγχοντας το δικό σας edge
Αν λειτουργείτε το δικό σας edge, ή θέλετε να κάνετε στον πάροχό σας τις σωστές ερωτήσεις, να μια σύντομη λίστα ελέγχου:
- Εφαρμόζεται η υγιεινή πανομοιότυπα σε κάθε εισερχόμενο session, περιλαμβανομένων των route servers σε exchange και των «έμπιστων» peers;
- Μπορείτε να δείξετε ότι ένα /25 ή το δικό σας prefix που σας στέλνει ένας γείτονας απορρίπτεται; Δοκιμάστε το σε lab, ή διαβάστε την πολιτική γραμμή προς γραμμή.
- Είναι η πολιτική εξόδου σας ρητή allow list, ή «όλα εκτός από»;
- Ξέρετε μέσω ποιου carrier φεύγει η κίνησή σας προς τους δέκα κορυφαίους προορισμούς, και γιατί; Ένα traceroute από το edge συν
show bgp <prefix>το απαντά σε λεπτά. - Είναι το φιλτράρισμα BCP38 δεμένο σε κάθε interface προς το internet, και έχετε δοκιμή που το αποδεικνύει;
- Μετράτε το δίκτυό σας από έξω; Μια ανεξάρτητη πλατφόρμα όπως το RIPE Atlas δείχνει πώς σας φτάνει πραγματικά το internet, που συχνά δεν είναι όπως νομίζει ο router σας.
Γιατί μπαίνουμε στον κόπο
Καθένα από αυτά τα βήματα είναι αόρατο σε μια καλή μέρα. Τη μέρα που ένας carrier θα διαρρεύσει έναν πίνακα, θα κατεβάσει ένα κύκλωμα για συντήρηση, ή ένας γείτονας θα ανακοινώσει κάτι που δεν έπρεπε, αυτά αποφασίζουν αν η κίνησή σας θα το προσέξει. Λειτουργούμε τα δικά μας αυτόνομα συστήματα με αυτή τη δομή σε routers Cisco ASR 9000 και Juniper MX, με συνεχή μέτρηση από έξω, γιατί είναι ο μόνος τρόπος που ξέρουμε για να συμπεριφέρεται προβλέψιμα ένα multi-homed δίκτυο.
Αν θέλετε ένα δεύτερο ζευγάρι μάτια στη δική σας πολιτική edge, ή μια πλατφόρμα που κάθεται πίσω από μία χτισμένη έτσι, θα χαρούμε να μιλήσουμε.
Related
Σχετικά: Το δικό μας δίκτυο: δύο ASN, πολλοί carriers, peering · Παρακολούθηση δικτύου και τεκμήρια · IPv6, native και dual-stack
Δημοσιεύθηκε 5 Αυγούστου 2026.
Όλες οι σημειώσεις