Бездисковая загрузка с IPv6

16

В нашей работе мы используем около 80 бездисковых машин под управлением Ubuntu. Мы хотим сделать переход на IPv6, так что теперь я пытаюсь заставить нашу бездисковую систему работать с IPV6. Передача ядра и initramfs может быть по-прежнему через соединение IPv4, но как только машина будет полностью загружена, я хочу, чтобы все сетевые подключения были выше IPv6.

Это означает, что nfsroot должен быть установлен через IPv6. Мое исследование этого показало, что initramfs-tools (1.18.5-1ubuntu4.1) НЕ поддерживает IPv6. Это означает, что ни ipconfig, который используется для конфигурации интерфейса при раннем времени загрузки, ни процедура монтирования монтирования nfs не являются совместимыми с IPv6.

Чтобы обойти это, я добавил два бинарных файла 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

Я использую их для (a) запроса DHCPv6 в раннее время загрузки с помощью

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

и (b) настроить интерфейс с адресом, который я получил, выполнив:

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

Обычно корень nfs монтируется со следующей командой в /usr/share/initramfs-tools/scripts/nfs :

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

Но это не похоже на адреса IPv6.

Поэтому я изменил его на:

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

$NFSROOT в этом случае [2001:4ca0:2218:1::1:2]:/lb/diskless/rootfs/ubuntu_1204_ipv6 .

Конфигурация интерфейса, похоже, работает так же, как и корневая установка, но когда /sbin/init выполняется (я думаю), IPv6 снова отбрасывается, и поэтому система зависает (потому что он больше не может получить доступ к корню ubuntu).

Файл /etc/network/interfaces выглядит следующим образом:

auto lo
iface lo inet loopback

iface eth0 inet manual
iface eth0 inet6 manual

Есть ли способ сохранить конфигурацию интерфейса из initramfs? Или я делаю что-то неправильно, когда настраиваю интерфейс с помощью ip ?

    
задан moritz 17.03.2014 в 10:23
источник

1 ответ

1

Возможно, это не для вас, но я думаю, что вашей конкретной проблемы можно избежать, переосмыслив службу:

зачем загружаться с помощью NFS?

Вы можете попробовать загрузиться с помощью iscsi (в режиме только для чтения, чтобы разрешить более одного подключения к изображению), а затем использовать iscsi или nfs (ipv4) для пользователей, если вам нужно. Вы можете достичь этого с помощью проекта ipxe.

Другой способ - использовать squashfs + tmpfs и не беспокоиться об общих ресурсах во время процесса загрузки системы, а затем выполнять пересоединение в зависимости от аутентификации пользователя (однако это имеет более высокое потребление памяти на стороне клиента).

Надеемся, что это поможет.

    
ответ дан Antoine Rodriguez 28.09.2014 в 16:50