Both sides previous revision
Previous revision
Next revision
|
Previous revision
|
start [2022/05/23 11:14] alex [AWMN BGP filter] |
start [2023/12/09 14:08] (current) 10.2.19.13 [AWMN BGP filter] |
===== MikroTik v7 C-class BGP aggregate ===== | ===== MikroTik v7 C-class BGP aggregate ===== |
| |
Στο MikroTik v7, το **C-class** ενός κόμβου **ΔΕΝ** ανακοινώνεται αυτόματα, όταν το έχουμε χωρίσει σε μικρότερα **subnets**. Για να ξεπεραστεί το συγκεκριμένο πρόβλημα, θα πρέπει να ακολουθηθούν τα παρακάτω βήματα: | Στο MikroTik v7, το **C-class** ενός κόμβου **ΔΕΝ** ανακοινώνεται αυτόματα, όταν το έχουμε χωρίσει σε μικρότερα **subnets**. Η σχετική αναφορά της Mikrotik βρίσκεται [[https://help.mikrotik.com/docs/display/ROS/Moving+from+ROSv6+to+v7+with+examples#MovingfromROSv6tov7withexamples-Networks|εδώ]]. |
| |
| Για να ξεπεραστεί το συγκεκριμένο πρόβλημα, θα πρέπει να ακολουθηθούν τα παρακάτω βήματα: |
| |
- Περνάμε ένα στατικό route του **C-class** δικτύου μας σαν **blackhole** | - Περνάμε ένα στατικό route του **C-class** δικτύου μας σαν **blackhole** |
- Ενεργοποιούμε το **static** στο BGP, Output Redistribute | - Ενεργοποιούμε το **static** στο BGP, Output Redistribute |
- Βεβαιώνουμε πως είναι ενεργοποιημένα (στα εξωτερικά λινκ) σε in/out το προτεινόμενο **AWMN** φίλτρο | - Βεβαιώνουμε πως είναι ενεργοποιημένα, στα εξωτερικά **ΜΟΝΟ** λινκ (**eBGP**), σε in/out το προτεινόμενο **AWMN** φίλτρο |
| |
Παράδειγμα: έστω πως το **C-class** δίκτυό μας είναι το: 10.30.30.0/24 | Παράδειγμα: έστω πως το **C-class** δίκτυό μας είναι το: 10.30.30.0/24 |
IP --> Routes --> προσθέτουμε το --> Dst. Address 10.30.30.0/24 & ενεργοποιούμε ΜΟΝΟ το Blackhole | IP --> Routes --> προσθέτουμε το --> Dst. Address 10.30.30.0/24 & ενεργοποιούμε ΜΟΝΟ το Blackhole |
| |
οι αντίστοιχες εντολές από τερματικό/ssh είναι: | Υπάρχουν δυο ειδών **BGP** συνδέσεις. Η σύνδεση με απομακρυσμένο κόμβο λέγεται **eBGP**. Η σύνδεση με εσωτερικό router στο Local Area Network (LAN) λέγεται **iBGP**. |
| |
/routing/bgp/connection/set output.redistribute=static numbers=0 | Το προτεινόμενο **AWMN** in/out φίλτρο μπαίνει **ΜΟΝΟ** στις **eBGP** --> στις εξωτερικές δηλαδή συνδέσεις/λινκ του κόμβου. |
| |
| στις μεταξύ **iBGP** εσωτερικές συνδέσεις (LAN) του κόμβου, δεν περνάμε **ΚΑΝΕΝΑ** φίλτρο. |
| |
| οι σχετικές ρυθμίσεις από τερματικό/ssh είναι: |
| |
| /routing/bgp/connection/set output.redistribute=static,bgp hold-time=30s keepalive-time=10s numbers=0 |
| |
για κάθε **BGP** σύνδεση, θα πρέπει να ορίσουμε το output.redistribute=static αλλάζοντας το numbers= | για κάθε **BGP** σύνδεση, θα πρέπει να ορίσουμε τα παραπάνω αλλάζοντας το numbers= |
| |
για παράδειγμα, αν έχουμε ένα router με **πέντε** (**5**) BGP συνδέσεις, θα πρέπει να δώσουμε την εντολή στην παρακάτω μορφή: | για παράδειγμα, αν έχουμε ένα router με **πέντε** (**5**) BGP συνδέσεις, θα πρέπει να δώσουμε την εντολή στην παρακάτω μορφή: |
| |
/routing/bgp/connection/set output.redistribute=static numbers=0 | /routing/bgp/connection/set output.redistribute=static,bgp hold-time=30s keepalive-time=10s numbers=0 |
/routing/bgp/connection/set output.redistribute=static numbers=1 | /routing/bgp/connection/set output.redistribute=static,bgp hold-time=30s keepalive-time=10s numbers=1 |
/routing/bgp/connection/set output.redistribute=static numbers=2 | /routing/bgp/connection/set output.redistribute=static,bgp hold-time=30s keepalive-time=10s numbers=2 |
/routing/bgp/connection/set output.redistribute=static numbers=3 | /routing/bgp/connection/set output.redistribute=static,bgp hold-time=30s keepalive-time=10s numbers=3 |
/routing/bgp/connection/set output.redistribute=static numbers=4 | /routing/bgp/connection/set output.redistribute=static,bgp hold-time=30s keepalive-time=10s numbers=4 |
| |
και η δεύτερη εντολή: | στις παραπάνω εντολές προσθέτουμε αναλόγως τον τύπο σύνδεσης: |
| |
| role=ebgp |
| |
| role=ibgp |
| |
| επιπλέον πρέπει να ορίσουμε (στις παραπάνω εντολές), για κάθε σύνδεση, τα σχετικά παρακάτω πεδία: |
| |
| remote.address=10.30.30.254/32 |
| local.address=10.30.30.253 |
| |
| σαν router id προτιμούμε (αν υπάρχει) την lan/ethernet IP του router: |
| |
| id=10.30.30.1 |
| |
| και η τελική εντολή: |
| |
/ip/route/add blackhole dst-address=10.30.30.0/24 | /ip/route/add blackhole dst-address=10.30.30.0/24 |
*** * Προσοχή ** ! στο τελευταίο βήμα θα πρέπει πάντα να βάζουμε το δίκτυό μας με το **/24** στο τέλος, ανεξάρτητα με το πως το έχουμε σπάσει σε μικρότερα | *** * Προσοχή ** ! στο τελευταίο βήμα θα πρέπει πάντα να βάζουμε το δίκτυό μας με το **/24** στο τέλος, ανεξάρτητα με το πως το έχουμε σπάσει σε μικρότερα |
| |
Τέλος, το **AWMN** in/out φίλτρο μπαίνει **ΜΟΝΟ** στο BGP με τις εξωτερικές συνδέσεις/λινκ (**eBGP**). στις εσωτερικές συνδέσεις (LAN) του κόμβου (**iBGP**) στις **BGP** συνδέσεις μεταξύ τους δεν περνάμε ΚΑΝΕΝΑ φίλτρο. | Σε περιπτώσεις προβλημάτων ασυμμετρίας στο εσωτερικό ενός κόμβου, βοηθάει στο μεταξύ **iBGP** τοπικών router, να ενεργοποιηθεί η επιλογή: |
| |
| nexthop-choice=force-self |
| |
//Ευχαριστώ τον Δημήτρη (**dgi**) για την πρόσβαση σε MikroTik v7 για τις σχετικές δοκιμές// | //Ευχαριστώ τον Δημήτρη (**dgi**) για την πρόσβαση σε MikroTik v7 για τις σχετικές δοκιμές// |
===== MikroTik terminal setup for SupperQuagga ===== | ===== MikroTik terminal setup for SupperQuagga ===== |
| |
/routing bgp peer add remote-as=22128 remote-address=10.2.146.10 multihop=yes passive=yes name=spq | /routing bgp peer add remote-as=22128 remote-address=10.2.146.10 multihop=yes passive=yes name=spq hold-time=180s keepalive-time=60s |
| |
/routing bgp peer print | /routing bgp peer print |
| |
Παράδειγμα: κόμβος 3298, δίκτυο 10.2.19.0/24. as=3298 local.address=10.2.19.65 | Παράδειγμα: κόμβος 3298, δίκτυο 10.2.19.0/24. as=3298 local.address=10.2.19.65 |
| |
| **! ! !** --> σαν **router id** προτιμούμε (αν υπάρχει) την lan/ethernet IP του router |
==== MikroTik BGP log filter ==== | ==== MikroTik BGP log filter ==== |
Σε περίπτωση που δεν θέλουμε να γεμίζουν τα **logs** με **bgp** μυνήματα από τη SupperQuagga, οι παρακάτω εντολές φιλτράρουν τα συγκεκριμένα μυνήματα από τα log | Σε περίπτωση που δεν θέλουμε να γεμίζουν τα **logs** με **bgp** μυνήματα από τη SupperQuagga, οι παρακάτω εντολές φιλτράρουν τα συγκεκριμένα μυνήματα από τα log |
αν καταφέρουμε να χαρτογραφήσουμε πιο ορθά το BGP θα έχουμε και μια πιο έγκυρη εικόνα με τους πραγματικούς κόμβους ραχοκοκαλιάς του AWMN | αν καταφέρουμε να χαρτογραφήσουμε πιο ορθά το BGP θα έχουμε και μια πιο έγκυρη εικόνα με τους πραγματικούς κόμβους ραχοκοκαλιάς του AWMN |
| |
* Μια πολύ ενδιαφέρουσα και χρήσιμη υπηρεσία, που βασίζεται στα δεδομένα της Supper Quagga, ζωντανής απεικόνισης και χαρτογράφησης όλων των Πανελλαδικών Ασύρματων κοινοτήτων που έχουν διασυνδεθεί μεταξύ τους είναι το [[http://bgpmap.awmn.net/|BGPmap]] που με πολύ όρεξη και ώρες εργασίας έφτιαξε συντηρεί ναι αναπτύσσει ο κόμβος #9895 geolos τον οποίο ευχαριστώ θερμά για την υποστήριξη και προσφορά του στην κοινότητά μας | * Μια πολύ ενδιαφέρουσα και χρήσιμη υπηρεσία, που βασίζεται στα δεδομένα της Supper Quagga, ζωντανής απεικόνισης και χαρτογράφησης όλων των Πανελλαδικών Ασύρματων κοινοτήτων που έχουν διασυνδεθεί μεταξύ τους είναι το [[http://bgpmap.ozo.com/|BGPmap]] που με πολύ όρεξη και ώρες εργασίας έφτιαξε συντηρεί ναι αναπτύσσει ο κόμβος #9895 geolos τον οποίο ευχαριστώ θερμά για την υποστήριξη και προσφορά του στην κοινότητά μας |
===== Μερικές οδηγίες χρήσης του εργαλείου ===== | ===== Μερικές οδηγίες χρήσης του εργαλείου ===== |
| |
σε αυτές τις εσωτερικές **iBGP** συνδέσεις ΔΕΝ θα πρέπει να βάζουμε **κανένα** φίλτρο, ούτε το **awmn BGP** φίλτρο | σε αυτές τις εσωτερικές **iBGP** συνδέσεις ΔΕΝ θα πρέπει να βάζουμε **κανένα** φίλτρο, ούτε το **awmn BGP** φίλτρο |
| |
επιπλέον, καλό είναι να ενεργοποιούμε στο **BGP** την επιλογή **Redistribute connected** | επιπλέον, καλό είναι να ενεργοποιούμε στο **BGP** την επιλογή **Redistribute connected** & **client-to-client-reflection** |
| |
==== iBGP problem explained ==== | ==== iBGP problem explained ==== |
το πρόβλημα με το **iBGP** έχει να κάνει με το σπάσιμο του τοπικού **C-class** σε μικρότερα υποδίκτυα τα οποία χρησιμοποιούμε για τις **WAN** συνδέσεις (**BB** link). σε αυτές τις περιπτώσεις, όταν έχουμε πάνω από εναν κεντρικό **BGP** speaker στον κόμβο (**LAN**), συνήθως οι άλλοι **BGP** routers αγνοούν την ύπαρξη του τοπικού **wan/BB** υποδικτύου. παλιά, αυτό αντιμετωπίζονταν με την παράλληλη χρήση ενός **IGP** routing όπως το **OSPF**, **RIP** ή & **static** routes. πλέον, οι σύγχρονες **BGP** εκδόσεις, έχουν την δυνατότητα να ανακοινώνουν αυτά τα εσωτερικά υποδίκτυα, αρκεί να μην φιλτράρεται η συγκεκριμένη πληροφορία. οπότε σε αυτές τις περιπτώσεις, δεν θα πρέπει να εισάγουμε **κανένα** φίλτρο μεταξύ των τοπικών **BGP** συνδέσεων στο **LAN** ενός κόμβου. | το πρόβλημα με το **iBGP** έχει να κάνει με το σπάσιμο του τοπικού **C-class** σε μικρότερα υποδίκτυα τα οποία χρησιμοποιούμε για τις **WAN** συνδέσεις (**BB** link). σε αυτές τις περιπτώσεις, όταν έχουμε πάνω από εναν κεντρικό **BGP** speaker στον κόμβο (**LAN**), συνήθως οι άλλοι **BGP** routers αγνοούν την ύπαρξη του τοπικού **wan/BB** υποδικτύου. παλιά, αυτό αντιμετωπίζονταν με την παράλληλη χρήση ενός **IGP** routing όπως το **OSPF**, **RIP** ή & **static** routes. πλέον, οι σύγχρονες **BGP** εκδόσεις, έχουν την δυνατότητα να ανακοινώνουν αυτά τα εσωτερικά υποδίκτυα, αρκεί να μην φιλτράρεται η συγκεκριμένη πληροφορία. οπότε σε αυτές τις περιπτώσεις, δεν θα πρέπει να εισάγουμε **κανένα** φίλτρο μεταξύ των τοπικών **BGP** συνδέσεων στο **LAN** ενός κόμβου. |
| |
| επιπλέον, στους **router** πάνω στο **LAN** μεταξύ τους, ορίζουμε το **next-hop** σαν **force-self** & ΟΧΙ **default** |
| |
το **awmn BGP** φίλτρο το χρησιμοποιούμε **ΜΟΝΟ** σε **eBGP** συνδέσεις, αυτές με άλλους απομακρυσμένους κόμβους, ώστε να μην ανακοινώνουμε στο γενικό **BGP** υποδίκτυα μικρότερα του **C-class**, και γενικά να θωρακίζουμε/φιλτράρουμε την πληροφορία του **BGP** από λανθασμένες ρυθμίσεις ή κακόβουλες ενέργειες. | το **awmn BGP** φίλτρο το χρησιμοποιούμε **ΜΟΝΟ** σε **eBGP** συνδέσεις, αυτές με άλλους απομακρυσμένους κόμβους, ώστε να μην ανακοινώνουμε στο γενικό **BGP** υποδίκτυα μικρότερα του **C-class**, και γενικά να θωρακίζουμε/φιλτράρουμε την πληροφορία του **BGP** από λανθασμένες ρυθμίσεις ή κακόβουλες ενέργειες. |
/routing filter rule add chain=awmn rule="if (dst in 10.0.0.0/8 && dst-len==24 && bgp-path-len<27) { accept; }" | /routing filter rule add chain=awmn rule="if (dst in 10.0.0.0/8 && dst-len==24 && bgp-path-len<27) { accept; }" |
/routing filter rule add chain=awmn rule="if (dst in 10.0.0.0/15 && dst-len==32 && bgp-path-len<27) { accept; }" | /routing filter rule add chain=awmn rule="if (dst in 10.0.0.0/15 && dst-len==32 && bgp-path-len<27) { accept; }" |
| |
| * **Ενημέρωση 9 Δεκέμβρη 2023** * |
| |
| * * * {!} * * * Οι παραπάνω αρχικοί κανόνες δεν δείχνουν να δουλεύουν για την **v7** . Οι παρακάτω **ενημερωμένοι** κανόνες δοκιμάστηκαν και λειτουργούν. θα πρέπει να γίνει ένας διαχωρισμός σε δυο κανόνες, **awmn-in** & **awmn-out**. Επιπλέον αφαιρούμε το φίλτρο **anycast**, μια υπηρεσία που ήταν πειραματική στις μέρες του 2005-2009 ενώ ποτέ δεν δούλεψε ικανοποιητικά. Σήμερα, εν έτει 2023, η αποδοχή της στα φίλτρα αποτελεί κενό ασφάλειας, οπότε και αφαιρείται. |
| |
| /routing filter rule add chain=awmn-in rule="if (dst in 10.0.0.0/8 && dst-len==24 && bgp-path-len<27) { accept; }" |
| /routing filter rule add chain=awmn-out rule="if (dst in 10.0.0.0/8 && dst-len==24) { accept; }" |
| |
Στην τοποθεσία Routing-->BGP-->Peers, σε κάθε **ασυρματική** σύνδεση, **όχι** με τους τοπικούς μας άλλους router, επιλέγουμε για φίλτρο IN και OUT την επιλογή awmn. | Στην τοποθεσία Routing-->BGP-->Peers, σε κάθε **ασυρματική** σύνδεση, **όχι** με τους τοπικούς μας άλλους router, επιλέγουμε για φίλτρο IN και OUT την επιλογή awmn. |
===== Mikrotik DNS Setup ===== | ===== Mikrotik DNS Setup ===== |
| |
/ip dns | /ip dns set allow-remote-requests=yes |
set allow-remote-requests=yes | |
| Το παρακάτω, στέλνει **ΟΛΕΣ** τις **Internet** διευθύνσεις στους Internet servers & **ΟΛΕΣ** τις **AWMN** διευθύνσεις στον **wind.awmn** server |
| |
| /ip dns set servers=8.8.8.8,8.8.4.4,1.1.1.1 |
| /ip dns static add forward-to=10.19.143.12 regexp=".*\\.awmn\$" |
| |
| Προσθέτουμε τα ονόματα του κόμβου μας (για παράδειγμα, κόμβος soleo 10.38.128.0/24) ως εξής: |
| |
/ip dns static | /ip dns static add name=router.soleo.awmn address=10.38.128.5 |
add address=10.38.128.5 name=ixp4xx.soleo.awmn. | |
add address=10.38.128.249 name=gw-makofo.soleo.awmn | για τις wifi (BB link) συνδέσεις, ακολουθούμε το παρακάτω πρότυπο (**gw-**όνομα-απέναντι-κόμβου)): |
add address=10.38.128.250 name=gw-soleo.makofo.awmn | |
| /ip dns static add name=gw-makofo.soleo.awmn address=10.38.128.249 |
| /ip dns static add name=gw-soleo.makofo.awmn address=10.38.128.250 |
| |
| **Προσοχή**, είναι **σημαντικό** να υπάρχει **ΜΟΝΟ** μια αντιστοιχία **IP** address σε όνομα ( name= ) ώστε να γίνεται σωστά η επίλυση της **IP** σε όνομα προκειμένου να **ΜΗΝ** δημιουργείται πρόβλημα στις περισσότερες εφαρμογές που πλέον το απαιτούν για λόγους ασφαλείας |
| |
| Αν θέλουμε να δώσουμε **επιπλέον** ονομασίες σε μια **IP**, ο σωστός & προτεινόμενος τρόπος είναι ο πιο κάτω: |
| |
| /ip dns static add name=alias.soleo.awmn type=CNAME cname=router.soleo.awmn |
| |
| με τον παραπάνω τρόπο, όταν δίνουμε (για επίλυση σε όνομα) μια **IP**, για παράδειγμα: **10.38.128.5**, η απάντηση θα είναι **ΠΑΝΤΑ** μια & μοναδική (όπως απαιτείται κατά τα πρότυπα) --> **router.soleo.awmn** |
| |
| όλες οι επιπλέον ονομασίες ορισμένες σαν **CNAME** θα αντιστοιχούν στον **router.soleo.awmn** δηλαδή --> **10.38.128.5** |
| |
===== Asymmetric routing & UDP ===== | ===== Asymmetric routing & UDP ===== |
| |
πατώντας σε κάθε AS κόμβο, η πλοήγηση μεταφέρεται αυτόματα στον συγκεκριμένο κόμβο για περαιτέρω εξέταση | πατώντας σε κάθε AS κόμβο, η πλοήγηση μεταφέρεται αυτόματα στον συγκεκριμένο κόμβο για περαιτέρω εξέταση |
| |