October 14, 2007

Rete locale (LAN) con debian

Finalmente sono riuscito a creare una piccola e semplice Local Area Network (LAN) a casa, collegando tre computer (due laptop e una torre proveniente dalla spazzatura, due con installato Debian Etch e uno con Ubuntu 6.10 Edgy). Allora qui riassumo il tutto, per aiutare la mia pessima memoria e chiunque altro voglia mettere su facilmente una piccola rete locale a costo bassissimo. Ci ho messo tempo perche' non ho comprato nulla, tutto e' stato trovato o "alleggerito" da surplus buttati in angoli polverosi al lavoro, nessuno ne sente la mancanza diciamo. Per questo le scuole come le piccole organizzazioni con un ufficio e un po' di computer, potrebbero risparmiare molto e guadagnare in efficienza con le reti locali tutte di Linux, anche se poi e' possibile inserire PC "castrati" (Doc definition) con window$. Basti pensare a una classe di scuola per esempio: il PC centrale e' quello del prof, potente e costoso, con memoria e capacita' di calcolo etc.. Tutt'attorno ci sono quelli degli studenti, assolutamente vecchi e inutili altrimenti. Si collegano questi a quello centrale con una LAN, e gli studenti usano il processore del prof per fare qualunque cosa, invece dei loro vecchi e stanchi processori locali. Con un solo buon PC, un HUB o Switch o Router (da 0 a 100 euri) e tanti vecchi PC a costo zero, una classe di informatica e' bell'e sistemata, con un totale di 500 euri o poco piu'. Comunque.


                                                           / PC1 192.168.255.2
 -------------                                            /
|mondo esterno|--modem-------|PC principale|------------HUB---PC2 192.168.255.3
 -------------           eth0              eth1           \
                         dhcp          192.168.255.1       \ PCx 192.168.255.x


Da me il PC torre e' quello principale poiche' e' lui a essere collegato a internet, e distribuisce la connessione a quelli interni tramite masquerading (chiamato anche NAT, Network Address Translation: il provider di internet praticamente non si accorge di tutti i PC dietro il primo che maschera tutti gli altri). Allo stesso tempo serve da firewall per quelli interni, bloccando tutto quello che dal mondo esterno arriva e puo' essere dannoso, e facendo passare solo quello che e' conosciuto e sicuro (almeno si spera). Il firewall e' essenzialmente iptables, software potente quanto complicato che guida il Kernel del sistema nel decidere che fare dei pacchetti che arrivano alle schede di rete, ma (grande consiglio da Doc) reso molto piu' semplice da firehol, che crea configurazioni complicate per iptables a partire da un linguaggio molto piu' semplice.

Questo PC ha quindi due schede di rete ethernet (vecchissime e sempre dalla spazzatura, non c'e' bisogno di comprare nulla), con cavi RJ45 (trovati chissa' dove). Una (eth0) collegata al modem che collega al mondo esterno, e l'altra (eth1) alla rete interna. La rete interna e' messa insieme da un vecchissimo HUB 10T (rubato anche lui dalla spazzatura al lavoro, il mio miglior negozio di informatica per il momento), che praticamente mette in comunicazione i cavi a lui attaccati, senza nessun'altra operazione sui pacchetti (cosa che un router invece fa), ma davvero ora che tutto funziona non vedo perche' spendere soldi per un router visto che non noto rallentamenti (dipende dal bassissimo numero di PC allacciati credo). Quindi il PC centrale e' collegato da una parte al mondo esterno, dall'altra al HUB, a cui sono attaccati tutti i PC della rete locale. Entrambe le schede di rete del PC torre sono state automaticamente detettate da Debian e subito funzionanti, previa modifica del file /etc/network/interfaces. Nel PC torre questo file e' cosi:
 # The loopback network interface:
 auto lo
 iface lo inet loopback
 
 # To exernal world:
 auto eth0
 iface eth0 inet dhcp
 
 # To internal LAN:
 auto eth1
 iface eth1 inet static
 address 192.168.255.1
 netmask 255.255.255.0
 network 192.168.255.0
 broadcast 192.168.255.255
Per la rete locale il suo numero IP e' 192.168.255.1 (uno degli indirizzi IP che si possono senza problemi usare nelle reti locali), nella scheda eth1. Dal provider di internet invece prendera' un numero IP dinamicamente (dhcp) per la scheda eth0. Tutti gli alri PC all'interno della LAN hanno il file /etc/network/interfaces molto simile, ma con solo una scheda di rete configurata staticamente, un diverso IP number, e con un gateway indicato. Il gateway e' il PC a cui collegarsi per uscire nel mondo esterno, quindi per loro e' la torre 192.168.255.1 . Quindi per il secondo PC dentro la LAN, il file e' questo:
 # The loopback network interface:
 auto lo
 iface lo inet loopback
 
 # To internal LAN:
 auto eth1
 iface eth1 inet static
 address 192.168.255.2 
 netmask 255.255.255.0
 network 192.168.255.0
 broadcast 192.168.255.255
 gateway 192.168.255.1
Per il terzo PC, invece, solo "address" cambia in 192.168.255.3 e cosi' via per altri PC se ce ne fossero (192.168.255.x). Una volta che questi files sono stati cambiati, bisogna far ripartire la rete nei PC, con il comando /etc/init.d/networking restart oppure ifup --force eth1 (se la scheda relativa a quel computer e' eth1).

