Funcionalitats avançades del DHCP

Funcionalitats avançades del DHCP

Inici » Actualitat »

Funcionalitats avançades del DHCP

El DHCP és una eina molt potent per gestionar i configurar les nostres estacions de treball. En aquest article veurem algunes funcionalitats que van més enllà dels usos habituals.

Tothom coneix el servei DHCP (Dynamic Host Configuration Protocol) com el protocol que ens permet configurar automàticament la configuració IP dels nostres equips, oblidant-nos d’haver de fer-ho manualment.

Tothom coneix el servei DHCP (Dynamic Host Configuration Protocol) com el protocol que ens permet configurar automàticament la configuració IP dels nostres equips, oblidant-nos d’haver de fer-ho manualment. Això és especialment útil avui en dia, que connectem els notres portàtils i smartphones per tot arreu. Algú s’imagina haver de posar a mà l’adreça IP del vostre iPhone?

La funcionalitat bàsica del DHCP és assignar dinàmicament una IP, una màscara i un gateway al nostre equip. El què no tothom sap és que el DHCP té tota una sèrie d’extensions que ens permetran assignar-li en temps d’arrancada un munt de paràmetres interessants.

Si, a més a més, comptem amb un servidor avançat, podem fer del nostre DHCP una eina molt potent per gestionar les nostres xarxes.

A l’inLab usem, des de fa molt temps el servidor DHCP de l’ISC (Internet Systems Consorcium). Aquest servidor és tremendament potent i estable, i disposa, a més a més, d’un mini-llenguatje de programació.

Podem usar opcions per paràmetres especials com:

  • Un fitxer d’arrancada (option filename “BStrap/X86pc/BStrap.0”;)
  • El servidor d’impressores remot (option lpr-servers ip-address )
  • El servidor de temps (option ntp-servers ip-address )
  • El servidor de TFTP (option next-server ip-address )

Podeu consultar la llista completa d’opcions predefinides a l’RFC 2132.

A més de les opcions predefinides, podem crear les nostres pròpies opcions, i fins i tot, estructures de dades complexes per emmagatzemar i passar informacions pròpies.

option inLab-priv-sala  code 1 = text;
option inLab-priv-hw    code 3 = text;
option inLab-priv-es-pc code 2 = {boolean, integer 32, text };
option inLab-priv-rutas code 4 = array of {ip-address,
                                 ip-address,ip-address,integer 8};

Les opcions 1 i 2 contenen un string simple. La 3 conté una tupla formada per un booleà, un nombre sencer i un string. La quarta opció, defineix un array d’estructures formades per 3 adreçes IP i  un nombre sencer.

Així, per exemple, podríem passar- li a un PC, des del DHCP, a quina sala està o una descripció del seu maquinari.

host  venus {
fixed-address 10.10.43.196;
hardware ethernet 24:BE:05:23:5E:F2;
option netbios-name-servers 147.83.41.111;
option domain-name "fib.upc.es";
option domain-name-servers 147.83.41.104, 147.83.41.36;
option inLab-priv-es-pc false 2011 "portatil de prestec";
option inLab-priv-sala "Campus Nord.B6.S104";
option inLab-priv-hw "ASUS Eee PC 900";
option inLab-priv-rutas 147.83.200.0 255.255.255.0 10.10.43.2 8,
                         88.20.34.0 255.255.0.0 10.10.43.45 8;
}

Una altra opció molt interessant del DHCP són les “Vendor Space”. Sabíeu que la petició del DHCP inclou un camp “Vendor Identifier” que ens identifica el tipus de client? Per exemple, els PC que arranquen des de la targeta de xarxa, tenen com identificador el client PXE. El client de Windows s’identifica com “MSFT”. A més a més, Windows 98 s’identificava com “MSFT 98”, i els Windows a partir de W2K com “MSFT 5.0”. Així els fabricants han anat definit camps i estructures especials pels seus clients, com, per exemple a versió firmware de l’equip o camps per identificar els ports TCP/IP d’alguns protocols.

Aquí podeu veure un parell d’exemples d’estructures predefinides d’alguns fabricants.

