Πώς να μετατρέψετε έναν διακομιστή Linux σε δρομολογητή για να χειρίζεστε την κυκλοφορία στατικά και δυναμικά - Μέρος 10


Όπως είχαμε προβλέψει σε προηγούμενα μαθήματα αυτής της σειράς LFCE (Linux Foundation Certified Engineer), σε αυτό το άρθρο θα συζητήσουμε τη δρομολόγηση της κυκλοφορίας IP στατικά και δυναμικά με συγκεκριμένες εφαρμογές.

Παρουσίαση του προγράμματος πιστοποίησης του Linux Foundation

Πρώτα πράγματα πρώτα, ας ξεκαθαρίσουμε ορισμένους ορισμούς:

  1. Με απλά λόγια, ένα πακέτο είναι η βασική μονάδα που χρησιμοποιείται για τη μετάδοση πληροφοριών εντός ενός δικτύου. Τα δίκτυα που χρησιμοποιούν το TCP/IP ως πρωτόκολλο δικτύου ακολουθούν τους ίδιους κανόνες για τη μετάδοση δεδομένων: οι πραγματικές πληροφορίες χωρίζονται σε πακέτα που αποτελούνται τόσο από δεδομένα όσο και από τη διεύθυνση στην οποία πρέπει να σταλούν.
  2. Η Δρομολόγηση είναι η διαδικασία "καθοδήγησης " των δεδομένων από την πηγή στον προορισμό μέσα σε ένα δίκτυο.
  3. Η Στατική δρομολόγηση απαιτεί ένα σύνολο κανόνων που έχει ρυθμιστεί με μη αυτόματο τρόπο και ορίζεται σε έναν πίνακα δρομολόγησης. Αυτοί οι κανόνες είναι σταθεροί και χρησιμοποιούνται για να καθορίσουν τον τρόπο με τον οποίο πρέπει να περάσει ένα πακέτο καθώς ταξιδεύει από το ένα μηχάνημα στο άλλο.
  4. Δυναμική δρομολόγηση ή έξυπνη δρομολόγηση (εάν θέλετε), σημαίνει ότι το σύστημα μπορεί να αλλάξει αυτόματα, ανάλογα με τις ανάγκες, τη διαδρομή που ακολουθεί ένα πακέτο.

Προηγμένη διαμόρφωση IP και συσκευής δικτύου

Το πακέτο iproute παρέχει ένα σύνολο εργαλείων για τη διαχείριση της δικτύωσης και του ελέγχου κυκλοφορίας που θα χρησιμοποιήσουμε σε όλο αυτό το άρθρο, καθώς αντιπροσωπεύουν την αντικατάσταση παλαιού τύπου εργαλείων όπως το ifconfig και το route.

Το κεντρικό βοηθητικό πρόγραμμα στη σουίτα iproute ονομάζεται απλώς ip. Η βασική σύνταξη του είναι η εξής:

ip object command

Όπου αντικείμενο μπορεί να είναι μόνο ένα από τα ακόλουθα (εμφανίζονται μόνο τα πιο συχνά αντικείμενα – μπορείτε να ανατρέξετε στο man ip για μια πλήρη λίστα):

  1. σύνδεσμος: συσκευή δικτύου.
  2. addr: διεύθυνση πρωτοκόλλου (IP ή IPv6) σε μια συσκευή.
  3. διαδρομή: καταχώριση πίνακα δρομολόγησης.
  4. κανόνας: κανόνας στη βάση δεδομένων πολιτικών δρομολόγησης.

Ενώ η εντολή αντιπροσωπεύει μια συγκεκριμένη ενέργεια που μπορεί να εκτελεστεί σε αντικείμενο. Μπορείτε να εκτελέσετε την ακόλουθη εντολή για να εμφανίσετε την πλήρη λίστα των εντολών που μπορούν να εφαρμοστούν σε ένα συγκεκριμένο αντικείμενο:

ip object help

Για παράδειγμα,

ip link help

