[precedente] Umile Intro - Copertina - lm78 e Linux [successivo]

Articolo


Costruiamo una rete locale...

Negli ultimi tempi lo sviluppo di Internet è stato tale che ormai pensare ad un computer standalone, cioè non collegato alla Rete nemmeno attraverso un modem, equivale a privare il mezzo informatico di gran parte della sua potenza e comodità. Internet però non è fatta di computer collegati via modem, ma di innumerevoli reti locali, di computer collegati tra loro fisicamente via cavo. Dati i costi molto ridotti dell'hardware necessario per creare una rete locale, si può pensare di installarne una anche se avete solo due computer; potrete condividerne le risorse: i dischi, le stampanti, addirittura il modem per il collegamento ad Internet, permettendovi di navigare contemporaneamente dai vostri computer utilizzando una sola connessione.

In questo articolo verranno illustrati i metodi utilizzati per installare e configurare una rete locale con Linux. Nelle diverse distribuzioni esistono strumenti di configurazione per i vari passi, ma questi sono diversi l'uno dall'altro, quindi noi utilizzeremo i programmi da linea di comando, che sono gli stessi per tutte le distribuzioni, e lì dove queste si differenziano cercheremo di indicare le varie possibilità.
Si dà per scontata una conoscenza minima delle basi teoriche su cosa è una rete e di come si configura un kernel, e che il kernel installato sia della serie 2.0.x; si presuppone inoltre che siano state installate le schede ethernet, che i cablaggi siano stati fatti correttamente e che non ci siano conflitti hardware.
Si suppone inoltre che sul server sia funzionante un collegamento via modem (PPP o SLIP) verso un ISP.

Realizzeremo una rete ethernet TCP/IP, con un gateway verso l'esterno (il computer con il modem), e prevederemo un server DNS locale.

La rete locale da installare è formata nel nostro esempio da una macchina Linux con un modem, che farà da server DNS e da gateway verso Internet, da un client Linux e uno Windows95. Da notare il fatto che per il server non è necessaria una macchina estremamente potente, ma è sufficiente una macchina "datata" come un 486: Linux sfrutta appieno le potenzialità di macchine che altrimenti non potrebbero essere utilizzate, e permette di rivalutare anche il vecchio computer di qualche anno fa. :-)

1. COMPILAZIONE DEL KERNEL

Perché il sistema veda la scheda di rete bisogna ricompilare il kernel con inserito il supporto per il tipo di scheda che abbiamo installato. Per un elenco delle schede supportate si può consultare l'Hardware-HOWTO (su http://www.pluto.linux.it/ildp/HOWTO/). Questa operazione è necessaria anche in altri punti illustrati più avanti, quindi, per evitare di compilare più volte il kernel della stessa macchina, inseriamo qui uno schema con le opzioni da inserire nella configurazione rispettivamente della macchina server e del client.


Server:

Code maturity level options:

    Prompt for development and/or incomplete code/drivers

Loadable module support

    Enable loadable module support

    Kernel daemon support (e.g. autoload of modules)

Networking options

    Network firewalls

    TCP/IP networking

    IP: forwarding/gatewaying

    IP: firewalling

    IP: masquerading

    IP: ipautofw masquerading (EXPERIMENTAL) (raccomandato)

    IP: ICMP masquerading (opzionale)

    IP: always defragment (raccomandato)

Network device support

   Dummy net driver support (raccomandato)

    Ethernet (10 or 100Mbit)

    [Il supporto per la vostra scheda ethernet]

Attenzione: se avete una scheda NE2000 compatibile, il relativo supporto va inserito come modulo, e in /etc/conf.modules va inserita la linea options ne io=0x340

in cui sia indicato l'indirizzo di IO della scheda (altrimenti non viene vista dal kernel).


Client:


Code maturity level options:

   Prompt for development and/or incomplete code/drivers

Loadable module support

   Enable loadable module support

   Kernel daemon support (e.g. autoload of modules) (*)

Networking options

   TCP/IP networking

Network device support

   Dummy net driver support (raccomandato)

   Ethernet (10 or 100Mbit)

   [Il supporto per la vostra scheda ethernet]

Vale la stessa raccomandazione che per il server, a proposito delle schede NE2000 compatibili.

Compilati i kernel (e gli eventuali moduli), installateli e riavviate i computer. Se avete problemi nella compilazione del kernel, o non sapete come fare, fate riferimento alla documentazione del kernel, ed in particolare al README.kernel, presente nei pacchetti dei sorgenti del kernel stesso o, in italiano, su http://www.pluto.linux.it/ildp/kernel/LEGGIMI.kernel