Camps especials d’un client Microsoft:

option space Microsoft;
vendor-option-space Microsoft;
option Microsoft.disable-netbios-over-tcpip     code 1   = unsigned integer 32;
option Microsoft.release-dhcp-lease-on-shutdown code 2   = unsigned integer 8;
option Microsoft.default-router-metric-base     code 3   = unsigned integer 8;
option Microsoft.proxy-autodiscovery            code 252 = string

Camps especials d’un client PXE:

option space PXE;
option PXE.mtftp-ip             code 1   = ip-address;
option PXE.mtftp-cport          code 2   = unsigned integer 16;
option PXE.mtftp-sport          code 3   = unsigned integer 16;
option PXE.mtftp-tmout          code 4   = unsigned integer 8;
option PXE.mtftp-delay          code 5   = unsigned integer 8;
option PXE.discovery-control    code 6   = unsigned integer 8;
option PXE.discover-maddr       code 7   = ip-address;
option PXE.rembo-servers        code 8   = { unsigned integer 16, 
  unsigned integer 8, array of ip-address};
option PXE.boot-server-menu     code 9   = { unsigned integer 16, 
  unsigned integer 8, string};
option PXE.menu-prompt          code 10  = { unsigned integer 16, 
  unsigned integer 8 };
option PXE.vendor-specific-info code 43  = string;
option PXE.class-identifier     code 60  = string;
option PXE.pxe-server-name      code 66  = string;
option PXE.filename             code 67  = string;
option PXE.pxe-ip-address       code 150 = string;

Gràcies a aquests camps, i la potència del servidor DHCP de l’ISC podem fer coses com:

class "PXE" {
 match if substring(option vendor-class-identifier,0,9) = "PXEClient";
 vendor-option-space PXE;
}

class "Microsoft" {
 match if substring(option vendor-class-identifier,0,4) = "MSFT";
 option vendor-class-identifier = "Microsoft";
 vendor-option-space Microsoft;
}

Aquestes definicions ens assignen un vendor-option-space, és a dir, una estructura i una variable “vendor-class-identifier” una descripció homegènea del nostre vendor. Ara, podem assignar valors especials en funció d’aquestes opcions, per exemple:

host astro {
 fixed-address 147.83.88.22;
 hardware ethernet 6C:62:6D:81:22:32;
 option PXE.discovery-control 11;
 option PXE.rembo-servers 43690 01 147.83.41.200;
 option Microsoft.rembo-servers 2231 01 147.83.58.34;
 next-server 147.83.41.200;
}

Imagineu que voleu que els vostres equips tinguin servidors de DNS diferents en funció del sistema operatiu que arranquem a cada moment. Com ho podem fer automàticament? Utilitzant la informació que es passa el client DHCP:

host astro {

fixed-address 147.83.58.58;
hardware ethernet 6C:62:6D:81:22:32;
if (vendor-class-identifier = "Microsoft") {
         option domain-name-servers 8.8.8.8 ;
} else if (vendor-class-identifier = "PXE") {
        option domain-name-servers 88.34.23.7 ;
} else {
        option domain-name-servers 4.4.4.4 ;
}
}

En aquest exemple, assignem el DNS en funció del client que fa la petició de DHCP. A l’arrancada inicial PXE, li asignaríem el servidor 88.34.23.7, i després, al Windows li assignaríem com DNS la 8.8.8.8. Als altres casos, per exemple, un client Linux li donaríem com a servidor la 4.4.4.4.

Allò que el manual no explica:

Algunes de les funcionalitats aquí exposades ens les dóna el servidor de l’ISC, a la part del servidor de DHCP, però molts d’aquestes millores només podran utililzar-se si el client DHCP és capaç d’interpretar-les i passar-li al sistema operatiu. El software de l’ISC inclou un client DHCP capaç de donar totes aquestes funcionalitats. És molt recomanable usar aquest client en comptes del client senzill que inclouen les distribucions de Linux més habituals. Malauradament, el client de Microsoft només és capaç d’interpretar unes poques opcions implementades al seu servidor DHCP.