806
contributi
m (→Server DNS: corretto path della configurazione) |
(→Test: ping router/client) |
||
Riga 1: | Riga 1: | ||
{{stub}} | {{stub}} | ||
==Premessa== | ==Premessa== | ||
Oggi che la maggior parte degli utenti domestici ha la | Oggi che la maggior parte degli utenti domestici ha la possibilit� di accede ad internet con connessioni a [http://it.wikipedia.org/wiki/Larghezza_di_banda banda] larga (ad esempio [http://it.wikipedia.org/wiki/ADSL ADSL]) e che � sempre pi� frequente avere a disposizione almeno un paio di computers si avverte la necessit� di poter condividere la connessione tra i vari computer della nostra rete domestica. | ||
GNU/Linux | GNU/Linux � probabilmente la scelta pi� indicata in questi frangenti, essendo un sistema operativo nato espressamente in ambiente di rete: moltissimi dei [http://it.wikipedia.org/wiki/Router router] sul mercato fanno uso di GNU/Linux come sistema operativo, perch� non farlo anche noi ? | ||
==Prerequisiti== | ==Prerequisiti== | ||
Tutto quello di cui abbiamo bisogno | Tutto quello di cui abbiamo bisogno � la nostra Debian, una scheda di rete per ciascun pc da collegare alla rete locale ed un hub o switch. | ||
Per fare in modo che Debian si comporti come un router avremo bisogno anche di iptables. Vi rimando alla guida [[Debian e iptables]] per la sua corretta installazione e configurazione. | Per fare in modo che Debian si comporti come un router avremo bisogno anche di iptables. Vi rimando alla guida [[Debian e iptables]] per la sua corretta installazione e configurazione. | ||
Riga 12: | Riga 12: | ||
==Configurazione Router== | ==Configurazione Router== | ||
Per fare in modo che Debian faccia da [http://it.wikipedia.org/wiki/Gateway gateway] tra i pc della LAN e internet dobbiamo utilizzare il [http://it.wikipedia.org/wiki/Network_address_translation NAT] ''(Network Adrees Translation)''.<br> | Per fare in modo che Debian faccia da [http://it.wikipedia.org/wiki/Gateway gateway] tra i pc della LAN e internet dobbiamo utilizzare il [http://it.wikipedia.org/wiki/Network_address_translation NAT] ''(Network Adrees Translation)''.<br> | ||
Il tipo di NAT che ci interessa in questa guida | Il tipo di NAT che ci interessa in questa guida � chiamato '''masquerading''' ''(mascheramento)'' degli indirizzi locali.<br> | ||
Il motivo | Il motivo � semplice: per accedere a internet � necessario avere un [http://it.wikipedia.org/wiki/Indirizzo_IP indirizzo IP] di tipo pubblico, che il nostro ISP ci fornisce. Per permettere anche ai computer sprovvisti di indirizzo pubblico di navigare, dobbiamo fare in modo che i loro indirizzi di tipo privato vengano "nascosti" dietro a quello pubblico. | ||
===Masquerading=== | ===Masquerading=== | ||
Riga 30: | Riga 30: | ||
</pre> | </pre> | ||
Questo comando si | Questo comando si pu� inserire in uno script di avvio come /etc/init.d/bootmisc, forse � pi� logico inserirlo in /etc/init.d/networking anche perch�, in tal modo, riavviando la rete vengono anche reimpostate le regole di iptables. Per inserire il comando in /etc/init.d/networking scorrete il file fino a quasi la fine dove troverete le seguenti righe: | ||
<pre> | <pre> | ||
Riga 43: | Riga 43: | ||
</pre> | </pre> | ||
si | si potr� inserire questo codice (al posto del singolo comando) per maggiore eleganza: | ||
<pre> | <pre> | ||
Riga 54: | Riga 54: | ||
</pre> | </pre> | ||
in questo modo la regola | in questo modo la regola verr� caricata ad ogni avvio del sistema, senza che sia necessario digitarla nuovamente, e solo se il file /etc/iptables-save esiste ed � leggibile. | ||
===Ip Forwarding=== | ===Ip Forwarding=== | ||
Configurare iptables non | Configurare iptables non � per� sufficiente. I comuni pc, infatti, non devono essere in grado di comportarsi come i [http://it.wikipedia.org/wiki/Router routers] e cio� non devono poter [[routing|instradare]] pacchetti da una rete all' altra.<br> | ||
Dato che per noi | Dato che per noi � fondamentale abilitare questa possibilit�, dobbiamo agire su un paramentro del kernel che regola questa funzione: l' '''ip-forwarding'''. | ||
L' ip-forwarding | L' ip-forwarding � abilitabile "al volo", semplicemente impostando a "1" la relativa variabile del kernel, con il comando: | ||
<pre># echo 1 > /proc/sys/net/ipv4/ip_forward</pre> | <pre># echo 1 > /proc/sys/net/ipv4/ip_forward</pre> | ||
cos� facendo per�, ad ogni riavvio dovremo reimpostare la variabile. | |||
E' possibile creare scripts appositi che impostano a "1" l' ip-forwarding, ma il sistema che presumibilmente | E' possibile creare scripts appositi che impostano a "1" l' ip-forwarding, ma il sistema che presumibilmente � pi� comodo, consiste nell' associare questo comando alla creazione delle interfacce di rete, in fase di boot. | ||
Per prima cosa, apriamo con il nostro editor preferito il file '''/etc/network/interfaces''' e cerchiamo la sezione relativa alla nostra scheda di rete.<br> | Per prima cosa, apriamo con il nostro editor preferito il file '''/etc/network/interfaces''' e cerchiamo la sezione relativa alla nostra scheda di rete.<br> | ||
Riga 83: | Riga 83: | ||
broadcast 192.168.0.255 | broadcast 192.168.0.255 | ||
pre-up /etc/network/iface-secure</pre> | pre-up /etc/network/iface-secure</pre> | ||
Questo comando dice allo script che si occupa di configurare la scheda di rete di lanciare un' altro script, e | Questo comando dice allo script che si occupa di configurare la scheda di rete di lanciare un' altro script, e cio� '''/etc/network/iface-secure''', che provvediamo subito a creare con il comando: | ||
<pre># touch /etc/network/iface-secure</pre> | <pre># touch /etc/network/iface-secure</pre> | ||
All' interno di questo file scriveremo il nostro comando per abilitare l' ip-forwarind: | All' interno di questo file scriveremo il nostro comando per abilitare l' ip-forwarind: | ||
Riga 101: | Riga 101: | ||
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects | echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects | ||
</pre> | </pre> | ||
Oltre a queste regole Debian imposta per default la protezione dallo [http://it.wikipedia.org/wiki/IP_spoofing spoofing] degli indirizzi, che quindi non abbiamo | Oltre a queste regole Debian imposta per default la protezione dallo [http://it.wikipedia.org/wiki/IP_spoofing spoofing] degli indirizzi, che quindi non abbiamo necessit� di inserire nello script.Per completezza di informazione, comunque, questa regola risulta essere la seguente: | ||
<pre> | <pre> | ||
### Protezione anti spoofing | ### Protezione anti spoofing | ||
Riga 108: | Riga 108: | ||
===Server DNS=== | ===Server DNS=== | ||
Per poter navigare su internet, | Per poter navigare su internet, � necessario che i PC della nostra rete locale abbiano accesso ad un server [http://it.wikipedia.org/wiki/DNS DNS] che traduca per noi gli indirizzi internet in indiritti IP. | ||
Un modo per fare questo consiste nell' impostare per ciascuno dei nostri PC i server DNS forniti dal nostro provider. | Un modo per fare questo consiste nell' impostare per ciascuno dei nostri PC i server DNS forniti dal nostro provider. | ||
Esiste tuttavia un' alternativa molto | Esiste tuttavia un' alternativa molto pi� comoda e performante: creare un nostro server DNS ed utilizzarlo in sostituzione di quelli del provider. Questa soluzione porta ad alcuni vantaggi: | ||
* sui pc della LAN dovremo configurare sempre un solo server DNS immutabile e che conosciamo bene (senza faticose ricerche); | * sui pc della LAN dovremo configurare sempre un solo server DNS immutabile e che conosciamo bene (senza faticose ricerche); | ||
* i tempi di risposta sono nettamente | * i tempi di risposta sono nettamente pi� performanti rispetto a server esterni alla LAN, sia perch� il server � raggiungibile direttamente (senza instradamento attraverso internet), sia perch� sfrutta un sistema di cache (se 10 pc chiedono l' indirizzo di debian.org, ad esempio, il nostro DNS effetter� la richiesta solo la prima volta e per le restanti 9 utilizzer� le informazioni memorizzate nella propria cache); | ||
* grazie a questo meccanismo di caching i dns del provider sono meno stressati e quindi | * grazie a questo meccanismo di caching i dns del provider sono meno stressati e quindi pi� performanti a loro volta. | ||
Per realizzare il nostro server useremo '''bind''', probabilmente il miglior software esistente per questo compito. | Per realizzare il nostro server useremo '''bind''', probabilmente il miglior software esistente per questo compito. | ||
Riga 121: | Riga 121: | ||
Per prima cosa installiamo bind9 ed alcuni strumenti utili: | Per prima cosa installiamo bind9 ed alcuni strumenti utili: | ||
<pre># apt-get install bind9 bind9-host dnsutils</pre> | <pre># apt-get install bind9 bind9-host dnsutils</pre> | ||
Ora configuriamo il server in modo che faccia le sue richieste ai server DNS che vogliamo noi | Ora configuriamo il server in modo che faccia le sue richieste ai server DNS che vogliamo noi anzich� ai ROOT SERVERS (sono pochi in tutto il mondo, molto stressati e aggiornati pi� lentamente di altri). Tutto quello che dobbiamo fare � editare la sezione '''options''' del file '''/etc/bind/named.conf.options''': | ||
<pre>options { | <pre>options { | ||
directory "/var/cache/bind"; | directory "/var/cache/bind"; | ||
Riga 140: | Riga 140: | ||
Passiamo ora alla configurazione degli altri PC della nostra rete domestica.<br> | Passiamo ora alla configurazione degli altri PC della nostra rete domestica.<br> | ||
===Premessa=== | ===Premessa=== | ||
Generalmente per le reti locali domestiche si utilizzano indirizzi IP del tipo 192.168.0.x dove x | Generalmente per le reti locali domestiche si utilizzano indirizzi IP del tipo 192.168.0.x dove x � un numero variabile tra 1 e 254. Questo significa che all' interno della stessa rete possiamo avere fino a 254 indirizzi IP univoci.<br> | ||
Generalmente il router di una rete ha come indirizzo IP il primo o l' ultimo della rete e | Generalmente il router di una rete ha come indirizzo IP il primo o l' ultimo della rete e cio� 192.168.0.1 oppure 192.168.0.254. In questo esempio noi useremo il primo. | ||
===Assegnare un IP=== | ===Assegnare un IP=== | ||
Ad ogni pc della LAN si deve assegnare un indirizzo ip per poter comunicare con gli altri pc della rete interna (che nel caso limite | Ad ogni pc della LAN si deve assegnare un indirizzo ip per poter comunicare con gli altri pc della rete interna (che nel caso limite � il solo pc che fa da router). Per assegnare un indirizzo IP statico basta usare il comando: | ||
<pre> | <pre> | ||
# ifconfig eth0 192.168.0.2 up | # ifconfig eth0 192.168.0.2 up | ||
</pre> | </pre> | ||
dove 192.168.0.2 | dove 192.168.0.2 � l'indirizzo arbitrario che si � scelto per la particolare macchina.<br> | ||
Il comando '''ifconfig''' permette di specificare molti | Il comando '''ifconfig''' permette di specificare molti pi� parametri, ma utilizzando l' indirizzo dell' esempio, questi verranno preconfigurati automaticamente. | ||
Per non riscrivere questo comando ad ogni boot, si | Per non riscrivere questo comando ad ogni boot, si pu� inserire in /etc/network/interfaces: | ||
<pre> | <pre> | ||
auto eth0 | auto eth0 | ||
Riga 163: | Riga 163: | ||
# route add default gw 192.168.0.1 | # route add default gw 192.168.0.1 | ||
</pre> | </pre> | ||
Per non dover scrivere questo comando ad ogni riavvio, | Per non dover scrivere questo comando ad ogni riavvio, � sufficiente aggiungere al file /etc/network/interfaces, subito al di sotto della direttiva ''''broadcast ...'''' la seguente linea: | ||
<pre> | <pre> | ||
gateway 192.168.0.1 | gateway 192.168.0.1 | ||
Riga 169: | Riga 169: | ||
===Impostare il server DNS=== | ===Impostare il server DNS=== | ||
Esistono due | Esistono due possibilit� per impostare il server DNS che i nostri PC useranno: | ||
*inserire nel file '''/etc/resolv.conf''' la seguente linea: | *inserire nel file '''/etc/resolv.conf''' la seguente linea: | ||
<pre>nameserver 192.168.0.1</pre> | <pre>nameserver 192.168.0.1</pre> | ||
assicurandoci di scriverlo nella prima riga del file ''(ordine con cui il sistema interroga i DNS | assicurandoci di scriverlo nella prima riga del file ''(ordine con cui il sistema interroga i DNS � identico a quello in cui compaiono in /etc/resolv.conf)'' | ||
*inserire all'interno del file /etc/network/interfaces, subito al di sotto della direttiva '''gateway ...''' la seguente linea: | *inserire all'interno del file /etc/network/interfaces, subito al di sotto della direttiva '''gateway ...''' la seguente linea: | ||
<pre> | <pre> | ||
dns-nameservers 192.168.0.1 | dns-nameservers 192.168.0.1 | ||
</pre> | </pre> | ||
{{box|Nota Bene|Entrambe le | {{box|Nota Bene|Entrambe le modalit� hanno la medesima efficacia: usarle entrambe non porta ad alcun conflitto}} | ||
===Riassumendo=== | ===Riassumendo=== | ||
Al termine della configurazione il vostro file /etc/network/interfaces dovrebbe essere simile a questo esempio: | Al termine della configurazione il vostro file /etc/network/interfaces dovrebbe essere simile a questo esempio: | ||
Riga 192: | Riga 192: | ||
ed il vostro file /etc/resolv.conf dovrebbe essere composto dall' unica linea: | ed il vostro file /etc/resolv.conf dovrebbe essere composto dall' unica linea: | ||
<pre>nameserver 192.168.0.1</pre> | <pre>nameserver 192.168.0.1</pre> | ||
===Client | ===Client Windows�=== | ||
Per la configurazione di eventuali PC con installato | Per la configurazione di eventuali PC con installato Microsoft� Windows� vi rimandiamo alla Guida in Linea, al sito di supporto ed al vostro rivenditore hardware (che per contratto � tenuto a fornirvi assistenza). | ||
==Test== | ==Test== | ||
Finalmente siamo arrivati al momento di testare la nostra rete domestica.<br> | |||
Nei prossimi minuti cercheremo di appurare se i vari elementi che abbiamo predisposto in precedenza sono effettivamente funzionanti e, se non lo sono, per quale motivo.<br> | |||
Per fare questo avremo bisogno di alcuni tra i pi usati strumenti diagnostici: '''ping''' e '''nslookup''', ma non preoccupatevi: il primo viene installato automaticamente ed il secondo abbiamo provveduto ad installarlo contestualmente a bind. | |||
===Comunicazione tra router e client=== | |||
Prima di tutto annotiamo l' indirizzo IP del client (in questo esempio: 192.168.0.2).<br> | |||
Ora apriamo una shell sul pc che funge da router e digitiamo il comando | |||
<pre> | |||
$ ping -c 4 192.168.0.2 | |||
PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data. | |||
64 bytes from 192.168.0.2: icmp_seq=1 ttl=255 time=1.41 ms | |||
64 bytes from 192.168.0.2: icmp_seq=2 ttl=255 time=0.953 ms | |||
64 bytes from 192.168.0.2: icmp_seq=3 ttl=255 time=0.988 ms | |||
64 bytes from 192.168.0.2: icmp_seq=4 ttl=255 time=1.02 ms | |||
--- 192.168.2.0 ping statistics --- | |||
4 packets transmitted, 4 received, 0% packet loss, time 3002ms | |||
rtt min/avg/max/mdev = 0.953/1.094/1.417/0.191 ms | |||
</pre> | |||
Per ora non ci interessa il significato dei messaggi a video, ma unicamente il fatto che dal router effettivamente possibile raggiungere (pingare) il client.<br> | |||
Possiamo essere certi che cos guardando semplicemente le statistiche riassuntive stampate al termine del test: la frase | |||
<pre>4 packets transmitted, 4 received, 0% packet loss, time 3002ms</pre> | |||
infatti ci informa che abbiamo trasmesso al client 4 pacchetti e che il client li ha ricevuti tutti. | |||
Se cos non fosse, avremmo avuto un output del tipo | |||
<pre> | |||
$ ping -c 4 192.168.0.2 | |||
PING 192.168.0.1 (192.168.0.2) 56(84) bytes of data. | |||
From 192.168.0.1 icmp_seq=1 Destination Host Unreachable | |||
From 192.168.0.1 icmp_seq=2 Destination Host Unreachable | |||
From 192.168.0.1 icmp_seq=3 Destination Host Unreachable | |||
From 192.168.0.1 icmp_seq=4 Destination Host Unreachable | |||
--- 192.168.0.2 ping statistics --- | |||
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 2998ms | |||
, pipe 3 | |||
</pre> | |||
Possiamo vedere che il client (192.168.0.2) non raggiungibile (Destination Host Unreachable) dal router (from 192.168.0.1). | |||
Se tutto andato bene passiamo al punto seguente, in caso contrario controlliamo: | |||
*che l' indirizzo del client sia corretto. | |||
*che i cavi di rete siano collegati correttamente; | |||
*che le schede di rete segnalino la presenza del segnale elettrico (ethernel link); | |||
==Conclusioni== | ==Conclusioni== | ||
contributi