giovedì 25 ottobre 2012

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!

Fonti
ISC DHCP Documentation & FAQ - Configurazione DHCP
Wiki Ubuntu-it.org - Creazione di un Gateway LAN
Note
• Se ti interessa creare un router con assegnazione ad IP fisso utilizzando Ubuntu server segui la guida Wiki Ubuntu-it.org;
• I passi elencati da questa guida sono testati e funzionanti su Ubuntu server 12.04 LTS a 64bit, ma dovrebbero essere i medesimi anche per le versioni precedenti/successive del sistema operativo.