Per controllare che le schede ethernet vengano viste correttamente dal kernel si possono leggere i messaggi di avvio della macchina; non c'e' bisogno di avviarla di nuovo, ma basta, su una shell di root, dare il comando dmesg | more

In un qualche punto dell'output, verso la fine, dovrebbe essere presente una linea del tipo eth0: 3c509 at 0x300 tag 1, 10baseT port, address 00 60 97 69 8a 7d, IRQ 10.

di cui ci interessa solo il nome del dispositivo, cioe' eth0.

I passi da seguire saranno i seguenti:

2. CONFIGURAZIONE DELLA RETE

Per la nostra rete interna utilizzeremo uno degli indirizzi IP riservati a questo scopo dall'RFC1597, cioè 192.168.0.0. E' altamente sconsigliato usare indirizzi non riservati.

Questa è la tabella che utilizzeremo per gli indirizzi IP:


Computer	Nome host	Indirizzo IP


server		server		192.168.1.1

client linux	linux		192.168.1.2

client win95	win95		192.168.1.3

Inizialmente configureremo la rete tra il server e il client linux, poi aggiungeremo il client windows.

Nei computer Linux i comandi che useremo sono ifconfig e route: Ifconfig configura l'interfaccia di rete, mentre route imposta i percorsi che i pacchetti IP devono fare. Dovremo inoltre inserire nei file di configurazione dei vari computer i nomi di ciascuno di essi e l'indirizzo IP del nameserver.

Indichiamo intanto ai computer il loro nome: nel file /etc/hosts inseriamo:

sul server:


127.0.0.1       localhost

192.168.1.1     server.rete.locale	server

sul client:


127.0.0.1       localhost

192.168.1.2     linux.rete.locale     	linux 

In /etc/hostname (/etc/HOSTNAME per la RedHat) inseriamo una linea con il nome completo del computer:


#

server.rete.locale

o


#

linux.rete.locale

Su entrambi server e client linux dovremo impostare l'indirizzo IP della scheda usando ifconfig:

per il server: ifconfig eth0 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.0

per il client: ifconfig eth0 192.168.1.2 netmask 255.255.255.0 broadcast 192.168.1.0

Dando il comando "ifconfig" dovrebbe comparire una maschera del genere:


eth0      Link encap:10Mbps Ethernet  HWaddr 00:40:95:24:06:34

          inet addr:192.168.1.1  Bcast:192.168.1.255 Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0

          TX packets:0 errors:0 dropped:0 overruns:0

          Interrupt:10 Base address:0x300 

in cui ovviamente il campo "inet addr" indica l'indirizzo IP della macchina. Abbiamo così impostato l'interfaccia di rete: il computer sa ora che alla scheda ethernet corrisponde un determinato indirizzo IP.

A questo punto va impostato il routing, cioè va indicata la strada da fare ai vari pacchetti IP per arrivare all'host di destinazione: dovremo dire che i pacchetti per la rete 192.168.1.0 vanno sulla ethernet, e dovremo indicare al client che tutti i pacchetti con altra destinazione vanno mandati al server (che poi, attraverso la connessione modem, li invierà alla macchina gateway del vostro ISP, e da lì ad Internet).

L'indicazione "destinazione qualunque" viene data attraverso il "default gateway": per i client sarà il server, per il server sarà il gateway di default indicato dall'ISP per la connessione modem.

Per il server: route add -net 192.168.1.0 dev eth0

per il client:


route add -net 192.168.1.0 dev eth0

route add default gw 192.168.1.1

Dando il comando route -n

dovrebbe apparire, per il server


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      0  	eth1

127.0.0.0       0.0.0.0         255.0.0.0       U     0      0      0  	lo

e per il client


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      0	eth0

127.0.0.0       0.0.0.0         255.0.0.0       U     0      0      0	lo

0.0.0.0         192.168.1.1     0.0.0.0         UG    1      0      0	eth0

A questo punto la comunicazione tra le due macchine dovrebbe essere attiva: provate a fare, dal server: ping 192.168.1.2

e dal client ping 192.168.1.1

dovreste avere in entrambi i casi un output di questo genere:


PING 192.168.1.1 (192.168.1.1): 56 data bytes

64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=1.4 ms

64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.9 ms

--- 192.168.1.1 ping statistics ---

2 packets transmitted, 2 packets received, 0% packet loss

round-trip min/avg/max = 0.9/1.1/1.4 ms

(interrompete i ping usando Ctrl-C).

La rete ora è configurata... ma se riavviate il computer la configurazione viene persa, e per mantenerla vanno aggiunte alcune linee agli script di inizializzazione dei computer. La gestione degli script di inizializzazione varia a seconda della distribuzione installata; vediamo come fare nelle distribuzioni più comuni.