Η παραπάνω εικόνα δείχνει, για παράδειγμα, ότι μπορείτε να αλλάξετε την κατάσταση μιας διεπαφής δικτύου με την ακόλουθη εντολή:

ip link set interface {up | down}

Για τέτοια περισσότερα παραδείγματα εντολής «ip», διαβάστε τις 10 Χρήσιμες εντολές «ip» για τη διαμόρφωση της διεύθυνσης IP

Παράδειγμα 1: Απενεργοποίηση και ενεργοποίηση διεπαφής δικτύου

Σε αυτό το παράδειγμα, θα απενεργοποιήσουμε και θα ενεργοποιήσουμε το eth1:

ip link show
ip link set eth1 down
ip link show

Εάν θέλετε να ενεργοποιήσετε ξανά το eth1,

ip link set eth1 up

Αντί να εμφανίσουμε όλες τις διεπαφές δικτύου, μπορούμε να καθορίσουμε μία από αυτές:

ip link show eth1

Το οποίο θα επιστρέψει όλες τις πληροφορίες για το eth1.

Παράδειγμα 2: Εμφάνιση του κύριου πίνακα δρομολόγησης

Μπορείτε να προβάλετε τον τρέχοντα κύριο πίνακα δρομολόγησης με μία από τις ακόλουθες 3 εντολές:

ip route show
route -n
netstat -rn

Η πρώτη στήλη στην έξοδο των τριών εντολών υποδεικνύει το δίκτυο προορισμού. Η έξοδος της εκπομπής διαδρομή ip (ακολουθώντας τη λέξη-κλειδί dev) παρουσιάζει επίσης τις συσκευές δικτύου που χρησιμεύουν ως φυσική πύλη σε αυτά τα δίκτυα.

Παρόλο που σήμερα προτιμάται η εντολή ip έναντι της διαδρομής, μπορείτε ακόμα να ανατρέξετε στα ip-route και man route για λεπτομερή εξήγηση των υπολοίπων των στηλών.

Παράδειγμα 3: Χρήση διακομιστή Linux για δρομολόγηση πακέτων μεταξύ δύο ιδιωτικών δικτύων

Θέλουμε να δρομολογήσουμε πακέτα icmp (ping) από το dev2 στο dev4 και το αντίστροφο επίσης (σημειώστε ότι και οι δύο υπολογιστές-πελάτες βρίσκονται σε διαφορετικά δίκτυα). Το όνομα κάθε NIC, μαζί με την αντίστοιχη διεύθυνση IPv4, δίνεται μέσα σε αγκύλες.

Το περιβάλλον δοκιμής μας έχει ως εξής:

Client 1: CentOS 7 [enp0s3: 192.168.0.17/24] - dev1
Router: Debian Wheezy 7.7 [eth0: 192.168.0.15/24, eth1: 10.0.0.15/24] - dev2
Client 2: openSUSE 13.2 [enp0s3: 10.0.0.18/24] - dev4

Ας δούμε τον πίνακα δρομολόγησης στο dev1 (πλαίσιο CentOS):

ip route show

και, στη συνέχεια, τροποποιήστε το για να χρησιμοποιήσετε το enp0s3 NIC και τη σύνδεση στο 192.168.0.15 για πρόσβαση σε κεντρικούς υπολογιστές στο δίκτυο 10.0.0.0/24:

ip route add 10.0.0.0/24 via 192.168.0.15 dev enp0s3

Το οποίο ουσιαστικά λέει, "Προσθέστε μια διαδρομή στο δίκτυο 10.0.0.0/24 μέσω της διεπαφής δικτύου enp0s3 χρησιμοποιώντας το 192.168.0.15 ως πύλη".

Ομοίως στο dev4 (πλαίσιο openSUSE) σε κεντρικούς υπολογιστές ping στο δίκτυο 192.168.0.0/24:

ip route add 192.168.0.0/24 via 10.0.0.15 dev enp0s3

Τέλος, πρέπει να ενεργοποιήσουμε την προώθηση στον δρομολογητή Debian:

