Configurare un Router domestico Mike Frysinger Alberto Santini Cristiano Chiucchiolo Andrea Menegolo In questo documento viene spiegato come trasformare una vecchia macchina, su cui è installato Gentoo, in un router domestico per collegare tutta la casa ad Internet. 1.39 2008-08-19 Introduzione

Costruire il proprio router partendo da vecchi pezzi di PC ha molti vantaggi rispetto al comprare un router di marca, ad esempio un Linksys. Il primo di questi vantaggi è l'avere un controllo completo sulla connessione. Gli altri si possono immaginare; si può realizzare praticamente qualsiasi cosa in questo modo, basta ve ne sia la necessità.

Questa guida mostrerà come attivare un servizio di NAT ("Network Address Translation" - ndT: "Traduzione Indirizzo di Rete") configurando il kernel ed iptables, come fornire ed impostare alcuni tra i servizi più comuni: DNS (Domain Name System) attraverso dnsmasq, DHCP (Dynamic Host Configuration Protocol) attraverso dhcpd, ADSL (Asymmetric Digital Subscriber Line) attraverso ppp. Alla fine, si concluderà con qualcosa di più sofisticato e divertente (port forwarding, regolazione del traffico di dati, impostazione di proxy/caching, ecc...).

Prima di cominciare, è bene assicurarsi che il proprio PC soddisfi una serie di requisiti. Innanzitutto devono essere presenti almeno due schede di rete nel computer. Inoltre bisogna conoscere le impostazioni della propria connessione ad Internet (ad esempio gli indirizzi IP/DNS/GateWay e username/password). Infine, c'è bisogno di un po' di tempo libero e di simpatia verso Gentoo.

Questa guida si basa sulla seguente configurazione tipo:

  • eth0 - Scheda di rete connessa alla propria LAN (Local Area Network)
  • eth1 - Scheda di rete connessa alla WAN (Wide Area Network)
  • La LAN utilizza il set 192.168.0.xxx di IP privati
  • L'IP del router è quello standard (192.168.0.1)
  • Sul router viene eseguito Linux 2.4 o 2.6 - Con Linux 2.0 o 2.2 bisogna fare da sé
Per motivi di sicurezza, si consiglia vivamente di disattivare sul router tutti i servizi che non sono necessari finché non si disporrà di un firewall configurato e attivo. Per vedere i servizi attivi, usare il comando rc-status.
Configurazione del kernel

Come prima cosa, il kernel ha bisogno dei driver per entrambe le schede di rete. Per vedere se le schede sono già state correttamente riconosciute dal kernel, si può usare il comando ifconfig. Il proprio output può essere diverso da quello che segue, ma questo non ha importanza: quello che conta è che siano mostrate entrambe le interfacce di rete.

# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:60:F5:07:07:B8
          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
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
          Interrupt:11 Base address:0x9800

eth1      Link encap:Ethernet  HWaddr 00:60:F5:07:07:B9
          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
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
          Interrupt:10 Base address:0x9400

Se non si vede una o entrambe le schede di rete e non si sa che tipo di schede sono, si può provare a lanciare il comando lspci | grep Ethernet. Nel caso in cui lspci non sia installato nel proprio sistema, eseguire il comando emerge pciutils. Appena ottenute le informazioni necessarie, ricompilare il kernel attivando il supporto per le proprie schede di rete.

Il secondo requisito è il supporto ad iptables, per il NAT e per il controllo del traffico (se lo si vuole attivare). Nella lista che segue le opzioni sempre richieste sono segnate con (*), quelle richieste solo per l'ADSL via PPPoE sono segnate con (a), quelle consigliate a tutti con (x) e quelle per il controllo del traffico con (s). Non importa se si sceglie di compilare questi supporti direttamente nel kernel o come moduli, purché questi ultimi siano comunque caricati non appena ce ne sia bisogno.

Networking options  --->
   [*] TCP/IP networking
      [*] IP: advanced router
   [*] Network packet filtering (replaces ipchains)
