# [dhcpd+tftp+pxlinux] No me jala el tftp :(

## Diabliyo

Hola:

Configuracion del DHCP Server

La configuracion /etc/conf.d/dhcp que tengo es:

```
shell# mousepad /etc/conf.d/dhcpd

# /etc/conf.d/dhcpd: config file for /etc/init.d/dhcpd

# If you require more than one instance of dhcpd you can create symbolic

# links to dhcpd service like so

#   cd /etc/init.d

#   ln -s dhcpd dhcpd.foo

#   cd ../conf.d

#   cp dhcpd dhcpd.foo

# Now you can edit dhcpd.foo and specify a different configuration file.

# You'll also need to specify a pidfile in that dhcpd.conf file.

# See the pid-file-name option in the dhcpd.conf man page for details.

# If you wish to run dhcpd in a chroot, uncomment the following line

# DHCPD_CHROOT="/chroot/dhcp"

# Then run emerge dhcp --config

# All file paths below are relative to the chroot.

# You can specify a different chroot directory but MAKE SURE it's empty.

# Specify a configuration file - the default is /etc/dhcp/dhcpd.conf

DHCPD_CONF="/etc/dhcp/dhcpd.conf"

# Configure which interface or interfaces to for dhcpd to listen on.

# List all interfaces space separated. If this is not specified then

# we listen on all interfaces.

DHCPD_IFACE="eth0"

# Insert any other dhcpd options - see the man page for a full list.

# DHCPD_OPTS=""
```

Y la configuracion del /etc/dhcp/dhcpd.conf

```
shell# cat /etc/dhcp/dhcpd.conf

ddns-update-style interim;

ignore client-updates;

authoritative;

option ip-forwarding off;

default-lease-time 600;

max-lease-time 7200;

allow booting;

allow bootp;

log-facility local7;

subnet 192.168.2.0 netmask 255.255.255.0

   {

   option routers 192.168.2.1;

   option subnet-mask 255.255.255.0;

   option broadcast-address 192.168.2.255;

   option domain-name-servers 192.168.2.1;

   option netbios-name-servers 192.168.2.1;

   next-server 192.168.2.1;

   range 192.168.2.20 192.168.2.50;

   option root-path "/var/tftp/";

   filename "pxelinux.0";

   }

host laptop

   {

   hardware ethernet AA:BB:CC:DD:EE:FF;

   fixed-address 192.168.0.55;

   }
```

Configuracion PXE-Linux

```
shell# ls -l /var/tftp/

gentoo_amd/

gentoo_x86/

mensaje.txt

opensuse/

pxelinux.0

pxelinux.cfg/

slackware/

syslinux/

ubuntu9_amd/

ubuntu9_x86/
```

```
shell# ls -l /var/tftp/pxelinux.cfg/

AA-BB-CC-DD-EE-FF

C

C0

C0A

C0A8

C0A80

C0A800

C0A800F

C0A800FE

default
```

Configuracion TFTP

A continuacion el contenido de los archivo de configuracion:

```
shell# cat /etc/xinetd.d/tftp-stream 

service tftp

{

   disable      = no

   id      = tftp

   wait      = no

   socket_type   = stream

   user      = tftp

   group      = tftp

   server      = /usr/sbin/in.tftpd

   server_args   = /var/tftp

   log_on_success   = PID HOST USERID EXIT DURATION

   log_on_failure   = USERID ATTEMPT

}
```

```
shell# cat /etc/xinetd.d/tftp-dgram 

service tftp

{

   disable      = no

   id      = tftp

   wait      = yes

   socket_type   = dgram

   user      = tftp

   group      = tftp

   server      = /usr/sbin/in.tftpd

   server_args   = /var/tftp

   log_on_success   = PID HOST USERID EXIT DURATION

   log_on_failure   = USERID ATTEMPT

}
```

Cuando prendo la laptop solo se queda asi: 

```
CLIENT MAC ADDR: AA BB CC DD EE FF GUID: 0000020000

CLIENT IP: 192.168.2.55 MASK: 255.255.255.0 DHCP IP: 192.168.2.1

GATEWAY IP: 192.168.2.1

PXE-E32: TFTP open timeout

TFTP...
```

----------

## Diabliyo

Hola:

Buscando solucion a mi problema, veo que el servicio Tftp debe iniciarse asi: /etc/init.d/xinetd start, pero aun asi el problema persisite  :Sad: ...

Por otro lado, he capturado las tramas para ver que sucede en el intercambio de paquetes, y segun veo el sniffer arroja estos intercambios:

```
...primero el intercambio de paquetes para asignar IP, esto es con exito !...

Src: 192.168.2.1, Dest: 192.168.2.55, Proto: TFTP

Informacion: Read request, File: pxelinux.0/000, Transfer type: octet/000, t

Src: 192.168.2.1, Dest: 192.168.2.55, Proto: ICMP

Informacion: Destination unreachable (Port unreachable)

.. se repiten esos paquetes dos o tres veces y fin :(....
```

