使用IPv6的无盘启动


16

在我们的工作中,我们正在使用大约80台运行Ubuntu的无盘计算机。我们想过渡到IPv6,所以现在我试图使我们的无盘系统与IPV6一起使用。内核和initramfs的传输仍然可以通过IPv4连接进行,但是一旦机器完全启动,我希望所有网络连接都通过IPv6。

这意味着必须通过IPv6挂载nfsroot。我对此的研究表明,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什么?


2
看一下route和arp命令。两者都可以在启动时调用,并具有IPV6支持
j0h 2014年

1
这真是令人惊讶。在Red Hat类型系统上已经完全支持IPv6 NFS根目录。我会在启动板上抱怨。
迈克尔·汉普顿2014年

Answers:


1

也许这对您来说不是话题,但是我认为可以通过重新考虑服务来避免您的特定问题:

为什么要使用NFS引导?

您可以尝试使用iscsi引导(在只读模式下允许与映像建立多个连接),然后根据需要对用户共享使用iscsi或nfs(ipv4)。您可以使用ipxe项目来实现。

另一种方法是使用squashfs + tmpfs,并且在系统引导过程中不要对共享造成太多麻烦,然后根据用户身份验证进行重新挂载(但是,这会增加客户端的内存消耗)。

希望对您有所帮助。


1
Ubuntu甚至支持从iSCSI over IPv6引导吗?
迈克尔·汉普顿

1
显然是的。
Antoine Rodriguez
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.