Se si usa un kernel 2.4.x., per DHCP bisogna abilitare la seguente voce:
   [*] Socket Filtering

   IP: Netfilter Configuration  --->
      [*] Connection tracking (required for masq/NAT)
         [x] FTP protocol support
         [x] IRC protocol support
      [*] IP tables support (required for filtering/masq/NAT)
         [*] IP range match support
         [x] MAC address match support
         [*] Multiple port match support
         [*] Packet filtering
            [*] REJECT target support
            [x] REDIRECT target support
         [*] Full NAT
            [*] MASQUERADE target support
         [s] Packet mangling
            [s] MARK target support
         [x] LOG target support

   QoS and/or fair queueing  --->
      [s] QoS and/or fair queueing
         [s] HTB packet scheduler
         [s] Ingress Qdisc

      [a] PPP (point-to-point protocol) support
         [a] PPP filtering
         [a] PPP support for async serial ports
         [a] PPP support for sync tty ports
         [a] PPP Deflate compression
         [a] PPP BSD-Compress compression
         [a] PPP over Ethernet
È possibile che vi siano differenze tra i kernel 2.4 e 2.6, ma si dovrebbe essere in grado di venirne a capo da soli senza difficoltà. Inoltre, per il kernel 2.6, queste opzioni hanno la tendenza ad essere spostate frequentemente. Buona fortuna!
Collegarsi alla WAN (ovvero ad Internet)
Introduzione

Ci sono moltissimi modi di connettersi ad Internet, quindi questa guida tratterà soltanto quelli usati dall'autore ovvero un collegamento ADSL (PPPoE) e uno con modem telefonico (con IP statico o dinamico). Se si conoscono altri metodi, mettere al corrente l'autore inviandogli una mail. Saltare senza problemi qualsiasi delle seguenti sezioni di questo capitolo, se non sono di interesse. Lo scopo di questo capitolo è di connettere il router ad Internet attraverso eth1.

ADSL e PPPoE

Tutto il software prodotto riguardante PPPoE che era fornito dal pacchetto rp-pppoe (Roaring Penguin) è stato integrato nel pacchetto standard di PPP. Quindi basta eseguire il comando emerge ppp per avere tutto il necessario. Adesso è necessario recuperare le informazioni relative a username e password, come annunciato in precedenza. Aprire il file /etc/conf.d/net nel proprio editor preferito e modificare i parametri in maniera appropriata.

È necessario sia installato baselayout-1.12.9 o superiore per far sì che la seguente configurazione funzioni correttamente.
(Sostituire 'pluto' con il proprio username e 'pippo' con la propria password)

# nano /etc/conf.d/net
Dire a baselayout di usare l'ADSL attraverso eth1 per ppp0
config_ppp0=( "ppp" )
link_ppp0="eth1"
plugins_ppp0=( "pppoe" )
pppd_ppp0=(
        "defaultroute"
        "usepeerdns"
        Per eventuali altre impostazioni, vedere il file
	  /etc/conf.d/net.example per maggiori dettagli.
)
username_ppp0="pluto"
password_ppp0="pippo"

# ln -s net.lo /etc/init.d/net.ppp0
# rc-update add net.ppp0 default
# /etc/init.d/net.ppp0 start
Quando l'interfaccia DSL si attiva, sarà creato il device ppp0. Anche se la scheda di rete è eth1, l'IP appartiene a ppp0. Da ora in avanti, negli esempi che usano 'eth1', sostituire quest'ultima voce con 'ppp0'. Assicurarsi di aver cambiato i permessi del file /etc/conf.d/net in modo che solo root possa leggere/scrivere su di esso: in quel file infatti ci sono i propri username e password. Chi sta effettuando il passaggio dal pacchetto rp-pppoe e chi è vittima di misteriose cadute della connessione, dovrebbe dare un'occhiata alla sezione su MTU del capitolo sulla Risoluzione dei problemi.
Connessione attraverso linea telefonica e/o IP statico/dinamico

Se si possiede un IP statico, ci sarà bisogno di conoscere qualche dettaglio in più: il proprio indirizzo IP, il proprio gateway ed i server DNS.

IP dinamico:
# emerge dhcpcd
# nano /etc/conf.d/net
Inserire una riga come questa:
config_eth1=( "dhcp" )

