[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 116.   IPv4: instradamento oltre l'ambito della rete locale

Quando si ha la necessità di raggiungere una destinazione che non si trova a essere connessa con la rete fisica a cui si accede, c'è bisogno di un intermediario, ovvero un elaboratore connesso alla stessa rete fisica a cui accede l'elaboratore locale, che sia in grado di inoltrare i pacchetti alle destinazioni richieste. Questo elaboratore è il router, anche se nel linguaggio corrente si usa prevalentemente il termine gateway che però non è esatto.

Figura 116.1. Il router consente di raggiungere destinazioni al di fuori della rete fisica a cui si è connessi.

        .------.    .------.    .------.    .------.
        | host |    | host |    | host |    | host |
        `------'    `------'    `------'    `------'
            |           |           |           |     rete locale
- - - ------*-----------*-----------*-----------*-----*---- - - -
                                                      |
                                                      |
                                                      |
                                           .---------------------.
                                           |                     |
                                           |       Router        |
                                           |                     |
                                           `---------------------'
                                                      |
                                                      |
                                altre destinazioni    |
                           - - - - - - - - - - - - - -*- - - - - 

Per poter definire un instradamento attraverso un router bisogna che prima, l'elaboratore che svolge questa funzione, sia raggiungibile attraverso una rete locale e per mezzo di instradamenti già definiti.

La verifica di un instradamento che fa uso di un router è più delicata: si comincia con una richiesta di eco ICMP (ping) verso la propria interfaccia locale, quindi verso il router e successivamente si tenta di raggiungere qualcosa che si trova oltre il router.

116.1   Destinazione irraggiungibile

I router, dovendo vagliare il traffico dei pacchetti che li attraversano, hanno il compito di informare l'origine quando ricevono un pacchetto che, per qualche ragione, non possono far pervenire alla destinazione. Per esempio, un router che rappresenta l'ultimo salto prima di un certo elaboratore, se si accorge che questo elaboratore non è presente (magari è spento), quando riceve un pacchetto destinato a tale elaboratore, deve informare l'origine.

L'errore di questo tipo viene segnalato con un pacchetto ICMP di tipo 3, a cui corrisponde la definizione destination-unreachable.

Figura 116.2. Messaggio ICMP di errore generato dal router che si accorge del problema.

                                                     interruzione
.---------.           .--------.           .--------.           .--------------.
| Origine | - - - - > | Router | - - - - > | Router | - - X - > | Destinazione |
`---------'           `--------'           `--------'           `--------------'
     ^                                          V
     |    ICMP 3, destinazione irraggiungibile  |
     `- - - - - - - - - - - - - - - - - - - - - '

116.2   Router per accedere ad altre reti e instradamento predefinito

Una rete locale potrebbe essere articolata in sottoreti in modo da evitare di sovraffollare di traffico un'unica rete. Per fare in modo che le sottoreti possano comunicare tra loro in caso di necessità, si devono utilizzare i router che funzionano come ponti tra una sottorete e un'altra.

In questo modo, quando si indica un instradamento che fa riferimento a un router, lo si definisce per una rete logica particolare, quella a cui il router è in grado di accedere.

Secondo lo schema seguente, il router 192.168.1.254 viene utilizzato per accedere alla rete 192.168.7.0.(1)

Destinazione Maschera di rete Router Interfaccia di rete
192.168.1.0 255.255.255.0 -- eth0
192.168.7.0 255.255.255.0 192.168.1.254 eth0

Con un sistema GNU/Linux si può usare Route nel modo seguente:

route add -net 192.168.7.0 netmask 255.255.255.0 <-'
`->gw 192.168.1.254 dev eth0

Supponendo già definito l'instradamento verso la rete locale 192.168.1.0, in modo da poter raggiungere il router, si può ottenere il risultato seguente:

route -n[Invio]

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        1 eth0
192.168.7.0     192.168.1.254   255.255.255.0   UG    0      0        0 eth0

Se il router è in grado di raggiungere anche altre reti, non si fa altro che inserire gli instradamenti relativi nel modo appena visto.

route add -net 192.168.77.0 netmask 255.255.255.0 <-'
`->gw 192.168.1.254 dev eth0[Invio]

route -n[Invio]

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        1 eth0
192.168.7.0     192.168.1.254   255.255.255.0   UG    0      0        0 eth0
192.168.77.0    192.168.1.254   255.255.255.0   UG    0      0        0 eth0

Quando si vuole fare riferimento a tutti gli indirizzi possibili, si utilizza il numero IP 0.0.0.0, corrispondente al nome simbolico default. Per indicare un instradamento che permette di raggiungere tutte le destinazioni che non sono state specificate diversamente, si utilizza questo indirizzo simbolico.

Da un punto di vista puramente logico, l'indirizzo 0.0.0.0, associato alla maschera di rete 0.0.0.0, corrisponde effettivamente alla rete che comprende tutti gli indirizzi possibili, quindi un instradamento che fa riferimento alla rete 0.0.0.0 è quello per «tutti gli indirizzi».

Teoricamente, è possibile utilizzare l'instradamento predefinito per accedere alla rete locale, ma questo è comunque un approccio sconsigliabile, perché esclude la disponibilità di altre reti a cui poter accedere.

Destinazione Maschera di rete Router Interfaccia di rete
0.0.0.0 0.0.0.0 -- eth0

Nell'esempio seguente si utilizza il nome simbolico default per indicare l'indirizzo di rete 0.0.0.0 e l'interfaccia viene definita esplicitamente.

route add -net default dev eth0

route -n[Invio]

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        1 eth0

L'uso di un instradamento predefinito sulla propria rete locale, può avere effetti deleteri: l'eco ICMP (ping) può funzionare correttamente, mentre altre connessioni che richiedono protocolli più sofisticati possono trovarsi in difficoltà. Questo è particolarmente vero in presenza di connessioni PLIP.

L'approccio più comune consiste invece nel definire l'instradamento default come passante per un router: potrebbe trattarsi di un router che permette di accedere a tutte le altre sottoreti esistenti.

Destinazione Maschera di rete Router Interfaccia di rete
192.168.1.0 255.255.255.0 -- eth0
0.0.0.0 0.0.0.0 192.168.1.254 eth0

Con un sistema GNU/Linux, la cosa si traduce in pratica nel comando seguente:

route add -net default gw 192.168.1.254 dev eth0

L'instradamento verso la rete locale 192.168.1.0 era già stato definito in modo da poter raggiungere il router; di conseguenza:

route -n[Invio]

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        1 eth0
0.0.0.0         192.168.1.254   0.0.0.0         UG    0      0        0 eth0

Anche quando si definisce l'instradamento predefinito, è importante osservare che questo appare per ultimo nella tabella relativa. Infatti, la rete 0.0.0.0/0.0.0.0 include tutti gli indirizzi IPv4, ma il fatto che gli intervalli di indirizzi più ristretti appaiono prima, evita di fare confusione.

116.3   Configurazione di un Router con un sistema GNU/Linux

Un elaboratore che debba fungere da router richiede alcune caratteristiche particolari:

Quando il kernel Linux dispone della funzionalità di forwarding/gatewaying (nei kernel recenti è implicita), questa può essere controllata attraverso un file del file system virtuale /proc/. Per motivi di sicurezza, alcune distribuzioni GNU/Linux sono predisposte in modo da disattivare questa funzionalità attraverso uno dei comandi inseriti nella procedura di inizializzazione del sistema. Per riattivare il forwarding/gatewaying, si può agire nel modo seguente:

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

116.3.1   Router unico per tutte le reti

La situazione più comune in una piccola rete è quella in cui tutte le reti sono connesse a un router unico. Negli esempi che seguono si fa riferimento alla situazione seguente:

Figura 116.3. Schema dell'esempio di un router connesso su due reti e a un portatile attraverso un cavo PLIP.

        .------.    .------.    .------.    .------.
        | host |    | host |    | host |    | host |
        `------'    `------'    `------'    `------'
            |           |           |           |       192.168.1.0
- - - ------*-----------*-----------*-----------*-----*----- - - -
                                                      |
                                                      |
                                                      |
                                        192.168.1.254 | eth0
                                           .---------------------.
.-----------. plip1          192.168.3.254 |                     |
| portatile |------------------------------|       Router        |
`-----------' 192.168.3.1            plip1 |                     |
                                           `---------------------'
                                        192.168.2.254 | eth1
                                                      |
                                                      |
                                                      |
        .------.    .------.    .------.    .------.  |
        | host |    | host |    | host |    | host |  |
        `------'    `------'    `------'    `------'  |
            |           |           |           |     | 192.168.2.0
- - - ------*-----------*-----------*-----------*-----*----- - - -

All'interno del router si dovranno configurare le interfacce di rete nel modo seguente:

ifconfig eth0 192.168.1.254 netmask 255.255.255.0

ifconfig eth1 192.168.2.254 netmask 255.255.255.0

ifconfig plip1 192.168.3.254 pointopoint 192.168.3.1

Successivamente si devono definire gli instradamenti.

route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0(2)

route add -net 192.168.2.0 netmask 255.255.255.0 dev eth1(3)

route add -host 192.168.3.1 dev plip1

route add -host 192.168.3.254 dev plip1

Dal punto di vista del router è tutto finito. Gli altri elaboratori dovranno definire degli instradamenti opportuni in modo da utilizzare il router quando necessario. In particolare, gli elaboratori connessi alla rete A (192.168.1.0), per poter accedere agli altri elaboratori della propria rete locale e delle altre due raggiungibili tramite il router, dovranno inserire gli instradamenti seguenti.

route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0(4)

route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.254

route add -host 192.168.3.1 gw 192.168.1.254

Dal momento però che non si può accedere ad alcuna altra rete, si può fare riferimento all'instradamento predefinito. Sempre dal punto di vista degli elaboratori della rete A, si possono definire gli instradamenti nel modo seguente:

route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0(5)

route add -net default gw 192.168.1.254

Il caso dell'elaboratore portatile connesso attraverso la porta parallela con un cavo PLIP, è un po' particolare: è evidente che tutto il traffico debba essere filtrato dal router, a parte quello diretto proprio al router stesso. Dal punto di vista del portatile si devono definire gli instradamenti seguenti.

route add -host 192.168.3.254 dev plip1

route add -host 192.168.3.1 dev plip1

route add -net default gw 192.168.3.254

116.3.2   Router verso un altro router

Quando la rete diventa complicata, ci può essere la necessità di utilizzare più router per collegare insieme le diverse sottoreti. In tal caso, evidentemente, la tabella di instradamento dei router si troverà a contenere instradamenti che a loro volta utilizzano altri router.

Negli esempi si fa riferimento alla situazione seguente:

Figura 116.4. Schema dell'esempio di due router connessi tra loro da una dorsale.

        .------.    .------.    .------.    .------.
        | host |    | host |    | host |    | host |
        `------'    `------'    `------'    `------'
            |           |           |           |       192.168.1.0
- - - ------*-----------*-----------*-----------*-----*----- - - -
                                                      |
                                                      |
                                                      |
                                        192.168.1.254 | eth0
                                           .---------------------.
                                           |                     |
                                           |      Router A       |
                                           |                     |
                                           `---------------------'
                                        192.168.254.1 | eth1
                                                      |
            192.168.254.0 (dorsale)                   |
        - - - - ----------------------------*---------*------------- - - -
                                            |
                                            |
                                            |
                              192.168.254.2 | eth1
                                 .---------------------.
                                 |                     |
                                 |      Router B       |
                                 |                     |
                                 `---------------------'
                              192.168.2.254 | eth0
                                            |
                                            |
                                            |
        .------.    .------.    .------.    |
        | host |    | host |    | host |    |
        `------'    `------'    `------'    |
            |           |           |       |    192.168.2.0
- - - ------*-----------*-----------*-------*---------- - - -

Il router A deve poter raggiungere tutte e tre le reti: sulla rete A e R è connesso direttamente, mentre per la rete B deve fare affidamento sul router B.

route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0(6)

route add -net 192.168.254.0 netmask 255.255.255.0 dev eth1(7)

route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.254.2

Il router B deve agire in modo analogo.

route add -net 192.168.2.0 netmask 255.255.255.0 dev eth0(8)

route add -net 192.168.254.0 netmask 255.255.255.0 dev eth1(9)

route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.254.1

116.3.3   Individuazione delle schede di rete

Quando si predispone un router si ha la necessità di utilizzare più schede di rete contemporaneamente. A parte il problema legato alla configurazione hardware delle schede, si pone poi il problema del riconoscimento di queste da parte del kernel durante l'avvio del sistema. In effetti, il kernel Linux è normalmente in grado di riconoscere automaticamente solo una scheda di rete. Oltre a questo, anche se fosse in grado di riconoscerle tutte in modo automatico, rimarrebbe il problema di garantire che i nomi di interfaccia siano sempre quelli previsti.

In pratica, con un sistema GNU/Linux, disponendo di più schede Ethernet si deve utilizzare un'istruzione opportuna da inviare al kernel all'avvio. Questo problema è già stato visto nel capitolo dedicato all'hardware di rete (capitolo 112).

116.4   Verifica di un instradamento attraverso i router

Lo strumento fondamentale per la verifica degli instradamenti è sempre ping, che è già stato presentato a proposito dell'instradamento nella rete locale. In presenza di router si introduce un concetto nuovo, quello del nodo da attraversare. L'attraversamento di un nodo viene definito comunemente salto, oppure hop; in particolare si pone un limite a questi salti, definito TTL (Time to live), oltre il quale i pacchetti vengono scartati.

In pratica, i pacchetti IP contengono l'indicazione del valore TTL massimo, che viene decrementato all'attraversamento di ogni router, a opera dello stesso. Quando si raggiunge lo zero, il pacchetto viene scartato, inviando all'origine un messaggio ICMP di errore.

Figura 116.5. Esempio di un pacchetto che esaurisce il suo TTL.

.---------. TTL=2       .--------.   TTL=1     .--------.   TTL=0     .--------.
| Origine | - - - - - > | Router | - - - - - > | Router | - - - - - > | Router |
`---------'             `--------'             `--------'             `--------'
     ^                                                                     V
     |                  ICMP 11, TTL esaurito (time exceeded)              |
     `- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'

In situazioni particolari, il transito dei pacchetti verso una destinazione particolare potrebbe essere impossibile, a causa del numero di salti che si frappongono e a causa del limite troppo basso del campo TTL dei pacchetti IP. Generalmente, ping utilizza un valore TTL di 255, cioè il massimo possibile, cosa che consente di verificare gli instradamenti al limite delle loro possibilità, ma non permette di prevedere il funzionamento corretto di altri tipi di connessioni, in cui si utilizzino valori TTL inferiori.

Per verificare quale sia il percorso utilizzato effettivamente dai pacchetti per raggiungere una destinazione, si utilizza Traceroute, (10) a cui corrisponde l'eseguibile traceroute, che si usa con la sintassi seguente:

traceroute [opzioni] destinazione [lunghezza]

Traceroute, oltre che individuare il percorso effettivo verso la destinazione, può dare delle indicazioni per aiutare a comprendere in quale punto ci sono delle difficoltà.

Traceroute inizia la trasmissione di pacchetti (utilizzando il protocollo UDP) con un valore TTL molto basso. In tal modo, si aspetta di ricevere un messaggio di errore, attraverso il protocollo ICMP, dal nodo in cui il valore TTL raggiunge lo zero. Incrementando lentamente il valore TTL, Traceroute riesce a conoscere gli indirizzi dei nodi attraversati, purché tutto funzioni come previsto (cioè che i vari nodi generino correttamente i pacchetti ICMP di errore). Per individuare correttamente anche l'ultimo nodo, Traceroute cerca di generare un errore differente, per ottenere un messaggio ICMP differente.

Figura 116.6. I pacchetti inviati da Traceroute servono a generare errori nei vari router attraversati, fino alla destinazione.

            TTL=0
            TTL=1
.---------. TTL=2     .--------.           .--------.           .--------------.
| Origine | - - - - > | Router | - - - - > | Router | - - - - > | Destinazione |
`---------'           `--------'           `--------'           `--------------'
   ^ ^ ^                  V                    V                       V
   | | |      ICMP 11     |                    |                       |
   | | `- - - - - - - - - '      ICMP 11       |                       |
   | `- - - - - - - - - - - - - - - - - - - - -'       ICMP 3/3        |
   `- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'

Quando tutto funziona come previsto, Traceroute genera un elenco di nodi di rete a partire dal primo che viene attraversato, fino all'ultimo che rappresenta la destinazione richiesta. Se in alcuni punti non si ottiene risposta, i nodi ipotizzati vengono segnalati con degli asterischi. Nell'esempio seguente, si ipotizza la presenza di due nodi sconosciuti, al terzo e quarto posto della catena.

traceroute portatile.plip.dg

traceroute to portatile.plip.dg (192.168.254.1), 30 hops max, 40 byte packets
 1  dinkel.brot.dg (192.168.1.1)  0.433 ms  0.278 ms  0.216 ms
 2  router.brot.dg (192.168.1.254)  2.335 ms  2.278 ms  3.216 ms
 3  * * *
 4  * * *
 5  portatile.plip.dg (192.168.254.1)  10.654 ms  13.543 ms  11.344 ms

Sui nodi da cui non si ottiene una risposta, non si può dire nulla di certo, ma solo fare delle congetture. In generale non si può nemmeno essere certi che si tratti effettivamente di due nodi: potrebbe essere un solo nodo, oppure più di due. La documentazione di Traceroute, traceroute(8), dà delle indicazioni in più su come interpretare il risultato.

Tabella 116.4. Alcune opzioni per l'eseguibile traceroute.

Nome Descrizione

-m ttl_massimo

Definisce il numero massimo di nodi da attraversare, per mezzo dell'indicazione del valore TTL massimo da raggiungere. traceroute inizia normalmente con pacchetti contenenti un valore TTL unitario e incrementa gradualmente tale valore, fino a quanto specificato con questa opzione. Se non viene usata, il valore TTL massimo è di 30 salti.

-n

Mostra solo indirizzi numerici invece di tentare di determinare i nomi simbolici dei nodi. Questo tipo di approccio potrebbe essere utile specialmente quando si hanno difficoltà ad accedere a un servizio di risoluzione dei nomi, o comunque quando si vuole avere la situazione completamente sotto controllo.

-s indirizzo_di_origine

Permette di indicare espressamente l'indirizzo di origine dei pacchetti, presso cui ci si attende di ricevere la risposta alla scansione. Deve trattarsi di un indirizzo corrispondente a un'interfaccia di rete locale.

116.5   Inoltro IP attraverso il NAT/PAT

Un problema simile a quello dell'instradamento attraverso i router è quello dell'inoltro di pacchetti IP attraverso un router NAT/PAT (Network address translation, Port address translation). La differenza sta nel fatto che, in questo caso, il router NAT/PAT si occupa di inoltrare i pacchetti e non solo di «girarli» attraverso l'interfaccia giusta.

Figura 116.7. Schema di utilizzo di un router NAT/PAT.

                            .------.    .------.
                            | Host |    | Host |
                            `------'    `------'
                               |           |       Rete locale
192.168.2.0 - - - -------------*-----------*----*------------- - - -
                                                |
                                            .--------.
                                            | Router |
                                            `--------'
                Altre destinazioni locali       |
192.168.1.0 - - - -------------------------*----*------------- - - -
                                           |
                                           | 192.168.0.0/16
                                      .---------.
        Rete esterna                  |         |
- - - --------------------------------| NAT/PAT |
                            0.0.0.0/0 |         |
                                      `---------'

Il meccanismo NAT/PAT permette tipicamente a una rete locale che utilizza indirizzi IP riservati alle reti private (cioè esclusi dalla rete Internet e come tali irraggiungibili) di accedere all'esterno. In tal caso, tutto il traffico con la rete esterna viene intrattenuto (apparentemente) dal router NAT/PAT che si occupa di inoltrare le risposte all'interno della rete locale. Ciò significa che all'esterno appare sempre solo un elaboratore, il router NAT/PAT, mentre dall'esterno non c'è modo di accedere agli elaboratori della rete locale perché questi non hanno un indirizzo accessibile.

Nel caso di GNU/Linux la gestione dell'inoltro dei pacchetti attraverso il meccanismo NAT/PAT richiede che il kernel di questo sia predisposto opportunamente (sezione 29.2.9).

116.5.1   Instradamento dal router NAT/PAT e verso il router NAT/PAT

Il router NAT/PAT, prima di poter compiere il suo lavoro, deve essere instradato attraverso le sue interfacce di rete. Per la precisione, seguendo l'esempio mostrato nella figura 116.7, da una parte deve essere instradato nella rete 192.168.1.0, mentre per raggiungere la rete 192.168.2.0 deve utilizzare un instradamento attraverso il router relativo. Dall'altra parte, attraverso l'interfaccia connessa alla rete esterna, deve essere instradato sulla rete predefinita, cioè 0.0.0.0. Ciò equivale a dire che si preparano gli instradamenti specifici delle varie parti della rete locale e che l'instradamento verso l'esterno corrisponde a quello predefinito.

Per il resto della rete locale, l'instradamento predefinito deve portare al router NAT/PAT, perché solo lui è in grado di gestire il traffico con gli indirizzi esterni alla rete locale.

116.5.2   Definizione della traduzione degli indirizzi

Il meccanismo NAT/PAT deve essere impostato definendo i gruppi di indirizzi (cioè le sottoreti) di origine e di destinazione. L'esempio mostrato nella figura 116.7 mostra che il router NAT/PAT è connesso a una rete locale scomposta in diverse sottoreti. Per la precisione si vedono due sottoreti, 192.168.1.0 e 192.168.2.0, ma si lascia intendere che potrebbero essercene altre (192.168.3.0,...). In tal senso, gli indirizzi da inoltrare all'esterno sono tutti quelli della rete 192.168.0.0/255.255.0.0, dove il secondo indirizzo è la maschera di rete.

In questa situazione, la notazione appena vista viene abbreviata comunemente in 192.168.0.0/16, dove il numero 16 rappresenta la quantità di bit a uno della maschera di rete.

Dall'altra parte, gli indirizzi di destinazione sono semplicemente tutti gli altri, cosa che si indica semplicemente con la notazione 0.0.0.0/0.0.0.0, ovvero 0.0.0.0/0.

116.5.3   Configurazione e controllo con iptables

Il programma iptables è ciò che serve per attivare e controllare la gestione del NAT/PAT con un kernel Linux. Per la precisione, l'impostazione viene definita attraverso delle regole: prima di definire qualcosa si inizia con la loro cancellazione.

L'esempio che viene proposto ha il solo scopo di mettere in funzione la gestione NAT/PAT, mentre si eliminano tutti i sistemi di protezione legati alla gestione di un firewall. Pertanto, si possono usare tranquillamente solo se non esiste ancora alcuna configurazione per il filtro dei pacchetti IP.

iptables -t filter -F[Invio]

iptables -t mangle -F[Invio]

iptables -t nat -F[Invio]

iptables -t filter -X[Invio]

iptables -t mangle -X[Invio]

iptables -t nat -X[Invio]

Successivamente è il caso di definire una politica predefinita (policy), ovvero il comportamento normale per i comandi successivi, a meno di non specificare diversamente.

iptables -P FORWARD ACCEPT[Invio]

Infine è necessario definire come inoltrare i pacchetti tra le interfacce. Quello che segue si riferisce sempre all'esempio di figura 116.7, dove si suppone in particolare che l'interfaccia collegata all'esterno sia eth0.(11)

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE[Invio]

Se con questi comandi iptables si «lamenta» generando delle segnalazioni di errore, è probabile che il kernel non sia in grado di gestire l'inoltro IP o il NAT/PAT (la traduzione degli indirizzi). Si può comunque verificare con i comandi seguenti:

iptables -t filter -L -n[Invio]

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

iptables -t mangle -L -n[Invio]

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

iptables -t nat -L -n[Invio]

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  0.0.0.0/0            0.0.0.0/0          

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Se invece tutto è andato bene, si possono inserire questi comandi all'interno dei file utilizzati per l'inizializzazione del sistema; per esempio /etc/rc.d/rc.local o altro simile.


#...
/sbin/iptables -t filter -F
/sbin/iptables -t mangle -F
/sbin/iptables -t nat    -F
/sbin/iptables -t filter -X
/sbin/iptables -t mangle -X
/sbin/iptables -t nat    -X
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/sbin/iptables -t filter -L -n
/sbin/iptables -t mangle -L -n
/sbin/iptables -t nat    -L -n

116.5.4   Note finali

I comandi mostrati che definiscono l'inoltro IP non fanno riferimento a interfacce di rete specifiche, ma solo a indirizzi di rete. Perché il router NAT/PAT sappia da che parte inoltrare i pacchetti, è necessario che gli instradamenti siano stati definiti correttamente.

Questo tipo di configurazione del router NAT/PAT ignora completamente tutte le considerazioni che riguardano la sicurezza e tutte le forme di controllo del transito dei pacchetti. In particolare, la descrizione del funzionamento di iptables può essere reperita nella pagina di manuale iptables(8); inoltre, si può leggere la parte xxxiv.

In questo tipo di configurazione, è necessario che la gestione dell'inoltro dei pacchetti sia attiva. Non basta che il kernel sia stato predisposto (ammesso che sia ancora necessario), perché la funzione di inoltro (appartenente alla gestione dell'instradamento) potrebbe essere stata inibita da un comando contenuto nella procedura di inizializzazione del sistema, come già descritto nelle sezioni dedicate al router in generale.

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org

1) È importante considerare il fatto che il router viene visto con l'indirizzo 192.168.1.254 sulla rete locale 192.168.1.0. L'interfaccia del router connessa con l'altra rete locale avrà un indirizzo diverso, confacente con l'indirizzo di quella rete.

2) Questo instradamento dovrebbe essere già stato definito automaticamente da Ifconfig.

3) Questo instradamento dovrebbe essere già stato definito automaticamente da Ifconfig.

4) Questo instradamento dovrebbe essere già stato definito automaticamente da Ifconfig.

5) Questo instradamento dovrebbe essere già stato definito automaticamente da Ifconfig.

6) Questo instradamento dovrebbe essere già stato definito automaticamente da Ifconfig.

7) Questo instradamento dovrebbe essere già stato definito automaticamente da Ifconfig.

8) Questo instradamento dovrebbe essere già stato definito automaticamente da Ifconfig.

9) Questo instradamento dovrebbe essere già stato definito automaticamente da Ifconfig.

10) Traceroute   UCB BSD

11) Ma potrebbe trattarsi benissimo di ppp0, nel caso di una connessione attraverso il protocollo PPP, o di qualunque altra interfaccia reale.


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome ipv4_instradamento_oltre_l_ambito_della_rete_locale.html

[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]