![Libvirt 无需配置即可提供 bootp 选项](https://linux22.com/image/625068/Libvirt%20%E6%97%A0%E9%9C%80%E9%85%8D%E7%BD%AE%E5%8D%B3%E5%8F%AF%E6%8F%90%E4%BE%9B%20bootp%20%E9%80%89%E9%A1%B9.png)
我在 libvirt 中配置了一个虚拟网络,并将其配置为提供 DHCP(通过 dnsmasq),但是不是配置为提供 bootp 信息(见下文),但是当我启动 iPXE ISO 并查看 wireshark 中的流量时,我发现该虚拟网络上的 DHCP 服务似乎正在使用 next-server 参数进行响应:
bootp.ip.server 192.168.122.1
这会导致一个问题,因为我想使用另一台服务器作为 DHCP 代理来提供 PXE 信息,而为了使其工作,libvirt 的 DHCP 服务没有提供下一个服务器的值。
我怎样才能让 libvirt 虚拟网络不是发送该值吗?
编辑:似乎可以通过将以下语句添加到来让 libvirt 的 dnsmasq 忽略 bootp 请求/var/lib/libvirt/dnsmasq/defaut.conf
:
dhcp-ignore: bootp
...不幸的是,当 libvirt 重新启动时,此文件会被覆盖。不确定是否有一个可配置的模板可以放置所有虚拟网络的参数。
虚拟网络配置:
<network connections='3'>
<name>default</name>
<uuid>59535def-2082-42f4-8e5e-a68f6f0fffbd</uuid>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:1c:02:0e'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
</network>
来自 iPXE 的 DHCP 请求:
16:04:59.394149 IP (tos 0x0, ttl 64, id 2237, offset 0, flags [none], proto UDP (17), length 441)
0.0.0.0.bootpc > 255.255.255.255.bootps: [udp sum ok] BOOTP/DHCP, Request from 52:54:00:35:45:c5, length 413, xid 0xb665d069, secs 11, Flags [Broadcast] (0x8000)
Client-Ethernet-Address 52:54:00:35:45:c5
Vendor-rfc1048 Extensions
Magic Cookie 0x63825363
DHCP-Message Option 53, length 1: Request
MSZ Option 57, length 2: 1472
ARCH Option 93, length 2: 0
NDI Option 94, length 3: 1.2.1
Vendor-Class Option 60, length 32: "PXEClient:Arch:00000:UNDI:002001"
CLASS Option 77, length 4: "iPXE"
Parameter-Request Option 55, length 21:
Subnet-Mask, Default-Gateway, Domain-Name-Server, LOG
Hostname, Domain-Name, RP, Vendor-Option
Vendor-Class, TFTP, BF, Option 128
Option 129, Option 130, Option 131, Option 132
Option 133, Option 134, Option 135, Option 175
Option 203
T175 Option 175, length 51: 177.5.1.16.236.129.57.34.1.1.25.1.1.33.1.1.24.1.1.235.3.1.0.0.38.1.1.17.1.1.19.1.1.23.1.1.21.1.1.39.1.1.16.1.2.18.1.1.27.1.1
Client-ID Option 61, length 7: ether 52:54:00:35:45:c5
GUID Option 97, length 17: 0.36.246.109.48.115.66.98.75.170.28.144.120.91.142.203.164
Server-ID Option 54, length 4: 192.168.122.1
Requested-IP Option 50, length 4: 192.168.122.178
END Option 255, length 0
libvirt 的 DHCP 响应:
16:04:59.487750 IP (tos 0xc0, ttl 64, id 11805, offset 0, flags [none], proto UDP (17), length 328)
192.168.122.1.bootps > 255.255.255.255.bootpc: [udp sum ok] BOOTP/DHCP, Reply, length 300, xid 0xb665d069, secs 11, Flags [Broadcast] (0x8000)
Your-IP 192.168.122.178
Server-IP 192.168.122.1
Client-Ethernet-Address 52:54:00:35:45:c5
Vendor-rfc1048 Extensions
Magic Cookie 0x63825363
DHCP-Message Option 53, length 1: ACK
Server-ID Option 54, length 4: 192.168.122.1
Lease-Time Option 51, length 4: 3600
RN Option 58, length 4: 1800
RB Option 59, length 4: 3150
Subnet-Mask Option 1, length 4: 255.255.255.0
BR Option 28, length 4: 192.168.122.255
Default-Gateway Option 3, length 4: 192.168.122.1
Domain-Name-Server Option 6, length 4: 192.168.122.1
END Option 255, length 0
PAD Option 0, length 0, occurs 8
答案1
您实际上需要禁用 libvirt 中针对此网络的 DHCP 设置。返回的服务器不是下一个服务器,而是 DHCP 服务器,当然它是 libvirt 的本地接口。您需要从 libvirt 的角度完全禁用 DHCP,并让您的外部 DHCP 服务器完成所有工作。将 libvirt 配置为充当 DHCP 中继并将消息转发到您的原始服务器并非易事(如果可能的话)。