<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
<article lang=it>
<artheader>
   
   <title>DHCP mini-HOWTO</title>

   <author>
      <firstname>Vladimir</firstname>
      <surname>Vuksan</surname>
      <affiliation>
         <address>
            <email>vuksan@veus.hr</email>
         </address>
      </affiliation>
   </author>

   <revhistory>
      <revision>
         <revnumber>v4.12</revnumber>
	 <date>22 Ottobre 2000</date>
         <authorinitials>vv</authorinitials>
      </revision>
   </revhistory>

   <abstract>
      <para>
	  Questo documento tenta di rispondere alle domande fondamentali su 
	  come configurare una Linux box per servire da server DHCP o client 
	  DHCP.
      </para>
      <para>Traduzione italiana a cura di Silvano Sallese 
	      email: sva.wally (at) libero (punto) it</para>
      <para>Revisione a cura di Gianluca Ciccarelli</para>
   </abstract>

</artheader>

<sect1> 
<title>Introduzione</title>

<sect2> 
<title>Liberatoria standard</title>
<para>
Non si assumono responsabilit&agrave; per il contenuto di questo documento. 
Usare i concetti, gli esempi e il rimanente 
contenuto a proprio rischio. Essendo questa un'edizione nuova del 
documento ci possono essere errori e inesattezze che, naturalmente, 
potrebbero danneggiare il sistema in uso. Procedete con cautela e, 
sebbene questi siano estremamente improbabili, l'autore non si assume
alcuna responsabilit&agrave; per eventuali danni.
</para>
<para>
Inoltre tenere a mente che queste <emphasis>NON</emphasis> sono 
informazioni ufficiali. La maggior parte dei contenuti di questo documento 
sono ipotesi, che tuttavia sembrano funzionare nella maggior parte 
dei casi. Usare le informazioni a proprio rischio.
</para>
</sect2>

<sect2> 
<title>Nuove versioni di questo documento</title>
<para>
Nuove versioni di questo documento sono disponibili presso:
</para>
<para>
<ulink
url="http://www.oswg.org/oswg-nightly/DHCP.html">http://www.oswg.org/oswg-nightly/DHCP.html</ulink>
</para>
<para>
Sono disponibili le seguenti traduzioni del DHCP mini-HOWTO:
</para>

<itemizedlist>
<listitem><para>Cinese - <ulink
url="http://www.linux.org.tw/CLDP/mini/DHCP.html">http://www.linux.org.tw/CLDP/mini/DHCP.html</ulink></para></listitem>
<listitem><para>Giapponese - <ulink
url="http://www.linux.or.jp/JF/JFdocs/DHCP.html">http://www.linux.or.jp/JF/JFdocs/DHCP.html</ulink></para></listitem>
<listitem><para>Spagnolo - <ulink
url="ftp://cuates.pue.upaep.mx/pub/linux/LuCAS/DHCP-mini-Como/">ftp://cuates.pue.upaep.mx/pub/linux/LuCAS/DHCP-mini-Como/</ulink></para></listitem>
</itemizedlist>

