ger*_*lus 3 libvirt opennebula
目前,libvirt 中只有两个与网络引导相关的选项可用bootp
:
server
和file
所以对于这样的配置:
<bootp file='test.ipx' server='10.10.10.2'/>
Run Code Online (Sandbox Code Playgroud)
生成此代码:
dhcp-boot=test.ipx,,10.10.10.2
Run Code Online (Sandbox Code Playgroud)
1)我如何添加这样的东西:
dhcp-userclass=set:ipxe,iPXE
dhcp-boot=tag:ipxe,http://matchbox.foo:8080/boot.ipxe
Run Code Online (Sandbox Code Playgroud)
2)或者我可以将配置文件更改var/lib/libvirt/dnsmasq/default.conf
为其他内容
选项 1 似乎不可能查看libvirt 代码。
选项 2 似乎也不可能
Libvirt v5.6.0 (2019-08-05)添加了对将自定义选项传递给dnsmasq
.
从文档:
一个特殊的 XML 命名空间可用于将选项直接传递给底层 dnsmasq 配置文件。XML 命名空间的使用没有支持保证,因此使用风险自负。
此示例 XML 将传递选项字符串
foo=bar
并cname=*.foo.example.com,master.example.com
直接传递给底层 dnsmasq 实例。Run Code Online (Sandbox Code Playgroud)<network xmlns:dnsmasq='http://libvirt.org/schemas/network/dnsmasq/1.0'> ... <dnsmasq:options> <dnsmasq:option value="foo=bar"/> <dnsmasq:option value="cname=*.foo.example.com,master.example.com"/> </dnsmasq:options> </network>
Fedora 31 附带libvirt v5.6.0-4.fc31
.
就我而言,我希望在我的 libvirt 网络中使用自定义 DNS 服务器,而不是dnsmasq
. 感谢this answer的建议,我认为这将是XML(但在更新libvirt之前我无法测试):
<network xmlns:dnsmasq='http://libvirt.org/schemas/network/dnsmasq/1.0'>
...
<dnsmasq:options>
<dnsmasq:option value="dhcp-option=6,192.168.0.90,192.168.0.98"/>
</dnsmasq:options>
</network>
Run Code Online (Sandbox Code Playgroud)
小智 5
我一直处于完全相同的情况,试图为matchbox配置 libvirt dhcp 。作为参考,我正在研究 Fedora 25
由于 libvirt 中 xml 解析的限制,第一个选项是不可能的。第二个选项不起作用,因为配置将被 libvirt 覆盖。出于与第一点相同的原因,您也不能将 dnsmasq 配置为充当 dhcp 代理。我发现让它工作的唯一方法是完全禁用该网络的 dhcp(使用 virsh net-edit)并将 dhcp 作为单独的服务运行。
默认的 libvirt 网络会启动两个 dnsmasq 实例,一个用于 dns,一个用于 dhcp。就我而言,那是:
# netstat -tulpn | grep dnsmasq
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 2229/dnsmasq
udp 0 0 192.168.122.1:53 0.0.0.0:* 2229/dnsmasq
udp 0 0 0.0.0.0:67 0.0.0.0:* 2229/dnsmasq
# ps aux | grep [d]nsmasq
nobody 2229 0.0 0.0 49104 372 ? S 19:45 0:00 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
root 2230 0.0 0.0 49076 372 ? S 19:45 0:00 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
Run Code Online (Sandbox Code Playgroud)
要禁用 dhcp 打开网络配置:
virsh net-edit default
并删除 dhcp 部分
前:
<network>
<name>default</name>
<uuid>6fe7eafd-1925-4943-9596-2172bd55d1ac</uuid>
<forward mode='route'/>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:08:ed:3b'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.99'/>
</dhcp>
</ip>
</network>
Run Code Online (Sandbox Code Playgroud)
后:
<network>
<name>default</name>
<uuid>6fe7eafd-1925-4943-9596-2172bd55d1ac</uuid>
<forward mode='route'/>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:08:ed:3b'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
</ip>
</network>
Run Code Online (Sandbox Code Playgroud)
重新启动网络以使更改生效:
virsh net-destroy default
virsh net-start default
并确认现在只有一个 dnsmasq 实例在运行:
# netstat -tulpn | grep dnsmasq
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 2431/dnsmasq
udp 0 0 192.168.122.1:53 0.0.0.0:* 2431/dnsmasq
# ps aux | grep [d]nsmasq
nobody 2431 0.0 0.0 49104 368 ? S 19:55 0:00 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
Run Code Online (Sandbox Code Playgroud)
现在你想开始你自己的实例监听 0.0.0.0:67
已经为 libvirt 安装了 dnsmasq(禁用了 systemd 服务等),所以我只需要创建以下配置文件(使用一些特定于环境的值,请参阅http://www.thekelleys.org.uk/dnsmasq/docs/dnsmasq-人.html):
# cat /etc/dnsmasq.d/default_dhcp.conf
pid-file=/var/run/libvirt/network/default_dhcp.pid
bind-dynamic
port=0
except-interface=lo
interface=virbr0
dhcp-range=192.168.122.2,192.168.122.99
dhcp-no-override
enable-tftp
tftp-root=/var/lib/tftp
dhcp-lease-max=98
dhcp-hostsfile=/var/lib/libvirt/dnsmasq/default.hostsfile
dhcp-option=6,192.168.122.1
# if request comes from older PXE ROM, chainload to iPXE (via TFTP)
dhcp-boot=tag:!ipxe,undionly.kpxe
# if request comes from iPXE user class, set tag "ipxe"
dhcp-userclass=set:ipxe,iPXE
# point ipxe tagged requests to the matchbox iPXE boot script (via HTTP)
dhcp-boot=tag:ipxe,http://matchbox.foo:8080/boot.ipxe
# verbose
log-queries
log-dhcp
Run Code Online (Sandbox Code Playgroud)
并使用以下命令启动(并启用)守护进程:
systemctl start dnsmasq
systemctl enable dnsmasq
Run Code Online (Sandbox Code Playgroud)
这导致:
# netstat -tulpn | grep dnsmas
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1642/dnsmasq
udp 0 0 192.168.122.1:53 0.0.0.0:* 1642/dnsmasq
udp 0 0 0.0.0.0:67 0.0.0.0:* 2048/dnsmasq
Run Code Online (Sandbox Code Playgroud)
我可以使用火柴盒 iPXE 启动 kvm vms
Libvirt 明确避免允许通用传递选项到 dnsmasq,因为我们希望将公共配置格式/API 与了解 dnsmasq 作为 impl 后端的特定选择隔离开来。如果您尝试更改 libvirt 写出的 dnsmasq 配置文件,则您的更改稍后将被 libvirt 覆盖。
如果 libvirt 网络 XML 中缺少您需要的功能,我鼓励您针对 libvirt 提交错误报告,请求添加这些功能。您可以提供的任何信息来解释其使用背后的基本原理也将是有益的。
归档时间: |
|
查看次数: |
6175 次 |
最近记录: |