Sei sulla pagina 1di 8

Condividere la connessione Internet

23 febbraio 2008 E possibile condividere la connessione internet da Ubuntu verso tutti i PC della LAN senza installare alcun pacchetto aggiuntivo. In questo modo tutti i PC facenti parte della rete locale potranno navigare utilizzando la condivisione del nostro PC Linux. Dobbiamo conoscere linterfaccia che ci connette ad internet, generalmente se utilizziamo un modem sar ppp0 mentre se usiamo un router connesso ad un pc con due schede di rete linterfaccia sar eth1. Se la rete gi configurata baster vedere il nome dellinterfaccia di uscita con:
route -n | grep "0.0.0.0" | grep UG | awk '{print $8}'

Nel nostro esempio supporremo che il traffico verso internet sia gestito dallinterfaccia ppp0, cambiare eventualmente il nome dellinterfaccia con quella utilizzata. Loperazione di condivisione davvero molto semplice se effettuata da un terminale ma richiede i privilegi di amministratore (root) per cui allinterno di un terminale trasformiamoci in root usando:
sudo -s -H

Immettiamo naturalmente la nostra password e diventeremo utente root. Il prompt cambier da nostroutente@nomecomputer a root@nomecomputer. Questo ci assicura dellavvenuto cambio di utente. Adesso possiamo configurare il masquerading sul NAT (Network Address Translation) su iptables (il programma che si interfaccia col firewall interno di Linux). Ci consentir linoltro delle richieste da uninterfaccia ad unaltra, ad esempio dallinterfaccia eth0 che ci connette alla rete locale, allinterfaccia ppp0 oppure eth1 che smista il traffico internet. Per configurare il masquerading verso linterfaccia ppp0 utilizzeremo:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Possiamo verificare lavvenuto inserimento della regola con:


iptables -t nat -L

Osservando lopzione (catena) POSTROUTING che abbiamo specificato precedentemente. Se loperazione stata svolta correttamente troveremo:
Chain POSTROUTING (policy ACCEPT) target prot opt source MASQUERADE 0 -- anywhere destination anywhere

Ci significa che la regola di masquerading verr applicata per tutti gli indirizzi di origine ( source anywhere), diretti verso qualsiasi altro indirizzo (destination anywhere). Configurato il firewall per consentire il traffico verso lesterno, non ci resta che attivare il routing sullinterfaccia di rete. Questo consentir linoltro dei pacchetti predisponendo il nostro sistema come fosse un router. Per attivare il routing baster un semplice:
echo 1 > /proc/sys/net/ipv4/ip_forward

Per i pi curiosi, non sufficiente usare sudo ma necessariamente root poich sudo non consente la scrittura redirezionata, il comando sudo echo 1 > qualcosa significher scrivi 1 da root e quindi poni il risultato su qualcosa, non da root ma da utente normale. Per questa ragione il comando di

attivazione del routing produrrebbe lerrore: bash: /proc/sys/net/ipv4/ip_forward: Permesso negato. Fatto ci la nostra connessione internet condivisa con tutte le macchine della rete, non ci resta che impostare come gateway lindirizzo IP del computer che condivide la connessione su tutte le macchine che vogliamo fare accedere ad Internet e i server DNS che preferiamo. Se le macchine a cui vogliamo fornire la connessione Internet sono altri Ubuntu potremo cambiare gateway e DNS da Network Manager (Amministrazione, Rete). In questo esempio il PC senza connessione ha IP 192.168.1.7 e il PC che condivide la connessione Internet ha IP 192.168.1.12. Sulla scheda DNS inseriremo gli indirizzi DNS forniti dal nostro provider (sebbene sia possibile usare quelli del computer che condivide la connessione usando dnsmasq, non trattato per in questa sede). Se i PC a cui vogliamo dare la connessione sono dei Windows procederemo in maniera analoga: nella propriet della connessione alla rete locale assegneremo il gateway del nostro Ubuntu. In questo esempio il PC Windows avr IP 192.168.1.4 mentre quello Ubuntu che condivide la connessione 192.168.1.12. I DNS sono quelli del nostro provider Internet. E importante per ricordare che i comandi indicati sono transitori e le due regole (masquerading e routing) saranno perdute dopo un riavvio del sistema. E per possibile salvare le regole di iptables col seguente comando:
iptables-save > /etc/iptables-condivisione.rules

