Бездисковая загрузка с 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

Я использую их, чтобы (а) запросить 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.

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

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

auto lo
iface lo inet loopback

iface eth0 inet manual
iface eth0 inet6 manual

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

Moritz
источник
2
Посмотрите на команды route и arp. Оба могут быть вызваны во время загрузки и иметь поддержку IPV6
j0h
1
Это довольно удивительно. Корень IPv6 NFS уже полностью поддерживается в системах типа Red Hat. Я бы пожаловался на панель запуска.
Майкл Хэмптон

Ответы:

1

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

зачем загружаться с NFS?

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

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

Надежды, которые вам помогут.

Антуан Родригес
источник
1
Ubuntu даже поддерживает загрузку с iSCSI через IPv6?
Майкл Хэмптон,
1
По-видимому, это так.
Антуан Родригес