具有公共静态 IP 的 KVM 每次都需要重启网络

具有公共静态 IP 的 KVM 每次都需要重启网络

我使用公共静态 IP 设置了 kvm 虚拟机,一切正常,但只有在主机上重新启动网络后才可以。我的意思是,每次主机开启后,我都必须运行“服务网络重新启动”,并且只有在此之后 KVM 虚拟机才能获取 IP。如果不重新启动,IP 属于主机。

主机 - centos 7,客户机 - ubuntu 12.04

请告诉我如何让 IP 只属于 VM,而无需重启网络?谢谢!

我在主机上的设置:

/etc/sysconfig/网络脚本/ifcfg-enp1s0f1:

DEVICE="enp1s0f1"
ONBOOT=yes
HWADDR="xx:xx:xx:xx:xx:xx"
BRIDGE=br0

在 /etc/sysconfig/网络脚本/ifcfg-br0:

DEVICE="br0"
TYPE=BRIDGE
ONBOOT=yes
BOOTPROTO=static
IPADDR="host.ip.adress"
NETMASK="255.255.252.0"
GATEWAY="host.gateway"
DNS1=11.11.11.11
DNS2=11.11.11.11

/etc/sysconfig/网络脚本/ifcfg-br0:1

DEVICE="br0:1"
TYPE=BRIDGE
ONBOOT=yes
BOOTPROTO=static
IPADDR="ip.for.kvm.vm"
NETMASK="255.255.252.0"
GATEWAY="host.gateway"
DNS1=11.11.11.11
DNS2=11.11.11.11

vm 桥段

 <interface type='bridge'>
      <mac address='yy.yy.yy.yy.yy.yy'/>
      <source bridge='br0:1'/>
      <model type='rtl8139'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </interface>

我的 'ip a'

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp1s0f0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: enp1s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP qlen 1000
    link/ether xx:xx:xx:xx:xx:75 brd ff:ff:ff:ff:ff:ff
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether zz:zz:zz:zz:zz:zz brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
    link/ether 52...4:98 brd ff:ff:ff:ff:ff:ff
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether xx:xx:xx:xx:xx:75 brd ff:ff:ff:ff:ff:ff
    inet host.ip.adress/22 brd ...3.255 scope global br0
       valid_lft forever preferred_lft forever
    inet ip.for.kvm.vm/22 brd ...3.255 scope global secondary br0:1
       valid_lft forever preferred_lft forever
    inet6 fe8...5/64 scope link 
       valid_lft forever preferred_lft forever
7: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN qlen 1000
    link/ether fe:5...1:6a brd ff:ff:ff:ff:ff:ff
    inet6 fe80...:516a/64 scope link 
       valid_lft forever preferred_lft forever

我的来宾设置:

auto eth0
iface eth0 inet static
    address ip.for.kvm.vm
    netmask 255.255.255.0
    gateway host.gateway
    broadcast 
    hwaddress ether 52:54:00:2f:21:8b
    dns-nameservers 11.11.11.11 8.8.8.8 11.11.11.11

ip route show(在主机上)

default via host.gateway dev br0  proto static  metric 425 
89.108.120.0/22 dev br0  proto kernel  scope link  src host.ip.adress  metric 425 
172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.0.1 
192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1 

route -n(在主机上)

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         host.gateway    0.0.0.0         UG    425    0        0 br0
89.108.120.0    0.0.0.0         255.255.252.0   U     425    0        0 br0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

答案1

您混淆了主机和客户机的地址,因此我必须使用您提供的其他数据来做出断言,并猜测“ip.for.kvm.vm”在所有示例中都是一致的。如果不正确,请告诉我。

从您的描述来看,您为虚拟机管理程序分配的地址与为虚拟机分配的地址相同,并且两者都在争夺这些地址。虚拟机管理程序在重新启动时始终会获胜,因为它的网络堆栈会先启动。

不要这样做。这样做会导致 IP 地址冲突。相反,如果您需要主机与客户机位于同一 IP 子网中,请为它们提供同一子网中的不同地址。还要注意,您的桥接设备是虚拟第 2 层交换机,因此它不会关心您在其上的任何层上执行的操作。除了日志中有关地址冲突的错误之外,在这种未经审核的情况下,唯一能表明出现问题的迹象就是您上面描述的。

要修复此特定情况,请在虚拟机管理程序上删除或以不同方式设置 br0.1 的地址。由于桥接在第 2 层工作,因此您可以在此接口上根本没有 IP 地址,并且 VM 可以正常联网。只要不发生任何冲突即可。

相关内容