Mentre per ricaricarle il comando sar:


iptables-restore < /etc/iptables-condivisione.rules

Se vogliamo evitare di attivare e disattivare le regole su richiesta e preferiamo che sia fatto automaticamente allavvio creeremo uno script che le reimposti allavvio. Per cui sempre da root creiamo lo script attiva-condivisione-internet con:
cd /etc/network iptables-save > condivisione-internet.rules touch attiva-condivisione-internet chmod u+x attiva-condivisione-internet gedit attiva-condivisione-internet

E una volta aperto scriviamo allinterno:


iptables-restore < /etc/network/condivisione-internet.rules echo 1 > /proc/sys/net/ipv4/ip_forward

Salviamo il file ed apriamo quindi il file interfaces con:


gedit interfaces

Il contenuto di questo dipende dalle interfacce installate, in generale, in fondo alla definizione dellinterfaccia della nostra rete locale (qui eth0), aggiungeremo:
pre-up /etc/network/attiva-condivisione-internet

In questo modo le modifiche saranno riapplicate al riavvio della configurazione della rete. Se vogliamo proteggere la nostra rete usando iptables disponibile un ottimo tutorial su debianizzati.org.

Configurare Ubuntu come router


In questa guida viene utilizzato il terminale. Se non sai come si usa consulta la guida Utilizzare il terminale ed una buona dose di pazienza!

Nella configurazione di alcuni server si reso necessario configurare Ubuntu in modo che funzioni come un router LAN e permetta l'accesso ad internet. In questa guida descriver come configurare la scheda di rete utilizzando Ubuntu in modo che funga da router ad IP dinamico (DHCP). La procedura non complicata ma abbastanza lunga, avremo bisogno solo di qualche piccolo accorgimento, un po' di pazienza e, ovviamente, di due schede di rete. Hardware e software necessario Anzitutto saranno necessari: (ovviamente) un PC con Ubuntu Server (o desktop) installato; due schede di rete con presa Ethernet (eventualmente una PCI); uno switch con tanti ingressi quanti i PC da collegare alla rete; un modem con accesso ad internet.

Una cosa fondamentale che almeno una scheda di rete (che sar poi quella che utilizzeremo per gestire la rete interna) abbia il supporto dal driver per il MULTICAST, per verificarlo usa il comando ifconfig e verifica che nell'output sia presente qualcosa di simile: eth1 Link encap:Ethernet IndirizzoHW 00:23:8b:d8:xx:xx UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisioni:0 txqueuelen:1000 Byte RX:0 (0.0 B) Byte TX:0 (0.0 B)

se la parte in grassetto non contiene la parola MULTICAST sar necessario installare manualmente i driver per il supporto al muticasting per la tua scheda di rete. La procedura per fare questo passaggio dipende dal chipset utilizzato sulla tua scheda e, solitamente, fornita dai produttori della stessa. Il software necessario sar uno qualsiasi che offra il servizio di server DHCP. In questa guida verr utilizzato isc-dhcp-server disponibile nei repository universe di Ubuntu. Per installarlo sar sufficiente dare da terminale:
$sudo apt-get install isc-dhcp-server

N.B. Utilizzando un altro software la procedura sar leggermente diversa da quella descritta di seguito. Impostazione della scheda per la rete interna Identifichiamo le schede di rete, lanciando da terminale:
$ifconfig

Supponiamo che le due schede di rete si chiamino eth0 ed eth1; vogliamo impostare la scheda eth0 per la connessione alla rete esterna (accesso al web), mentre la eth1 per la rete interna. Per prima cosa occupiamoci del file /etc/network/interfaces. Creiamo una copia di backup delle configurazioni originali dando:
$sudo cp /etc/network/interfaces /etc/network/interfaces_back