echo 1 > /proc/sys/net/ipv4/ip_forward

Τώρα ας κάνουμε ping:

και,

Για να κάνετε αυτές τις ρυθμίσεις επίμονες σε όλες τις εκκινήσεις, επεξεργαστείτε το /etc/sysctl.conf στο δρομολογητή και βεβαιωθείτε ότι η μεταβλητή net.ipv4.ip_forward έχει οριστεί ως true ως εξής:

net.ipv4.ip_forward = 1

Επιπλέον, διαμορφώστε τα NIC και στους δύο πελάτες (αναζητήστε το αρχείο διαμόρφωσης εντός /etc/sysconfig/network στο openSUSE και /etc/sysconfig/network-scripts στο CentOS – και στις δύο περιπτώσεις ονομάζεται ifcfg-enp0s3).

Ακολουθεί το αρχείο ρυθμίσεων από το πλαίσιο openSUSE:

BOOTPROTO=static
BROADCAST=10.0.0.255
IPADDR=10.0.0.18
NETMASK=255.255.255.0
GATEWAY=10.0.0.15
NAME=enp0s3
NETWORK=10.0.0.0
ONBOOT=yes
Παράδειγμα 4: Χρήση διακομιστή Linux για δρομολόγηση πακέτων μεταξύ ιδιωτικών δικτύων και Διαδικτύου

Ένα άλλο σενάριο όπου μια μηχανή Linux μπορεί να χρησιμοποιηθεί ως δρομολογητής είναι όταν πρέπει να μοιραστείτε τη σύνδεσή σας στο Διαδίκτυο με ένα ιδιωτικό LAN.

Router: Debian Wheezy 7.7 [eth0: Public IP, eth1: 10.0.0.15/24] - dev2
Client: openSUSE 13.2 [enp0s3: 10.0.0.18/24] - dev4

Εκτός από τη ρύθμιση της προώθησης πακέτων και του στατικού πίνακα δρομολόγησης στον πελάτη, όπως στο προηγούμενο παράδειγμα, πρέπει να προσθέσουμε μερικούς κανόνες iptables στο δρομολογητή:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

Η πρώτη εντολή προσθέτει έναν κανόνα στην αλυσίδα POSTROUTING στον πίνακα nat (Network Address Translation), υποδεικνύοντας ότι το eth0 NIC θα πρέπει να χρησιμοποιείται για εξερχόμενα πακέτα.

Το MASQUERADE υποδηλώνει ότι αυτό το NIC έχει δυναμική IP και ότι πριν από την αποστολή του πακέτου στον "wild wild world" του Διαδικτύου, η ιδιωτική διεύθυνση πηγής του πακέτου πρέπει να είναι άλλαξε σε αυτή της δημόσιας IP του δρομολογητή.

Σε ένα LAN με πολλούς κεντρικούς υπολογιστές, ο δρομολογητής παρακολουθεί τις εγκατεστημένες συνδέσεις στο /proc/net/ip_conntrack, ώστε να γνωρίζει πού να επιστρέψει την απόκριση από το Διαδίκτυο.

Μόνο μέρος της παραγωγής:

cat /proc/net/ip_conntrack

εμφανίζεται στο παρακάτω στιγμιότυπο οθόνης.

Όπου επισημαίνεται η προέλευση (ιδιωτική IP του πλαισίου openSUSE) και ο προορισμός (Google DNS) των πακέτων. Αυτό ήταν το αποτέλεσμα του τρεξίματος:

curl linux-console.net

στο πλαίσιο openSUSE.

Όπως είμαι βέβαιος ότι μπορείτε ήδη να μαντέψετε, ο δρομολογητής χρησιμοποιεί το 8.8.8.8 της Google ως διακομιστή ονομάτων, γεγονός που εξηγεί γιατί ο προορισμός των εξερχόμενων πακέτων οδηγεί σε αυτήν τη διεύθυνση.

