libvirt kvm 虛擬機上網 – Bridge橋接

版權聲明:本文由陳煜東原創文章,轉載請註明出處: 
文章原文連接:https://www.qcloud.com/community/article/90html

來源:騰雲閣 https://www.qcloud.com/communitylinux

 

經過艱難的過程,終於使用libvirt安裝完qemu kvm虛擬機了.可是發現虛擬機不能上網.虛擬機想要上網,有不少中方法.服務器

先說兩個定義:Guest機器爲虛擬機,Host機器爲開機運行的真實機器.網絡

查看libvirt的教程,看到網絡配置有許多中方式.詳情能夠訪問http://libvirt.org/formatdomain.html#elementsNICSdom

  • NAT (默認上網) 虛擬機利用host機器的ip進行上網.對外顯示一個ip
  • Bridge 將虛擬機橋接到host機器的網卡上,guest和host機器都經過bridge上網.對外不一樣的ip,

一.Bridge橋接原理

Bridge方式即虛擬網橋的網絡鏈接方式,是客戶機和子網裏面的機器可以互相通訊。可使虛擬機成爲網絡中具備獨立IP的主機。
橋接網絡(也叫物理設備共享)被用做把一個物理設備複製到一臺虛擬機。網橋多用做高級設置,特別是主機多個網絡接口的狀況。jsp

  • Bridge橋接原理

    如上圖,網橋的基本原理就是建立一個橋接接口br0,在物理網卡和虛擬網絡接口之間傳遞數據。

二. 在host機器配置橋接網絡

首先能夠按照ibm 文章的虛擬機配置一下host機的網絡狀況,這個的目的就是讓host生成一個不日多個橋接,你們都經過這個橋接上網.下面咱們來看看具體的步驟.spa

1.查看網卡是否工做

確保你想使用bridge網橋的網卡可以爲kvm虛擬機模塊提供網絡鏈接能力而且網卡是否能夠工做.這個網卡應該要可以給guest的kvm虛擬機提供相同的網絡支持.接下來例子說明了網卡的配置,而且能夠被外部網絡訪問.這個例子中,使用eth0網卡..net

# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:14:5E:C2:1E:40
          inet addr:10.10.1.152  Bcast:10.10.1.255  Mask:255.255.255.0
          inet6 addr: fe80::214:5eff:fec2:1e40/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:664 errors:0 dropped:526 overruns:0 frame:0
          TX packets:163 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:69635 (68.0 KiB)  TX bytes:25091 (24.5 KiB)
          Interrupt:74 Memory:da000000-da012800
................

2.備份network-scripts網絡腳本文件

備份網絡配置到不一樣的目錄下,未來能夠用來恢復網絡配置,. 根據下面的命令將網絡腳本ifcfg-eth0 網卡到 /root目錄:nuxt

# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /root/.
注意:不要把文件copy到/etc/sysconfig/network-scripts/目錄或者其子目錄rest

3.進入network-scripts目錄

進入 /etc/sysconfig/network-scripts/目錄.

cd /etc/sysconfig/network-scripts/

4.爲橋接新建配置文件

爲Linux的bridge建立一個新的配置文件爲/etc/sysconfig/network-scripts/ifcfg-br0,這裏br0是bridge網橋的名字,同eth0相似.使用如下命令

cp ifcfg-eth0 ifcfg-br0
具體的內容是基於已有的配置文件來進行的.

5.編輯bridge網橋配置文件

編輯配置文件,讓數據包經過bridge(網橋)進行上網.你的網絡配置極可能是經過靜態ip(BOOTPROTO=static)上網或者是從DHCP服務器得到ip(BOOTPROTO=dhcp)上網的.

若是你的網絡是經過靜態ip地址來配置的,那麼你的配置極可能是和下面同樣的:

DEVICE=eth0
BOOTPROTO=static
HWADDR=00:14:5E:C2:1E:40
IPADDR=10.10.1.152
NETMASK=255.255.255.0
ONBOOT=yes

下面的顯示了eth0和br0的靜態ip配置內容,能夠根據下面進行編輯

static ip配置

/etc/sysconfig/network-scripts/ifcfg-eth0    
DEVICE=eth0
TYPE=Ethernet
HWADDR=00:14:5E:C2:1E:40
ONBOOT=yes
NM_CONTROLLED=no
BRIDGE=br0
/etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=10.10.1.152
NETMASK=255.255.255.0
ONBOOT=yes

下面顯示的eth0和br0的DHCP配置狀況.

DHCP配置

