3. Setup del client

Attualmente ci sono tre diversi programmi client DHCP per Linux: dhcpcd, pump e dhclient. Questo mini-HOWTO tratta principalmente dhcpcd.

3.1. Scaricare il demone client (dhcpcd)

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 è 1.3.18. È mantenuto da Sergei Viznyuk ed attualmente sono disponibili i pacchetti binari per la maggior parte delle distribuzioni.

Il codice sorgente di dhcpcd si può scaricare dai seguenti siti:

Successivamente, seguire le istruzioni qui sotto. Dovrebbero essere tra loro equivalenti.

3.2. Slackware

È possibile scaricare l'ultima copia del DHCPcd da qualsiasi mirror Metalab oppure dai siti:

Scaricare l'ultima versione di dhcpcd.tar.gz.

Questo creerà la directory /etc/dhcpc dove DHCPcd memorizzerà le informazioni DHCP e il file dhcpcd sarà copiato all'interno di /usr/sbin.

Affinché l'inizializzazione del DHCP avvenga durante l'avvio del sistema, digitare:

cd /etc/rc.d

mv rc.inet1 rc.inet1.OLD

Questo sposterà il vecchio script di inizializzazione della rete in rc.inet1.OLD. Ora è necessario creare il nuovo script rc.inet1.Tutto ciò che serve è il seguente codice:

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

HOSTNAME=`cat /etc/HOSTNAME` #Questo probabilmente non è necessario, ma 
                             #è 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

Salvare lo script e riavviare il computer.

Quando si è terminato, andare all'ultimo passaggio.

3.3. RedHat 6.x e Mandrake 6.x

La configurazione di DHCPcd in RedHat 6.0+ è veramente semplice. Quello che si deve fare è avviare il Pannello di Controllo digitando control-panel.

Si noti che RedHat 6.x include un client DHCP chiamato "pump" anziché il già 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 rpm -i dhcpcd-1.3.17pl2-1.i386.rpm) sarà necessario apportare alcune modifiche.

Note aggiuntive di Alexander Stevenson :

Non ho avuto fortuna con DHCPcd. Ciò che alla fine ha funzionato è "pump", che è preinstallato nella Linux Mandrake 6.0 (e dunque penso sia incluso anche nella RedHat). Il comando che ho utilizzato è

pump -i eth0 -h hostname

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

Successivamente, ho modificato la riga nel mio script /sbin/ifup affinchè rispecchi il cambiamento; la versione di default non ha l'opzione -h, e così nel mio caso non funziona.

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

...
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 ...

Un modo più elegante per aggiungere il campo hostname viene suggerito da Aad van der Klaauw:

Attualmente sto configurando un systema gateway casalingo, ho dovuto impostare l'indirizzo MAC e usare il trucco '-h hostname'. Così 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ò che segue:

DEVICE="eth0"
MACADDR="00:11:22:33:44:55"
DHCP_HOSTNAME="trigger_for_terayon"

che non ha bisogno di essere cambiato insieme agli aggiornamenti ed è a mio modesto avviso un metodo più "pulito".

Questo è quanto. Riavviare la macchina o digitare /sbin/ifup eth0 alla riga di comando.

3.4. RedHat 5.x

La configurazione di DHCPcd in RedHat 5.0+ è molto semplice. Tutto ciò di cui si ha bisogno è avviare il Pannello di controllo digitando control-panel.

Una volta terminato, andare all'ultimo passaggio.

3.5. RedHat 4.x e Caldera OpenLinux 1.1/1.2

DHCPcd è incluso nella distribuzione RedHat standard come RPM e lo si può trovare nel CD-ROM della distribuzione nella directory RPMS, oppure è possibile scaricarlo da:

ftp://ftp.redhat.com/pub/redhat/redhat-4.2/i386/RedHat/RPMS/dhcpcd-0.6-2.i386.rpm

Installarlo con rpm -i dhcpcd-0.6-2.i386.rpm.

In alternativa, è possibile compilare la propria versione seguendo i passaggi descritti nel Slackware.

Le seguenti informazioni sono state fornite all'autore da nothing .

Ho rimosso il mio ip statico ed il mio nome da /etc/resolv.conf, 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 /etc/dhcpc/resolv.conf, per cui devo utilizzare un /etc/resolv.conf statico).

In /etc/sysconfig/network ho rimosso le due voci HOSTNAME e GATEWAY. Ho lasciato l'ordine delle voci dell'elenco così com'erano (NETWORKING, DOMAINNAME, GATEWAYDEV).

