Festplattenloses Booten mit IPv6

16

Bei unserer Arbeit verwenden wir rund 80 plattenlose Maschinen, auf denen Ubuntu ausgeführt wird. Wir möchten auf IPv6 umsteigen, und jetzt versuche ich, unser plattenloses System für die Arbeit mit IPV6 zu aktivieren. Die Übertragung des Kernels und von initramfs kann immer noch über eine IPv4-Verbindung erfolgen, aber sobald der Computer vollständig gebootet ist, möchten wir, dass alle Netzwerkverbindungen über IPv6 erfolgen.

Dies bedeutet, dass der nfsroot über IPv6 gemountet werden muss. Meine Untersuchungen haben gezeigt, dass initramfs-tools (1.18.5-1ubuntu4.1) IPv6 NICHT unterstützen. Das bedeutet, dass weder ipconfig, das für die Schnittstellenkonfiguration zum frühen Startzeitpunkt verwendet wird, noch das Bereitstellungsverfahren für den nfs-Stamm IPv6-fähig sind.

Um dies zu umgehen, habe ich dem initramfs ( /etc/initramfs-tools/hooks/ipv6) zwei Binärdateien hinzugefügt :

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

Ich benutze diese um (a) ein DHCPv6 beim frühen Booten mit anzufordern

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

und (b) die Schnittstelle mit der Adresse zu konfigurieren, die ich durch Ausführen von:

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

Normalerweise wird der nfs-Stamm mit dem folgenden Befehl eingehängt /usr/share/initramfs-tools/scripts/nfs:

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

Dies scheint jedoch keine IPv6-Adressen zu akzeptieren.

Also habe ich es geändert in:

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

$NFSROOTin diesem Fall ist [2001:4ca0:2218:1::1:2]:/lb/diskless/rootfs/ubuntu_1204_ipv6.

Die Schnittstellenkonfiguration scheint genauso gut zu funktionieren wie das Mounten des Roots, aber wenn /sbin/inites ausgeführt wird (glaube ich), wird IPv6 wieder gelöscht und das System friert ein (weil es nicht mehr auf den Ubuntu-Root zugreifen kann).

Die /etc/network/interfacesDatei sieht folgendermaßen aus:

auto lo
iface lo inet loopback

iface eth0 inet manual
iface eth0 inet6 manual

Gibt es eine Möglichkeit, die Schnittstellenkonfiguration von initramfs fernzuhalten? Oder mache ich etwas falsch, wenn ich die Schnittstelle mit konfiguriere ip?

moritz
quelle
2
Schauen Sie sich die Befehle route und arp an. Beide können beim Booten aufgerufen werden und haben IPV6-Unterstützung
j0h
1
Das ist ziemlich überraschend. IPv6-NFS-Root wird auf Red Hat-Systemen bereits vollständig unterstützt. Ich würde mich auf dem Launchpad beschweren.
Michael Hampton

Antworten:

1

Vielleicht ist es für Sie kein Thema, aber ich denke, dass Sie Ihr spezifisches Problem vermeiden können, indem Sie den Service überdenken:

Warum mit NFS booten?

Sie können versuchen, mit iscsi zu booten (in einem schreibgeschützten Modus, um mehr als eine Verbindung zum Image zuzulassen) und dann bei Bedarf iscsi oder nfs (ipv4) für die Benutzerfreigaben verwenden. Dies erreichen Sie mit dem ipxe-Projekt.

Eine andere Möglichkeit besteht darin, squashfs + tmpfs zu verwenden und sich während des Startvorgangs des Systems nicht so sehr mit Freigaben zu beschäftigen. Anschließend werden in Abhängigkeit von den Benutzerauthentifizierungen Remounts durchgeführt (dies hat jedoch einen höheren Speicherverbrauch auf der Clientseite zur Folge).

Hoffnungen, die Ihnen helfen.

Antoine Rodriguez
quelle
1
Unterstützt Ubuntu überhaupt das Booten von iSCSI über IPv6?
Michael Hampton
1
Anscheinend schon.
Antoine Rodriguez