Arranque sin disco con IPv6

16

En nuestro trabajo estamos utilizando alrededor de 80 máquinas sin disco que ejecutan Ubuntu. Queremos hacer la transición a IPv6, así que ahora estoy tratando de hacer que nuestro sistema sin disco funcione con IPV6. La transmisión del kernel y initramfs todavía puede realizarse a través de una conexión IPv4, pero una vez que la máquina se haya iniciado por completo, quiero que todas las conexiones de red se realicen a través de IPv6.

Esto significa que nfsroot debe montarse a través de IPv6. Mi investigación de esto ha demostrado que initramfs-tools (1.18.5-1ubuntu4.1) NO es compatible con IPv6. Eso significa que ni ipconfig, que se usa para la configuración de la interfaz en el inicio temprano, ni el procedimiento de montaje de montaje para la raíz nfs son compatibles con IPv6.

Para evitar esto, agregué dos binarios a initramfs ( /etc/initramfs-tools/hooks/ipv6):

#!/bin/bash 
. /usr/share/initramfs-tools/hook-functions
copy_exec /sbin/dhclient /sbin
copy_exec /sbin/mount.nfs4 /sbin

Los uso para (a) solicitar un DHCPv6 al inicio del arranque con

/sbin/dhclient -6 -1 -cf /tmp/dhclient.conf -pf /tmp/dhclient6.eth0.pid -lf /tmp/dhclient6.eth0.leases eth0

y (b) para configurar la interfaz con la dirección que obtuve ejecutando:

ipv6=$(cat /tmp/dhclient6.eth0.leases | grep iaaddr | egrep -o "([a-f0-9]{1,4}:){3}([a-f0-9]{0,4}:){0,4}[a-f0-9]{1,4}")
ip -6 addr add $ipv6/112 dev eth0

Por lo general, la raíz nfs se monta con el siguiente comando en /usr/share/initramfs-tools/scripts/nfs:

nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt}

Pero esto no parece aceptar direcciones IPv6.

Entonces lo cambié a:

mount ${roflag} -t nfs4 ${NFSROOT} ${rootmnt}

$NFSROOTen este caso es [2001:4ca0:2218:1::1:2]:/lb/diskless/rootfs/ubuntu_1204_ipv6.

La configuración de la interfaz parece funcionar tan bien como el montaje raíz, pero cuando /sbin/initse ejecuta (creo), el IPv6 se cae nuevamente y, por lo tanto, el sistema se congela (porque ya no puede acceder a la raíz de ubuntu).

El /etc/network/interfacesarchivo se ve así:

auto lo
iface lo inet loopback

iface eth0 inet manual
iface eth0 inet6 manual

¿Hay alguna manera de mantener la configuración de la interfaz de initramfs? ¿O estoy haciendo algo mal cuando configuro la interfaz ip?

Moritz
fuente
2
Echa un vistazo a los comandos de ruta y arp. Ambos pueden llamarse en el momento del arranque y tienen soporte para IPV6
j0h
1
Esto es bastante sorprendente. La raíz IPv6 NFS ya es totalmente compatible con los sistemas de tipo Red Hat. Me quejaría en el launchpad.
Michael Hampton

Respuestas:

1

tal vez no sea un tema para usted, pero creo que su problema específico se puede evitar al repensar el servicio:

¿Por qué molestarse en arrancar con NFS?

Puede intentar arrancar con iscsi (en un modo de solo lectura para permitir más de una conexión a la imagen) y luego usar iscsi o nfs (ipv4) para los recursos compartidos del usuario si es necesario. Puede lograr esto con el proyecto ipxe.

Otra forma es usar squashfs + tmpfs y no molestarse tanto con los recursos compartidos durante el proceso de arranque del sistema y luego volver a montar según las autenticaciones del usuario (sin embargo, esto tiene un mayor consumo de memoria en el lado del cliente).

Esperanzas que te ayuden.

Antoine Rodriguez
fuente
1
¿Ubuntu incluso admite el arranque desde iSCSI sobre IPv6?
Michael Hampton
1
Aparentemente lo hace.
Antoine Rodriguez