首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在libvirt上强制使用静态IP

在libvirt上强制使用静态IP
EN

Server Fault用户
提问于 2023-02-09 14:38:21
回答 1查看 134关注 0票数 1

我在网上看到过问题和其他问题,但我的问题依然存在。

我有一个gentoo主机,具有以下接口:

代码语言:javascript
运行
复制
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中默认网络的配置:

代码语言:javascript
运行
复制
# virsh net-dumpxml default

  default
  469df392-3b72-4069-814a-10893732b627

在VM关闭后,我得到了以下租约:

代码语言:javascript
运行
复制
# 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就会被撞到:

代码语言:javascript
运行
复制
# 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

我试着破坏/启动网络,重新/启动libvirtdvirtlogd,在中间杀死dnsmasq-related进程,甚至编辑/var/lib/libvirt/dnsmasq/virbr0.status,使其只有我想要的IP。它从不引脚。

目前我也有:

代码语言:javascript
运行
复制
# 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是空的。

代码语言:javascript
运行
复制
# 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配置中是这样的:

代码语言:javascript
运行
复制
我遗漏了什么?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地址的问题没有帮助。
EN

回答 1

Server Fault用户

发布于 2023-02-24 00:04:03

最后这件事为我解决了。

代码语言:javascript
运行
复制
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。

代码语言:javascript
运行
复制
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做到了,尽管我不知道为什么。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1122424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档