IP Statico:
# nano /etc/conf.d/net
Inserire delle righe come queste:
config_eth1=( "66.92.78.102 broadcast 66.92.78.255 netmask 255.255.255.0" )
routes_eth1=( "default gw 66.92.78.1" )
# nano /etc/resolv.conf
Aggiungere una riga per il server DNS:
nameserver 123.123.123.123

Configurazione sia per l'IP dinamico che statico:
# ln -s net.lo /etc/init.d/net.eth1
# rc-update add net.eth1 default
# /etc/init.d/net.eth1 start

Ora dovrebbe essere tutto configurato.

Collegarsi alla LAN

Questo passaggio è molto più facile rispetto al precedente.

# nano /etc/conf.d/net
Aggiungere una riga come questa:
config_eth0=( "192.168.0.1 broadcast 192.168.0.255 netmask 255.255.255.0" )
# rc-update add net.eth0 default
# /etc/init.d/net.eth0 start
Servizi LAN
Server DHCP

Un servizio molto utile, che evita di ricordare dettagli noiosi e difficili da memorizzare o di doverli inserire in interfacce di configurazione confusionarie è DHCP ("Dynamic Host Configuration Protocol" - ndT: "Protocollo per la Configurazione Dinamica degli Host"), che permette un funzionamento immediato dei computer non appena li si collega alla rete.

DHCP, come si può desumere dal nome, è un protocollo che consente di configurare in modo dinamico gli altri host in maniera del tutto automatica. Basta far girare il server DHCP sul router, passargli tutte le informazioni sulla propria rete (indirizzi IP validi, server DNS, gateway, ecc...) e, quando gli altri host si connetteranno alla rete, useranno il client DHCP per autoconfigurarsi. Niente confusione né pasticci. Per maggiori informazioni sul DHCP, visitare Wikipedia.

Verrà usato un pacchetto chiamato dnsmasq, che fornisce sia il servizio DHCP che DNS. Per il momento ci si concentrerà sull'aspetto DHCP. Tenere presente che se si vuole eseguire un diverso server DHCP, è possibile guardare un altro esempio nel capitolo "Qualcosa di divertente". Inoltre, se si desiderano sperimentare le opzioni del server DHCP, leggere i commenti del file /etc/dnsmasq.conf. Ad ogni modo, le opzioni predefinite dovrebbero andare bene.

# emerge dnsmasq
# nano /etc/dnsmasq.conf
Aggiungere questa riga per attivare dhcp:
dhcp-range=192.168.0.100,192.168.0.250,72h
Restringere dnsmasq alla sola interfaccia LAN
interface=eth0

# rc-update add dnsmasq default
# /etc/init.d/dnsmasq start

Ora il proprio router è un piccolo e affidabile server DHCP! Collegare alla rete qualche computer ed osservare attentamente come tutto funziona in modo semplice! Con un sistema MS Windows bisognerà andare nel pannello "Proprietà TCP/IP" e selezionare le opzioni "Ottieni un indirizzo IP automaticamente" e "Ottieni l'indirizzo del server DNS automaticamente". A volte queste modifiche non hanno effetto immediato e si dovrà aprire una finestra di comando ed eseguire ipconfig /release e ipconfig /renew. Ma ora basta con Windows, si torna al nostro pinguino preferito.

Server DNS

