Inicialização sem disco com IPv6

16

No nosso trabalho, estamos usando cerca de 80 máquinas sem disco executando o Ubuntu. Queremos fazer a transição para o IPv6, então agora estou tentando fazer com que o nosso sistema sem disco funcione com o IPV6. A transmissão do kernel e do initramfs ainda pode estar em uma conexão IPv4, mas quando a máquina estiver totalmente inicializada, desejo que todas as conexões de rede sejam feitas em IPv6.

Isso significa que o nfsroot deve ser montado via IPv6. Minha pesquisa mostrou que o initramfs-tools (1.18.5-1ubuntu4.1) NÃO suporta IPv6. Isso significa que nem o ipconfig, usado para configuração da interface no início da inicialização, nem o procedimento de montagem da raiz nfs são compatíveis com IPv6.

Para contornar isso, adicionei dois binários ao 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

Eu os uso para (a) solicitar um DHCPv6 no momento da inicialização com

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

e (b) configurar a interface com o endereço que atingi executando:

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

Normalmente, a raiz nfs é montada com o seguinte comando em /usr/share/initramfs-tools/scripts/nfs:

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

Mas isso não parece aceitar endereços IPv6.

Então eu mudei para:

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

$NFSROOTneste caso é [2001:4ca0:2218:1::1:2]:/lb/diskless/rootfs/ubuntu_1204_ipv6.

A configuração da interface parece funcionar tão bem quanto a montagem raiz, mas quando /sbin/inité executada (acho), o IPv6 cai novamente e, portanto, o sistema congela (porque não pode mais acessar a raiz do ubuntu).

O /etc/network/interfacesarquivo fica assim:

auto lo
iface lo inet loopback

iface eth0 inet manual
iface eth0 inet6 manual

Existe uma maneira de manter a configuração da interface do initramfs? Ou estou fazendo algo errado ao configurar a interface ip?

Moritz
fonte
2
Dê uma olhada nos comandos route e arp. Ambos podem ser chamados em tempo de boot, e têm IPV6 apoio
j0h
11
Isso é bastante surpreendente. A raiz do IPv6 NFS já é totalmente suportada nos sistemas do tipo Red Hat. Eu reclamaria na barra de lançamento.
Michael Hampton

Respostas:

1

talvez esteja fora do assunto para você, mas acho que seu problema específico pode ser evitado repensando o serviço:

por que se preocupar em inicializar com o NFS?

Você pode tentar inicializar com iscsi (no modo somente leitura para permitir mais de uma conexão com a imagem) e, em seguida, usar iscsi ou nfs (ipv4) para os compartilhamentos de usuários, se necessário. Você pode conseguir isso com o projeto ipxe.

Outra maneira é usar squashfs + tmpfs e não se incomodar tanto com compartilhamentos durante o processo de inicialização do sistema e, em seguida, fazer remontagens dependendo das autenticações do usuário (no entanto, isso tem um maior consumo de memória no lado do cliente).

Espero que ajude você.

Antoine Rodriguez
fonte
11
O Ubuntu ainda suporta a inicialização do iSCSI sobre IPv6?
Michael Hampton
11
Aparentemente, sim.
Antoine Rodriguez