Σημείωση: Το ότι τα εισερχόμενα πακέτα από το Διαδίκτυο γίνονται δεκτά μόνο εάν αποτελούν μέρος μιας ήδη εγκατεστημένης σύνδεσης (εντολή #2), ενώ τα εξερχόμενα πακέτα επιτρέπονται "ελεύθερη έξοδος ” (εντολή #3).

Μην ξεχάσετε να κάνετε τους κανόνες iptables σας επίμονους ακολουθώντας τα βήματα που περιγράφονται στο Μέρος 8 – Διαμόρφωση του Τείχους προστασίας Iptables αυτής της σειράς.

Δυναμική δρομολόγηση με Quagga

Σήμερα, το εργαλείο που χρησιμοποιείται περισσότερο για δυναμική δρομολόγηση στο Linux είναι το quagga. Επιτρέπει στους διαχειριστές συστήματος να εφαρμόσουν, με έναν σχετικά χαμηλού κόστους διακομιστή Linux, την ίδια λειτουργικότητα που παρέχεται από τους ισχυρούς (και δαπανηρούς) δρομολογητές της Cisco.

Το ίδιο το εργαλείο δεν χειρίζεται τη δρομολόγηση, αλλά μάλλον τροποποιεί τον πίνακα δρομολόγησης του πυρήνα καθώς μαθαίνει νέες καλύτερες διαδρομές για το χειρισμό πακέτων.

Δεδομένου ότι είναι ένα fork of zebra, ένα πρόγραμμα του οποίου η ανάπτυξη σταμάτησε πριν από λίγο καιρό, διατηρεί για ιστορικούς λόγους τις ίδιες εντολές και δομή με το zebra. Γι' αυτό θα δείτε πολλές αναφορές στη ζέβρα από αυτό το σημείο και μετά.

Λάβετε υπόψη ότι δεν είναι δυνατό να καλύψετε τη δυναμική δρομολόγηση και όλα τα σχετικά πρωτόκολλα σε ένα μόνο άρθρο, αλλά είμαι βέβαιος ότι το περιεχόμενο που παρουσιάζεται εδώ θα χρησιμεύσει ως αφετηρία για να αξιοποιήσετε.

Εγκατάσταση του Quagga σε Linux

Για να εγκαταστήσετε το quagga στη διανομή που έχετε επιλέξει:

aptitude update && aptitude install quagga 				[On Ubuntu]
yum update && yum install quagga 					[CentOS/RHEL]
zypper refresh && zypper install quagga 				[openSUSE]

Θα χρησιμοποιήσουμε το ίδιο περιβάλλον όπως στο Παράδειγμα #3, με τη μόνη διαφορά ότι το eth0 είναι συνδεδεμένο σε δρομολογητή κύριας πύλης με IP 192.168.0.1.

Στη συνέχεια, επεξεργαστείτε το /etc/quagga/daemons με,

zebra=1
ripd=1

Τώρα δημιουργήστε τα ακόλουθα αρχεία διαμόρφωσης.

/etc/quagga/zebra.conf
/etc/quagga/ripd.conf

και προσθέστε αυτές τις γραμμές (αντικαταστήστε το όνομα κεντρικού υπολογιστή και τον κωδικό πρόσβασης της επιλογής σας):

service quagga restart
hostname    	dev2
password    	quagga
service quagga restart

Σημείωση: Αυτό το ripd.conf είναι το αρχείο διαμόρφωσης για το Routing Information Protocol, το οποίο παρέχει στον δρομολογητή τις πληροφορίες για τα δίκτυα που μπορούν να έχουν φτάσει και πόσο μακριά είναι (από άποψη ποσότητας λυκίσκου).

Σημειώστε ότι αυτό είναι μόνο ένα από τα πρωτόκολλα που μπορεί να χρησιμοποιηθεί μαζί με το quagga και το επέλεξα για αυτό το σεμινάριο λόγω της ευκολίας χρήσης και επειδή οι περισσότερες συσκευές δικτύου το υποστηρίζουν, αν και έχει το μειονέκτημα της μετάδοσης διαπιστευτηρίων σε απλό κείμενο. Για αυτόν τον λόγο, πρέπει να εκχωρήσετε τα κατάλληλα δικαιώματα στο αρχείο ρυθμίσεων:

chown quagga:quaggavty /etc/quagga/*.conf
chmod 640 /etc/quagga/*.conf 
Παράδειγμα 5: Ρύθμιση του quagga για δυναμική δρομολόγηση της κυκλοφορίας IP

Σε αυτό το παράδειγμα θα χρησιμοποιήσουμε την ακόλουθη ρύθμιση με δύο δρομολογητές (φροντίστε να δημιουργήσετε τα αρχεία διαμόρφωσης για τον router #2 όπως εξηγήθηκε προηγουμένως):

Σημαντικό: Μην ξεχάσετε να επαναλάβετε την ακόλουθη ρύθμιση και για τους δύο δρομολογητές.

Συνδεθείτε στο zebra (ακρόαση στη θύρα 2601), η οποία είναι ο λογικός ενδιάμεσος μεταξύ του δρομολογητή και του πυρήνα:

telnet localhost 2601

Εισαγάγετε τον κωδικό πρόσβασης που ορίστηκε στο αρχείο /etc/quagga/zebra.conf και, στη συνέχεια, ενεργοποιήστε τη διαμόρφωση:

enable
configure terminal

Εισαγάγετε τη διεύθυνση IP και τη μάσκα δικτύου κάθε NIC:

inter eth0
ip addr 192.168.0.15
inter eth1
ip addr 10.0.0.15
exit
exit
write

Τώρα πρέπει να συνδεθούμε στο τερματικό δαίμονα RIP (θύρα 2602):

telnet localhost 2602

Εισαγάγετε το όνομα χρήστη και τον κωδικό πρόσβασης όπως έχουν ρυθμιστεί στο αρχείο /etc/quagga/ripd.conf και, στη συνέχεια, πληκτρολογήστε τις ακόλουθες εντολές με έντονη γραφή (προστίθενται σχόλια για λόγους διευκρίνισης):

enable turns on privileged mode command.
configure terminal changes to configuration mode. This command is the first step to configuration
router rip enables RIP.
network 10.0.0.0/24 sets the RIP enable interface for the 10.0.0.0/24 network. 
exit
exit
write writes current configuration to configuration file.

Σημείωση: ότι και στις δύο περιπτώσεις η διαμόρφωση προσαρτάται στις γραμμές που προσθέσαμε προηγουμένως (/etc/quagga/zebra.conf και < b>/etc/quagga/ripd.conf).

Τέλος, συνδεθείτε ξανά στην υπηρεσία zebra και στους δύο δρομολογητές και σημειώστε πώς ο καθένας από αυτούς έχει «μάθει» τη διαδρομή προς το δίκτυο που βρίσκεται πίσω από τον άλλο και ποιο είναι το επόμενο βήμα για να φτάσετε σε αυτό δικτύου, εκτελώντας την εντολή εμφάνιση διαδρομής ip:

show ip route

Εάν θέλετε να δοκιμάσετε διαφορετικά πρωτόκολλα ή ρυθμίσεις, μπορεί να θέλετε να ανατρέξετε στην τοποθεσία του έργου Quagga για περαιτέρω τεκμηρίωση.

συμπέρασμα

Σε αυτό το άρθρο εξηγήσαμε πώς να ρυθμίσετε τη στατική και δυναμική δρομολόγηση, χρησιμοποιώντας έναν(ους) δρομολογητή(ους) box Linux. Μη διστάσετε να προσθέσετε όσους δρομολογητές θέλετε και να πειραματιστείτε όσο θέλετε. Μη διστάσετε να επικοινωνήσετε μαζί μας χρησιμοποιώντας την παρακάτω φόρμα επικοινωνίας εάν έχετε οποιαδήποτε σχόλια ή ερωτήσεις.