He verificado mi firewall y efectivamente tengo abiertos los puestos: 67, 68 y 69.

----------

## Inodoro_Pereyra

Es muchisimo mas simple poner a funcionar PXE usando dnsmasq como pxe/dhcp/tftp server...

Si buscas en mi blog, lo explico bien en detalle, no pego el enlace puntual para no pecar de spammer.

 *Quote:*   

> He verificado mi firewall y efectivamente tengo abiertos los puestos: 67, 68 y 69

 

Acerca de eso, UDP verdad?  :Very Happy: 

Salud!

----------

## Diabliyo

 *Inodoro_Pereyra wrote:*   

> Es muchisimo mas simple poner a funcionar PXE usando dnsmasq como pxe/dhcp/tftp server...
> 
> Si buscas en mi blog, lo explico bien en detalle, no pego el enlace puntual para no pecar de spammer.
> 
>  *Quote:*   He verificado mi firewall y efectivamente tengo abiertos los puestos: 67, 68 y 69 
> ...

 

Asi es, habilitado TCP y UDP, mira el pedazito del script:

```
   iptables -A INPUT -i $ETH_LAN -p tcp --dport 67 -j ACCEPT #dhcp-server

   iptables -A INPUT -i $ETH_LAN -p udp --dport 67 -j ACCEPT #dhcp-server

   iptables -A INPUT -i $ETH_LAN -p tcp --dport 68 -j ACCEPT #dhcp-client

   iptables -A INPUT -i $ETH_LAN -p udp --dport 68 -j ACCEPT #dhcp-client

   iptables -A INPUT -i $ETH_LAN -p tcp --dport 69 -j ACCEPT #tftp

   iptables -A INPUT -i $ETH_LAN -p udp --dport 69 -j ACCEPT #tftp
```

----------

## opotonil

Y si quieres resumir mas:

```

iptables -A INPUT -i $ETH_LAN -p tcp --dport 67:69 -j ACCEPT #pxe-tcp

iptables -A INPUT -i $ETH_LAN -p udp --dport 67:69 -j ACCEPT #pxe-udp

```

Salu2.

----------

## Inodoro_Pereyra

Prueba con dnsmasq que se pone a funcionar en un santiamén a ver si es problema de la configuración o de un puerto filtrado (apuesto por esto último).

Te dejo mi /etc/dnsmasq.conf:

```

interface=eth0

expand-hosts

domain=midominio.com.ar

dhcp-range=192.168.0.70,192.168.0.200,255.255.254.0,12h

dhcp-option=vendor:MSFT,2,1i

enable-tftp

tftp-root=/tftp/tftpboot

dhcp-boot=grldr

dhcp-authoritative
```

Es todo lo que necesitas para bootear PXE con dnsmasq, reemplazando en tu caso grldr por pxelinux.

Salud!

----------

## Diabliyo

 *Inodoro_Pereyra wrote:*   

> Prueba con dnsmasq que se pone a funcionar en un santiamén a ver si es problema de la configuración o de un puerto filtrado (apuesto por esto último).
> 
> Te dejo mi /etc/dnsmasq.conf:
> 
> ```
> ...

 

Hola:

Prmeramente buen manual xD...

Ahora, te paso mi configuracion del dnsmasq.conf:

```
# ojo...

# La interface eth0 es la red lan

# La interface eth1 se conecta unicamente al router/internet

interface= eth0

except-interface= eth1  # para ignorar la interface de internet

listen-address= 127.0.0.1

no-dhcp-interface= eth1 # aqui no servire dhcp

expand-hosts

dhcp-range=192.168.2.10,192.168.2.50,255.255.255.0,12h

dhcp-boot=pxelinux.0

enable-tftp

tftp-root=/var/tftp

```

Ahora, gracias a la configuracion que genere con tu manual, he conseguido butear el PXE Linux, me muestra el mensaje, agrege un menu colorido en donde me muestra la lista de Distribuciones que tengo en mi disco duro, basicamente lo que hice fue:

1- Montar la imagen iso en un directorio.

2- Copie el contenido de la ISO (montada) en mi TFTP path.

3- Mi TFTP Path es /var/tftp/.

```
shell# ls -l /var/tftp/

gentoo_amd/

gentoo_x86/

memdisk

menu.c32

opensuse/

pxelinux.0

pxelinux.cfg/

slackware_12/

ubuntu9_amd/

ubuntu9_x86/
```

EL PROBELMA AHORA, es que una vez que selecciono por ejemplo ubuntu9_amd (por que mi lap es amd), no se carga el ubuntu  :Sad: , solo sale la imagen del ubuntu y despues un error, a continuacion les proporciono mayor informacion:

pxelinux.cfg/default

```
DISPLAY pxelinux.cfg/mensaje.txt

DEFAULT menu.c32

PROMPT 0

MENU title Menu para arrancar Linux

MENU INCLUDE pxelinux.cfg/graphics.conf

