DebTik Network Appliance — Οδηγός Routing Filters & Πολιτικών Δρομολόγησης
Έκδοση Λογισμικού: 1.3.11+
Routing Engine: BIRD 2 (v2.17+)
Σύνταξη: MikroTik RouterOS v7 Scripting Layer
Αντίστοιχο PDF Αρχείο: docs/RoutingFilters.pdf
1. Εισαγωγή & Αρχιτεκτονική Λειτουργίας
Τα Routing Filters στο DebTik αποτελούν τον κεντρικό μηχανισμό επιβολής πολιτικής δρομολόγησης (Routing Policy) για τα δυναμικά πρωτόκολλα BGP και OSPF. Η υλοποίηση βασίζεται στην πανίσχυρη μηχανή δρομολόγησης BIRD 2, παρέχοντας ταυτόχρονα ένα συντακτικό επίπεδο απόλυτα συμβατό με το γνώριμο περιβάλλον του MikroTik RouterOS v7.
Βασικές Αρχές Λειτουργίας
- Αλυσίδες Κανόνων (Chains): Οι κανόνες ομαδοποιούνται σε λογικές αλυσίδες (π.χ.
Internal, bgp-in, bgp-out). Κάθε αλυσίδα μεταφράζεται στο BIRD 2 σε διαδικαστική συνάρτηση function fn_filter_<Chain>() και σε αυτόνομο φίλτρο filter filter_<Chain>.
- Σειριακή Εκτέλεση (Rule Order): Οι κανόνες αξιολογούνται αυστηρά με βάση τον αριθμό σειράς (
#, π.χ. 10, 20, 30). Ο μικρότερος αριθμός προηγείται.
- Τερματικές Ενέργειες (Terminal Actions): Το
accept; ή το reject; τερματίζει ακαριαία την αξιολόγηση της αλυσίδας για τη συγκεκριμένη διαδρομή.
- Μη-τερματική Επεξεργασία (Passthrough): Επιτρέπει την τροποποίηση ιδιοτήτων (Local Preference, Communities, Prepending, Metric) χωρίς διακοπή της αλυσίδας, επιτρέποντας στη διαδρομή να ελεγχθεί από επόμενους κανόνες.
- Προεπιλεγμένη Απόρριψη (Default Deny): Αν μια διαδρομή περάσει όλους τους κανόνες μιας αλυσίδας χωρίς να ταιριάξει σε κανέναν (unmatched), απορρίπτεται αυτόματα στο τέλος (
reject;).
- Αυτόματη Προστασία Advertised Networks (v1.3.11+): Στα εξερχόμενα φίλτρα BGP (
OutFilter), τα ρητά δηλωμένα Advertised Networks (OutputNetworks / Blackhole Static) και οι επιλογές αναδιανομής (Connected/Static) προστατεύονται αυτόματα και δεν απορρίπτονται από το default reject, εκτός αν ο χρήστης ορίσει ρητό κανόνα απόρριψης.
2. Δομή Διεπαφής Χρήστη (Policy Filters Web UI)
Η πρόσβαση γίνεται από το μενού Routing → Policy Filters.
Καρτέλες (Tabs)
| Καρτέλα |
RouterOS Path |
Περιγραφή & Λειτουργία στο BIRD 2 |
| Rules |
/routing filter rule |
Εκτελέσιμοι κανόνες φιλτραρίσματος. Ορίζουν κριτήρια ελέγχου και ενέργειες (Accept/Reject/Set). |
| Community Lists |
/routing filter community-list |
Ονομαστικές λίστες BGP Communities (π.χ. 65000:100). Μεταφράζονται σε define comm_<Name> = [...]. |
| AS Lists |
/routing filter num-list |
Ονομαστικές λίστες αυτόνομων συστημάτων (ASNs / Ranges). Μεταφράζονται σε define aslist_<Name> = [...]. |
Εργαλεία Toolbar
- + New: Άνοιγμα παραθύρου δημιουργίας νέου στοιχείου ανάλογα με την ενεργή καρτέλα.
- Enable / Disable: Άμεση ενεργοποίηση ή απενεργοποίηση της επιλεγμένης γραμμής (Σημαία
A για Active, X για Disabled).
- Remove: Οριστική διαγραφή του επιλεγμένου κανόνα ή λίστας.
- Chain Filter Dropdown: Επιλογή συγκεκριμένης αλυσίδας για εστιασμένη προβολή.
- Find... (Ζωντανή Αναζήτηση): Άμεσο φιλτράρισμα γραμμών με αναζήτηση κειμένου, IP, CIDR, ή σχολίου.
- Κουμπιά ▲/▼ (Αναδιάταξη): Αλλάζουν τη σειρά εκτέλεσης (
Rule Order) μετακινώντας τον κανόνα πάνω ή κάτω.
3. Πλήρης Οδηγός Σύνταξης Σεναρίων (Script Syntax Reference)
3.1 Συνθήκες Ελέγχου (Match Conditions)
| Σύνταξη RouterOS v7 |
Σύνταξη BIRD 2 |
Λειτουργία & Παράδειγμα |
dst in A.B.C.D/M |
net ~ [ A.B.C.D/M+ ] |
Έλεγχος αν το prefix περιέχεται στο subnet (π.χ. dst in 10.0.0.0/8). |
dst in A.B.C.D/M{L,H} |
net ~ [ A.B.C.D/M{L,H} ] |
Έλεγχος subnet με εύρος μάσκας (π.χ. dst in 192.168.0.0/16{24,28}). |
dst == A.B.C.D/M ή dst = A.B.C.D/M |
net = A.B.C.D/M |
Ακριβής ταύτιση προθέματος (π.χ. dst == 0.0.0.0/0). |
dst != A.B.C.D/M |
net != A.B.C.D/M |
Αποκλεισμός συγκεκριμένης διαδρομής. |
dst-len == N / net.len = N |
net.len = N |
Ακριβές μήκος μάσκας. |
dst-len <= N / >= N |
net.len <= N / >= N |
Εύρος μήκους μάσκας (π.χ. net.len <= 24). |
protocol <name> |
source = RTS_<NAME> |
Έλεγχος πρωτοκόλλου: bgp, ospf, connected, static. |
bgp-communities includes A:B |
(A, B) ~ bgp_community |
Έλεγχος αν περιέχεται συγκεκριμένο community. |
bgp-communities in ListName |
bgp_community ~ comm_ListName |
Έλεγχος αν το community ανήκει στην Community List. |
bgp-as-path in ListName |
bgp_path.last ~ aslist_ListName |
Έλεγχος αν το γειτονικό AS ανήκει στην AS List. |
bgp-as-path "pattern" |
bgp_path ~ [= * pattern * =] |
Αντιστοίχιση διαδρομής AS με regular expressions (π.χ. "^65000_"). |
&&, \|\|, ! |
&&, \|\|, ! |
Λογικοί τελεστές: AND, OR, NOT. |
3.2 Ενέργειες & Τροποποίηση Ιδιοτήτων (Actions & Set Attributes)
| Ενέργεια RouterOS v7 |
Σύνταξη BIRD 2 |
Περιγραφή & Επίπτωση |
accept; |
accept; |
Τερματική αποδοχή. Το route γίνεται δεκτό και σταματά η αξιολόγηση. |
reject; / discard; |
reject; |
Τερματική απόρριψη. Το route κόβεται αμέσως. |
passthrough; |
(non-terminal) |
Μη-τερματική ενέργεια. Εκτελεί τα set και συνεχίζει στον επόμενο κανόνα. |
set bgp-local-pref <N>; |
bgp_local_pref = <N>; |
BGP Local Preference (default 100). Υψηλότερη τιμή = προτιμητέα έξοδος. |
set bgp-med <N>; |
bgp_med = <N>; |
Multi-Exit Discriminator. Χαμηλότερη τιμή = υπόδειξη εισόδου προς γείτονα. |
set bgp-path-prepend <N>; |
bgp_path.prepend(...); |
Προσθήκη 1-10 φορές του τοπικού AS στο AS Path (Backup uplink). |
set bgp-communities.add <A:B>; |
bgp_community.add((A,B)); |
Προσθήκη Community στη διαδρομή. |
set bgp-communities.delete <A:B>; |
bgp_community.delete((A,B)); |
Αφαίρεση Community από τη διαδρομή. |
set distance <N>; |
preference = <N>; |
Administrative Distance / Preference στον τοπικό πίνακα. |
set gw <IP>; |
gw = <IP>; |
Εξαναγκαστική αλλαγή Next-Hop IP gateway. |
4. BGP Community Lists & AS Lists
4.1 Community Lists
# Ορισμός στο /etc/bird/bird.conf:
define comm_AWMN_COMM = [ (65000, 100), (6610, 200) ];
# Χρήση σε κανόνα φίλτρου:
if (bgp_community ~ comm_AWMN_COMM) then {
bgp_local_pref = 150;
accept;
}
4.2 AS Lists
# Ορισμός στο /etc/bird/bird.conf:
define aslist_TIER1_ISPS = [ 65000..65010, 6610, 17244, 3356 ];
# Χρήση σε κανόνα φίλτρου:
if (bgp_path.last ~ aslist_TIER1_ISPS) then {
bgp_local_pref = 200;
accept;
}
5. Σύνδεση με BGP Peering (InFilter, OutFilter & Export Policy)
In-Filter (Εισερχόμενη Πολιτική)
- Εφαρμόζεται στα εισερχόμενα routes από το peer.
- Διαδρομές που εκτελούν
accept; εγκαθίστανται στον πίνακα master4.
- Unmatched διαδρομές απορρίπτονται (
reject;).
Out-Filter (Εξερχόμενη Πολιτική - v1.3.11+ Αρχιτεκτονική 3 Επιπέδων)
- Επίπεδο 1 — Κανόνες Χρήστη: Εκτελείται η συνάρτηση
fn_filter_<Chain>(). Ρητό reject; ή accept; εφαρμόζεται άμεσα.
- Επίπεδο 2 — Advertised Networks: Διαδρομές που δηλώθηκαν στα
OutputNetworks ή BGPNetworks γίνονται αυτόματα accept.
- Επίπεδο 3 — Redistribution: Αν είναι ενεργό το
Redistribute Connected ή Redistribute Static, εξάγονται αυτόματα.
- Default Deny: Οτιδήποτε άλλο απορρίπτεται (
reject;).
# Παράδειγμα παραγόμενου κώδικα BIRD 2:
protocol bgp bgp_bgp_peer_1 {
ipv4 {
import filter filter_Internal;
export filter {
fn_filter_Internal();
if proto = "bgp_nets_bgp_bgp_peer_1" then accept;
if proto = "bgp_static_nets" then accept;
if source = RTS_DEVICE then accept;
if source ~ [ RTS_STATIC, RTS_INHERIT ] then accept;
reject;
};
};
}
6. Πρακτικές Συνταγές (Recipes)
Συνταγή 1: eBGP Inbound ISP Filter
# Chain: isp-in
if (dst == 0.0.0.0/0) { accept; }
if (dst in 10.0.0.0/8 || dst in 172.16.0.0/12 || dst in 192.168.0.0/16 || dst in 127.0.0.0/8) { reject; }
if (net.len > 24) { reject; }
if (true) { set bgp-local-pref 100; accept; }
Συνταγή 2: Active / Backup Uplink με AS Prepending
# ISP-A Inbound (isp-a-in):
if (true) { set bgp-local-pref 200; accept; }
# ISP-B Inbound (isp-b-in):
if (true) { set bgp-local-pref 100; accept; }
# ISP-B Outbound (isp-b-out):
if (dst in 192.168.130.0/24 || dst in 192.168.131.0/24) {
set bgp-path-prepend 2;
accept;
}
Συνταγή 3: Χρήση Passthrough
# Chain: customer-out | Rule 10
if (dst in 100.64.0.0/16) {
set bgp-communities.add 65000:500;
passthrough;
}
# Rule 20
if (dst in 100.64.64.0/24) { accept; }
7. Διαγνωστικά BIRD CLI (birdc)
| Εντολή CLI |
Περιγραφή & Χρησιμότητα |
birdc show protocols |
Κατάσταση όλων των πρωτοκόλλων (BGP, OSPF, Static) και uptime. |
birdc show protocols all <peer> |
Στατιστικά φίλτρων: Import updates, rejected, filtered, accepted & Export updates. |
birdc show route export <peer> |
Εμφανίζει ποιες διαδρομές ανακοινώνονται αυτή τη στιγμή προς το peer. |
birdc show route import <peer> |
Εμφανίζει τις διαδρομές που εισήχθησαν από το peer. |
birdc show route filtered <peer> |
Εμφανίζει διαδρομές που απορρίφθηκαν από την πολιτική. |
birdc restart <peer> |
Επανεκκινεί άμεσα το session για στιγμιαία επαναξιολόγηση των φίλτρων. |