版權聲明:本文由陳煜東原創文章,轉載請註明出處:
文章原文連接:https://www.qcloud.com/community/article/90html
來源:騰雲閣 https://www.qcloud.com/communitylinux
經過艱難的過程,終於使用libvirt安裝完qemu kvm虛擬機了.可是發現虛擬機不能上網.虛擬機想要上網,有不少中方法.服務器
先說兩個定義:Guest機器爲虛擬機,Host機器爲開機運行的真實機器.網絡
查看libvirt的教程,看到網絡配置有許多中方式.詳情能夠訪問http://libvirt.org/formatdomain.html#elementsNICSdom
Bridge方式即虛擬網橋的網絡鏈接方式,是客戶機和子網裏面的機器可以互相通訊。可使虛擬機成爲網絡中具備獨立IP的主機。
橋接網絡(也叫物理設備共享)被用做把一個物理設備複製到一臺虛擬機。網橋多用做高級設置,特別是主機多個網絡接口的狀況。jsp
首先能夠按照ibm 文章的虛擬機配置一下host機的網絡狀況,這個的目的就是讓host生成一個不日多個橋接,你們都經過這個橋接上網.下面咱們來看看具體的步驟.spa
確保你想使用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 ................
備份網絡配置到不一樣的目錄下,未來能夠用來恢復網絡配置,. 根據下面的命令將網絡腳本ifcfg-eth0 網卡到 /root目錄:nuxt
# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /root/.
注意:不要把文件copy到/etc/sysconfig/network-scripts/目錄或者其子目錄rest
進入 /etc/sysconfig/network-scripts/目錄.
cd /etc/sysconfig/network-scripts/
爲Linux的bridge建立一個新的配置文件爲/etc/sysconfig/network-scripts/ifcfg-br0,這裏br0是bridge網橋的名字,同eth0相似.使用如下命令
cp ifcfg-eth0 ifcfg-br0
具體的內容是基於已有的配置文件來進行的.
編輯配置文件,讓數據包經過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
重啓網絡以驗證網絡配置是否工做.
若是網絡配置不正確,網絡鏈接將會斷開,你的電腦將失去訪問能力.這樣的話,檢查如下配置文件,而後使用如下的命令重啓如下網絡服務:
# service network restart
向文件/etc/sysctl.conf
添加如下代碼:
net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0
# 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
經過運行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網橋就配置的差很少了.
在虛擬機的xml配置文件進行設置網絡的鏈接方式爲bridge橋接,而且橋接的設備爲br0.其中mac地址要改變!否則MAC相同,局域網MAC地址相同的電腦不能上網.
<interface type="bridge"> <!--虛擬機網絡鏈接方式--> <source bridge="br0" /> <!-- 當前主機網橋的名稱--> <mac address="00:16:e4:9a:b3:6a" /> <!--爲虛擬機分配mac地址,務必惟一,不然dhcp得到一樣ip,引發衝突--> </interface>
我使用的是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