ed apriamolo (ad esempio da terminale con sudo nano /etc/network/interfaces) per

aggiungere (o modificare se gi presenti) le impostazioni della scheda eth1: auto eth1 iface eth1 inet static address 192.168.4.1 netmask 255.255.255.0 broadcast 192.168.4.254 Sostituisci l'indirizzo 192.168.4.1 con quello che desideri assegnare alla rete interna, facendo attenzione ad inserire anche un broadcast coerente. Modifichiamo ora il file /etc/hosts aggiungendo alla fine la riga: 192.168.4.0/24
Questo passo non sempre necessario, ma in alcuni casi (non mi ben chiaro il motivo) la rete interna non sar funzionante senza inserire tale riga.

Configurazione del servizio DHCP Per l'impostazione del servizio DCHP si utilizzer il software isc-dhcp-server, installato all'inizio della procedura. Anzitutto, come buona norma, creiamo una copia di backup del file di configurazione /etc/dhcp/dhcpd.conf (ad esempio dando sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.back). Dopo averlo fatto apriamo il file con un editor di testo (ad esempio con sudo nano /etc/dhcp/dhcpd.conf) e cancelliamo tutto il contenuto. Inseriamo ora i seguenti parametri: default-lease-time 600; max-lease-time 7200; option subnet-mask 255.255.255.0; option broadcast-address 192.168.4.254; option routers 192.168.4.254; option domain-name-servers 192.168.1.1; option domain-name "mydomain.org"; subnet 192.168.4.0 netmask 255.255.255.0 { range 192.168.4.2 192.168.4.100; } per permettervi modifiche a tali parametri nel modo corretto ne analizzo brevemente il significato: default-lease-time il tempo standard per cui un indirizzo IP viene riservato ad uno stesso utente (tramite MAC address) [vedi Wikipedia.it - DHCP]; max-lease-time il tempo massimo per cui un utente pu richiedere che gli venga riservato l'indirizzo IP; broadcast-address l'indirizzo di broadcast e deve coincidere con quello riportato in /etc/network/interfaces in precedenza; domain-name-servers l'indirizzo DNS; domain-name un l'alias che si vuole assegnare al server che ospita il servizio DHCP. Aggiungiamo ora il route per l'indirizzo 255.255.255.255 utilizzando il comando
$sudo route add -host 255.255.255.255 dev eth1

se questo comando dovesse ritornare l'errore "255.255.255.255: Unknown host" sar necessario aggiungere la seguente riga al file /etc/hosts: 255.255.255.255 all-ones

ed infine dare da terminale:


$sudo route add -host all-ones dev eth1

IP forwarding e masquerading Ultimo ed essenziale passaggio quello di condividere la connessione dal nostro server Ubuntu con gli utenti locali tramite il forwarding di iptables. Per farlo bisogna creare un file, che chiamer con molta fantasia ip_forward, che contenga due semplicissimi comandi. Per farlo posizioniamoci (se non lo siamo gi) nell'home (usando cd ~) e diamo il comando:
$touch ip_forward

apriamo ora il file (ad esempio con nano ip_forward) ed inseriamo le seguenti linee:
echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

salviamo, chiudiamo il file e rendiamolo eseguibile con il comando


$chmod +x ip_forward

infine copiamolo in /etc/init.d e facciamo in modo che venga eseguito all'avvio del sistema utilizzando i seguenti comandi:
$ $sudo cp ip_forward /etc/init.d/ip_forward sudo update-rc.d ip_forward defaults

abilitiamo ora il forwarding accedendo al file /etc/sysctl.conf e modificando la linea net.ipv4.ip_forward=0 con net.ipv4.ip_forward=1 a questo punto sar sufficiente riavviare il sistema per rendere le ultime modifiche effettive e, alla sua accensione, tutto dovrebbe essere funzionante. Se cos il mio consiglio quello di stapparti la "bottiglia di birra della vittoria" e goderti la connessione!

