Small-scale network infrastructure & Free Software 2η τεχνική συνάντηση GRNOG Απόλλων Οικονομοπόπουλος Skroutz ΑΕ apollon@skroutzgr 27 Νοεμβρίου 2015 1 / 17
Λίγα λόγια για την υποδομή μας 3 τοποθεσίες Primary site 2 racks 42 physical servers 120 virtual machines Όλη η κίνηση του skroutzgr δρομολογείται εδώ DR site 1 rack 18 physical servers? virtual machines Γραφεία Office IT infrastructure Development/staging infrastructure 2 / 17
Δικτυακή υποδομή Primary site 2 routers (Dell R210-II/HP DL-120 Gen9) 4 x Juniper EX4200, stacked Uplinks Dual MN uplinks Single Cogent uplink GbE GR-IX port Κύκλωμα 1Gbps προς το DR site Κύκλωμα 100 Mbps προς τα γραφεία DR site 1 router 1 x Juniper EX4200 Single MN uplink Κύκλωμα 100 Mbps προς τα γραφεία AS202042 (1856760/22, 2a03:e40::/32) Traffic figures 400 Mbps routed traffic 2k HTTP req/s 3 / 17
Routing FOSS stack Debian ως βασικό λειτουργικό BIRD (BGP & OSPF) pimd (PIM-SM/SSM IPv4) mrd6 (PIM-SM IPv6) iptables (stateful firewall) conntrackd (stateful firewall synchronization) keepalived (VRRP implementation) softflowd & nfacctd (NetFlow collection) lldpd (LLDP implementation) 4 / 17
BIRD Internet Routing Daemon Υποστήριξη πολλαπλών routing protocols BGP (+ graceful restart, route reflector) OSPF (v2 & v3) BFD (για BGP peerings και OSPF adjacencies) RIP Structured configuration language Memory-efficient Πολλαπλά routing tables Αναπτύσσεται από το CZNIC 5 / 17
BIRD Internet Routing Daemon: design Ό,τι κάνει generate/consume routes είναι πρωτόκολλο BGP, OSPF, RIP Kernel Device/Direct Static Κάθε πρωτόκολλο συνδέεται σε ένα routing table του BIRD import/export filters (routes προς/από το routing table) Τα routing tables συνδέονται μεταξύ τους μέσω του pipe protocol Φιλτράρισμα των routes ανάμεσα στα tables Μεταβολή των route attributes για διαφορετικό route selection στα διαφορετικά tables Παραδείγματα εφαρμογών: Best-external route propagation Policy routing (πολλαπλά kernel protocols συνδέουν kernel routing tables με BIRD routing tables) 6 / 17
BIRD Internet Routing Daemon: configuration Structured configuration σε flat files (+directory/file inclusion) Automation-friendly, κομμάτια του configuration τα διαχειρίζεται το puppet, άλλα με το χέρι Protocol templates + named functions/filters reusable configuration Ιδιαίτερα χρήσιμο για IXP peerings protocol bgp bird2 { description Peering with bird2 ; local as 65534; neighbor 1856771 as 202042; multihop; export none; import where bgp_pathlast = 202042; } 7 / 17
Keepalived VRRP implementation Configurable master preemption delay SMTP alerts LVS support Υποστηρίζει check scripts Τα check scripts μπορούν να επηρεάσουν το VRRP priority 8 / 17
pimd PIM-SM/SSM implementation Χρησιμοποιεί το multicast forwarding του ίδιου του kernel (ip mroute ls) 9 / 17
conntrackd Linux kernel connection tracking synchronization Επιτρέπει τη δημιουργία HA stateful firewall στο border Τα connection tracking entries γίνονται replicate μέσω unicast ή multicast UDP Τα replicated connection tracking entries μπορούν να γίνουν άμεσα commit στον kernel ή οχι (ταχύτητα) 10 / 17
ferm Wrapper γύρω από τα iptables και ip6tables Απλουστευμένη, structured γλώσσα Configuration σε απλά αρχεία, υποστηρίζει file/directory inclusion Dual-family support, για δημιουργία IPv4 & IPv6 rulesets από το ίδιο source Safe rollback σε περίπτωση συντακτικών ή άλλων σφαλμάτων 11 / 17
Φτιάχνοντας ένα λειτουργικό σύνολο Ο BIRD χρησιμοποιείται για το {e,i}gbp και το OSPF O Keepalived διαχειρίζεται τις gateway IPs των εσωτερικών LANs Χρησιμοποιούμε dedicated interface για τα VRRP advertisements Check scripts που ελέγχουν το μέγεθος των IPv4 και IPv6 RIBs, καθώς και το process status του BIRD Επηρεάζουν το VRRP priority Αν για κάποιο λόγο ο master router έχει σαφώς λιγότερα RIB entries από τον backup, γίνεται demote On failover, κάνουμε commit τα outstanding connections από τον conntrackd στον kernel Stateful firewall on the border: allow outgoing, by default drop incoming NEW connections 12 / 17
Keeping it synced Το configuration για όλους τους daemons το διαχειριζόμαστε μέσω puppet Αυτοματοποιούμε το 90% Χρησιμοποιούμε directory structures που επιτρέπουν manual overrides 13 / 17
Monitoring Icinga/Check-MK checks για το hardware και όλα τα services Επιπλέον checks για: Κάθε BGP peering Κάθε OSPF neighbor Χρησιμοποιούμε directory structures που να επιτρέπουν και manual overrides αν χρειαστεί 14 / 17
Misc NAT event logging με ulogd, logstash και ELK Dynamic reverse IPv6 DNS Custom daemon, μιλάει μέσω rtnetlink με τον kernel του router και ενημερώνεται για neighbor changes Κάνει lookup τις MAC addresses από LDAP, φτιάχνει DNS records και τα γράφει σε μια Redis PowerDNS pipe backend Φτιάχνει δυναμικά records για όλους τους hosts των γραφείων μας, ανεξάρτητα απ το αν ειναι static, SLAAC ή privacy extensions 15 / 17
Συμπεράσματα Το free software routing για έναν content provider μικρού/μεσαίου μεγέθους προσφέρει αρκετά πλεονεκτήματα: Άριστη ενσωμάτωση στην υπόλοιπη υποδομή και χρήση των ίδιων εργαλείων (Puppet, Icinga, κλπ) Δυνατότητα υλοποίησης custom λογικής σε πολλά επίπεδα (SDN?:) Σταθερότητα και feature parity με «κλειστές» λύσεις πολύ μεγαλύτερου κόστους Δυνατότητα χρήσης off-the-shelf hardware Επιπλέον η χρήση του Debian εξασφαλίζει: Άριστο security support Δυνατότητα δημιουργίας και χρήσης δικών μας πακέτων Πολύ καλή υποστήριξη από την κοινότητα Άμεση πρόσβαση στον πηγαίο κώδικα για debugging/bugfixes Προβλέψιμο release cycle 16 / 17
Ευχαριστώ! Q&A 17 / 17