<para>
Chiunque puo` tradurre questo documento nella propria lingua.
Si richiede soltanto che venga fornito un collegamento al documento originale e 
si comunichi all'autore un URL della traduzione, cos&igrave; da poter includere 
un link ad essa.
</para>

</sect2>

<sect2> 
<title>Feedback</title>
<para>
Sono senz'altro bene accetti tutti i riscontri a questo documento. 
Senza aggiunte e consigli degli utenti, questo documento non potrebbe esistere.
Si mandino pure commenti, aggiunte e critiche, a 
<email>vuksan-feedback@veus.hr</email>.
</para>
</sect2>

<sect2> 
<title>Collaboratori</title>
<para>
La versione originale di questo documento &egrave; stata modificata 
da Paul Makeev.
</para>
<para>
Le seguenti persone hanno dato un contribuito a questo mini-HOWTO.
</para>

<itemizedlist>
<listitem><para>Heiko Schlittermann</para></listitem>
<listitem><para>Jonathan Smith</para></listitem>
<listitem><para>Dan Khabaza</para></listitem>
<listitem><para>Hal Sadofsky</para></listitem>
<listitem><para>Henrik Stoerner</para></listitem>
<listitem><para>Paul Rossington</para></listitem>
<listitem><para>molti altri</para></listitem>
</itemizedlist>

</sect2>

<sect2> 
<title>Informazioni di copyright</title>
<para>
This document is copyrighted (c) 1998 Vladimir Vuksan and
distributed under the terms of the OpenContent License (OPL). Full
text of the license can be found at
</para>
<para> 
<ulink
url="http://www.opencontent.org/opl.shtml">http://www.opencontent.org/opl.shtml</ulink>
</para>
</sect2>

</sect1>

<sect1>
<title>Il protocollo DHCP</title>
<para>
DHCP sta per Dynamic Host Configuration Protocol. Esso &egrave; 
utilizzato per controllare i parametri di rete essenziali degli 
host (i client in esecuzione) con l'aiuto di un server. DHCP 
&egrave; retrocompatibile con BOOTP. Per maggiori informazioni 
vedere la RFC 2131 (versione precedente RFC 1541) e successive. (Vedere 
nella sezione Risorse Internet alla fine del documento). In aggiunta
si pu&ograve; leggere
<ulink
url="http://web.syr.edu/~jmwobus/comfaqs/dhcp.faq.html">http://web.syr.edu/~jmwobus/comfaqs/dhcp.faq.html</ulink>.
</para>
<para>
Questo mini-HOWTO tratta sia il demone DHCP _SERVER_ che il 
demone DHCP _CLIENT_. La maggior parte delle persone ha bisogno 
del demone client, utilizzato dalle workstation 
per ottenere informazioni di rete da un server remoto. 
Il demone server viene utilizzato dagli amministratori di sistema per 
distribuire le informazioni di rete ai client, pertanto ad un normale 
utente serve il demone _CLIENT_.
</para>
</sect1>

<sect1>
<title>Setup del client</title>
<para>
Attualmente ci sono tre diversi programmi client 
DHCP per Linux: dhcpcd, pump e dhclient. Questo mini-HOWTO tratta 
principalmente dhcpcd.
</para>

<sect2>
<title>Scaricare il demone client (dhcpcd)</title>
<para>
A seconda della vostra distribuzione, potreste dover scaricare il demone 
del client DHCP. Nel caso lo si voglia compilare da codice sorgente, 
il pacchetto di cui si ha bisogno si chiama dhcpcd e la versione 
corrente &egrave; 1.3.18. &Egrave; mantenuto da Sergei Viznyuk 
<email>sergei@phystech.com</email> ed attualmente sono disponibili i 
pacchetti binari per la maggior parte delle distribuzioni.
</para>
<para>
Il codice sorgente di dhcpcd si pu&ograve; scaricare dai
seguenti siti:
</para>

<itemizedlist>
<listitem><para><ulink
url="ftp://ftp.phystech.com/pub/">ftp://ftp.phystech.com/pub/</ulink> (sito principale)</para></listitem>
<listitem><para><ulink
url="http://www.cps.msu.edu/~dunham/out/">http://www.cps.msu.edu/~dunham/out/</ulink></para></listitem>
</itemizedlist>

<para>
Successivamente, seguire le istruzioni qui sotto. Dovrebbero essere 
tra loro equivalenti.
</para>
</sect2>

<sect2 id="slackware">
<title id="slackware.title">Slackware</title>
<para>
&Egrave; possibile scaricare l'ultima copia del DHCPcd da qualsiasi 
mirror Metalab oppure dai siti:
</para>

<itemizedlist>
<listitem><para><ulink
url="ftp://metalab.unc.edu/pub/Linux/system/network/daemons">ftp://metalab.unc.edu/pub/Linux/system/network/daemons</ulink></para></listitem>
<listitem><para><ulink
url="ftp://ftp.phystech.com/pub/">ftp://ftp.phystech.com/pub/</ulink> (sito principale)</para></listitem>
</itemizedlist>

<para>
Scaricare l'ultima versione di <filename>dhcpcd.tar.gz</filename>. 
</para>

<itemizedlist>

<listitem>
<para>
Scompattarlo con il comando
</para>
<para>
<command>tar -zxvf dhcpcd-1.3.18pl1.tar.gz</command>
</para>
</listitem>

<listitem>
<para>
Portarsi nella directory ed eseguire make
</para>
<para>
<command>cd dhcpcd-1.3.18pl1</command>
</para>
<para>
<command>make</command>
</para>
</listitem>

<listitem>
<para>
Installarlo (si deve eseguire il seguente comando come root)
</para>
<para>
<command>make install</command>
</para>
</listitem>

</itemizedlist>

<para>
Questo creer&agrave; la directory /etc/dhcpc dove DHCPcd 
memorizzer&agrave; le informazioni DHCP e il file dhcpcd sar&agrave; 
copiato all'interno di /usr/sbin.
</para>

<para>
Affinch&eacute; l'inizializzazione del DHCP avvenga durante 
l'avvio del sistema, digitare:
</para>

<para>
<command>cd /etc/rc.d</command>
</para>

<para>
<command>mv rc.inet1 rc.inet1.OLD</command>
</para>

<para>
Questo sposter&agrave; il vecchio script di inizializzazione della 
rete in <filename>rc.inet1.OLD</filename>. Ora &egrave; necessario 
creare il nuovo script <filename>rc.inet1</filename>.Tutto ci&ograve; 
che serve &egrave; il seguente codice:
</para>

<programlisting>
#!/bin/sh
#
# rc.inet1      Questo script shell avvia il sistema base INET.

HOSTNAME=`cat /etc/HOSTNAME` #Questo probabilmente non &egrave; necessario, ma 
                             #&egrave; comunque consigliabile lasciarlo.

# Aggiunge il dispositivo di loopback.
/sbin/ifconfig lo 127.0.0.1
/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo

# SE SI DISPONE DI UNA CONNESSIONE ETHERNET, usare le seguenti linee per 
# configurare l'interfaccia eth0. Se si sta utilizzando solo il loopback o SLIP,
# non includere il resto delle linee di questo file.

/usr/sbin/dhcpcd
</programlisting>

<para>
Salvare lo script e riavviare il computer.
</para>

<para>
Quando si &egrave; terminato, andare all'<link linkend=nameserver>ultimo passaggio</link>.
</para>

</sect2>

<sect2 id="redhat6">
<title id="redhat6.title">RedHat 6.x e Mandrake 6.x</title>
<para>
La configurazione di DHCPcd in RedHat 6.0+ &egrave; veramente 
semplice. Quello che si deve fare &egrave; avviare il Pannello 
di Controllo digitando <command>control-panel</command>.
</para>
 
<itemizedlist>
<listitem><para>Selezionare "Configurazione di rete"</para></listitem>
<listitem><para>Cliccare su "Interfacce"</para></listitem>
<listitem><para>Cliccare su "Aggiungi"</para></listitem>
<listitem><para>Selezionare "Ethernet"</para></listitem>
<listitem><para>In "Modifica interfaccia Ethernet/Bus" selezionare 
"Attivare l'interfaccia all'avvio" e selezionare anche "DHCP" come 
"Protocollo di configurazione interfaccia"</para></listitem>
</itemizedlist>

<para>
Si noti che RedHat 6.x include un client DHCP chiamato 
"pump" anzich&eacute; il gi&agrave; menzionato dhcpcd. Il CD-ROM 
include l'RPM di dhcpcd, per cui, se non si ha fortuna con 
pump, tentare con dhcpcd. Una volta installato dhcpcd (ad esempio con
<command>rpm -i dhcpcd-1.3.17pl2-1.i386.rpm</command>) 
sar&agrave; necessario apportare alcune <link linkend=linuxppc-rh6>modifiche</link>.
</para>

<para>
Note aggiuntive di Alexander Stevenson
<email>alexander.stevenson@home.com</email>:
</para>

<para>
Non ho avuto fortuna con DHCPcd. Ci&ograve; che alla fine
ha funzionato &egrave; "pump", che &egrave; preinstallato nella 
Linux Mandrake 6.0 (e dunque penso sia incluso 
anche nella RedHat). Il comando che ho utilizzato &egrave;
</para>

<para>
<command>pump -i eth0 -h hostname</command>
</para>

<para>
Non ho idea di cosa sia il parametro "hostname", ma senza di esso il server non 
risponde.
</para>

<para>
Successivamente, ho modificato la riga nel mio script <filename 
class="directory">/sbin/ifup</filename> affinch&egrave; rispecchi 
il cambiamento; la versione di default non ha l'opzione -h, e 
cos&igrave; nel mio caso non funziona.
</para>

<para>
Fondamentalmente, se si utilizza linuxconf, e dopo aver impostato 
l'adattatore su "DHCP" esso continua a non funzionare, provare aggiungendo 
"<command>-h hostname</command>" alla riga di pump nello script 
<filename>/sbin/ifup</filename>.
Il mio script ora ha quest'aspetto:
</para>

<programlisting>
...
if [ -n "$PUMP" ]; then
    echo -n "Rilevazione informazioni IP per $DEVICE..."
    if /sbin/pump -i $DEVICE -h hostname; then
        echo " fatto."
    else
        echo " fallito."
        exit 1
    fi
else ...
</programlisting>

<para>
Un modo pi&ugrave; elegante per aggiungere il campo hostname 
viene suggerito da Aad van der Klaauw:
</para>

<para>
Attualmente sto configurando un systema gateway casalingo, ho dovuto 
impostare l'indirizzo MAC e usare il trucco '-h hostname'. 
Cos&igrave; ho deciso di *non* cambiare lo script ma di usare il file 
di configurazione. 
Nel mio /etc/sysconfig/network-scripts/ifcfg-eth0 ho aggiunto 
ci&ograve; che segue:
</para>

<programlisting>
DEVICE="eth0"
MACADDR="00:11:22:33:44:55"
DHCP_HOSTNAME="trigger_for_terayon"
</programlisting>

<para>
che non ha bisogno di essere cambiato insieme agli aggiornamenti ed &egrave; a 
mio modesto avviso un metodo pi&ugrave; "pulito".
</para>


<para>
Questo &egrave; quanto. Riavviare la macchina o digitare 
<command>/sbin/ifup eth0</command> alla riga di comando.
</para>

</sect2>

<sect2>
<title>RedHat 5.x</title>
<para>
La configurazione di DHCPcd in RedHat 5.0+ &egrave; molto semplice. 
Tutto ci&ograve; di cui si ha bisogno &egrave; avviare il Pannello di 
controllo digitando <command>control-panel</command>.
</para>

<itemizedlist>
<listitem><para>Selezionare "Configurazione di rete"</para></listitem>
<listitem><para>Cliccare su "Interfacce"</para></listitem>
<listitem><para>Cliccare su "Aggiungi"</para></listitem>
<listitem><para>Selezionare "Ethernet"</para></listitem>
<listitem><para>In "Modifica interfaccia Ethernet/Bus" selezionare 
"Attivare interfaccia all'avvio" e selezionare anche "DHCP" come 
"Protocollo di configurazione interfaccia".</para></listitem>
</itemizedlist>

<para>
Una volta terminato, andare all'<link linkend=nameserver>ultimo passaggio</link>. 
</para>
</sect2>


<sect2>
<title>RedHat 4.x e Caldera OpenLinux 1.1/1.2</title>
<para>
DHCPcd &egrave; incluso nella distribuzione RedHat standard come 
RPM e lo si pu&ograve; trovare nel CD-ROM della distribuzione 
nella directory RPMS, oppure &egrave; possibile scaricarlo da:
</para>

<para>
<ulink
url="ftp://ftp.redhat.com/pub/redhat/redhat-4.2/i386/RedHat/RPMS/dhcpcd-0.6-2.i386.rpm">ftp://ftp.redhat.com/pub/redhat/redhat-4.2/i386/RedHat/RPMS/dhcpcd-0.6-2.i386.rpm</ulink>
</para>

<para>
Installarlo con <command>rpm -i dhcpcd-0.6-2.i386.rpm</command>.
</para>

<para>
In alternativa, &egrave; possibile compilare la propria versione seguendo i 
passaggi descritti nel <link linkend=slackware endterm="slackware.title"></link>.
</para>

<para>
Le seguenti informazioni sono state fornite all'autore da nothing
<email>nothing@cc.gatech.edu</email>.
</para>

<blockquote>
<para>
Ho rimosso il mio ip statico ed il mio nome da <filename>/etc/resolv.conf</filename>,
ma ho lasciato nella riga di ricerca le righe relative ai miei due 
server dei nomi (per qualche motivo il mio dhcpcd non ha mai creato un 
<filename>/etc/dhcpc/resolv.conf</filename>, per cui devo utilizzare 
un <filename>/etc/resolv.conf</filename> statico).
</para>

<para>
In <filename>/etc/sysconfig/network</filename> ho rimosso le due voci
HOSTNAME e GATEWAY. Ho lasciato l'ordine delle voci dell'elenco cos&igrave; 
com'erano (NETWORKING, DOMAINNAME, GATEWAYDEV).
</para>

<para>
In <filename>/etc/sysconfig/network-scripts/ifcfg-eth0</filename> ho rimosso
le righe IPADDR, NETMASK, NETWORK, e BROADCAST. Ho lasciato DEVICE e ONBOOT 
com'erano. Ho cambiato la riga BOOTPROTO in BOOTPROTO=dhcp.
</para>
<para>
Salvare il file. Riavviare il computer.
</para>
</blockquote>

<para>
Quando si sia terminato, andare all'<link linkend=nameserver>ultimo passaggio</link>.
</para>

</sect2>

<sect2 id="debian">
<title id="debian.title">Debian</title>
<para>
Esiste un pacchetto deb di DHCPcd (assicurarsi che cominci con dhcpcd) su:
</para>

<para>
<ulink
url="http://ftp.debian.org/debian/dists/slink/main/binary-i386/net/">http://ftp.debian.org/debian/dists/slink/main/binary-i386/net/</ulink>
</para>

<para>
In alternativa, seguire le <link linkend=slackware endterm="slackware.title">
</link> istruzioni di installazione.
</para>

<para>
Per scompattare il pacchetto deb digitare 
<command>dpkg -i /where/ever/your/debian/packages/are/dhcpcd*deb</command>.
</para>

<para>
Sembra che non sia necessaria alcuna configurazione di DHCPcd perch&egrave;:
</para>

<blockquote>
<attribution>Da: Heiko Schlittermann
<email>heiko@os.inf.tu-dresden.de</email></attribution>
<para>
Il pacchetto dhcpcd installa il suo script d'avvio, come consueto 
per i pacchetti debian, in 
<filename>/etc/init.d/<replaceable>package_name</replaceable></filename>, 
come <filename>/etc/init.d/dhcpcd</filename>, e lo collega alle varie 
cartelle <filename class="directory">/etc/rc?.d/</filename>. 
</para>
</blockquote>

<para>
Il contenuto delle cartelle <filename class="directory">/etc/rc?.d/</filename> 
viene poi eseguito all'avvio.
</para>

<para>
Se non viene fatto il riavvio dopo l'installazione, si pu&ograve; pensare di far 
partire il demone manualmente: <command>/etc/init.d/dhcpcd start</command>.
</para>

<para>
Quando terminato andare all'<link linkend=nameserver>ultimo passaggio</link>.
</para>

</sect2>

<sect2>
<title>LinuxPPC e MkLinux</title>
<para>
La seguente sezione &egrave; stata scritta da R. Shapiro
</para>

<para>
Dalla distribuzione "1999" (R5), Linuxppc &egrave; ora quasi 
completamente compatibile con RedHat 6, con un unico accorgimento
(vedere di seguito). In generale, le istruzioni sono esattamente 
le stesse necessarie per la distribuzione corrente di 
<link linkend=redhat6 endterm="redhat6.title"></link>.
</para>

<para>
Resta il problema che RedHat 6 utilizza il client 'pump' per dhcp 
come predefinito e 'pump' non funziona in modo affidabile in Linuxppc.  
<anchor id="linuxppc-rh6">Per aggirare questo problema, si pu&ograve; installare 
l'ultimo dhcpcd di Sergei Viznyuk e, successivamente, modificare 
<filename>/sbin/ifup</filename> per utilizzare <command>dhcpcd</command> al 
posto di <command>pump</command>.
</para>

<para>
Cambiare
</para>

<programlisting>
if [ "$BOOTPROTO" = bootp -o "$BOOTPROTO" = dhcp ]; then
     PUMP=true
 fi

 if [ -n "$PUMP" ]; then
</programlisting>

<para>
con
</para>

<programlisting>
 if [  "$BOOTPROTO" = bootp ]; then
       echo " fatto."
     else
       echo " fallito."
       exit 1
     fi
 elif [ "$BOOTPROTO" = dhcp ]; then
     echo -n "Rilevazione informazioni IP per $DEVICE..."
     if /sbin/dhcpcd -d $DEVICE ; then
       if [ -f /etc/dhcpc/dhcpcd-${DEVICE}.exe ]; then
           /etc/dhcpc/dhcpcd-${DEVICE}.exe
       fi
</programlisting>

<para>
e apportare una modifica corrispondente per <command>ifdown</command>. 
Sostituire
</para>

<programlisting>
if [ "$BOOTPROTO" = bootp -o "$BOOTPROTO" = dhcp ]; then
....
fi
</programlisting>

<para>
con
</para>

<programlisting>
if [ "$BOOTPROTO" = bootp ]; then
fi

if [ "$BOOTPROTO" = dhcp ]; then
      if [ -f /var/run/dhcpcd-${DEVICE}.pid ]; then
              kill `cat /var/run/dhcpcd-${DEVICE}.pid`
              rm -f /var/run/dhcpcd-${DEVICE}.pid
      fi
fi
</programlisting>

<para>
Un rpm di dhcpcd funzionante per ppc &egrave; incluso nel cd di Linuxppc 1999;
un rpm leggermente pi&ugrave; recente &egrave; disponibile nella cartella 
contrib su <ulink url="ftp://ftp.linuxppc.org/">ftp://ftp.linuxppc.org/</ulink>.
I sorgenti, per una compilazione "out of the box" in Linuxppc 1999, sono 
disponibili presso <ulink url="ftp://ftp.phystech.com/pub/dhcpcd-1.3.17-pl9.tar.gz">ftp://ftp.phystech.com/pub/dhcpcd-1.3.17-pl9.tar.gz</ulink>.
</para>

</sect2>

<sect2 id="nameserver">
<title id="nameserver.title">Comporre il tutto</title>
<para>
Una volta riavviata la macchina, l'interfaccia di rete dovrebbe essere 
configurata. Digitare: <command>ifconfig</command>.
</para>

<para>
Dovrebbe comparire qualcosa di simile a questo:
</para>

<programlisting>
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Bcast:127.255.255.255  Mask:255.0.0.0
          UP BROADCAST LOOPBACK RUNNING  MTU:3584  Metric:1
          RX packets:302 errors:0 dropped:0 overruns:0 frame:0
          TX packets:302 errors:0 dropped:0 overruns:0 carrier:0 coll:0

eth0      Link encap:Ethernet  HWaddr 00:20:AF:EE:05:45
          inet addr:24.128.53.102  Bcast:24.128.53.255  Mask:255.255.254.0
          ^^^^^^^^^^^^^^^^^^^^^^^
          UP BROADCAST NOTRAILERS RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:24783 errors:1 dropped:1 overruns:0 frame:1
          TX packets:11598 errors:0 dropped:0 overruns:0 carrier:0 coll:96
          Interrupt:10 Base address:0x300 
</programlisting>

<para>
Se compaiono numeri normali sotto <literal>inet addr</literal> 
tutto &egrave; andato a buon fine. Se &egrave; visualizzato 0.0.0.0 niente paura, 
&egrave; un'impostazione temporanea prima che dhcpcd acquisisca 
l'indirizzo IP. Se dopo pochi minuti continua ad apparire 0.0.0.0, 
dare una occhiata a <link linkend=troubleshooting endterm="troubleshooting.title"></link>.  
DHCPcd &egrave; un demone e rimarr&agrave; in esecuziione per tutto 
il tempo che la macchina rimarr&agrave; accesa. Ogni tre ore 
contatter&agrave; il server DHCP e tenter&agrave; di rinnovare 
l'indirizzo IP. Registrer&agrave; tutti i messaggi nel syslog (in 
Slackware <filename>/var/adm/syslog</filename>, RedHat/OpenLinux 
<filename>/var/log/syslog</filename>).
</para>

<para>
Un'ultima cosa. &Egrave; necessario specificare i nameserver. 
Esistono due modi per farlo, chiedendo al proprio provider di 
fornire gli indirizzi del nameserver e, successivamente, inserire 
questi nel file <filename>/etc/resolv.conf</filename>, oppure DHCPcd 
otterr&agrave; la lista dal server DHCP e creer&agrave; un 
<filename>resolv.conf</filename> in <filename class="directory">/etc/dhcpc</filename>.
</para>
<para>
L'autore del presente howto ha deciso di utilizzare il 
<filename>resolv.conf</filename> di DHCPcd facendo come segue:
</para>

<para>
Fare una copia di sicurezza del vecchio <filename>/etc/resolv.conf</filename>: 
<command>mv /etc/resolv.conf /etc/resolv.conf.OLD</command>
</para>

<para>
Se la cartella <filename class="directory">/etc/dhcpc</filename> non esiste, 
crearla: <command>mkdir /etc/dhcpc</command>
</para>

<para>
Creare un collegamento da <filename>/etc/dhcpc/resolv.conf</filename> a 
<filename>/etc/resolv.conf</filename>: <command>ln -s
/etc/dhcpc/resolv.conf /etc/resolv.conf</command>
</para>

<para>
Se non funziona, provare questo (correzione  suggerita da 
<email>nothing@cc.gatech.edu</email> con una piccola correzione di 
Henrik Stoerner): </para> 

<anchor id="error3">
<para>
Quest'ultimo passaggio &egrave; stato fatto solo perch&egrave; il dhcpcd 
dell'autore non ha creato un <filename>/etc/dhcpc/resolv.conf</filename>.  
In <filename class="directory">/etc/sysconfig/network-scripts/ifup</filename> 
l'autore ha effettuato le seguenti modifiche (non sono di livello avanzato, ma 
funzionano):
</para>

<programlisting>
elif [ "$BOOTPROTO" = dhcp -a "$ISALIAS" = no ]; then
    echo -n "Utilizzo di DHCP per ${DEVICE}... "
    /sbin/dhcpcd -c /etc/sysconfig/network-scripts/ifdhcpc-done ${DEVICE}
    echo "echo \$$ > /var/run/dhcp-wait-${DEVICE}.pid; exec sleep 30" | sh

    if [ -f /var/run/dhcp-wait-${DEVICE}.pid ]; then
	^^^^
        echo "fallito."
        exit 1
</programlisting>

<para>
Cambiato in:
</para>

<programlisting>
elif [ "$BOOTPROTO" = dhcp -a "$ISALIAS" = no ]; then
    echo -n "Utilizzo di DHCP per ${DEVICE}... "
    /sbin/dhcpcd
    echo "echo \$$ > /var/run/dhcp-wait-${DEVICE}.pid; exec sleep 30" | sh

    if [ ! -f /var/run/dhcp-wait-${DEVICE}.pid ]; then
	^^^^^^
       echo "fallito."
       exit 1
</programlisting>

<note>
<para>
Osservare il ! (punto esclamativo) in <literal>if [ ! -f
/var/run/dhcp-wait-${DEVICE}.pid ];</literal>
</para>
</note>

<para>
Ora ci si pu&ograve; sedere e divertirsi :-).
</para>

</sect2>


<sect2>
<title>Note varie</title>
<para>
I seguenti passaggi non sono necessari, ma potrebbero essere utili in alcuni casi:
</para>

<orderedlist numeration="loweralpha">
<listitem>
<para>
Se si necessita della connessione di rete solo occasionalmente &egrave; 
possibile avviare <command>dhcpcd</command> dalla linea di comando (&egrave; 
necessario essere root per fare questo) con: <command>/usr/sbin/dhcpcd</command>.
</para>
<para>
Quando occorre disabilitare la rete, digitare
<command>/usr/sbin/dhcpcd -k</command>.
</para>
</listitem>
</orderedlist>

</sect2>


<sect2 id="troubleshooting">
<title id="troubleshooting.title">Risoluzione dei problemi</title>
<para>
Se sono stati seguiti i passaggi delineati in precedenza e non &egrave; 
possibile accedere alla rete, ci sono diverse possibili spiegazioni:
</para>

<sect3>
<title>La scheda di rete  non &egrave; correttamente configurata
</title>
<para>
Durante il processo d'avvio, Linux verifica la scheda di rete e comunica qualcosa del tipo:
</para>

<programlisting>
eth0: 3c509 at 0x300 tag 1, 10baseT port, address  00 20 af ee 11 11, IRQ 10.
3c509.c:1.07 6/15/95 becker@cesdis.gsfc.nasa.gov
</programlisting>

<para>
Se un messaggio come questo non appare, il sistema Linux 
non riesce a riconoscere la scheda ethernet.Se si possiede 
una generica scheda ethernet (un clone NE2000) 
si dovrebbe essere in possesso di un disco con strumenti DOS 
che &egrave; possibile utilizzare per configurare la scheda. 
Fare dei tentativi con gli IRQ finch&eacute; Linux riconosce 
la scheda (IRQ 9,10,12 solitamente vanno bene).
</para>
</sect3>

<sect3>
<title>
Il server DHCP supporta RFC 1541/Il server DHCP &egrave; Windows NT
</title>
<para>
Tentare l'esecuzione di <command>dhcpcd</command> digitando <command>dhcpcd -r</command>.
</para>

<para>
Utilizzare <command>ifconfig</command> per controllare se 
l'interfaccia di rete &egrave; configurata (attendere alcuni 
secondi per il processo di configurazione, inizialmente 
sar&egrave; <literal>Inet.addr=0.0.0.0</literal>)
</para>

<para>
Se questo risolve i problemi aggiungere l'opzione "-r" agli 
script d'avvio, ad esempio: al posto di <command>/sbin/dhcpcd</command> 
si avr&agrave; <command>/sbin/dhcpcd -r</command>.
</para>
<para>
Ad esempio, in RedHat modificare lo script

<filename>/etc/sysconfig/network-scripts/ifup</filename>

e cambiare quanto segue:
</para>

<programlisting>
        IFNAME=$[ {DEVICE} \
        "/sbin/dhcpcd -r -c /etc/"- etc etc.    
</programlisting>
</sect3>

<sect3>
<title>
Durante l'avvio si ha il messaggio di errore "Utilizzo di 
DHCP per eth0 ... fallito", ma il sistema funziona correttamente.
</title>
<para>
Molto probabilmente si sta usando RedHat e le istruzioni non sono state 
seguite con attenzione :-). Si sta dimenticando il ! (punto esclamativo) 
in uno dei passaggi. Tornare <link linkend=error3>qui</link> e controllare 
come sistemare la questione.
</para>
</sect3>

<sect3>
<title>La rete funziona per alcuni minuti e poi smette di rispondere
</title>
<para>
Ci sono alcuni report di gated (demone gateway) che compromettono 
il routing su piattaforme Linux, portando al problema 
sopra descritto.
Controllare se gated &egrave; in esecuzione con: <command>ps -auxww | grep gate</command>.
</para>

<para>
Se lo &egrave;, tentare di rimuoverlo con il gestore RPM di RedHat o 
rimuovendone la riga in <filename class="directory">/etc/rc.d/</filename>.
</para>
</sect3>

<sect3>
<title>
La scheda ethernet &egrave; riconosciuta durante l'avvio, ma 
appare il messaggio "NO DHCPOFFER" nel log. Inoltre, si d&agrave; il caso
che io abbia una scheda ethernet PCMCIA.
</title>
<para>
Assicurarsi che la porta 10BaseT (attacco "phone") sulla scheda di 
rete sia attivato. Il miglior modo per verificarlo &egrave; 
controllare per quale tipo di connettore la scheda &egrave; stata 
configurata durante l'avvio, ad esempio 
</para>

<programlisting>
eth0: 3c509 at 0x300 tag 1, 10baseT port, address  00 20 af ee 11 11, IRQ 10.
		            ^^^^^^^^^^^^
3c509.c:1.07 6/15/95 becker@cesdis.gsfc.nasa.gov
</programlisting>

<para>
Sono pervenute segnalazioni di utenti di computer portatili che 
hanno questo tipo di problemi dovuto alle utility PCMCIA (nello 
specifico, ifport) che imposta il tipo di connettore su 10Base2 
(thinnet). Bisogna assicurarsi che si stia usando 
10BaseT per la connessione. In caso contrario, riconfigurare la scheda 
e riavviare il computer.
</para>
</sect3>

<sect3>
<title>
Il mio client DHCP invia richieste broadcast ma nessuno risponde 
(contributo di Peter Amstutz)
</title>

<para>
Su alcuni sistemi &egrave; necessario includere un qualche 
hostname per la macchina come parte della richiesta. Con 
dhcpcd, farlo con <command>dhcpcd -h 
<replaceable>foohost</replaceable></command>
Probabilmente l'hostname richiesto sar&agrave; lo username 
dell'account sulla rete. 
</para>
</sect3>

<sect3>
<title>
Ho seguito tutti i passasggi, ma la mia macchina non riesce 
ancora a connettersi
</title>
<para>
Il modem solitamente memorizza l'indirizzo ethernet della 
scheda di rete, cos&igrave; se si connette un nuovo computer 
o si cambia scheda di rete, in qualche modo si dovr&agrave; 
istruire il modem per il riconoscimento del nuovo computer o 
della nuova scheda. Solitamente, &egrave; possibile spegnere 
il modem e riaccenderlo mentre il computer &egrave; acceso; 
oppure sar&agrave; necessario chiamare il supporto tecnico e 
dirgli che &egrave; stata cambiata la scheda di rete nel computer.
</para>

<para>
Alcune regole del firewall (regole ipfwadm) bloccano il 
traffico delle porte 67/68 usate dal DHCP per trasmettere le 
informazioni di configurazione. 
Controllare attentamente le regole del firewall.
</para>
</sect3>

<sect3>
<title>
Ho il servizio MediaOne Express e non riesco a connettermi.
</title>
<para>
Sembra che MediaOne aggiunga alcune cose al DHCP che non vi 
dovrebbero essere. In teoria questo non &egrave; pi&ugrave; un 
problema, ma se si presentano disservizi controllare queste cose. 
Se si ha la (s)fortuna di avere una macchina con Windows NT, 
nel "Visualizzatore di Eventi" si nota un messaggio di avvertimento come questo:
</para>
<programlisting>
DHCP ha ricevuto una opzione 067 sconosciuta di lunghezza 005. 
I dati grezzi sono forniti di seguito.

0000: 62 61 73 69 63            basic
</programlisting>

<para>
Se il problema &egrave; questo, andare su
<ulink
url="ftp://vanbuer.ddns.org/pub/">ftp://vanbuer.ddns.org/pub/</ulink>
e scaricare un eseguibile o prelevare il sorgente per risolvere il problema.
</para>
</sect3>
</sect2>

<sect2>
<title>Client DHCP alternativo (ISC dhclient)</title>
<para>
Se non si &egrave; avuto successo nel far funzionare la 
connessione in Linux con dhcpcd, si pu&ograve; provare 
ISC dhclient. Il client dhclient &egrave; fornito con la 
distribuzione DHCP di ISC, che include sia un client che un server DHCP. 
Istruzioni su come ottenere e compilare 
la distribuzione DHCP possono essere trovate 
<link linkend=dhcpserver>qui</link>. 
Una volta pronti, rileggere questa sezione per configurare 
il client.
</para>

<note>
<para>
La seguente informazione &egrave; stata fornita da 
Ted Lemon <email>mellon@isc.org</email>
uno degli autori del dhclient.
</para>
</note>

<para>
Con la corrente versione del client DHCP, non &egrave; 
necessario un file <filename>dhclient.conf</filename>. &Egrave; 
sufficiente invocare dhclient, ad esempio: 
<command>/sbin/dhclient</command>.
</para>

<para>
Questo configurer&agrave; tutte le interfacce broadcast. 
Se non funziona oppure si vuole specificare solo una interfaccia, 
creare un file <filename>/etc/dhclient.conf</filename> con questa 
configurazione di esempio.
</para>

<programlisting>
interface "eth0" {
  send dhcp-client-identifier 1:xx:xx:xx:xx:xx:xx;
  send dhcp-lease-time 86400;
}
</programlisting>

<para>
Qui si assume che l'interfaccia ethernet sia eth0. Se non 
lo &egrave;, cambiare di conseguenza. Inoltre va sostituito
xx:xx:xx:xx:xx con l'indirizzo ethernet. Questo dhclient.conf fa 
s&igrave; che il client appaia pi&ugrave; simile ad un client Win95.
</para>

</sect2>
</sect1>

<sect1>
<title>Setup del server DHCP</title>

<sect2 id="dhcpserver">
<title id="dhcpserver.title">Server DHCP per UNIX</title>
<para>
Esistono molti server DHCP disponibili per sistemi operativi U*X-like, 
sia commerciali che liberi. Uno dei pi&ugrave; popolari server DHCP liberi 
&egrave; Paul Vixie/ISC DHCPd. Attualmente l'ultima versione &egrave; la 
2.0 (suggerito per la maggior parte degli utenti), ma la 3.0 &egrave; in 
beta testing. Si possono ottenere da 
</para>

<para>
<ulink
url="ftp://ftp.isc.org/isc/dhcp/">ftp://ftp.isc.org/isc/dhcp/</ulink>
</para>

<para>
Alcune distribuzioni forniscono i pacchetti binari per dhcpd, per cui
se &egrave; gi&agrave; installato in questo modo saltare la seguente sezione.
</para>

<para>
Dopo averlo scaricato, scompattarlo. Una volta fatto, tramite il comando 
cd portarsi all'interno della directory della distribuzione e digitare 
<command>./configure</command>
</para>

<para>
Ci vorr&agrave; un p&ograve; di tempo per configurare le impostazioni. 
Quando terminato, digitare: 
<command>make</command> e <command>make install</command>.
</para>
</sect2>

<sect2>
<title>Configurazione del server DHCP</title>
<para>
Terminata l'installazione, digitare <command>ifconfig -a</command>. 
Si vedr&agrave; qualcosa di simile a quanto segue:
</para>

<programlisting>
eth0      Link encap:10Mbps Ethernet  HWaddr 00:C0:4F:D3:C4:62
          inet addr:183.217.19.43  Bcast:183.217.19.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2875542 errors:0 dropped:0 overruns:0
          TX packets:218647 errors:0 dropped:0 overruns:0
          Interrupt:11 Base address:0x210
</programlisting>

<para>
Se non compare MULTICAST si dovr&agrave; riconfigurare il kernel e aggiungere 
il supporto per il multicast. Sulla maggior parte dei sistemi non &egrave; 
necessario farlo.
</para>

<para>
Il passo successivo &egrave; aggiungere il percorso per 255.255.255.255. 
Citazione dal file README di DHCPd:
</para>

<blockquote>
<para>
"Affinch&egrave; dhcpd lavori correttamente con fastidiosi client DHCP (ad 
esempio Windows 95), deve essere capace di inviare pacchetti con un indirizzo 
IP di destinazione 255.255.255.255. Sfortunatamente, Linux insiste nel cambiare 
255.255.255.255 con l'indirizzo di broadcast della subnet locale (qui &egrave; 
192.5.5.223). Il risultato di tutto ci&ograve; &egrave; una violazione del 
protocollo DHCP, e, mentre molti client DHCP non risentono del problema, alcuni 
(ad esempio, tutti i client DHCP Microsoft) lo fanno. I client che risentono di 
questo problema sembra non riconoscano i messaggi DHCPOFFER provenienti dal 
server."
</para>
</blockquote>

<para>
Digitare: <command>route add -host 255.255.255.255 dev eth0</command>
</para>

<para>
Se appare un messaggio "<literal>255.255.255.255: Unknown host</literal>", 
provare aggiungendo le seguenti righe al file <filename>/etc/hosts</filename>:
</para>

<programlisting>
255.255.255.255 all-ones
</programlisting>

<para>
Quindi provare:
</para>

<programlisting>
route add -host all-ones dev eth0
</programlisting>

<para>
oppure
</para>

<programlisting>
route add 255.255.255.0 dev eth0
</programlisting>

<para>

<literal>eth0</literal> &egrave; ovviamente il nome del dispositivo di rete in uso. 
Se il proprio dispositivo ha un nome diverso, cambiare i comandi in maniera appropriata.
</para>

</sect2>

<sect2>
<title>Opzioni per DHCPd</title>
<para>
Ora &egrave; necessario configurare DHCPd. Per fare questo bisogna creare 
o modificare <filename>/etc/dhcpd.conf</filename>. C'&egrave; una 
interfaccia grafica per la configurazione di dhcpd in KDE ( <ulink
url="http://www.kde.org/">http://www.kde.org/</ulink> ) chiamata kcmdhcpd 
che &egrave; molto simile all'interfaccia di configurazione DHCP di Windows NT. 
Quando uscir&agrave; KDE 2.0, avr&agrave; in dotazione kcmdhcpd; in alternativa 
&egrave; possibile ottenerlo direttamente da:
</para>

<para>
<ulink
url="ftp://ftp.us.kde.org/pub/kde/unstable/apps/network/">ftp://ftp.us.kde.org/pub/kde/unstable/apps/network/</ulink>
</para>

<para>
Se lo si vuole configurare manualmente, seguire le istruzioni che seguono.
</para>

<para>
Quello che si vuole fare nella maggior parte dei casi &egrave; assegnare 
l'indirizzo IP casualmente. Questo pu&ograve; essere fatto con le 
seguenti impostazioni:
</para>

<programlisting>
# Esempio /etc/dhcpd.conf
# (aggiungere qui i propri commenti) 
default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option domain-name-servers 192.168.1.1, 192.168.1.2;
option domain-name "mydomain.org";

subnet 192.168.1.0 netmask 255.255.255.0 {
   range 192.168.1.10 192.168.1.100;
   range 192.168.1.150 192.168.1.200;
}
</programlisting>

<para>
In questo modo il server DHCP assegner&agrave; al client 
un indirizzo IP compreso nell'intervallo 192.168.1.10-192.168.1.100 oppure 
192.168.1.150-192.168.1.200. Conceder&agrave; l'uso di un indirizzo IP per 600 
secondi, se il client non richiede uno specifico intervallo di tempo. In 
quest'ultimo caso, il periodo massimo (concesso) sar&agrave; di 7200 secondi. 
Il server, inoltre, "avviser&agrave;" il client di usare 255.255.255.0 come 
maschera di sottorete, 192.168.1.255 come indirizzo di broadcast, 192.168.1.254 
come router/gateway e 192.168.1.1 e 192.168.1.2 come server DNS.
</para>

<para>
Se &egrave; necessario specificare un server WINS per i client Windows, 
bisogner&agrave; includere l'opzione <literal>netbios-name-servers</literal>, 
ad esempio
</para>

<programlisting>
option netbios-name-servers 192.168.1.1;
</programlisting>

<para>
&Egrave; inoltre possibile assegnare specifici indirizzi IP basati su 
indirizzi ethernet dei client, ad esempio
</para>

<programlisting>
host haagen {
   hardware ethernet 08:00:2b:4c:59:23;
   fixed-address 192.168.1.222;
}
</programlisting>

<para>
Questo assegner&agrave; l'indirizzo IP 192.168.1.222 ad un client con 
indirizzo ethernet 08:00:2b:4c:59:23.
</para>

<para>
&Egrave; inoltre possibile mescolare e mettere insieme i pezzi, ad esempio 
alcuni client ottengono indirizzi IP "statici" (ad esempio i server) e ad altri 
sono assegnati IP dinamici (ad esempio, utenti mobili con portatili). Esistono 
numerose altre opzioni, ad esempio indirizzi di server nis, indirizzi di time 
server, ecc.; se si ha bisogno di una qualsiasi di queste opzioni, leggere la 
pagina di manuale del <filename>dhcpd.conf</filename>.
</para>

</sect2>



<sect2>
<title>Avviare il server</title>
<para>
C'&egrave; solo una cosa da fare prima di avviare il server. Nella 
maggioranza dei casi l'installazione di DHCP non crea un file 
<filename>dhcpd.leases</filename>. Questo file &egrave; usato da DHCPd 
per memorizzare informazioni riguardo le assegnazioni temporanee correnti. Esso 
&egrave; in formato testo semplice, cos&igrave; si pu&ograve; ispezionare
durante il funzionamento di DHCPd. Per creare 
<filename>dhcpd.leases</filename> digitare: 

<programlisting>
touch /var/state/dhcp/dhcpd.leases
</programlisting>

</para>

<para>
Questo creer&agrave; un file vuoto (dimensione file = 0). 
Alcune vecchie versioni di dhcpd 2.0 posizionano il file in 
<filename>/etc/dhcpd.leases</filename>. Non sono necessari cambiamenti 
al file delle assegnazioni temporanee, esso sar&agrave; manipolato dal dhcpd. 
Se &egrave; visualizzato un messaggio che dice che il file esiste, semplicemente 
ignorarlo e andare al punto successivo.
</para>

<para>
&Egrave; ora possibile invocare il server DHCP. Semplicemente digitare 
(o includere tra gli script d'avvio) 
</para>

<programlisting>
/usr/sbin/dhcpd
</programlisting>

<para>
Questo invocher&agrave; dhcpd sul dispositivo eth0. Se lo si 
vuole invocare su un altro dispositivo, semplicemente 
sostituirlo nella linea di comando, ad esempio 
</para>

<programlisting>
/usr/sbin/dhcpd eth1
</programlisting>

<para>
Per verificare che tutto stia funzionando correttamente, 
bisogna prima entrare in modalit&agrave; debugging e mettere 
il server in primo piano. Si pu&ograve; fare digitando 
</para>

<programlisting>
/usr/sbin/dhcpd -d -f
</programlisting>

<para>
Successivamente avviare uno dei client e controllare la console del server. 
Dovrebbero apparire un numero di messaggi di debug. Se tutto funziona 
correttamente, avete fatto :-). Uscire da dhcpd e avviarlo senza 
<command>-d</command> <command>-f</command> e argomenti. Se si desidera che 
dhcp si avvii all'avvio di sistema, si pu&ograve; ad esempio includere dhcpd in
</para>

<programlisting>
/etc/rc.d/rc.local
</programlisting>

</sect2>

<sect2>
<title>Altri documenti interessanti</title>
<para>
Nel numero di Aprile di Linux Magazine c'&egrave; un articolo molto buono 
chiamato <ulink url="http://www.linux-mag.com/2000-04/networknirvana_01.html">
Network Nirvana: How to make Network Configuration as easy as DHCP</ulink> che 
tratta la configurazione del DHCP.
</para>

</sect2>


</sect1>

</article>
