Jelenleg három különböző DHCP kliens létezik Linuxra: a dhcpcd, a pump és a dhclient. Ez a mini-HOGYAN elsősorban a dhcpcd démonnal foglalkozik.
A Linux összeállításodtól függően lehet, hogy le kell töltened a DHCP kliens-démont. Ha a forrásból le is akarod fordítani, akkor a csomag neve dhcpcd lesz , és az aktuális verzió az 1.3.18 XXX. A csomag karbantartója Sergei Viznyuk <sergei@phystech.com> , és manapság a legtöbb Linux összeállításban bináris - lefordított - változatban is hozzáférhető.
A dhcpcd forráskódját a következő helyekről töltheted le:
ftp://ftp.phystech.com/pub/ (elsődleges lelőhely)
Majd kövesd az alábbi útmutatást.
A DHCPcd program legutolsó változatát letöltheted egy Metalab tükörszerverről vagy a következő helyekről:
Töltsd le a dhcpcd.tar.gz legutolsó változatát.
Csomagold ki
tar -zxvf dhcpcd-1.3.18pl1.tar.gz
Lépj be a létrejött könyvtárba és fordítsd le
cd dhcpcd-1.3.18pl1
make
Ezek után telepítsd (a következő parancsot rendszergazdaként futtasd)
make install
Ez a parancs létrehozza a /etc/dhcpc könyvtárat, ahol a démon az információit tárolja, a dhcpcd bináris fájl pedig a /usr/sbin könyvtárba kerül.
Ahhoz, hogy a rendszer a induláskor a DHCP szolgáltatást elindítsa, gépeld be:
cd /etc/rc.d
mv rc.inet1 rc.inet1.OLD
Ez a régi beállítószkriptet átnevezi rc.inet1.OLD-ra. Ezek után el kell készítened az új rc.inet1 szkriptet. A következő kódrészletre van szükség:
#!/bin/sh # # rc.inet1 Ez a shell szkript indítja az alapértelmezett INET rendszert. HOSTNAME=`cat /etc/HOSTNAME` #Ez talán nem szükséges, de én mindig #benne hagyom. # A loopback eszköz beállítása. /sbin/ifconfig lo 127.0.0.1 /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo # HA ETHERNET KAPCSOLATOD VAN, használd a következő sorokat az eth0 # eszköz beállítására. Ha csak a loopback-et vagy SLIP-et használsz, # ne hagyd meg a fájl további sorait. /usr/sbin/dhcpcd |
Mentsd el és indítsd újra a gépet.
Amikor kész vagy, ugorj az utolsó lépésre.
A RedHat 6+ alatt a DHCPcd beállítása nagyon egyszerű. A grafikus felületen indítsd el a Control Panelt (ha nincs menüben, akkor X terminálról a control-panel paranccsal, majd:.
Válaszd ki a "Network Configuration" menüpontot
Kattints az "Interfaces"-re
Kattints az "Add"-ra
Válaszd ki az "Ethernet"-et
Az "Edit Ethernet/Bus Interface" alatt válaszd ki az "Activate interface at boot time" lehetőséget, valamint a "DHCP"-t, mint "Interface configuration protocol"-t
Figyelem: a RedHat 6.x verziók az alapértelmezettként nem a dhcpcd démont, hanem a pump kliens programot tartalmazzák. A telepítő CD tartalmazza a dhcpcd csomagot, ezért ha nincs szerencséd a pump programmal, próbáld a dhcpcd programot. Miután telepítetted (pl. rpm -i dhcpcd-1.3.17pl2-1.i386.rpm), néhány változtatást kell eszközölnöd.
Alexander Stevenson további megjegyzései <alexander.stevenson@home.com>:
Nem volt szerencsém a DHCPcd démonnal. Ami végül bejött, az a RedHat 6.0 pump programja volt, ami gondolom a többi RedHat verzióban is benne van. A következő parancsot használtam:
pump -i eth0 -h hostname
Mindegy, hogy a "hostname" mi volt, de e nélkül a szerver nem fog válaszolni.
Ezek után megváltoztattam a /sbin/ifup szkriptemet, hogy tükrözze a változást; az alapértelmezett verzió nem tartalmazta a -h kapcsolót, ezért nem is működött nálam.
Alapvetően, ha a linuxconf-ot használod, és a csatoló "DHCP"-re való átállítása után az nem működik, próbáld ki, hogy a "-h hostname" kapcsolót hozzáadod a pump sorához a /sbin/ifup szkriptben. Az enyém így néz ki:
... if [ -n "$PUMP" ]; then echo -n "Determining IP information for $DEVICE..." if /sbin/pump -i $DEVICE -h hostname; then echo " done." else echo " failed." exit 1 fi else ... |
Egy másik, még elegánsabb módszert a hostname mező hozzáadásához Aad van der Klaauw ajánlott:
Most állítok be egy átjárót otthon, be kell állítanom a MAC address-t a '-h hostname' használata nélkül. Ezért elhatároztam, hogy *nem* változtatom meg a szkriptet, hanem a konfigurációs fájlt használom. Az /etc/sysconfig/network-scripts/ifcfg-eth0 fájlhoz hozzáadtam a következő sorokat:
DEVICE="eth0" MACADDR="00:11:22:33:44:55" DHCP_HOSTNAME="trigger_for_terayon" |
Ez túl fogja élni a frissítéseket, és szerintem ez egy "tiszta" módszer.
Ennyi az egész. Indítsd újra a gépet vagy add ki a /sbin/ifup eth0 parancsot.
A DHCPcd beállítása Redhat 5.0+ alatt nagyon könnyű. A grafikus felületen indítsd el a Control Panelt (ha nincs menüben, akkor X terminálról a control-panel paranccsal), majd:.
Válaszd ki a "Network Configuration" menüpontot
Kattints az "Interfaces" gombra
Válaszd ki az "Ethernet"-et
Az "Edit Ethernet/Bus Interface" alatt válaszd ki az "Activate interface at boot time" lehetőséget, valamint a "DHCP" -t, mint "Interface configuration protocol"-t.
Amikor kész vagy, ugorj az utolsó lépésre.
A DHCPcd csomagot tartalmazza a RedHat standard disztribúció mint RPM és megtalálhatód a disztribúciós cd-n az RPMS könyvtárban vagy letöltheted a következő csomagot:
ftp://ftp.redhat.com/pub/redhat/redhat-4.2/i386/RedHat/RPMS/dhcpcd-0.6-2.i386.rpm
Telepítsd a következő paranccsal: rpm -i dhcpcd-0.6-2.i386.rpm.
De a saját verziódat a következő lépésekkel is fordíthatod a Slackwarenél kiemelt sorokat követve...
A következő információt nothing szolgáltatta <nothing@cc.gatech.edu>.
Eltávolítottam az állandó IP-címemet és nevemet a /etc/resolv.conf könyvtárból. De ott hagytam a kereső sorban és a két névszerverem sorát is (valamiért a dhcpcd csomagom sose hozza létre az /etc/dhcpc/resolv.conf fájlt, így az állandó /etc/resolv.conf) fájlt kell használnom.
Az /etc/sysconfig/network fájlból eltávolítottam a HOSTNAME és GATEWAY bejegyzéseket. A többit hagytam ahogy volt (NETWORKING, DOMAINNAME, GATEWAYDEV).
Az /etc/sysconfig/network-scripts/ifcfg-eth0 fájlból eltávolítottam az IPADDR, NETMASK, NETWORK, és BROADCAST bejegyzéseket. A DEVICE és ONBOOT bejegyzéseket változatlanul hagytam. Megváltoztattam a BOOTPROTO sort BOOTPROTO=dhcp sorra.
Mentsd el a fájlt és indítsd újra a gépet.
Amikor kész vagy, ugorj az utolsó lépésre.
DHCPcd csomagot a Debianhoz a következő helyen találsz:
http://ftp.debian.org/debian/dists/slink/main/binary-i386/net/
Vagy kövesd a Slackware telepítésénél megadott utasításokat.
A deb csomag telepítéséhez használd a dpkg -i /where/ever/your/debian/packages/are/dhcpcd*deb parancsot.
Úgy néz ki, hogy semmilyen konfigurációra nem lesz szükség:
A dhcpcd csomag az indítószkriptjeit a Debian csomagjainál megszokott módon az /etc/init.d/csomag_neve könyvtárba telepíti, jelen esetben ez az /etc/init.d/dhcpcd, és ezt linkeli a különböző /etc/rc?.d/ könyvtárakhoz. | ||
--Írta: Heiko Schlittermann <heiko@os.inf.tu-dresden.de> |
Az /etc/rc?.d/ könyvtárak tartalma minden induláskor végrehajtódik.
Ha nem akarod újraindítani a gépet, akkor kézzel kell elindítanod a démont az /etc/init.d/dhcpcd start paranccsal.
Amikor végeztél, menj az utolsó lépésre.
A következő részt R. Shapiro írta:
Az "1999" (R5) kiadású LinuxPPC majdnem teljesen kompatibilis a RedHat 6-tal, egy kivétellel (lásd alább). Általánosságban a beállítás ugyanaz, mint a RedHat 6.x és Mandrake 6.x esetében.
A probléma az, hogy a RedHat 6 a pump klienst használja a DHCP-hez alapértelmezettként, ami viszont nem működik megbízhatóan a LinuxPPC alatt. A megoldáshoz telepítsd a legfrissebb Sergei Viznyuk-féle dhcpcd démont, és szerkeszd át az /sbin/ifup szkriptet, hogy a dhcpcd klienst használja a pump helyett.
Változtasd meg ezt:
if [ "$BOOTPROTO" = bootp -o "$BOOTPROTO" = dhcp ]; then PUMP=true fi if [ -n "$PUMP" ]; then |
erre:
if [ "$BOOTPROTO" = bootp ]; then echo " done." else echo " failed." exit 1 fi elif [ "$BOOTPROTO" = dhcp ]; then echo -n "Determining IP information for $DEVICE..." if /sbin/dhcpcd -d $DEVICE ; then if [ -f /etc/dhcpc/dhcpcd-${DEVICE}.exe ]; then /etc/dhcpc/dhcpcd-${DEVICE}.exe fi |
valamint ennek megfelelően a ifdown szkriptben, ezt:
if [ "$BOOTPROTO" = bootp -o "$BOOTPROTO" = dhcp ]; then .... fi |
erre:
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 |
Egy működő PPC rpm a dhcpcd-hez megtalálható a LinuxPPC 1999 CD-n; egy kissé későbbi rpm pedig a "contrib" könyvtárban a ftp://ftp.linuxppc.org/ címen. A forráskódot - amelyből ez a csomag készült - megtalálod a ftp://ftp.phystech.com/pub/dhcpcd-1.3.17-pl9.tar.gz helyen.
Miután a géped újraindult, a hálózati eszközödnek már működőképesnek kell lennie. Gépeld be: ifconfig.
Valami hasonlónak kell megjelennie a képernyőn:
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 |
Ha valamilyen normális számot látsz az inet addr mellett, akkor készen vagy. Ha azt látod: 0.0.0.0 , ne ess kétségbe, ez egy átmeneti beállítás, mielőtt a dhcpcd lekérné az IP címet. Ha néhány perc múlva is ezt látod, kérlek nézd meg a Hibaelhárítás fejezetet. A DHCPcd egy démon, és addig fut, míg a géped működik. Három óránként kapcsolatba lép a DHCP szerverrel, és próbálja megújítani az IP cím-kérést. Minden üzenetét a rendszernaplóban tárolja ( a Slakware-nél /var/adm/syslog, RedHat/OpenLinux esetén /var/log/syslog).
Még egy dolog. Meg kell adnod a névszervereidet is. Ezt kétféleképpen teheted meg; vagy megkérdezed a szolgáltatódat, hogy adja meg, és beírod az /etc/resolv.conf fájlba (pl. egy ilyen sort kell beírni: nameserver 1.2.3.4 - a ford.), vagy a DHCPcd fogja lekérni a szervertől a listát, és készít egy resolv.conf fájlt az /etc/dhcpc könyvtárban.
Én úgy döntöttem, hogy a DHCPcd resolv.conf fájlját használom:
Készíts biztonsági másolatot az /etc/resolv.conf fájlról: mv /etc/resolv.conf /etc/resolv.conf.OLD
Ha még nincs /etc/dhcpc könyvtárad, készíts egyet: mkdir /etc/dhcpc
Készíts egy hivatkozást (link) az /etc/dhcpc/resolv.conf fájlról az /etc/resolv.conf fájlra: ln -s /etc/dhcpc/resolv.conf /etc/resolv.conf
Ha ez nem működne, próbáld ki a következőket (a megoldást <nothing@cc.gatech.edu> ajánlotta Henrik Stoerner közreműködésével):
"Ezt az utolsó lépést csak azért csináltam , mert az én dhcpcd csomagom nem készítette el az /etc/dhcpc/resolv.conf fájlt. Az /etc/sysconfig/network-scripts/ifup fájlban a következőket módosítottam (nem szépségdíjas, de nekem működött):
elif [ "$BOOTPROTO" = dhcp -a "$ISALIAS" = no ]; then echo -n "Using DHCP for ${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 "failed." exit 1 |
Ezt megváltoztattam erre:
elif [ "$BOOTPROTO" = dhcp -a "$ISALIAS" = no ]; then echo -n "Using DHCP for ${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 "failed." exit 1 |
![]() | Jegyezd meg, hogy ott a ! (felkiáltójel) a következő sorban: if [ ! -f /var/run/dhcp-wait-${DEVICE}.pid ]; |
Most dőlj hátra és örülj :-).
A következő lépés(ek) nem szükségesek, de hasznosak lehetnek néhány felhasználó számára:
Ha csak néha van szükséged a dhcpcd démonra, indíthatod kézzel is a parancssorból (ehhez root jogokkal kell rendelkezned): /usr/sbin/dhcpcd.
Ha le kell állítanod a hálózatot, akkor pedig add ki a /usr/sbin/dhcpcd -k parancsot.
Ha követted a fenti lépéseket, és mégsem tudsz a hálózaton dolgozni, akkor íme néhány lehetséges megoldás:
Az induláskor a Linuxod teszteli a hálózati kártyát és valami hasonlót írhat ki:
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 |
Ha ilyen sor nincs az üzenetek között (később a dmesg parancs kiadásával is meg lehet nézni - a ford.), akkor a hálózati kártyádat nem ismerte fel az operációs rendszer. Ha hagyományos NE2000 kompatibilis kártyád van, akkor kapnod kell vele egy lemezt DOS programokkal, amelyekkel be tudod állítani a kártyát. Próbálkozz az IRQ-kal és a memóriacímekkel, amíg a Linux fel nem ismeri (általában az IRQ 9, 10, 12 jók).
Próbáld meg a dhcpcd démont a dhcpcd -r paranccsal futtatni.
Használd az ifconfig programot, hogy ellenőrizd a beállítások helyességét (adj néhány percet a beállítási folyamatnak, először azt fogja mondani, hogy Inet.addr=0.0.0.0)
Ha ez megoldja a problémát, akkor add hozzá az "-r" kapcsolót az indítófájlokhoz, a például /sbin/dhcpcd helyett legyen /sbin/dhcpcd -r.
RedHat alatt szerkeszd át az /etc/sysconfig/network-scripts/ifup szkriptet a következő módon:
IFNAME=$[ {DEVICE} \ "/sbin/dhcpcd -r -c /etc/"- etc etc. |
Valószínűleg RedHat-ot használsz, és nem követted rendesen a fenti instrukciókat :) A felkiáltójel hiányzik valamelyik utasításból. Nézd meg itt, hogyan kell jól beállítani.
Néhány visszajelzés szerint a gated (a gateway démon) összegubancolja az útválasztást a fenti problémával küzdő gépeken. Ellenőrizd, hogy fut-e a gated a ps -auxww | grep gate parancs futtatásával.
Ha fut, próbáld meg eltávolítani a RedHat csomagkezelőjével, vagy a megfelelő bejegyzés eltávolításával az /etc/rc.d/ könyvtárból.
Biztosnak kell lenned abban, hogy a 10BaseT aljzat (a "telefon" aljzat) a kártyádon aktiválva van. A legjobb módszer annak ellenőrzésére, hogy melyik csatlakozó lett beállítva induláskor például:
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 |
Kaptam visszajelzést laptopos felhasználóktól, akiknek ilyen problémájuk volt, és a PCMCIA segédprogramokkal lehetett összefüggésbe hozni (különösen az ifport-tal), amelyek a csatoló típusát 10Base2-re (thinnet) állítják. Neked biztosnak kell lenni abban, hogy 10BaseT-t használsz. Ha nem, állítsd át a kártyát, és indítsd újra a gépet.
Néhány rendszeren valamilyen gépnevet kell megadnod, mint a kérés részét. A dhcpcd démonnal ezt a dhcpcd -h foohost paranccsal tudod megtenni. Ez a gépnév valószínűleg megegyezik a hálózati belépéshez használt neveddel.
A kábelmodemek általában megjegyzik a kártya ethernet címét, így amikor új gépet csatlakoztatsz vagy kicseréled a hálókártyát, valahogy meg kell "tanítani" a kábelmodemet, hogy felismerje az új gépet/kártyát. Általában csak ki kell kapcsolni, majd vissza a modemet, míg a gép működik, vagy fel kell hívnod a szolgáltatót, és bejelenteni a hálókártya változását.
Lehetnek olyan tűzfal-szabályaid (ipfwadm, ipchains vagy iptables szabályok) amelyek letiltják a 67/68-as portokat, amelyeken a DHCP forgalmazza a beállítási információkat. Ellenőrizd alaposan a szabályokat.
Úgy néz ki, hogy a MediOne olyan dolgokat ad hozzá a DHCP-hez, amiknek nem kéne ott lenniük. Feltehetően ez már nem probléma, de ha gondokkal találkozol, ellenőrizd ezeket. Ha egy Windows NT szerencsés (?) felhasználója vagy, az Eseménynaplóban (Event Viewer) a következőt láthatod:
DHCP received an unknown option 067 of length 005. The raw option data is given below. 0000: 62 61 73 69 63 basic |
Ha ez probléma, látogass el az ftp://vanbuer.ddns.org/pub/ címre és töltsd le a bináris programot, vagy a forrást a változtatáshoz.
Ha sehogy sem sikerült a dhcpcd démonnal kapcsolatot létesítened, kipróbálhatod az ISC dhclient programot. A dhclient hozzáférhető az ISC által kiadott DHCP disztribúcióban, és mind kliens, mind szerverprogramot tartalmaz. Arról, hogy hogyan szerezheted meg és fordíthatod le a szervert, itt olvashatsz. Amikor kész vagy, kérlek térj vissza ide a kliens beállítását illetően.
![]() | a következő információkat Ted Lemon <mellon@isc.org> a dhclient szerzőinek egyike adta közre. |
A DHCP kliens jelenlegi verziójához igazándiból nem kell dhclient.conf fájl. Csak meg kell hívni a programot, például: /sbin/dhclient.
Ez minden broadcast eszközt beállít. Ha ez nem működik, vagy csak egyetlen eszközt akarsz megadni, készíts egy /etc/dhclient.conf fájlt ezzel a tartalommal:
interface "eth0" { send dhcp-client-identifier 1:xx:xx:xx:xx:xx:xx; send dhcp-lease-time 86400; } |
Feltételeztük, hogy az ethernet eszköz neve eth0. Ha nem, változtasd meg. Ezen kívül írd át a xx:xx.xx.xx.xx.xx jeleket az eszköz ethernet címére. Ez a dhclient.conf nagyon hasonlóvá teszi a klienst egy Win95 klienshez.
Előző | Tartalomjegyzék | Következő |
A DHCP protokoll | DHCP szerver beállítás |