Lo hice y lo entendí

El blog de Vicente Navarro
29 jul

pump no funciona con los Zyxel Prestige 660HW-61

¿Tienes un router ADSL Zyxel Prestige 660HW-61? ¿Cuando arrancas con Knoppix (o con distribuciones derivadas de Knoppix) no eres capaz de obtener una dirección IP por DHCP?

No te vuelvas loco… El cliente de DHCP pump, que es el que lleva por defecto Knoppix, no es capaz de obtener una IP por DHCP de un 660HW-61 (al menos no el mío con firmware V3.40(PT.0)b46 de Telefónica). Hay incluso un bug de Debian abierto que expone el problema: Bug#362207: pump does not get IP address from Zyxel Prestige 660HW-61.

Como hay varios clientes de DHCP para Linux:

# apt-cache search "dhcp client"
dhcdbd - D-Bus interface to the ISC DHCP client
dhcp-client - DHCP Client
dhcp3-client - DHCP Client
dhcpcd - DHCP client for automatically configuring IPv4 networking
pump - BOOTP and DHCP client for automatic IP configuration
resolvconf - nameserver information handler
udhcpc - very small DHCP client

la solución es usar uno de los otros, siendo el dhcp3-client el que instala Debian por defecto y funciona bien con este router.

Si estamos con Knoppix o con algún otro LiveCD, como no podemos instalar un cliente diferente, tendremos que asignar la IP manualmente tras eliminar todos los pump que puedan estar corriendo con un “killall -9 pump” seguido de un “ps -ef | grep pump“. El pump puede tardar un poco en morir, así que esperamos a que lo haga y a que no salga en la lista del ps. A continuación, si nuestro interfaz ethernet es el eth0, nuestro router tiene la IP 192.168.1.1/24 y la dirección que queremos asignarle al sistema es la 192.168.1.40, para especificar la IP, añadir la IP del servidor de nombres (en este caso el propio router) y añadir la ruta por defecto haremos:

# ifconfig eth0 192.168.1.40 netmask 255.255.255.0 up

# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:16:D4:C3:D2:F2  
          inet addr:192.168.1.40  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:28 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4248 (4.1 KiB)  TX bytes:2128 (2.0 KiB)
          Interrupt:16 

# echo 'nameserver 192.168.1.1' >> /etc/resolv.conf

# cat /etc/resolv.conf
# Insert nameservers here
# nameserver 127.0.0.1
nameserver 192.168.1.1

# route add default gw 192.168.1.1

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

Entradas relacionadas

4 Comentarios a “pump no funciona con los Zyxel Prestige 660HW-61”

  • Sabueso dice:

    Si haces un ifconfig ethN +promisc up , funcionara.

  • Sabueso Muchas gracias por la sugerencia. Sin embargo, lo he probado y no me funciona :-(

    Espero que no te importe que haga una corrección sin importancia al comando que pones, y es que hay que poner el promisc sin el + o da un error. Aunque como vemos en la página de manual del ifconfig, sí se puede poner -promisc para deshabilitar dicha opción:

    # ifconfig eth0 +promisc up
    +promisc: Nombre de `host' no encontrado
    ifconfig: `--help' gives usage information.
    
    # ifconfig eth0 promisc up

    Tras hacer el ifconfig que propones y ejecutar un "pump -i eth", en la salida de un "tcpdump -vvv" vemos que en realidad el Zyxel sí le da una IP al PC, la 192.168.1.43:

    20:47:42.862257 IP (tos 0x10, ttl  16, id 0, offset 0, flags [none], proto: UDP (17), length: 328) 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:26:e4:c2:32:f2  (oui Unknown), length 300, xid 0x3f19d43c, Flags [ none ] (0x0000)
    	  Client-Ethernet-Address 00:16:d4:c3:d2:f2 (oui Unknown) [|bootp]
    20:47:42.864033 IP (tos 0x0, ttl 255, id 4933, offset 0, flags [none], proto: UDP (17), length: 328) 192.168.1.1.bootps > 192.168.1.43.bootpc: BOOTP/DHCP, Reply, length 300, xid 0x3f19d43c, Flags [ none ] (0x0000)
    	  Your-IP 192.168.1.43
    	  Server-IP 192.168.1.1
    	  Client-Ethernet-Address 00:26:e4:c2:32:f2  (oui Unknown)
    	  sname "Zyxel" [|bootp]
    20:47:42.895570 IP (tos 0x10, ttl  16, id 0, offset 0, flags [none], proto: UDP (17), length: 576) 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:26:e4:c2:32:f2  (oui Unknown), length 548, xid 0x4019d43c, Flags [ none ] (0x0000)
    	  Client-Ethernet-Address 00:26:e4:c2:32:f2  (oui Unknown) [|bootp]
    20:47:42.897090 IP (tos 0x0, ttl 255, id 4934, offset 0, flags [none], proto: UDP (17), length: 1076) 192.168.1.1.bootps > 192.168.1.43.bootpc: BOOTP/DHCP, Reply, length 1048, xid 0x4019d43c, Flags [ none ] (0x0000)
    	  Your-IP 192.168.1.43
    	  Server-IP 192.168.1.1
    	  Client-Ethernet-Address 00:26:e4:c2:32:f2  (oui Unknown)
    	  sname "Zyxel" [|bootp]
    20:47:46.895379 IP (tos 0x10, ttl  16, id 0, offset 0, flags [none], proto: UDP (17), length: 576) 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, unknown (0x00), length 548, htype 0, hlen 0, secs 1024, Flags [ none ] (0x0000) [|bootp]

    Pero si configuramos el syslogd para que muestre el DEBUG del pump, vemos que por alguna razón, éste rechaza la IP debido al "xid" devuelto en la respuesta DHCP.

    Aug 23 20:45:52 Knoppix pumpd[3891]: starting at (uptime 0 days, 0:10:39) Thu Aug 23 20:45:52 2007  
    Aug 23 20:45:52 Knoppix pumpd[3891]: PUMP: sending discover 
    Aug 23 20:45:52 Knoppix pumpd[3891]: got dhcp offer 
    Aug 23 20:45:52 Knoppix pumpd[3891]: PUMP: sending second discover
    Aug 23 20:45:52 Knoppix pumpd[3891]: reject: xid: 0x00000000 < --> 0x3cd419ae

    El RFC2131 (Dynamic Host Configuration Protocol) nos habla del "xid":

    If the 'xid' of an arriving DHCPOFFER message does not match the
    'xid' of the most recent DHCPDISCOVER message, the DHCPOFFER message
    must be silently discarded.  Any arriving DHCPACK messages must be
    silently discarded.

    Así que, o bien el Zyxel está poniendo un "xid" inválido en su paquete de respuesta DHCP o bien el pump se está equivocando al rechazar el paquete...

  • Sabueso dice:

    Un error derivado de mi manias con otros *nixes ;)
    Igualmente , es raro , porque yo pongo la interface en modo promiscuo , y tira :(

  • Sabueso Muchas gracias por tus comentarios y por tu ayuda, pero dime una cosa, ¿a ti también te fallaba con un Zyxel 661HW y con el pump tal y como describo en la entrada?

Tema LHYLE09, creado por Vicente Navarro