In /etc/sysconfig/network-scripts/ifcfg-eth0 ho rimosso le righe IPADDR, NETMASK, NETWORK, e BROADCAST. Ho lasciato DEVICE e ONBOOT com'erano. Ho cambiato la riga BOOTPROTO in BOOTPROTO=dhcp.

Salvare il file. Riavviare il computer.

Quando si sia terminato, andare all'ultimo passaggio.

3.6. Debian

Esiste un pacchetto deb di DHCPcd (assicurarsi che cominci con dhcpcd) su:

http://ftp.debian.org/debian/dists/slink/main/binary-i386/net/

In alternativa, seguire le Slackware istruzioni di installazione.

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

Sembra che non sia necessaria alcuna configurazione di DHCPcd perchè:

 

Il pacchetto dhcpcd installa il suo script d'avvio, come consueto per i pacchetti debian, in /etc/init.d/package_name, come /etc/init.d/dhcpcd, e lo collega alle varie cartelle /etc/rc?.d/.

 
--Da: Heiko Schlittermann  

Il contenuto delle cartelle /etc/rc?.d/ viene poi eseguito all'avvio.

Se non viene fatto il riavvio dopo l'installazione, si può pensare di far partire il demone manualmente: /etc/init.d/dhcpcd start.

Quando terminato andare all'ultimo passaggio.

3.7. LinuxPPC e MkLinux

La seguente sezione è stata scritta da R. Shapiro

Dalla distribuzione "1999" (R5), Linuxppc è 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 RedHat 6.x e Mandrake 6.x.

Resta il problema che RedHat 6 utilizza il client 'pump' per dhcp come predefinito e 'pump' non funziona in modo affidabile in Linuxppc. Per aggirare questo problema, si può installare l'ultimo dhcpcd di Sergei Viznyuk e, successivamente, modificare /sbin/ifup per utilizzare dhcpcd al posto di pump.

Cambiare

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

 if [ -n "$PUMP" ]; then

con

 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

e apportare una modifica corrispondente per ifdown. Sostituire

if [ "$BOOTPROTO" = bootp -o "$BOOTPROTO" = dhcp ]; then
....
fi

con

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

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

3.8. Comporre il tutto

Una volta riavviata la macchina, l'interfaccia di rete dovrebbe essere configurata. Digitare: ifconfig.

Dovrebbe comparire qualcosa di simile a questo:

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 

Se compaiono numeri normali sotto inet addr tutto è andato a buon fine. Se è visualizzato 0.0.0.0 niente paura, è 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 Risoluzione dei problemi. DHCPcd è un demone e rimarrà in esecuziione per tutto il tempo che la macchina rimarrà accesa. Ogni tre ore contatterà il server DHCP e tenterà di rinnovare l'indirizzo IP. Registrerà tutti i messaggi nel syslog (in Slackware /var/adm/syslog, RedHat/OpenLinux /var/log/syslog).

Un'ultima cosa. È 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 /etc/resolv.conf, oppure DHCPcd otterrà la lista dal server DHCP e creerà un resolv.conf in /etc/dhcpc.

L'autore del presente howto ha deciso di utilizzare il resolv.conf di DHCPcd facendo come segue:

Fare una copia di sicurezza del vecchio /etc/resolv.conf: mv /etc/resolv.conf /etc/resolv.conf.OLD

Se la cartella /etc/dhcpc non esiste, crearla: mkdir /etc/dhcpc

Creare un collegamento da /etc/dhcpc/resolv.conf a /etc/resolv.conf: ln -s /etc/dhcpc/resolv.conf /etc/resolv.conf

Se non funziona, provare questo (correzione suggerita da con una piccola correzione di Henrik Stoerner):

Quest'ultimo passaggio è stato fatto solo perchè il dhcpcd dell'autore non ha creato un /etc/dhcpc/resolv.conf. In /etc/sysconfig/network-scripts/ifup l'autore ha effettuato le seguenti modifiche (non sono di livello avanzato, ma funzionano):

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

Cambiato in:

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

Nota

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

Ora ci si può sedere e divertirsi :-).

3.9. Note varie

I seguenti passaggi non sono necessari, ma potrebbero essere utili in alcuni casi:

  1. Se si necessita della connessione di rete solo occasionalmente è possibile avviare dhcpcd dalla linea di comando (è necessario essere root per fare questo) con: /usr/sbin/dhcpcd.

    Quando occorre disabilitare la rete, digitare /usr/sbin/dhcpcd -k.

3.10. Risoluzione dei problemi

Se sono stati seguiti i passaggi delineati in precedenza e non è possibile accedere alla rete, ci sono diverse possibili spiegazioni:

