我在网上看到过这问题和其他问题,但我的问题依然存在。
我有一个gentoo主机,具有以下接口:
virbr0: flags=4163 mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:c0:12:c5 txqueuelen 1000 (Ethernet)
RX packets 22 bytes 2632 (2.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1880 bytes 99816 (97.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
我有一个devuan虚拟机,我希望它使用静态IP。这是libvirt中默认网络的配置:
# virsh net-dumpxml default
default
469df392-3b72-4069-814a-10893732b627
在VM关闭后,我得到了以下租约:
# virsh net-dhcp-leases default
Expiry Time MAC address Protocol IP address Hostname Client ID or DUID
------------------------------------------------------------------------------------------------------------------------------------------------
1970-01-01 01:00:00 52:54:00:67:37:7d ipv4 192.168.122.190/24 devuan ff:00:67:37:7d:00:01:00:01:2b:77:a8:75:52:54:00:67:37:7d
...but一启动VM,IP就会被撞到:
# virsh net-dhcp-leases default
Expiry Time MAC address Protocol IP address Hostname Client ID or DUID
------------------------------------------------------------------------------------------------------------------------------------------------
1970-01-01 01:00:00 52:54:00:67:37:7d ipv4 192.168.122.191/24 devuan ff:00:67:37:7d:00:01:00:01:2b:77:ba:24:52:54:00:67:37:7d
1970-01-01 01:00:00 52:54:00:67:37:7d ipv4 192.168.122.192/24 - ff:00:67:37:7d:00:01:00:01:2b:77:b9:7a:52:54:00:67:37:7d
我试着破坏/启动网络,重新/启动libvirtd
和virtlogd
,在中间杀死dnsmasq
-related进程,甚至编辑/var/lib/libvirt/dnsmasq/virbr0.status
,使其只有我想要的IP。它从不引脚。
目前我也有:
# cat /var/lib/libvirt/dnsmasq/virbr0.macs
[
{
"domain": "devuan",
"macs": [
"52:54:00:67:37:7d"
]
}
]
# cat /var/lib/libvirt/dnsmasq/virbr0.status
[
{
"ip-address": "192.168.122.192",
"mac-address": "52:54:00:67:37:7d",
"hostname": "devuan",
"client-id": "ff:00:67:37:7d:00:01:00:01:2b:77:ba:24:52:54:00:67:37:7d",
"expiry-time": 0
},
{
"ip-address": "192.168.122.191",
"mac-address": "52:54:00:67:37:7d",
"client-id": "ff:00:67:37:7d:00:01:00:01:2b:77:b9:7a:52:54:00:67:37:7d",
"expiry-time": 0
}
]
主机的路由器上没有这个网络的租约,所以这不是什么问题。VM被设置为DHCP。每次我重新启动它,它都会得到不同的IP。
/var/lib/libvirt/dnsmasq/default.addnhosts
是空的。
# cat /var/lib/libvirt/dnsmasq/default.conf
##WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
##OVERWRITTEN AND LOST. Changes to this configuration should be made using:
## virsh net-edit default
## or other application using the libvirt API.
##
## dnsmasq conf file created by libvirt
strict-order
pid-file=/run/libvirt/network/default.pid
except-interface=lo
bind-dynamic
interface=virbr0
dhcp-range=192.168.122.2,192.168.122.254,255.255.255.0,infinite
dhcp-no-override
dhcp-authoritative
dhcp-lease-max=253
dhcp-hostsfile=/var/lib/libvirt/dnsmasq/default.hostsfile
addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts
# cat /var/lib/libvirt/dnsmasq/default.hostsfile
52:54:00:67:37:7d,192.168.122.190,devuan,infinite
这个接口在VM的XML配置中是这样的:
我遗漏了什么?Edit 1在@larsks的评论之后,我查看了来宾和日志,并可以跟踪以下内容。root@devuan:~# rm /var/lib/dhcp/* && poweroff然后在主人那里:host ~ # virsh net-destroy default
host ~ # rm /var/lib/libvirt/dnsmasq/virbr0.*
Feb 14 22:45:01 host dnsmasq[24023]: started, version 2.86 cachesize 150
Feb 14 22:45:01 host dnsmasq[24023]: compile time options: IPv6 GNU-getopt no-DBus no-UBus i18n no-IDN DHCP DHCPv6 no-Lua no-TFTP no-conntrack ipset no-auth no-cryptohash no-DNSSEC no-ID loop-detect inotify dumpfile
Feb 14 22:45:01 host dnsmasq-dhcp[24023]: DHCP, IP range 192.168.122.2 -- 192.168.122.254, lease time infinite
Feb 14 22:45:01 host dnsmasq-dhcp[24023]: DHCP, sockets bound exclusively to interface virbr0
Feb 14 22:45:01 host dnsmasq[24023]: reading /etc/resolv.conf
Feb 14 22:45:01 host dnsmasq[24023]: using nameserver 10.0.0.1#53
Feb 14 22:45:01 host dnsmasq[24023]: read /etc/hosts - 2 addresses
Feb 14 22:45:01 host dnsmasq[24023]: read /var/lib/libvirt/dnsmasq/default.addnhosts - 0 addresses
Feb 14 22:45:01 host dnsmasq-dhcp[24023]: read /var/lib/libvirt/dnsmasq/default.hostsfile
host ~ # virsh start devuan
Feb 14 22:47:52 host kernel: virbr0: port 1(vnet7) entered blocking state
Feb 14 22:47:52 host kernel: virbr0: port 1(vnet7) entered disabled state
Feb 14 22:47:52 host kernel: device vnet7 entered promiscuous mode
Feb 14 22:47:52 host kernel: virbr0: port 1(vnet7) entered blocking state
Feb 14 22:47:52 host kernel: virbr0: port 1(vnet7) entered listening state
Feb 14 22:47:54 host kernel: virbr0: port 1(vnet7) entered learning state
Feb 14 22:47:56 host kernel: virbr0: port 1(vnet7) entered forwarding state
Feb 14 22:47:56 host kernel: virbr0: topology change detected, propagating
Feb 14 22:48:03 host dnsmasq-dhcp[24023]: DHCPDISCOVER(virbr0) 52:54:00:67:37:7d
Feb 14 22:48:03 host dnsmasq-dhcp[24023]: DHCPOFFER(virbr0) 192.168.122.190 52:54:00:67:37:7d
Feb 14 22:48:03 host dnsmasq-dhcp[24023]: DHCPREQUEST(virbr0) 192.168.122.190 52:54:00:67:37:7d
Feb 14 22:48:03 host dnsmasq-dhcp[24023]: DHCPACK(virbr0) 192.168.122.190 52:54:00:67:37:7d devuan
Feb 14 22:48:03 host dnsmasq-dhcp[24023]: DHCPDECLINE(virbr0) 192.168.122.190 52:54:00:67:37:7d
Feb 14 22:48:03 host dnsmasq-dhcp[24023]: disabling DHCP static address 192.168.122.190 for 10m
Feb 14 22:48:13 host dnsmasq-dhcp[24023]: not using configured address 192.168.122.190 because it was previously declined
Feb 14 22:48:16 host dnsmasq-dhcp[24023]: DHCPDISCOVER(virbr0) 52:54:00:67:37:7d
Feb 14 22:48:16 host dnsmasq-dhcp[24023]: DHCPOFFER(virbr0) 192.168.122.191 52:54:00:67:37:7d
Feb 14 22:48:16 host dnsmasq-dhcp[24023]: DHCPREQUEST(virbr0) 192.168.122.191 52:54:00:67:37:7d
Feb 14 22:48:16 host dnsmasq-dhcp[24023]: DHCPACK(virbr0) 192.168.122.191 52:54:00:67:37:7d devuan
host ~ # virsh net-dhcp-leases default
Expiry Time MAC address Protocol IP address Hostname Client ID or DUID
------------------------------------------------------------------------------------------------------------------------------------------------
1970-01-01 01:00:00 52:54:00:67:37:7d ipv4 192.168.122.191/24 devuan ff:00:67:37:7d:00:01:00:01:2b:7e:c9:a3:52:54:00:67:37:7d回到客人身边:root@devuan:~# ls -l /var/lib/dhcp/dhclient.eth0.leases
-rw-r--r-- 1 root root 457 Feb 14 22:48 /var/lib/dhcp/dhclient.eth0.leases
/var/log/syslog and /var/log/daemon.log
Feb 14 22:48:13 devuan dhclient[417]: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3
Feb 14 22:48:16 devuan dhclient[417]: DHCPOFFER of 192.168.122.191 from 192.168.122.1
Feb 14 22:48:16 devuan dhclient[417]: DHCPREQUEST for 192.168.122.191 on eth0 to 255.255.255.255 port 67
Feb 14 22:48:16 devuan dhclient[417]: DHCPACK of 192.168.122.191 from 192.168.122.1
Feb 14 22:48:16 devuan dhclient[417]: Timeout too large reducing to: 2147483646 (TIME_MAX - 1)
Feb 14 22:48:16 devuan dhclient[417]: bound to 192.168.122.191 -- renewal in 2147483648 seconds.
root@devuan:~# ifconfig
eth0: flags=4163 mtu 1500
inet 192.168.122.190 netmask 255.255.255.0 broadcast 192.168.122.255
inet6 fe80::5054:ff:fe67:377d prefixlen 64 scopeid 0x20
ether 52:54:00:67:37:7d txqueuelen 1000 (Ethernet)
RX packets 176 bytes 15369 (15.0 KiB)
RX errors 0 dropped 5 overruns 0 frame 0
TX packets 55 bytes 9878 (9.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
root@devuan:~# cat /var/lib/dhcp/dhclient.eth0.leases
lease {
interface "eth0";
fixed-address 192.168.122.191;
option subnet-mask 255.255.255.0;
option routers 192.168.122.1;
option dhcp-lease-time 4294967295;
option dhcp-message-type 5;
option domain-name-servers 192.168.122.1;
option dhcp-server-identifier 192.168.122.1;
option broadcast-address 192.168.122.255;
option host-name "devuan";
renew 1 2091/03/05 02:02:24;
rebind 1 2142/03/19 10:27:53;
expire 6 2159/03/24 05:16:31;
}似乎libvirt提供了正确的.190地址,但客人拒绝了吗?然而,这是ifconfig在嘉宾上报道的。然后,客人要求另一个地址:.191 now,这是它在/var/lib/dhcp/dhclient.eth0.leases中存储的地址。但是从客人的日志来看,似乎libvirt的dhcpd只提供.191。这就是问题所在:Feb 14 22:48:03 host dnsmasq-dhcp[24023]: DHCPDECLINE(virbr0) 192.168.122.190 52:54:00:67:37:7d但我不知道是谁在拒绝IP地址,我应该从哪个缓存中删除它。Edit 2因此,我尝试了一种不同的方法,限制IP范围,将静态IP设置在范围之外:# virsh net-edit default
..
..
但最终的结果是一样的:Feb 16 22:42:29 host dnsmasq-dhcp[6100]: DHCPDISCOVER(virbr0) 192.168.122.191 52:54:00:67:37:7d
Feb 16 22:42:29 host dnsmasq-dhcp[6100]: DHCPOFFER(virbr0) 192.168.122.190 52:54:00:67:37:7d
Feb 16 22:42:29 host dnsmasq-dhcp[6100]: DHCPREQUEST(virbr0) 192.168.122.190 52:54:00:67:37:7d
Feb 16 22:42:29 host dnsmasq-dhcp[6100]: DHCPACK(virbr0) 192.168.122.190 52:54:00:67:37:7d devuan
Feb 16 22:42:29 host dnsmasq-dhcp[6100]: DHCPDECLINE(virbr0) 192.168.122.190 52:54:00:67:37:7d
Feb 16 22:42:29 host dnsmasq-dhcp[6100]: disabling DHCP static address 192.168.122.190 for 10m
Feb 16 22:42:38 host dnsmasq-dhcp[6100]: not using configured address 192.168.122.190 because it was previously declined
Feb 16 22:42:41 host dnsmasq-dhcp[6100]: DHCPDISCOVER(virbr0) 192.168.122.191 52:54:00:67:37:7d
Feb 16 22:42:41 host dnsmasq-dhcp[6100]: DHCPOFFER(virbr0) 192.168.122.153 52:54:00:67:37:7d
Feb 16 22:42:41 host dnsmasq-dhcp[6100]: DHCPREQUEST(virbr0) 192.168.122.153 52:54:00:67:37:7d
Feb 16 22:42:41 host dnsmasq-dhcp[6100]: DHCPACK(virbr0) 192.168.122.153 52:54:00:67:37:7d devuan在客人面前:Feb 16 22:42:38 devuan dhclient[412]: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 8
Feb 16 22:42:41 devuan dhclient[412]: DHCPOFFER of 192.168.122.153 from 192.168.122.1
Feb 16 22:42:41 devuan dhclient[412]: DHCPREQUEST for 192.168.122.153 on eth0 to 255.255.255.255 port 67
Feb 16 22:42:41 devuan dhclient[412]: DHCPACK of 192.168.122.153 from 192.168.122.1
Feb 16 22:42:41 devuan dhclient[412]: Timeout too large reducing to: 2147483646 (TIME_MAX - 1)
Feb 16 22:42:41 devuan dhclient[412]: bound to 192.168.122.153 -- renewal in 2147483648 seconds.Edit 3将另外两个VM添加到池中(更改为1000,但其他内容都相同):
其结果是:# virsh net-dhcp-leases default
Expiry Time MAC address Protocol IP address Hostname Client ID or DUID
------------------------------------------------------------------------------------------------------------------------------------------------------------
1970-01-01 01:00:00 52:54:00:1d:31:fb ipv4 192.168.122.102/24 win10 01:52:54:00:1d:31:fb
1970-01-01 01:00:00 52:54:00:3e:96:2e ipv4 192.168.122.101/24 slack ff:00:3e:96:2e:00:04:82:83:7d:54:99:e4:4f:15:9f:85:b6:f1:80:0e:54:f5
1970-01-01 01:00:00 52:54:00:67:37:7d ipv4 192.168.122.191/24 devuan ff:00:67:37:7d:00:01:00:01:2b:82:9c:6b:52:54:00:67:37:7dSlackware和Windows都正确地获得了它们的IP(在关闭所有VM并重新启动默认接口之后)。德文坚持使用.191,尽管ifconfig报道.100:host $ ssh 192.168.122.191
devuan $ /sbin/ifconfig
eth0: flags=4163 mtu 1500
inet 192.168.122.100 netmask 255.255.255.0 broadcast 192.168.122.255
inet6 fe80::5054:ff:fe67:377d prefixlen 64 scopeid 0x20
ether 52:54:00:67:37:7d txqueuelen 1000 (Ethernet)
RX packets 225 bytes 23965 (23.4 KiB)
RX errors 0 dropped 5 overruns 0 frame 0
TX packets 61 bytes 12083 (11.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
devuan # cat /var/log/syslog
Feb 17 20:13:41 devuan dhclient[416]: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 6
Feb 17 20:13:44 devuan dhclient[416]: DHCPOFFER of 192.168.122.191 from 192.168.122.1
Feb 17 20:13:44 devuan dhclient[416]: DHCPREQUEST for 192.168.122.191 on eth0 to 255.255.255.255 port 67
Feb 17 20:13:44 devuan dhclient[416]: DHCPACK of 192.168.122.191 from 192.168.122.1
Feb 17 20:13:44 devuan dhclient[416]: Timeout too large reducing to: 2147483646 (TIME_MAX - 1)
Feb 17 20:13:44 devuan dhclient[416]: bound to 192.168.122.191 -- renewal in 2147483648 seconds.
devuan # netstat -puta --numeric-hosts --numeric-ports | grep \:22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1195/sshd: /usr/sbi
tcp 0 0 192.168.122.191:22 192.168.122.1:36434 ESTABLISHED 1255/sshd: joe
tcp6 0 0 :::22 :::* LISTEN 1195/sshd: /usr/sbi从德文的角度来看,它得到的唯一IP似乎是.191,但ifconfig却不这么认为。从东道主的角度来看:Feb 17 20:13:31 host dnsmasq-dhcp[8336]: DHCPDISCOVER(virbr0) 192.168.122.245 52:54:00:1d:31:fb
Feb 17 20:13:31 host dnsmasq-dhcp[8336]: DHCPOFFER(virbr0) 192.168.122.102 52:54:00:1d:31:fb
Feb 17 20:13:31 host dnsmasq-dhcp[8336]: DHCPREQUEST(virbr0) 192.168.122.102 52:54:00:1d:31:fb
Feb 17 20:13:31 host dnsmasq-dhcp[8336]: DHCPACK(virbr0) 192.168.122.102 52:54:00:1d:31:fb win10
Feb 17 20:13:31 host dnsmasq-dhcp[8336]: DHCPDISCOVER(virbr0) 52:54:00:67:37:7d
Feb 17 20:13:31 host dnsmasq-dhcp[8336]: DHCPOFFER(virbr0) 192.168.122.100 52:54:00:67:37:7d
Feb 17 20:13:31 host dnsmasq-dhcp[8336]: DHCPREQUEST(virbr0) 192.168.122.100 52:54:00:67:37:7d
Feb 17 20:13:31 host dnsmasq-dhcp[8336]: DHCPACK(virbr0) 192.168.122.100 52:54:00:67:37:7d devuan
Feb 17 20:13:31 host dnsmasq-dhcp[8336]: DHCPDECLINE(virbr0) 192.168.122.100 52:54:00:67:37:7d
Feb 17 20:13:31 host dnsmasq-dhcp[8336]: disabling DHCP static address 192.168.122.100 for 10m
Feb 17 20:13:41 host dnsmasq-dhcp[8336]: not using configured address 192.168.122.100 because it was previously declined
Feb 17 20:13:45 host dnsmasq-dhcp[8336]: DHCPDISCOVER(virbr0) 52:54:00:67:37:7d
Feb 17 20:13:45 host dnsmasq-dhcp[8336]: DHCPOFFER(virbr0) 192.168.122.191 52:54:00:67:37:7d
Feb 17 20:13:45 host dnsmasq-dhcp[8336]: DHCPREQUEST(virbr0) 192.168.122.191 52:54:00:67:37:7d
Feb 17 20:13:45 host dnsmasq-dhcp[8336]: DHCPACK(virbr0) 192.168.122.191 52:54:00:67:37:7d devuan
Feb 17 20:13:45 host dnsmasq-dhcp[8336]: DHCPDISCOVER(virbr0) 52:54:00:3e:96:2e
Feb 17 20:13:45 host dnsmasq-dhcp[8336]: DHCPOFFER(virbr0) 192.168.122.101 52:54:00:3e:96:2e
Feb 17 20:13:45 host dnsmasq-dhcp[8336]: DHCPREQUEST(virbr0) 192.168.122.101 52:54:00:3e:96:2e
Feb 17 20:13:45 host dnsmasq-dhcp[8336]: DHCPACK(virbr0) 192.168.122.101 52:54:00:3e:96:2e slack我现在倾向于德文。长MAC地址的问题没有帮助。
发布于 2023-02-24 00:04:03
最后这件事为我解决了。
devuan# /etc/init.d/network restart # caused .100 to be assigned
devuan# rm /var/lib/dhcp/dhclient.eth0.leases
devuan# poweroff
确保任何/var/lib/libvirt/dnsmasq/
文件中都有.100。
host# virsh net-destroy default && virsh net-start default
host# ssh 192.168.122.100
devuan# ifconfig
eth0: flags=4163 mtu 1500
inet 192.168.122.100 netmask 255.255.255.0 broadcast 192.168.122.255
devuan# reboot
...still有.100。/etc/init.d/network restart
做到了,尽管我不知道为什么。
https://serverfault.com/questions/1122424
复制相似问题