LABEL slackware_12

  kernel slackware/kernels/huge.s/bzImage

  append initrd=slackware_12/isolinux/initrd.img netboot=nfs nfsroot=192.168.2.1:/var/tftp load_ramdisk=1 prompt_ramdisk=0 rw SLACK_KERNEL=huge.s

LABEL gentoo_amd

  kernel gentoo_amd/isolinux/gentoo.igz

  append root=/dev/ram0 init=/linuxrc dokeymap looptype=squashfs netboot=nfs nfsroot=192.168.2.1:/var/tftp loop=image.squashfs cdroot initrd=isolinux/gentoo.igz vga=791

LABEL gentoo_x86

  kernel gentoo_x86/isolinux/gentoo.igz

  append root=/dev/ram0 init=/linuxrc dokeymap looptype=squashfs netboot=nfs nfsroot=192.168.2.1:/var/tftp loop=image.squashfs cdroot initrd=isolinux/gentoo.igz vga=791

LABEL ubuntu9_x86

  kernel ubuntu9_x86/casper/vmlinuz

  append boot=casper initrd=ubuntu9_x86/casper/initrd.gz netboot=nfs nfsroot=192.168.2.1:/var/tftp ramdisk_size=1048576 root=/dev/ram rw quiet splash --

LABEL ubuntu9_amd

  kernel ubuntu9_amd/casper/vmlinuz

  append boot=casper initrd=ubuntu9_amd/casper/initrd.gz file=ubuntu9_amd/ubuntu.seed netboot=tftp://ubuntu9_amd/ nfsroot=192.168.2.1:/var/tftp quiet splash --

LABEL opensuse

  kernel opensuse/boot/i386/loader/linux

  append initrd=opensuse/boot/i386/loader/initrd netboot=nfs nfsroot=192.168.2.1:/var/tftp splash=silent showopts

PROMPT 1

TIMEOUT 0
```

Error

```
Loadding ubuntu9_amd/casper/vmlinuz...........

Loading ubuntu9_amd/casper/initrd.gz....... ready

Loading, please wait...

cp: cannot create /root/var/log/: No such file or directory

mount: mounting /dev on /root/dev failed: No such file or directory

mount: mounting /sys on /root/sys failed: No such file or directory

mount: mounting /proc on /root/proc failed: No such file or directory

Target filesystem doesnt have /sbin/init

No init found. Try passing iniy= bootarg

BusyBox v1.10.2 (Ubuntu 1:1.10.2-1ubuntu7) built-in shell (ash)

Enter help for a list of built-in commands

(initramfs)
```

Gracias por su tiempo  :Very Happy: 

----------

## Inodoro_Pereyra

Ubuntu puede bootear por TFT? Eso no lo sabia.

Tengo un Ubuntu que hago bootear pero montando el root con NFS:

```
label Ubuntu

menu label Ubuntu 9

kernel /ubuntu/vmlinuz

append initrd=/ubuntu/initrd.gz file=/ubuntu/preseed/ubuntu.seed boot=casper verbose netboot=nfs nfsroot=192.168.0.10:/mnt/ubuntu nox --

```

Por si sirve de algo.

Salud!

----------

## Diabliyo

 *Inodoro_Pereyra wrote:*   

> Ubuntu puede bootear por TFT? Eso no lo sabia.
> 
> Tengo un Ubuntu que hago bootear pero montando el root con NFS:
> 
> ```
> ...

 

Pues si checas bien en mi post anterior, io tambien loe stoy montando en ntfs, pero monto directamente el directorio /var/tftp...

```
LABEL ubuntu9_amd

  kernel ubuntu9_amd/casper/vmlinuz

  append boot=casper initrd=ubuntu9_amd/casper/initrd.gz file=ubuntu9_amd/ubuntu.seed netboot=tftp://ubuntu9_amd/ nfsroot=192.168.2.1:/var/tftp quiet splash -- 
```

Aparte en el /etc/rxportfs tambien invoco:

```
/var/tftp/   192.168.2.0/255.255.255.0(rw,sync,no_subtree_check)
```

----------

## Inodoro_Pereyra

 *Diabliyo wrote:*   

> Pues si checas bien en mi post anterior, io tambien loe stoy montando en ntfs, pero monto directamente el directorio /var/tftp...
> 
> ```
> LABEL ubuntu9_amd
> 
> ...

 

Suponiendo que donde dice ntfs y rxportfs no son mas que errores al tipear, si usas netboot=tftp entonces no deberías estar usando nfsroot=XYZ si no tftproot=XYZ. Por otro lado, si vas a usas nfsroot=XYZ entonces cambia netboot=nfs.

De todas formas estamos hablando en el aire aqui, que este no es un foro de ubuntu y yo casi no tengo experiencia en el asunto, solo se que como te lo pegué mas arriba funciona... Me parece que deberías preguntar en sus foros. Vas a tener mejor suerte.

Salud!

----------