Quando qualcuno vuole visitare un sito web o raggiungere un altro host su Internet, solitamente si ricorda del nome di quel sito, piuttosto che di una stringa di numeri. Dopotutto è più facile ricordare "ebay.com" o 66.135.192.87? Ecco dove entra in gioco il DNS. I server DNS girano più o meno ovunque su internet e non appena qualcuno vuole visitare ebay.com, questi server trasformano "ebay.com" (di facile comprensione per l'utente) in "66.135.192.87" (di facile comprensione per il computer). Per maggiori informazioni sul DNS, visitare nuovamente Wikipedia.

Visto che si sta utilizzando dnsmasq come server DHCP ed esso include un server DNS, non resta più niente da fare qui! Il proprio router sta già fornendo il servizio DNS ai suoi client DHCP.

Si può benissimo scegliere altri server DNS se ci si trova meglio con quelli, ma il motivo per cui dnsmasq è grandioso è che fa esattamente quello che si vuole e niente di più. È un piccolo server per reti locali con funzionalità di caching e forwarding. Non si vuole offrire un DNS per un proprio dominio, ma soltanto un servizio DNS di base a chiunque si trovi nella vostra LAN.

NAT (ovvero IP-masquerading)

In questo momento, le persone nella vostra rete possono comunicare fra di loro e possono collegarsi a degli hostname tramite DNS, ma non possono ancora connettersi realmente ad internet.

Ecco dove entra in scena il Network Address Translation (NAT). NAT permette di connettere più computer in una LAN ad Internet, quando si hanno a disposizione un numero minore di indirizzi IP. Tipicamente la compagnia telefonica offre ad ogni utente un solo IP, ma in questa situazione si vuole che tutta la casa sia connessa ad internet. NAT è la magia che rende possibile tutto ciò. Anche in questo caso, maggiori informazioni circa NAT possono essere trovate su Wikipedia

Prima di cominciare, assicurarsi che iptables sia installato nel proprio sistema. Potrebbe non essere presente nonostante sia installato automaticamente nella maggior parte dei sistemi; per risolvere basterà eseguire il comando emerge iptables.
Prima di tutto eliminare le regole attualmente in uso
# iptables -F
# iptables -t nat -F

Configurare le regole predefinite per gestire il traffico
# iptables -P INPUT ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -P FORWARD DROP

Si possono semplicemente copiare ed incollare questi esempi
# export LAN=eth0
# export WAN=eth1

Limitare i propri servizi affinché funzionino solo dalla LAN
# iptables -I INPUT 1 -i ${LAN} -j ACCEPT
# iptables -I INPUT 1 -i lo -j ACCEPT
# iptables -A INPUT -p UDP --dport bootps -i ! ${LAN} -j REJECT
# iptables -A INPUT -p UDP --dport domain -i ! ${LAN} -j REJECT

(Opzionale) Abilitare l'accesso al server ssh dalla WAN
# iptables -A INPUT -p TCP --dport ssh -i ${WAN} -j ACCEPT

Limitare i pacchetti TCP/UDP solo alle porte privilegiate (0-1023)
# iptables -A INPUT -p TCP -i ! ${LAN} -d 0/0 --dport 0:1023 -j DROP
# iptables -A INPUT -p UDP -i ! ${LAN} -d 0/0 --dport 0:1023 -j DROP

Infine abilitare il NAT
# iptables -I FORWARD -i ${LAN} -d 192.168.0.0/255.255.0.0 -j DROP
# iptables -A FORWARD -i ${LAN} -s 192.168.0.0/255.255.0.0 -j ACCEPT
# iptables -A FORWARD -i ${WAN} -d 192.168.0.0/255.255.0.0 -j ACCEPT
# iptables -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE
Comunicare al kernel che l'ip forwarding è funzionante
# echo 1 > /proc/sys/net/ipv4/ip_forward
# for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done

Salvare le regole inserite: verranno ripristinate all'avvio del PC
# /etc/init.d/iptables save
# rc-update add iptables default
# nano /etc/sysctl.conf
Aggiungere/decommentare le righe seguenti:
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1

Se si possiede un indirizzo IP dinamico, probabilmente si vorrà questa opzione:
net.ipv4.ip_dynaddr = 1

Una volta finito, tutti i computer della propria rete dovrebbero essere in grado di connettersi ad internet e di usarla come se fossero collegati direttamente alla WAN.

L'opzione ip_dynaddr è utile per sistemi con collegamento su richiesta (on-demand) o quando il proprio ISP fornisce indirizzi dinamici. Questo risolve il problema che si incontra quando si tenta di stabilire una connessione prima che l'interfaccia internet sia pienamente attivata. In questo modo verrà garantito pienamente il funzionamento della connessione per i computer connessi al proprio router.

Qualcosa di divertente (da fare nelle giornate di pioggia)
Introduzione

Da qui in avanti verrà descritto qualcosa che potrebbe interessare il lettore e che è facile incontrare tra le funzionalità di un router. Tutto, in questo capitolo, è completamente opzionale.

Port Forwarding (Reindirizzamento delle/alle Porte)

A volte si potrebbe voler erogare alcuni servizi dai computer che sono dietro il router (ovvero all'interno della LAN) oppure semplicemente semplificarsi la vita quando ci si connette da remoto. Si potrebbe voler eseguire un server FTP, HTTP, SSH, o VNC in una o più macchine dietro il router ed essere in grado di connettersi a tutte. L'unico problema è che solo un servizio e solo un computer possono essere collegati ad una specifica porta. Per esempio, non c'è modo di installare tre server FTP dietro il router e poi connettersi a tutti e tre tramite la porta 21; solo uno potrà ascoltare sulla porta 21, mentre gli altri dovranno ascoltare, per esempio, sulle porte 123 e 567.

Tutte le regole di port forwarding hanno questa forma: iptables -t nat -A PREROUTING [-p protocollo] --dport [porta del router] -i ${WAN} -j DNAT --to [ip/porta del PC nella LAN]. Sfortunatamente, iptables non accetta hostname nelle regole di port forwarding. Se si sta effettuando il forwarding da una porta esterna (quella del router) uguale a quella interna (quella del PC nella LAN), si può omettere la porta di destinazione. Per ulteriori informazioni consultare la pagina di manuale di iptables: iptables(8).

È sufficiente copiare ed incollare questi esempi
# export LAN=eth0
# export WAN=eth1

Reindirizzare la porta 2 a un demone ssh di un host della LAN
# iptables -t nat -A PREROUTING -p tcp --dport 2 -i ${WAN} -j DNAT --to 192.168.0.2:22

Reindirizzare una porta FTP (21) ad un host della LAN
# iptables -t nat -A PREROUTING -p tcp --dport 21 -i ${WAN} -j DNAT --to 192.168.0.56

Reindirizzare una porta HTTP (80) ad un host della LAN
# iptables -t nat -A PREROUTING -p tcp --dport 80 -i ${WAN} -j DNAT --to 192.168.0.56

Reindirizzare due porte per VNC a due host della LAN
# iptables -t nat -I PREROUTING -p tcp --dport 5900 -i ${WAN} -j DNAT --to 192.168.0.2
# iptables -t nat -I PREROUTING -p tcp --dport 5901 -i ${WAN} -j DNAT --to 192.168.0.3:5900
Se si vuole stabilire una connessione VNC con 192.168.0.3 allora basta aggiungere ':1' all'hostname del router
Reindirizzare le porte SAMBA a un host della LAN (un sacco di porte per nascondere Windows)
# iptables -t nat -I PREROUTING -p tcp --dport 135 -i ${WAN} -j DNAT --to 192.168.0.2
# iptables -t nat -I PREROUTING -p tcp --dport 139 -i ${WAN} -j DNAT --to 192.168.0.2
# iptables -t nat -I PREROUTING -p tcp --dport 445 -i ${WAN} -j DNAT --to 192.168.0.2
# iptables -t nat -I PREROUTING -p udp --dport 137:138 -i ${WAN} -j DNAT --to 192.168.0.2
# iptables -t nat -I PREROUTING -p udp --dport 445 -i ${WAN} -j DNAT --to 192.168.0.2

Reindirizzare le porte BitTorrent (6881-6889) ad un host della LAN
# iptables -t nat -A PREROUTING -p tcp --dport 6881:6889 -i ${WAN} -j DNAT --to 192.168.0.2

Reindirizzare la porta eDonkey/eMule (4662) a un host della LAN
# iptables -t nat -A PREROUTING -p tcp --dport 4662 -i ${WAN} -j DNAT --to 192.168.0.55

Aggiungere il supporto al "Game Cube Warp"
# iptables -t nat -A PREROUTING -p udp --dport 4000 -i ${WAN} -j DNAT --to 192.168.0.56

Aggiungere il supporto a "Playstation2 OnLine"
# iptables -t nat -A PREROUTING -p tcp --dport 10070:10080 -i ${WAN} -j DNAT --to 192.168.0.11
# iptables -t nat -A PREROUTING -p udp --dport 10070:10080 -i ${WAN} -j DNAT--to 192.168.0.11

Xbox Live
# iptables -t nat -A PREROUTING -p tcp --dport 3074 -i ${WAN} -j DNAT --to 192.168.0.69
# iptables -t nat -A PREROUTING -p udp --dport 3074 -i ${WAN} -j DNAT --to 192.168.0.69
# iptables -t nat -A PREROUTING -p udp --dport 88 -i ${WAN} -j DNAT --to 192.168.0.69
Se si dispone di altri esempi simpatici o frequentemente usati, inviare una mail all'autore della guida.
Il demone identd (per IRC)

Il protocollo IRC (Internet Relay Chat) utilizza pesantemente il servizio ident. Ora che i client IRC sono dietro il router, c'è bisogno di un modo per raccogliere gli "ident" sia del router che dei client. Per fare ciò è stato creato un server chiamato midentd

# emerge midentd
# rc-update add midentd default
# /etc/init.d/midentd start

Ci sono alcuni altri server ident nel portage di Gentoo. Tenendo conto dei propri bisogni, si consiglia di dare un'occhiata ad oidentd e fakeidentd.

Time Server

Avere sempre un orologio di sistema sincronizzato è essenziale per mantenere un sistema in salute. Uno dei modi più comuni per farlo è usare il Network Time Protocol (NTP) e il pacchetto ntp (che fornisce sia l'implementazione lato client che quella lato server).

Molte persone usano dei client ntp nei loro computer. Ovviamente più client ci sono nel mondo più grandi sono i carichi di lavoro che i server ntp devono gestire. In situazioni come quella di una rete casalinga però, è possibile diminuire questo carico di lavoro dei server pubblici pur fornendo un risultato accurato e veloce ai propri host. Tutto quello che bisogna fare è eseguire nel router un server ntp che si sincronizzi con un server pubblico per poi fornire l'ora esatta al resto degli host nella LAN. Per cominciare, eseguire il comando emerge ntp.

# nano /etc/conf.d/ntp-client
Si può configurarlo, ma i valori predefiniti dovrebbero andare bene
# rc-update add ntp-client default

# nano /etc/ntp.conf
Aggiungere queste righe:
restrict default ignore
restrict 192.168.0.0 mask 255.255.255.0 notrust nomodify notrap
Questo permetterà di accedere al proprio server solo dagli host della LAN
# nano /etc/conf.d/ntpd
Si può configurarlo, ma i valori predefiniti dovrebbero andare bene
# rc-update add ntpd default

# /etc/init.d/ntp-client start
# /etc/init.d/ntpd start
Assicurarsi di aver abilitato il traffico in entrata ed in uscita alla porta ntp (123/udp) del server. Per i client sarà sufficiente l'abilitazione per il traffico in uscita, sempre sulla stessa porta.

Ora dare il comando emerge ntp anche sui PC client. In questo caso la configurazione dovrebbe essere più semplice perché verrà abilitato soltanto il client.

# nano /etc/conf.d/ntp-client
Cambiare il nome del server da 'pool.ntp.org' a '192.168.0.1' nella variabile NTPCLIENT_OPTS
# rc-update add ntp-client default
# /etc/init.d/ntp-client start
Server Rsync

Per reti in cui c'è più di una macchina con Gentoo, potrà capitare spesso di usare il comando emerge sync con un server remoto. È possibile risparmiare la propria banda e quella dei server di Gentoo usando un singolo server rsync locale. È una cosa veramente semplice da fare.

Per una guida più approfondita su rsync, consultare la guida su rsync ufficiale.

Dal momento che ogni computer con Gentoo richiede rsync nativamente, non c'è bisogno di installarlo. Basterà modificare il file di configurazione /etc/rsyncd.conf decommentando la sezione [gentoo-portage] ed assicurandosi di aggiungere un'opzione address. Tutte le altre impostazioni predefinite dovrebbero andare bene.

pid file = /var/run/rsyncd.pid
use chroot = yes
read only = yes
address = 192.168.0.1

[gentoo-portage]
  path = /mnt/space/portage
  comment = Gentoo Linux Portage tree
  exclude = /distfiles /packages

Avviare infine il servizio.

# /etc/init.d/rsyncd start
# rc-update add rsyncd default

L'unica cosa che rimane da fare è configurare i client affinché si colleghino all'IP del router per effettuare la sincronizzazione.

SYNC="rsync://192.168.0.1/gentoo-portage"
Server Mail

A volte può essere utile avere un proprio semplice server SMTP (Simple Mail Transfer Protocol) che gira sul router. Si potrebbe avere qualsiasi ragione per farlo; l'autore di questa guida ha attivato questo servizio di modo che gli utenti vedano la propria mail come inviata istantaneamente, mentre tutto il lavoro è lasciato al server mail. Oltretutto alcuni ISP, come Verizon, non accettano mail relaying (ovvero non permettono di usare i loro server SMTP) se non si possiede un account della loro rete. Ancora, si potrà limitare la banda per l'invio delle mail di modo che gli allegati grandi non creino rallentamenti della propria connessione per ore ed ore.

# emerge netqmail
Assicurarsi che l'output di 'hostname' sia corretto
# emerge --config netqmail
# iptables -I INPUT -p tcp --dport smtp -i ! ${LAN} -j REJECT
# ln -s /var/qmail/supervise/qmail-send /service/qmail-send
# ln -s /var/qmail/supervise/qmail-smtpd /service/qmail-smtpd
# cd /etc/tcprules.d
# nano tcp.qmail-smtp

Aggiungere una riga come questa alla sezione "Allow":
192.168.0.:allow,RELAYCLIENT=""

# make
# rc-update add svscan default
# /etc/init.d/svscan start

Chi scrive è un grande fan di qmail, ma il lettore è libero di scegliere un altro MTA. Quando si configurano gli account e-mail negli host della propria rete, impostare il server SMTP su di essi in modo che sia 192.168.0.1 e tutto dovrebbe funzionare. Per ulteriore documentazione, visitare l'homepage di netqmail.

Server DHCP completo

Prima si è usato dnsmasq per fornire il servizio DHCP a tutti i client. Per la maggior parte delle persone con una semplice, piccola LAN, questa soluzione è perfetta. Tuttavia, potrebbe esserci la necessità di qualcosa con più funzioni. Per questo ci si affida ad un server DHCP completo in tutto, fornito dal team ISC.

# emerge dhcp
# nano /etc/dhcp/dhcpd.conf
(Ecco un esempio per il file di configurazione:)
authoritative;
ddns-update-style interim;
subnet 192.168.0.0 netmask 255.255.255.0 {
        range 192.168.0.100 192.168.0.250;
        default-lease-time 259200;
        max-lease-time 518400;
        option subnet-mask 255.255.255.0;
        option broadcast-address 192.168.0.255;
        option routers 192.168.0.1;
        option domain-name-servers 192.168.0.1;
}
# nano /etc/conf.d/dhcpd
(Impostare IFACE="eth0")
# rc-update add dhcpd default
# /etc/init.d/dhcpd start

Questa è la configurazione minima richiesta per rimpiazzare le funzioni DHCP di dnsmasq usato in precedenza. A tal proposito, bisogna ricordarsi di disattivare le funzioni DHCP in dnsmasq (basta commentare l'impostazone dhcp-range in /etc/dnsmasq.conf e riavviare il servizio).

Connettere un'altra LAN (o due o tre o...)

A volte potrebbe esserci la necessità di connettere il proprio router ad un'altra LAN. Magari per collegarsi temporaneamente ad un gruppo di amici oppure il lettore potrebbe essere uno smanettone e voler sezionare gruppi diversi di computer o forse è solamente una persona solo molto, molto annoiata. Qualunque sia la ragione, estendere il router ad un'altra LAN dovrebbe essere abbastanza semplice. Negli esempi seguenti si darà per scontato che questa nuova rete sia collegata attraverso una terza scheda Ethernet chiamata eth2.

Per prima cosa, configurare l'interfaccia. Usare le istruzioni nel listato di codice 4.1, sostituendo eth0 con eth2 e 192.168.0 con 192.168.1.

Fatto ciò, configurare dnsmasq affinché fornisca i suoi servizi alla nuova interfaccia. Modificare di nuovo il file /etc/conf.d/dnsmasq, aggiungendo -i eth2 a DNSMASQ_OPTS; si può usare -i più volte. Poi modificare /etc/dnsmasq.conf e aggiungere un'altra riga come quella del dhcp-range nel listato di codice 5.1, sostituendo 192.168.0 con 192.168.1. Si possono avere anche più righe dhcp-range.

Per finire, guardare le regole nel listato di codice 5.2 e duplicare le regole che contengono -i ${LAN}. Per rendere le cose più semplici si potrebbe creare un'altra variabile, chiamandola ad esempio LAN2.

Risoluzione dei problemi
Strumenti utili

Se si riscontrano problemi nel cercare di mettere in comunicazione i propri computer, i seguenti strumenti potrebbero risultare utili (sono tutti contenuti nella categoria net-analyzer di portage):

wireshark Strumento grafico per visualizzare tutto il traffico di rete grezzo secondo alcuni filtri tcpdump Uno strumento da console per intercettare il traffico di rete grezzo secondo alcuni filtri iptrafMonitor IP per la LAN basato sulle librerie ncursesettercapMonitor/Controllore di rete basato sulle librerie ncurses
Strumento Descrizione
DHCP non parte

Quando viene lanciato lo script init.d di dhcp per la prima volta, potrebbe non caricarsi senza fornire alcuna informazione utile.

# /etc/init.d/dhcp start
 * Setting ownership on dhcp.leases ...          [ ok ]
 * Starting dhcpd ...                            [ !! ]

Il trucco sta nello scoprire dove il demone dhcpd invia il suo output. Basta semplicemente posizionarsi su /var/log e leggere i file di log. Dal momento che il file dipende da quale syslog si sta usando, si può lanciare il comando grep -Rl dhcpd /var/log per trovare il file esatto. La causa che ha generato il mancato avvio di dhcpd è probabilmente un errore nel file di configurazione. Si può anche provare a lanciare dhcpd -d -f ed effettuare il debug degli errori basandosi sull'output.

Valore dell'MTU sbagliato

Se occasionalmente si presentano degli errori (come il non riuscire a visualizzare alcune pagine web, mentre altre si visualizzano correttamente), potrebbero esserci dei problemi con il "Path MTU Discovery". Il modo più veloce per scoprirlo è lanciare iptables:

# iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Questo avrà effetto solo sulle nuove connessioni, per cui ricaricare la pagina web che presentava problemi per verificare se tutto è a posto. Potrebbe far comodo sapere che il valore MTU standard per connessioni ethernet a 100Mb è 1500; questo valore va bene anche per quanto riguarda PPPoA. Per le connessioni PPPoE è invece 1492. Per ulteriori informazioni consultare il capitolo 15 della guida Linux Advanced Routing & Traffic Control HOWTO.

Nel caso in cui questo comando non funzioni, si può provare ad inserire la regola nella tabella mangle. Per fare ciò basta aggiungere -t mangle al comando.

Impossibile connettere direttamente due computer

Se (per qualche ragione) si vogliono connettere due macchine direttamente senza usare un hub o uno switch, un normale cavo ethernet non funzionerà, a meno che non si possieda una scheda di rete Auto MDI/MDI-X (chiamate anche "autosensing"). Ci sarà bisogno di un altro tipo di cavo che viene chiamato cavo incrociato (crossover). Su Wikipedia si possono trovare tutti i dettagli su questo argomento (la pagina di Wikipedia in Italiano è qui).

Note Finali

Non ci sono note finali, tranne una. Se si riscontra qualsiasi problema con la guida, si prega di contattare l'autore o segnalare un bug qui. Se si possiede qualche pezzo interessante che si pensa possa migliorare questa guida, inviarlo tranquillamente all'autore, che provvederà ad includerlo.