1. 程式人生 > 其它 >kvm設定網路橋接模式

kvm設定網路橋接模式


layout: post
title: kvm設定網路橋接模式
subtitle: kvm設定
gh-repo: daattali/beautiful-jekyll
gh-badge: [star, fork, follow]
tags: [kvm, vm]
comments: true

kvm設定網路橋接模式

kvm設定網路時,對於虛擬機器的網路連線有兩種常用方式,一種是NAT,一種是橋接。

NAT(網路地址轉換), Network Access Translation,使用NAT技術的區域網對外網的表現是一個IP地址A,但是在該區域網內部則使用同一個網段的不同IP,這些IP對外網訪問,全部使用地址A,反過來外網對這些IP的訪問,通過訪問"A:埠"來對映。在建立虛擬機器時,如果採用NAT方法,一般虛擬機器會獲得一個192.168.x.x的IP,該IP只有從host或者從該host上的其他虛擬機器才能訪問。

橋接方式則會讓被建立的虛擬機器獲得與host一樣的網段的IP, 因此表現得就像一臺與host同在一個網路中的物理機一樣。

建立KVM的xml檔案中,採用NAT模式的設定一般如下:

<domain type="kvm">
  <devices>
	……
    <interface type="bridge">
      <source bridge="virbr0"/>
      <mac address="00:10:23:91:15:11"/>
      <model type="virtio"/>
    </interface>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x18' slot='0x02' function='0x0'/>
      </source>
    </hostdev>
   <serial type="pty">
      <target port="0"/>
    </serial>
    <console type="pty">
      <target type="serial" port="0"/>
    </console>
  </devices>
</domain>

在interface屬性下,type為"bridge",source bridge則是“virbr0”。mac address是v虛擬機器中虛擬網絡卡(不是virbr0)中的mac,它只需要在這個區域網中保證唯一即可。

virbr0由kvm預設建立,它預設分配了一個IP 192.168.122.1,連線到該網橋上的虛擬網絡卡會被virbr0分配一個IP 。

理解 virbr0

對虛擬機器使用橋接連線方式,需要將xml中的“virbr0”修改為“br0”。

其次,修改host中的br0和網絡卡配置。以redhat舉例,使用橋接方式之前,host上的br0和網絡卡地址是這樣的:

br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.1  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::20e:c6ff:fe67:74ec  prefixlen 64  scopeid 0x20<link>
        ether 00:0e:c6:67:74:ec  txqueuelen 1000  (Ethernet)
        RX packets 8396296  bytes 11827862282 (11.0 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4642273  bytes 318891030 (304.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s20f0u1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.239.183.59  netmask 255.255.254.0  broadcast 10.239.183.255
        ether 00:0e:c6:67:74:ec  txqueuelen 1000  (Ethernet)
        RX packets 8398665  bytes 11845477389 (11.0 GiB)
        RX errors 0  dropped 425  overruns 0  frame 0
        TX packets 4645823  bytes 356244128 (339.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

/etc/sysconfig/network-scripts/資料夾下,有ifcfg-br0, ifcfg-enp0s20f0u1兩個配置檔案,將它們修改為如下:

# ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="dhcp"


# ifcfg-enp0s20f0u1`
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=enp0s20f0u1
DEVICE=enp0s20f0u1
ONBOOT=yes
BRIDGE=br0 #主要是加上這句

並且執行systemctl restart NetworkManager;nmcli connection up enp0s20f0u1, 之後再把br0的192.168.0.1地址移除:

ip address del dev br0 192.168.0.1/24

再次ifconfig, 得到如下結果:

br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.239.183.59  netmask 255.255.254.0  broadcast 10.239.183.255
        inet6 fe80::20e:c6ff:fe67:74ec  prefixlen 64  scopeid 0x20<link>
        ether 00:0e:c6:67:74:ec  txqueuelen 1000  (Ethernet)
        RX packets 8407070  bytes 11828720576 (11.0 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4650038  bytes 319945070 (305.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s20f0u1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0e:c6:67:74:ec  txqueuelen 1000  (Ethernet)
        RX packets 8409506  bytes 11846391933 (11.0 GiB)
        RX errors 0  dropped 435  overruns 0  frame 0
        TX packets 4653593  bytes 357360918 (340.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

可以看到,ip地址從enp0s20f0u1移動到了br0上。這代表kvm可以成功設定橋接模式。