Introduzione
riunita qui la semplice procedura per connettere due PC in modo da averne solo uno collegato verso l'esterno che condivide la connessione tramite LAN. In caso di malfunzionamenti delle propria scheda di rete consultare la guida ADSLPPPoE.
internet ---> router (o modem) ---> server ---> client

Tra server e client necessario usare un cavo cross o passare attraverso un hub o uno switch.

Impostare gli IP
Eseguire le seguenti istruzioni solo dopo aver fatto una copia di backup dei file da modificare.|| Da effettuare solo sul server. Sostituire il file /etc/network/interfaces con il seguente file:

# Questo file descrive le opzioni delle periferiche di rete # da qui vengono settate o attivate # settare gli ip in /etc/hosts # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet dhcp #The LAN network interface auto eth1 iface eth1 inet static address 192.168.1.1 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.1.255 # decommentate qui se aggiungete una terza scheda adatta come access point (prism2) # The Wireless lan network interface #auto wlan0 #iface wlan0 inet static # name Wireless LAN card # wireless_essid MYNETWOTK # wireless_key FEFEFEFEFE # wireless_channell 11 # wireless_mode managed # address 192.168.2.1 # netmask 255.255.255.0 # network 192.168.0.0 # broadcast 192.168.2.255

Analogamente sul client:


# Questo file descrive le opzioni delle periferiche di rete # da qui vengono settate o attivate # settare gli IP in /etc/hosts # The loopback network interface auto lo iface lo inet loopback #The LAN network interface auto eth0 iface eth0 inet static address 192.168.1.2 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.1.255 gateway 192.168.1.1 # decommentate qui se aggiungete una seconda scheda wi-fi # The Wireless lan network interface #auto eth1 #iface eth1 inet static # name Wireless LAN card # wireless_essid MYNETWOTK # wireless_key FEFEFEFEFE # wireless_channell 11

# # # # # #

wireless_mode managed address 192.168.2.2 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.2.255 gateway 192.168.2.1

Impostare gli host


Da effettuare su tutti i PC e server connessi alla LAN. Ora che le schede del gateway sono impostate, necessario configurare gli host. Prima di tutto fare una copia di backup del file hosts con il comando:
cp /etc/hosts /etc/hosts_old

Quindi modificare il file /etc/hosts come segue:


# /etc/hosts deve essere uguale per tutti, server e utenti # sudo vi /etc/hosts per modificarlo # la riga seguente non v mai modificata 127.0.0.1 localhost.localdomain localhost localhost.localdomain localhost server # Elenco hosts IPV6 della rete # non si devono mai ripetere # non devono avere mai gli stessi numeri 192.168.1.1 server 192.168.1.2 portatile 192.168.1.3 guest 192.168.1.4 fisso 192.168.1.5 serverstampa 192.168.1.6 nomehost1 192.168.1.7 nomehost2 192.168.1.8 nomehost3 #decommentare in caso di rete wireless #i nomi host non devono contenere segni particolari!!! #vedi /etc/network/interfaces #192.168.2.1 serverwifi #192.168.2.2 portatilewifi #192.168.2.3 guestwifi #192.168.2.4 nomehost1 #192.168.2.5 nomehost2 #192.168.2.6 nomehost3 #192.168.2.7 nomehost4 #192.168.2.8 nomehost5

IP forwarding e masquerading
Da effettuare solo sul server che funge da gateway. Copiare in un file nella propria directory home le righe seguenti:
echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

Salvare il file con il nome di ip_forward e renderlo eseguibile:

sudo chmod 755 ip_forward

Spostare il file in /etc/init.d. necessario fare in modo che questo script venga eseguito all'avvio. Per fare questo ci avvaliamo di BUM:
sudo apt-get install bum

Avviare BUM e selezionare ip_forward, salvare e chiudere.