Per Debian:

Debian mantiene le impostazioni per la configurazione della rete nel file /etc/init.d/network; possiamo quindi ripetere qui i comandi che abbiamo dato per la configurazione della rete, e questi verranno attivati ad ogni avvio del sistema.

Ecco come deve essere fatto il file /etc/init.d/network per il client e per il server:

sul client:


#!/bin/sh

ifconfig lo 127.0.0.1

route add -net 127.0.0.0

IPADDR=192.168.1.2

NETMASK=255.255.255.0

NETWORK=192.168.1.0

BROADCAST=192.168.1.255

GATEWAY=192.168.1.1

Ifconfig eth0 ${IPADDR}netmask ${NETMASK}broadcast ${BROADCAST}

route add -net ${NETWORK}

route add default gw ${GATEWAY}metric 1

sul server:


#!/bin/sh

ifconfig lo 127.0.0.1

route add -net 127.0.0.0

IPADDR=192.168.1.1

NETMASK=255.255.255.0

NETWORK=192.168.1.0

BROADCAST=192.168.1.255

ifconfig eth0 ${IPADDR}netmask ${NETMASK}broadcast ${BROADCAST}

route add -net ${NETWORK}

Su Redhat

RedHat gestisce i file di configurazione della rete in modo molto più complesso rispetto a Debian: ciascuna interfaccia di rete viene gestita da file separati, ed andare a metterci le mani diventa un po'complesso. Per fortuna c'è il Control Panel, da cui potete impostare i dati che vi servono!

Per ulteriori informazioni fate riferimento alla documentazione di RedHat, su http://www.redhat.com/support/docs/rhl/RHL-5.2-Manual/install-guide/manual/doc063.html#s8.2.3

Su SuSE

Anche su SuSE la configurazione della rete è molto semplificata, e può essere fatta direttamente da YaST.

Per le altre distribuzioni, consultate il manuale.

Configuriamo ora il client Windows 95. Ovviamente i dati da inserire sono equivalenti a quelli del client Linux! I dati vanno inseriti nella maschera corrispondente alla connessione TCP/IP della scheda di rete, che potete aprire da Avvio-Impostazioni-Pannello di controllo-Reti.


Indirizzo IP:	192.168.1.3

Netmask:	255.255.255.0

DNS:		192.168.1.1  	(vedi sezione 4 - impostazione del server DNS)

Gateway:		192.168.1.1

A questo punto dovreste poter fare ping dalla macchina Windows al server e al client linux (da Avvio-Esegui fate "ping 192.168.1.1" e "ping 192.168.1.2").

Abbiamo quindi impostato la connessione di rete tra i tre computer server, client linux e client windows, e possiamo comunicare tra di loro: dovreste poter, ad esempio, fare telnet dal client windows a quello linux, o al server; se avete impostato un server ftp su uno dei computer linux, dovreste potervi accedere dagli altri... insomma avete una rete TCP/IP in piena regola, e potete utilizzare tutti i servizi che volete, ovviamente installando il software adeguato. Non potete finora accedere a computer al di fuori della rete locale, ma questo è l'argomento della prossima sezione. :-)

3. IMPOSTAZIONE DEL MASQUERADING

Il masquerading serve per poter connettere ad Internet, attraverso un host, dei computer che non hanno indirizzi registrati. Se una macchina Linux connessa ad Internet ha configurato l'IP masquerading, tutti i computer ad esso connessi possono accedere ad Internet anche senza avere un indirizzo IP registrato.
In pratica, usando l'IP masquerading, potete sfruttare la vostra connessione ad Internet via modem da tutti i computer della vostra rete locale.

L'abilitazione dell'IP Masquerading va fatta sul server, non sugli altri computer; tutto il contenuto di questo capitolo si riferisce quindi al server, se non diversamente indicato.

Dovreste aver già compilato il kernel del server con il supporto per per l'IP-masquerading. Se non l'avete fatto, tornate alla sezione 1, "configurazione del kernel".

Se il kernel è a posto, è il momento di configurare ipfwadm, per permettere ai pacchetti di arrivare alle macchine interne alla rete: sul server impostate


ipfwadm -F -p deny

ipfwadm -F -a m -S 192.168.1.0/24 -D 0.0.0.0/0

inserendolo alla fine del file di inizializzazione indicato per ifconfig e route nella Debian, e configurandolo dal Control Panel e da YaST rispettivamente su RedHat e SuSE; per permettere ai computer della rete locale di utilizzare anche irc, ftp e quake in rete dovrete caricare anche i seguenti moduli:


