在RedHat7上搭了一臺KVM服務器,建立好虛擬機以後發現,外部電腦與KVM服務器、外部機器與VM虛擬機、兩臺VM虛擬機之間均可以通信,可是KVM服務器與VM虛擬機卻沒法通信。此時外部電腦、KVM服務器、VM虛擬機都關閉了防火牆。bash
此時VM虛擬機的網卡配置如圖:選擇的源設備爲 Host device eno1 :macvtap
服務器
[root@kvm02 ~]# ifconfig eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.254 netmask 255.255.255.0 broadcast 192.168.1.255 ........ eno2: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 ........ lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 ........ macvtap0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ........ macvtap1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ........ virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 查看網橋信息 [root@kvm02 ~]# brctl show bridge name bridge id STP enabled interfaces virbr0 8000.525400c2d3bd yes virbr0-nic
查看網卡信息後發現如今存在物理網卡eno一、eno2 網橋virbr0、虛擬網卡macvtap0、macvtap1。
ssh
網橋virbr0,至關於VMware的 VMNET8,提供NAT的網卡,當有虛擬機網卡使用橋接模式而且啓動時,使用#brctl show 查看,在virbr0會有的interfaces下會出現網卡vnetX。
ide
虛擬網卡macvtap0、macvtap1,是如今VM虛擬機的網卡,此時我啓動了兩臺虛擬機,網卡配置如上文。
spa
但此時虛擬機跟宿主機是沒法通信的。rest
[root@kvm02 ~]# ping 192.168.1.10 PING 192.168.1.10 (192.168.1.10) 56(84) bytes of data. From 192.168.1.254 icmp_seq=1 Destination Host Unreachable From 192.168.1.254 icmp_seq=2 Destination Host Unreachable From 192.168.1.254 icmp_seq=3 Destination Host Unreachable
如今開始建立網橋,並把eno1,虛擬機的網卡接入網橋。日誌
[root@kvm02 ~]# virsh iface-bridge eno1 br0 Created bridge br0 with attached device eno1
使用virsh iface-bridge建立網橋,此時我是ssh到KVM服務器的,添加以後斷開了鏈接,去到物理機前重啓網卡,發現有了網橋br0,可是網橋沒有成員,查看message日誌發現eno1已是一個網橋成員了。
blog
[root@kvm02 network-scripts]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000000000000 no virbr0 8000.525400c2d3bd yes virbr0-nic message日誌 Jan 19 05:09:34 kvm02 network: Bringing up interface eno1: device eno1 is already a member of a bridge; can't enslave it to bridge br0.
折騰一番後發現,啓動的兩臺虛擬機綁定在eno1上,因此暫時先關掉綁定到這塊網卡的虛擬機,刪除網卡而後重建網橋。
ip
[root@kvm02 ~]# virsh iface-bridge eno1 br0 Created bridge br0 with attached device eno1 此時又斷開遠程了。從新回到機器前面重啓網卡 [root@kvm02 ~]# systemctl restart network 重啓第一次的時候報錯了,而後多重啓兩次,發現沒有出現錯誤,網卡正常啓動,eno1成功加入br0了。 [root@kvm02 ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.0024e8584bc8 yes eno1 virbr0 8000.525400c2d3bd yes virbr0-nic
網卡eno1成功加入網橋以後,修改虛擬機的網卡配置。把網卡設備修改成:Bridge br0:Host device eno1,以下圖:get
修改完成後啓動虛擬機,發現虛擬機的網卡也加入了br0,此時虛擬機的網卡名由macvtapX變成了vnetX。啓動完成後,虛擬機與宿主機就能夠正常通信了。
[root@kvm02 ~]# ifconfig br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.254 netmask 255.255.255.0 broadcast 192.168.1.255 ........ eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ........ eno2: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 ........ lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 ........ virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 ........ vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ........ vnet1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ........ [root@kvm02 ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.0024e8584bc8 yes eno1 vnet0 virbr0 8000.525400c2d3bd yes virbr0-nic [root@kvm02 ~]# ping 192.168.1.10 PING 192.168.1.10 (192.168.1.10) 56(84) bytes of data. 64 bytes from 192.168.1.10: icmp_seq=1 ttl=64 time=0.676 ms 64 bytes from 192.168.1.10: icmp_seq=2 ttl=64 time=0.228 ms
對於網橋,能夠大體理解爲一個虛擬的交換機,把網卡接到同一個交換機上面,各個主機就能夠正常通信了。