Come abbiamo anticipato nei precedenti tutorial di questo LFCE (Ingegnere certificato dalla Linux Foundation), in questo articolo parleremo del routing del traffico IP statico e dinamico con applicazioni specifiche.
Per prima cosa, cerchiamo di chiarire alcune definizioni:
Il iproute fornisce una serie di strumenti per gestire la rete e il controllo del traffico che useremo in questo articolo poiché rappresentano la sostituzione di strumenti legacy come ifconfig e itinerario.
L'utilità centrale nel iproute suite si chiama semplicemente ip. La sua sintassi di base è la seguente:
# comando oggetto ip.
In cui si oggetto può essere solo uno dei seguenti (sono mostrati solo gli oggetti più frequenti – puoi fare riferimento a man ip per un elenco completo):
Mentre comando rappresenta un'azione specifica che può essere eseguita sull'oggetto. È possibile eseguire il seguente comando per visualizzare l'elenco completo dei comandi che possono essere applicati a un particolare oggetto:
# aiuto oggetto ip.
Per esempio,
# aiuto collegamento ip.
L'immagine sopra mostra, ad esempio, che è possibile modificare lo stato di un'interfaccia di rete con il seguente comando:
# ip link set interface {up | fuori uso}
Per tali ulteriori esempi di 'ip‘comanda, leggi 10 utili comandi "ip" per configurare l'indirizzo IP
In questo esempio, disabiliteremo e abiliteremo eth1:
# Mostra collegamento ip. # ip link imposta eth1 inattivo. # Mostra collegamento ip.
Se vuoi riattivare eth1,
# collegamento ip impostato eth1.
Invece di visualizzare tutte le interfacce di rete, possiamo specificarne una:
# ip link mostra eth1.
Che restituirà tutte le informazioni per eth1.
Puoi visualizzare la tua attuale tabella di routing principale con uno dei seguenti 3 comandi:
# spettacolo percorso ip. # percorso -n. # netstat -rn.
La prima colonna nell'output dei tre comandi indica la rete di destinazione. L'uscita di ip route mostra (seguendo la parola chiave sviluppo) presenta anche i dispositivi di rete che fungono da gateway fisico per tali reti.
Sebbene al giorno d'oggi il comando ip è preferito al percorso, puoi comunque fare riferimento a man ip-route e percorso uomo per una spiegazione dettagliata del resto delle colonne.
Vogliamo instradare icmp (ping) pacchetti da dev2 a dev4 e anche viceversa (nota che entrambe le macchine client si trovano su reti diverse). Il nome di ogni NIC, insieme al relativo indirizzo IPv4, è indicato tra parentesi quadre.
Il nostro ambiente di test è il seguente:
Cliente 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. Cliente 2: openSUSE 13.2 [enp0s3: 10.0.0.18/24] - dev4.
Vediamo la tabella di routing in dev1 (box CentOS):
# spettacolo percorso ip.
e quindi modificarlo per utilizzare il suo enp0s3 NIC e la connessione a 192.168.0.15 per accedere agli host nella rete 10.0.0.0/24:
# ip route aggiungi 10.0.0.0/24 tramite 192.168.0.15 dev enp0s3.
Che essenzialmente recita "Aggiungi una route alla rete 10.0.0.0/24 tramite l'interfaccia di rete enp0s3 utilizzando 192.168.0.15 come gateway".
Allo stesso modo in dev4 (box openSUSE) per eseguire il ping degli host nella rete 192.168.0.0/24:
# ip route aggiungi 192.168.0.0/24 tramite 10.0.0.15 dev enp0s3.
Infine, dobbiamo abilitare l'inoltro nel nostro router Debian:
# echo 1 > /proc/sys/net/ipv4/ip_forward.
Ora eseguiamo il ping:
e,
Per rendere queste impostazioni persistenti tra gli stivali, modifica /etc/sysctl.conf sul router e assicurati che net.ipv4.ip_forward variabile è impostata su true come segue:
net.ipv4.ip_forward = 1.
Inoltre, configurare le NIC su entrambi i client (cercare il file di configurazione all'interno /etc/sysconfig/network su openSUSE e /etc/sysconfig/network-scripts su CentOS – in entrambi i casi si chiama ifcfg-enp0s3).
Ecco il file di configurazione dalla scatola di openSUSE:
BOOTPROTO=statico. BROADCAST=10.0.0.255. IPADDR=10.0.0.18. MASCHERA DI RETE=255.255.255.0. GATEWAY=10.0.0.15. NOME=enp0s3. RETE=10.0.0.0. ONBOOT=sì.
Un altro scenario in cui una macchina Linux può essere utilizzata come router è quando è necessario condividere la connessione Internet con una LAN privata.
Router: Debian Wheezy 7.7 [eth0: IP pubblico, eth1: 10.0.0.15/24] - dev2. Cliente: openSUSE 13.2 [enp0s3: 10.0.0.18/24] - dev4.
Oltre a impostare l'inoltro dei pacchetti e la tabella di routing statico nel client come nell'esempio precedente, è necessario aggiungere alcune regole iptables nel router:
# 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.
Il primo comando aggiunge una regola al POSTOUTING chain nella tabella nat (Network Address Translation), indicando che la scheda NIC eth0 deve essere utilizzata per i pacchetti in uscita.
MASCHERA indica che questa NIC ha un IP dinamico e che prima di inviare il pacchetto al “mondo selvaggio selvaggio” di Internet, l'indirizzo sorgente privato del pacchetto deve essere cambiato con quello dell'IP pubblico del router.
In una LAN con molti host, il router tiene traccia delle connessioni stabilite in /proc/net/ip_conntrack quindi sa dove restituire la risposta da Internet a.
Solo una parte dell'output di:
# cat /proc/net/ip_conntrack.
è mostrato nello screenshot seguente.
Dove è evidenziata l'origine (IP privato del box openSUSE) e la destinazione (Google DNS) dei pacchetti. Questo è stato il risultato della corsa:
# curl www.tecmint.com.
sulla scatola di openSUSE.
Come sono sicuro che puoi già intuire, il router utilizza 8.8.8.8 di Google come server dei nomi, il che spiega perché la destinazione dei pacchetti in uscita punta a quell'indirizzo.
Nota: I pacchetti in entrata da Internet sono accettati solo se fanno parte di una connessione già stabilita (comando #2), mentre i pacchetti in uscita sono consentiti "uscita libera” (comando #3).
Non dimenticare di rendere persistenti le regole di iptables seguendo i passaggi descritti in Parte 8 – Configurare il firewall di Iptables di questa serie.
Al giorno d'oggi, lo strumento più utilizzato per il routing dinamico in Linux è quagga. Consente agli amministratori di sistema di implementare, con un server Linux relativamente economico, le stesse funzionalità fornite dai potenti (e costosi) router Cisco.
Lo strumento stesso non gestisce il routing, ma modifica la tabella di routing del kernel mentre apprende nuovi percorsi migliori per gestire i pacchetti.
Trattandosi di un fork di zebra, programma il cui sviluppo è cessato da tempo, mantiene per ragioni storiche gli stessi comandi e struttura di zebra. Ecco perché vedrai molti riferimenti alla zebra da questo punto in poi.
Si prega di notare che non è possibile coprire il routing dinamico e tutti i relativi protocolli in un unico articolo, ma sono fiducioso che il contenuto presentato qui servirà come punto di partenza per la costruzione sopra.
Per installare quagga sulla distribuzione scelta:
# aptitude update && aptitude install quagga [Su Ubuntu] # yum update && yum install quagga [CentOS/RHEL] # zypper aggiorna && zypper installa quagga [openSUSE]
Useremo lo stesso ambiente dell'Esempio #3, con l'unica differenza che eth0 è connesso a un router gateway principale con IP 192.168.0.1.
Quindi, modifica /etc/quagga/daemons insieme a,
zebra=1. ripd=1.
Ora crea i seguenti file di configurazione.
# /etc/quagga/zebra.conf. # /etc/quagga/ripd.conf.
e aggiungi queste righe (sostituisci un nome host e una password a tua scelta):
riavvio del servizio quagga. nome host dev2. password quagga.
# riavvio del servizio quagga.
Nota: Quella ripd.conf è il file di configurazione per il Routing Information Protocol, che fornisce al router le informazioni su quali reti possono essere raggiunte e quanto sono lontane (in termini di quantità di hop).
Nota che questo è solo uno dei protocolli che possono essere utilizzati insieme a quagga, e l'ho scelto per questo tutorial a causa di facilità d'uso e perché la maggior parte dei dispositivi di rete lo supporta, sebbene abbia lo svantaggio di passare le credenziali in modo semplice testo. Per questo motivo, è necessario assegnare le autorizzazioni appropriate al file di configurazione:
# chown quagga: quaggavty /etc/quagga/*.conf. # chmod 640 /etc/quagga/*.conf
In questo esempio useremo la seguente configurazione con due router (assicurati di creare i file di configurazione per router #2 come spiegato in precedenza):
Importante: Non dimenticare di ripetere la seguente configurazione per entrambi i router.
Connettiti a zebra (ascolto sulla porta 2601), che è l'intermediario logico tra il router e il kernel:
# telnet localhost 2601.
Inserisci la password che è stata impostata nel /etc/quagga/zebra.conf file, quindi abilitare la configurazione:
abilitare. configurare il terminale.
Immettere l'indirizzo IP e la maschera di rete di ciascuna NIC:
inter eth0. indirizzo IP 192.168.0.15. tra eth1. indirizzo IP 10.0.0.15. Uscita. Uscita. scrivere.
Ora dobbiamo connetterci al STRAPPARE terminale del demone (porta 2602):
# telnet localhost 2602.
Inserisci nome utente e password come configurato nel /etc/quagga/ripd.conf file, quindi digitare i seguenti comandi in grassetto (i commenti vengono aggiunti per motivi di chiarezza):
abilitare attiva il comando della modalità privilegiata. configurare il terminale passa alla modalità di configurazione. Questo comando è il primo passo per la configurazione. rip router abilita il RIP. rete 10.0.0.0/24 imposta l'interfaccia di abilitazione RIP per la rete 10.0.0.0/24. UscitaUscitascrivere scrive la configurazione corrente nel file di configurazione.
Nota: Che in entrambi i casi la configurazione viene aggiunta alle righe che abbiamo aggiunto in precedenza (/etc/quagga/zebra.conf e /etc/quagga/ripd.conf).
Infine, riconnettiti al servizio zebra su entrambi i router e nota come ognuno di essi abbia “imparato” il percorso verso la rete che si trova dietro l'altro, e che è l'hop successivo per arrivare a quella rete, eseguendo il comando mostra percorso IP:
# mostra il percorso IP.
Se vuoi provare diversi protocolli o configurazioni, potresti voler fare riferimento al Sito del progetto Quagga per ulteriore documentazione.
In questo articolo abbiamo spiegato come impostare il routing statico e dinamico, utilizzando un router box Linux (s). Sentiti libero di aggiungere tutti i router che desideri e di sperimentare quanto vuoi. Non esitare a contattarci utilizzando il modulo di contatto sottostante in caso di commenti o domande.