Se non fosse per il firewall ancora da configurare sul PC principale "torre", e forse firewalls negli alri PC, fino a qui la rete locale e' settata e tutto dovrebbe funzionare all'interno della LAN. E' possibile fare ping o ssh da un computer all'altro della LAN, per esempio. Per settare il firewall del PC principale, quindi firehol e' un ottimo strumento. Con aptitude install firehol lo si installa immediatamente. Per averlo caricato di default bisogna cambiare il file /etc/default/firehol in modo da avere la linea
 START_FIREHOL=YES
Quindi bisogna passare al suo file di configurazione /etc/firehol/firehol.conf. Sul linguaggio da utilizzare, non troppo complicato, qui si trova un ottimo tutorial. Il file sul mio PC principale e' il seguente:
 version 5
 
 interface eth0 internet
 policy reject
 protection strong
 server ssh accept
 server ping accept
 client ssh accept
 client http accept
 client https accept
 client ping accept
 client dns accept
 client ftp accept
 
 interface eth1 home
 policy reject
 server http accept
 server ssh accept
 server ping accept
 server dhcp accept
 server https accept
 server dns accept
 server ntp accept
 client ssh accept
 client ping accept
 
 router home2internet inface eth1 outface eth0
 masquerade
 route all accept
 
 router internet2home inface eth0 outface eth1
Nella prima parte si danno preferenze per eth0, cioe' la connessione col mondo esterno ("internet"). Nella seconda con la rete di casa ("home") su eth1. Di default tutto e' bloccato ("policy reject"), salvo quello specificato nelle linee successive, in cui alcuni programmi sono autorizzati (ssh, ping, http, https, ftp...). Nella parte "router home2internet inface eth1 outface eth0" e' indicato il passaggio dall'interno (LAN) all'esterno, con le relative interfaccie (eth0, eth1). Con la semplice linea "masquerading", si dice di voler il masquerading attivo. Nella successiva parte "router internet2home inface eth0 outface eth1", non essendoci nulla, si blocca il traffico da internet all'interno della LAN (il firewall). Finalmente, per far partire firehol, basta il comando #/etc/init.d/firehol start.

Aggiornamento, un'ultima cosa
Se proprio nella LAN interna si deve mettere un PC con windows (qui Vista), bisogna dare al PC un indirizzo IP fisso, mentre di default funziona normalmente quello fornito dinamicamente dal provider (DHCP). Per farlo:
Control Panel >> Network and Internet >> Network connections.
Right click su Local Area Connection >> Properties.
Left Click su Internet protocol Version 4,
click sul bottone Properties.
Selezionare Use the following IP address: (invece di Obtain an IP automatically).
Inserire gli indirizzi negli spazi. Nel mio caso (vedi sopra):
IP address: 192.168.255.3
Subnet mask: 255.255.255.0
Default gateway: 192.168.255.1
Quindi per il server DSN (quello che capisce l'indirizzo del computer o sito che si vuol visitare fuori in rete esterna), selezionare sotto Use the following DNS server address:.
Qui ho inserito l'indirizzo o gli indirizzi IP xxx.xxx.xxx.xx che si trovano nel PC gateway, che fa da porta al mondo esterno tramite masquerading, nel file /etc/resolv.conf.
Se poi si torna in ufficio, o un altro posto dove windows deve funzionare con IP dinamico (DHCP), allora si deve cambiare il tutto di nuovo, selezionando semplicemente nelle Properties i due bottoni Obtain an IP address automatically e Obtain DNS server address automatically

No comments: