You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

dracut DHCP报错:检测到10.0.2.15地址重复,请求排查

问题:QEMU中dracut initramfs DHCP分配IP失败(重复地址10.0.2.15)

我尝试从Google Drive启动Linux,在Mac M3的模拟x86 Ubuntu 22.04环境编译dracut生成EFI格式initramfs,执行命令:

./dracut.sh --kver 6.9.6-arch1-1 \
    --uefi efi_firmware/EFI/BOOT/BOOTX64.efi \
    --force -l -N --no-hostonly-cmdline \
    --modules "base bash fuse shutdown network" \
    --add-drivers "target_core_mod target_core_file e1000" \
    --kernel-cmdline "ip=dhcp rd.shell=1 console=ttyS0"

之后用QEMU启动镜像,命令:

qemu-system-x86_64 -bios ./OVMF.fd -m 2G -drive format=raw,file=fat:rw:./efi_firmware -netdev user,id=network0 -device e1000,netdev=network0 -nographic

镜像可正常进入dracut shell,但执行dhclient eth0时出现两个问题:

  1. arping参数错误:arping: invalid option -- 'f'
  2. DHCP重复地址报错:dracut Warning: Duplicate address detected for 10.0.2.15 while doing dhcp. retrying

完整执行输出:

dracut:/# ip link set eth0 up
dracut:/# [   75.083588] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX

dracut:/# dhclient eth0
dhcp: PREINIT eth0 up
dhcp: BOUND setting up eth0
arping: invalid option -- 'f'
ARPing 2.22, by Thomas Habets <thomas@habets.se>
usage: arping [ -0aAbdDeFpPqrRuUv ] [ -w <sec> ] [ -W <sec> ] [ -S <host/ip> ]
              [ -T <host/ip ] [ -s <MAC> ] [ -t <MAC> ] [ -c <count> ]
              [ -C <count> ] [ -i <interface> ] [ -m <type> ] [ -g <group> ]
              [ -V <vlan> ] [ -Q <priority> ] <host/ip/MAC | -B>
For complete usage info, use --help or check the manpage.
[   86.239583] dracut Warning: Duplicate address detected for 10.0.2.15 while doing dhcp. retrying
dracut Warning: Duplicate address detected for 10.0.2.15 while doing dhcp. retrying

尝试用vmlinuz+initrd启动也出现相同问题,需要解决QEMU DHCP正常分配IP的问题。


解决方案

1. 修复arping参数不兼容问题

新版本arping已将-f参数替换为-F,dracut脚本未同步更新导致报错:

  • 找到dracut网络模块的dhcp脚本(路径通常为/usr/lib/dracut/modules.d/40network/dhclient.sh)
  • 查找脚本中所有arping -f的片段,替换为arping -F
  • 重新编译dracut生成EFI镜像

2. 调整QEMU用户网络的DHCP范围

QEMU默认用户网络的DHCP池包含10.0.2.15,可能和宿主机或其他虚拟机冲突。启动QEMU时手动指定新的网络段:

qemu-system-x86_64 -bios ./OVMF.fd -m 2G -drive format=raw,file=fat:rw:./efi_firmware -netdev user,id=network0,net=192.168.50.0/24,dhcpstart=192.168.50.10 -device e1000,netdev=network0 -nographic

此命令将网络段改为192.168.50.0/24,DHCP起始地址设为192.168.50.10,避开默认的冲突地址。

3. 禁用dracut的ARP地址检测

如果不需要ARP冲突检测,可通过内核参数直接跳过:

  • 修改dracut编译命令的--kernel-cmdline部分,添加rd.net.skip_arp_check=1:
./dracut.sh --kver 6.9.6-arch1-1 \
    --uefi efi_firmware/EFI/BOOT/BOOTX64.efi \
    --force -l -N --no-hostonly-cmdline \
    --modules "base bash fuse shutdown network" \
    --add-drivers "target_core_mod target_core_file e1000" \
    --kernel-cmdline "ip=dhcp rd.shell=1 console=ttyS0 rd.net.skip_arp_check=1"
  • 重新编译生成镜像后启动测试

4. 手动配置静态IP(临时方案)

如果DHCP问题暂时无法解决,可在dracut shell中手动设置网络:

# 设置静态IP
ip addr add 10.0.2.20/24 dev eth0
# 添加默认路由
ip route add default via 10.0.2.1 dev eth0
# 设置DNS
echo "nameserver 8.8.8.8" > /etc/resolv.conf

内容的提问来源于stack exchange,提问作者vaibhav0320

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 20:55:58