/etc/sysconfig/network-scripts/ifcfg-eth0    
DEVICE=eth0
TYPE=Ethernet
HWADDR=00:14:5E:C2:1E:40
ONBOOT=yes
NM_CONTROLLED=no
BRIDGE=br0
/etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
NM_CONTROLLED=no
BOOTPROTO=dhcp
ONBOOT=yes

6.重啓網絡服務

重啓網絡以驗證網絡配置是否工做.

若是網絡配置不正確,網絡鏈接將會斷開,你的電腦將失去訪問能力.這樣的話,檢查如下配置文件,而後使用如下的命令重啓如下網絡服務:

# service network restart

7.禁用網絡過濾器

向文件/etc/sysctl.conf添加如下代碼:

net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

8.從新加載kernel參數

# sysctl -p 
net.ipv4.ip_forward = 0 
...
net.bridge.bridge-nf-call-ip6tables = 0 
net.bridge.bridge-nf-call-iptables = 0 
net.bridge.bridge-nf-call-arptables = 0

9.驗證配置是否成功

經過運行ifconfig來驗證如下配置是否成功.若是出現兩個項,即網橋的br0和如今在工做的eth0:

br0       Link encap:Ethernet  HWaddr 00:14:5E:C2:1E:40
          inet addr:10.10.1.152  Bcast:10.10.1.255  Mask:255.255.255.0
          inet6 addr: fe80::214:5eff:fec2:1e40/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:125 errors:0 dropped:0 overruns:0 frame:0
          TX packets:81 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:16078 (15.7 KiB)  TX bytes:18542 (18.1 KiB)
eth0      Link encap:Ethernet  HWaddr 00:14:5E:C2:1E:40
          inet6 addr: fe80::214:5eff:fec2:1e40/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:206 errors:0 dropped:0 overruns:0 frame:0
          TX packets:58 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:27308 (26.6 KiB)  TX bytes:13881 (13.5 KiB)
          Interrupt:74 Memory:da000000-da012800

注意:你可能發現eth0的網絡信息裏面沒有ipv4的地址了.或者你的GUI界面的網絡顯示你是斷網的. 這不用擔憂.由於eth0的網絡能力已經經過br0進行工做.你的host網絡仍是能正常工做的.
也可使用如下的命令來查看網橋是否工做.

# brctl show
bridge name     bridge id               STP enabled     interfaces
virbr0          8000.000000000000       yes
br0             8000.000e0cb30550       no              eth0

若是是相似的輸出,那麼你的Linux的Bridge網橋就配置的差很少了.

二.爲Guest虛擬機配置網絡

1.配置Guest虛擬機的xml文件

在虛擬機的xml配置文件進行設置網絡的鏈接方式爲bridge橋接,而且橋接的設備爲br0.其中mac地址要改變!否則MAC相同,局域網MAC地址相同的電腦不能上網.

<interface type="bridge"> <!--虛擬機網絡鏈接方式-->
<source bridge="br0" /> <!-- 當前主機網橋的名稱-->
<mac address="00:16:e4:9a:b3:6a" /> <!--爲虛擬機分配mac地址,務必惟一,不然dhcp得到一樣ip,引發衝突-->
</interface>

2.在虛擬機配置網絡

我使用的是CentOS Minimal Installation的發行版.使用如下命令就能夠進行上網了. 一開始只有lo顯示.沒有看到eth0,後來想到了eth0被禁用了,因而開啓便可.

# ifconfig eth0 up
# dhclient eth0

如今還有個問題是,網絡不隨開機啓動. 我打開/etc/sysconfig/network-scripts/ifcfg-eth0顯示:

DEVICE=eth0
HWADDR=52:54:00:12:34:56
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp

雖然設置了開機啓動,可是每次開機都須要運行上面的兩個命令.這樣就沒辦法遠程控制主機了.

後來發現是udev弄的.udev在/etc/udev/rules.d/下面搞了一個持久命名規則(persistent-net.rules),對於網卡的持久命令,就採起了MAC地址的匹配方式

原來虛擬機安裝後自帶MAC網卡地址和我xml定義的網卡不同.因而我就將虛擬機的MAC網卡提取出來,替換xml文件的MAC網卡信息.而後undefine和define如下虛擬機.

重啓虛擬機,發現此次網絡可以自動開機得到了.

參考資料
http://blog.csdn.net/samlei/article/details/7598541
http://www.linuxtopia.org/online_books/rhel6/rhel_6_virtualization/rhel_6_virtualization_sect-Virtualization-Network_Configuration-Bridged_networking_with_libvirt.html
IBM – Configuring the network
http://ueaner.iteye.com/blog/1291350
http://blog.csdn.net/xiyuan1999/article/details/5125002

相關文章
相關標籤/搜索