modprobe ip_masq_ftp

modprobe ip_masq_irc

modprobe ip_masq_quake

A questo punto, se il server è collegato in rete, dovreste essere in grado di navigare anche dai client, usando però solo indirizzi IP di tipo numerico. Provate a fare, dal client, ping 192.106.105.10

e poi ftp 194.244.96.129

Se avete risposta, il masquerading funziona.

Per poter utilizzare la rete in tutte le sue funzionalità, l'ultima cosa da fare è configurare il DNS.

4. CONFIGURAZIONE DEL DNS SERVER

Mentre sul client Windows 95 abbiamo già impostato come DNS server il server della rete locale, sugli altri computer non abbiamo fatto nessuna configurazione. Le possibilità che ci si pongono sono due:

  1. fare affidamento solo su un DNS server esterno
  2. configurare un DNS server locale

La prima alternativa è ovviamente la più facile da applicare, ma non ci permette di risolvere i nomi dei computer della rete locale. Ovviamente tutti i servizi di rete sono ugualmente accessibili, ma bisogna utilizzare gli indirizzi di tipo numerico.

(Se volete utilizzare un server DNS esterno, in particolare quello del vostro provider, il suo indirizzo va inserito sia nella configurazione di Windows95, sia nel file /etc/resolv.conf delle macchine linux, in questo modo:


search dominio.isp

nameserver ip.del.nameserver.dell'isp

Analizziamo ora la configurazione del server locale. Il server sarà installato sulla macchina 192.168.1.1, cioè sul server. Sia il server stesso che le altre macchine devono dunque essere configurate in modo da cercare lì il DNS; la macchina Windows 95 è già stata configurata correttamente, mentre sulle macchine Linux vanno inserite in /etc/resolv.conf le seguenti linee:

sul server:


search rete.locale

nameserver 127.0.0.1

sui client:


search rete.locale

nameserver 192.168.1.1

Sul server vanno installati, se non ci sono già, i pacchetti bind e dnsutils (o bind-utils). Per installarli, a seconda della distribuzione che avete, si usa:


rpm -ivh nomepacchetto.rpm  	(per RedHat e SuSE)

dpkg -i nomepacchetto.deb	(per Debian)

...ovviamente dovete prima procurarveli, prendendoli dal CD-ROM o da un sito ftp :-)

Configureremo un server DNS che gestisca i nomi della rete locale, e che si appoggi ad un server esterno (quello del provider) per la risoluzione degli altri nomi. Dovremo quindi indicare a named (il demone che gestisce la risoluzione dei nomi) che il nostro server si occupa della rete locale, ed inserire negli appositi file di configurazione le informazioni per poter avere la risoluzione diretta (nome ->indirizzo IP) ed inversa (indirizzo IP -> nome).

Sul server vanno configurati i seguenti file (alcuni sono già esistenti, altri vanno creati da zero):

Questo è il file di default per bind (sulla debian). Qui viene indicato il fatto che si tratta di un nameserver caching only (cioè che fa solo da cache delle richieste in uscita).


/etc/named.conf

Options {

        directory "/var/named";

        forwarders {

	        141.250.2.2; 	// <- da sostituire con l'ip del DNS del 
				// provider

       	};

};

zone "localhost" {

        type master;

        file "named.local";

};


zone "127.in-addr.arpa" {

        type master;

        file "named.rev-local";

};

zone "rete.locale" {

        type master;

        file "rete.locale";

};


zone "1.168.192.in-addr.arpa" {

        type master;

        file "rete.locale.rev";

};

Questo è il file che viene letto per primo da named, ed indica per quali reti il nameserver gestisce le informazioni. Come si può vedere le zone sono quattro, due per il dominio localhost e due per il dominio rete.locale; per ciascun dominio si hanno due zone: quella per la risoluzione diretta (es. "rete.locale") e quella per la risoluzione inversa, che si indica con il suffisso "in-addr.arpa" (es. 1.168.192.in-addr.arpa), e per la quale l'ordine dei numeri che costituiscono l'indirizzo IP è invertito.
Da notare che per ciascuna zona è indicato il nome di un file, da inserire nella directory /var/named.

In questo file si indica anche quale è l'indirizzo IP del nameserver a cui vanno inoltrate le richieste per nomi non contemplati nelle zone indicate (forwarders).


/var/named/named.local

;

; BIND data file for local loopback interface

;

@       IN      SOA     localhost. root.localhost. (

                              1         ; Serial

                         604800         ; Refresh

                          86400         ; Retry

                        2419200         ; Expire

                         604800 )       ; Default TTL