3.10.1. La scheda di rete non è correttamente configurata

Durante il processo d'avvio, Linux verifica la scheda di rete e comunica qualcosa del tipo:

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

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 è possibile utilizzare per configurare la scheda. Fare dei tentativi con gli IRQ finché Linux riconosce la scheda (IRQ 9,10,12 solitamente vanno bene).

3.10.2. Il server DHCP supporta RFC 1541/Il server DHCP è Windows NT

Tentare l'esecuzione di dhcpcd digitando dhcpcd -r.

Utilizzare ifconfig per controllare se l'interfaccia di rete è configurata (attendere alcuni secondi per il processo di configurazione, inizialmente sarè Inet.addr=0.0.0.0)

Se questo risolve i problemi aggiungere l'opzione "-r" agli script d'avvio, ad esempio: al posto di /sbin/dhcpcd si avrà /sbin/dhcpcd -r.

Ad esempio, in RedHat modificare lo script /etc/sysconfig/network-scripts/ifup e cambiare quanto segue:

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

3.10.3. Durante l'avvio si ha il messaggio di errore "Utilizzo di DHCP per eth0 ... fallito", ma il sistema funziona correttamente.

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 qui e controllare come sistemare la questione.

3.10.4. La rete funziona per alcuni minuti e poi smette di rispondere

Ci sono alcuni report di gated (demone gateway) che compromettono il routing su piattaforme Linux, portando al problema sopra descritto. Controllare se gated è in esecuzione con: ps -auxww | grep gate.

Se lo è, tentare di rimuoverlo con il gestore RPM di RedHat o rimuovendone la riga in /etc/rc.d/.

3.10.5. La scheda ethernet è riconosciuta durante l'avvio, ma appare il messaggio "NO DHCPOFFER" nel log. Inoltre, si dà il caso che io abbia una scheda ethernet PCMCIA.

Assicurarsi che la porta 10BaseT (attacco "phone") sulla scheda di rete sia attivato. Il miglior modo per verificarlo è controllare per quale tipo di connettore la scheda è stata configurata durante l'avvio, ad esempio

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

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.

3.10.6. Il mio client DHCP invia richieste broadcast ma nessuno risponde (contributo di Peter Amstutz)

Su alcuni sistemi è necessario includere un qualche hostname per la macchina come parte della richiesta. Con dhcpcd, farlo con dhcpcd -h foohost Probabilmente l'hostname richiesto sarà lo username dell'account sulla rete.

3.10.7. Ho seguito tutti i passasggi, ma la mia macchina non riesce ancora a connettersi

Il modem solitamente memorizza l'indirizzo ethernet della scheda di rete, così se si connette un nuovo computer o si cambia scheda di rete, in qualche modo si dovrà istruire il modem per il riconoscimento del nuovo computer o della nuova scheda. Solitamente, è possibile spegnere il modem e riaccenderlo mentre il computer è acceso; oppure sarà necessario chiamare il supporto tecnico e dirgli che è stata cambiata la scheda di rete nel computer.

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.

3.10.8. Ho il servizio MediaOne Express e non riesco a connettermi.

Sembra che MediaOne aggiunga alcune cose al DHCP che non vi dovrebbero essere. In teoria questo non è più 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:

DHCP ha ricevuto una opzione 067 sconosciuta di lunghezza 005. 
I dati grezzi sono forniti di seguito.

0000: 62 61 73 69 63            basic

Se il problema è questo, andare su ftp://vanbuer.ddns.org/pub/ e scaricare un eseguibile o prelevare il sorgente per risolvere il problema.

3.11. Client DHCP alternativo (ISC dhclient)

Se non si è avuto successo nel far funzionare la connessione in Linux con dhcpcd, si può provare ISC dhclient. Il client dhclient è 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 qui. Una volta pronti, rileggere questa sezione per configurare il client.

Nota

La seguente informazione è stata fornita da Ted Lemon uno degli autori del dhclient.

Con la corrente versione del client DHCP, non è necessario un file dhclient.conf. È sufficiente invocare dhclient, ad esempio: /sbin/dhclient.

Questo configurerà tutte le interfacce broadcast. Se non funziona oppure si vuole specificare solo una interfaccia, creare un file /etc/dhclient.conf con questa configurazione di esempio.

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

Qui si assume che l'interfaccia ethernet sia eth0. Se non lo è, cambiare di conseguenza. Inoltre va sostituito xx:xx:xx:xx:xx con l'indirizzo ethernet. Questo dhclient.conf fa sì che il client appaia più simile ad un client Win95.