;

@       IN      NS      localhost.

@       IN      A       127.0.0.1

Questo è il file di zona per la risoluzione diretta dell'interfaccia di loopback.


/var/named/named.rev-local


;

; BIND reverse data file for local loopback interface

;

@       IN      SOA     localhost. root.localhost. (

                              1         ; Serial

                         604800         ; Refresh

                          86400         ; Retry

                        2419200         ; Expire

                         604800 )       ; Default TTL

;

@       IN      NS      localhost.

1.0.0   IN      PTR     localhost.

E questo è il file per la risoluzione inversa dell'interfaccia di loopback.


/var/named/rete.locale

;

; dominio rete.locale

;

$ORIGIN rete.locale.

@       IN      SOA    server.rete.locale.   root.server.rete.locale.
(

                	1         ; Serial

                        0         ; Refresh

                    86400         ; Retry

                  2419200         ; Expire

                   604800 )       ; Default TTL

;

@       	IN      NS      server.rete.locale.

server  	IN      A       192.168.1.1

                IN      PTR     localhost.

linux		IN	A	192.168.1.2

win95           IN      A       192.168.1.3

E finalmente questo è il file che contiene le informazioni per il dominio locale. Attenzione a riportare esattamente i punti finali dove ci sono. Da notare che ciascun computer della rete locale ha un record di tipo A, che associa al nome un indirizzo IP, mentre il server ha anche un record PTR, che assegna un "alias", e un record NS che lo marca come server DNS della rete.


/var/named/rete.locale.rev

;

; reverse file for rete.locale

;

$ORIGIN 1.168.192.in-addr.arpa.

@       IN      SOA     server.rete.locale. root.server.rete.locale. (

                         1         ; Serial

                    604800         ; Refresh

                     86400         ; Retry

                   2419200         ; Expire

                    604800 )       ; Default TTL

;

@       IN      NS      server.rete.locale.

1       IN      PTR     server.rete.locale.

2       IN      PTR     linux.rete.locale.

3       IN      PTR     win95.rete.locale.

Questo invece è il file equivalente per la risoluzione inversa. Ad ogni indirizzo IP si associa un nome completo. Anche qui va fatta attenzione ai punti finali.

Fatte queste modifiche, con il comando ps auwx named

per vedere se c'e' già un processo di named (il demone DNS) attivo. Se esiste, fate kill -1 numeroprocesso

Altrimenti andate nella directory degli script di inizializzazione e date ./named start

per avviare il demone.

Controllate che non ci siano errori nei log: se ce ne sono viene riportato anche il numero della linea del file corrispondente, che dovete controllare (attenzione ai punti!). Se trovate degli errori e li correggete, ricordatevi di riavviare named ogni volta.

A questo punto, dovreste poter risolvere i nomi. Provate a fare


server:~# nslookup

Default Server:  localhost

Address:  127.0.0.1


> linux

Server:  localhost

Address:  127.0.0.1

Name:    linux.rete.locale

Address:  192.168.1.2


>

Se funziona, avete il DNS attivo, e la vostra rete è pronta!

Se non volete impazzirvi troppo con la configurazione del DNS, ricordate che potete sempre impostare come DNS server quello del vostro ISP. Inserite l'indirizzo IP corrispondente nella configurazione di Windows 95, e nei file /etc/resolv.conf dei computer Linux. In questo modo potrete risolvere i nomi durante la navigazione in Internet, anche se sarete costretti a richiamare i computer della rete locale con gli IP numerici.

A questo punto siete in grado di navigare in Internet da tutti i computer della vostra rete, ovviamente quando il server è connesso via PPP o SLIP. Potete anche comunicare tra i vari computer, scambiandovi dati usando l'FTP: ad esempio, se avete un solo lettore di CD-ROM, potete copiare i dati contenuti nei CD-ROM anche sugli altri computer, utilizzando l'FTP.

Se volete, potete inoltre installare un server web, un server di posta elettronica e prevedere tutti i servizi che normalmente si hanno su Internet... insomma, potete sfruttare i vostri computer al meglio, e trasformarli in vere e proprie macchine di rete! Ristampato con il permesso di inter.net

di Eugenia Franzoni

BIBLIOGRAFIA

Howto:

=====

NET-2-HOWTO

DNS-HOWTO

Ethernet-HOWTO

Hardware-HOWTO

Mini-howto:

==========

IP-Masquerade

Linux Network Administrator's Guide, guida del Linux Documentation Project

Ristampato con il permesso di Inter.net


[precedente] Umile Intro - Copertina - lm78 e Linux [successivo]