Linux中KVM橋接的配置
1. 原理
1.1 說明
在安裝一個擁有虛擬化功能的Linux操作系統(此處以CentOS為例),一般我們有兩種方法:
1.在光盤安裝的時候安裝好虛擬化包或者PXE服務器上配置好虛擬化包 2.手動在沒有安裝虛擬化組件的系統中安裝虛擬化組件
1.2 目的
如果我們搭建的環境是必須使用虛擬化的,或者說虛擬化是我們搭建這套環境的主要目的之一,那么我們在進行系統安裝的時候將所有的虛擬化組件全部安裝上,避免后期出現安裝不全或者某些服務依賴關系沒有解決好,這樣排錯的時間遠遠高於安裝時候多裝幾個包的時間。
在我們安裝好虛擬化組件(RHEL6.0之后,系統自帶的均是KVM,已經沒有XEN虛擬化的支持了),會自動生成一個virbr0這樣的橋接設備
1.3 查看橋接情況
[root@clovemzone ~]# brctl show bridge name bridge id STP enabled interfaces virbr0 8000.5254007543ce yes virbr0-nic
按照這篇文中所說:http://www.linuxidc.com/Linux/2013-08/88720.htm ,virbr0默認使用的是NAT方式跟虛擬機網卡進行通訊,在實際生產環境中我們多數情況下面使用橋接Bridge的方式進行物理機跟虛擬機的通訊,刪除這個virbr0的方法在上面給出的鏈接中已經說明,這篇文章主要講述Bridge的簡單實現原理以及實際配置方法。
2. 相關閱讀:
RHEL6 KVM虛擬化創建橋接網卡-網橋 http://www.linuxidc.com/Linux/2013-08/88517.htm RedHat Linux KVM虛擬機橋接 http://www.linuxidc.com/Linux/2013-02/79934.htm CentOS 5.6下KVM的安裝/橋接設置/虛擬機創建及運行 http://www.linuxidc.com/Linux/2012-12/76883.htm
3. 網橋
假設我們的物理機上有一塊有線網卡,在系統中顯示為eth0,我們搭建將其配置成橋接設備br0
我們經常所說的Bridge設備其實就是網橋設備,也就相當於想在的二層交換機,用於連接同一網段內的所有機器,所以我們的目的就是將網絡設備eth0配置成br0,此時br0就成為了所謂的交換機設備,我們物理機的eth0也是連接在上面的。
[root@clovemzone ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.0025903afe42 no eth0
4. 查看橋接設備
我們創建兩個虛擬機之后,所有的虛擬機網卡均連接br0,此時查看br0上面連接的設備
[root@clovemzone ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.0025903afe42 no eth0 vnet0 vnet1
為了讓大家了解的更加透徹,可以通過下圖並結合實際操作進行簡單分析
5. 查看物理機網卡設備信息 圖1所示
[root@master ~]# ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 52:54:00:a7:b7:56 brd ff:ff:ff:ff:ff:ff inet 192.168.3.176/24 brd 192.168.3.255 scope global eth0 inet6 fe80::5054:ff:fea7:b756/64 scope link valid_lft forever preferred_lft forever
6. 配置橋接設備br0
[root@master ~]# rpm -q bridge-utils //查看橋接軟件是否安裝 bridge-utils-1.2-9.el6.x86_64 [root@master ~]# brctl show bridge name bridge id STP enabled interfaces
6.1 手動添加
[root@master ~]# brctl addbr br0 [root@master ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000000000000 no [root@master ~]# brctl addif br0 eth0 [root@master ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000000000000 no eth0
刪除eth0上面的ip地址,將br0上面添加上固定ip地址
[root@master ~]# ip addr del dev eth0 192.168.3.176/24 //刪除eth0上的IP地址 [root@master ~]# ifconfig br0 192.168.3.176/24 up //配置br0的IP地址並啟動設備 [root@master ~]# route add default gw 192.168.3.1 //重新加入默認網關
6.1 查看配置是否生效
[root@master ~]# route //查看默認網關 Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.3.0 * 255.255.255.0 U 0 0 0 br0 default 192.168.3.1 0.0.0.0 UG 0 0 0 br0
6.3 查看網卡信息
[root@master ~]# ip addr show //查看eth0跟br0的IP信息 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 52:54:00:a7:b7:56 brd ff:ff:ff:ff:ff:ff inet6 fe80::5054:ff:fea7:b756/64 scope link valid_lft forever preferred_lft forever 3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether 52:54:00:a7:b7:56 brd ff:ff:ff:ff:ff:ff inet 192.168.3.176/24 brd 192.168.3.255 scope global br0 inet6 fe80::5054:ff:fea7:b756/64 scope link valid_lft forever preferred_lft forever
6.4 測試同一網段連接是否成功
[root@master ~]# ping 192.168.3.1 -w2 //測試同一網段連接是否成功,判斷網卡IP是否綁定正確 PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data. 64 bytes from 192.168.3.1: icmp_seq=1 ttl=255 time=3.45 ms 64 bytes from 192.168.3.1: icmp_seq=2 ttl=255 time=4.20 ms --- 192.168.3.1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 3.457/3.832/4.208/0.380 ms
6.5 測試不同網段連接是否成功
[root@master ~]# ping 192.168.1.1 -w2 //測試不同網段連接是否成功,判斷網關是否添加成功 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. 64 bytes from 192.168.1.1: icmp_seq=1 ttl=255 time=2.38 ms 64 bytes from 192.168.1.1: icmp_seq=2 ttl=255 time=7.64 ms --- 192.168.1.1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 2.381/5.011/7.642/2.631 ms
上面是通過命令進行的手動配置方法,但是大家都清楚,這些命令配置的結果在服務器重啟之后就不能生效了,要想使得所有配置永久生效,我們還是需要通過配置文件進行配置,然后重啟網卡設備,讓系統幫我們配置,然后重啟之后也是生效的。
通過上面的手動配置方法,大家可以清楚得看到一個橋接設備的配置流程,這個在你寫到配置文件里面,然后讓系統幫你配置的時候是看不到的 :) ,那么下面我們將所有的配置還原,通過配置文件進行相關自動化配置吧。
7. 還原原始配置
7.1 刪除網關
[root@master ~]# route delete default //刪除默認網關 [root@master ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.3.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
7.2 查看橋接情況
[root@master ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.525400a7b756 no eth0
7.3 刪除br0上的eth0設備
[root@master ~]# brctl delif br0 eth0 //斷開/刪除br0上的eth0設備
7.4 讓br0停止活動
[root@master ~]#ifconfig br0 down //讓br0設備停止活動
7.5 刪除br0
[root@master ~]#brctl delbr br0 //刪除br0
7.6 查看br0是否依然存在
root@master ~]# brctl show //查看br0是否依然存在 bridge name bridge id STP enabled interfaces
7.7 重新給eth0分配IP地址
[root@master ~]# ifconfig eth0 192.168.3.176/24 //重新給eth0分配IP地址
7.8 重新加入默認網關
[root@master ~]# route add default gw 192.168.3.1 //重新加入默認網關
7.9 查看網卡
1234567891011 [root@master ~]# ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 52:54:00:a7:b7:56 brd ff:ff:ff:ff:ff:ff inet 192.168.3.176/24 brd 192.168.3.255 scope global eth0 inet6 fe80::5054:ff:fea7:b756/64 scope link valid_lft forever preferred_lft forever
--------------------------------------------------------------------------------
8. 通過配置文件配置橋接設備
配置文件請自行備份
8.1 查看eth0文件
[root@master ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BRIDGE=br0
8.2 查看br0文件
[root@master ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE=br0 TYPE=Bridge ONBOOT=yes BOOTPROTO=static IPADDR=192.168.3.176 NETMASK=255.255.255.0 GATEWAY=192.168.3.1
9. 網卡文件參數詳解:
9.1 ifcfg-eth0
Device 指定網卡設備名
TYPE 指定網卡的類型為以太網卡
ONBOOT 指定網卡是否開機啟動,切記要設置為yes
BRIDGE 指定橋接設備,此處指定為br0設備
建議:以上變量(非變量值)均為大寫。
9.2 ifcfg-br0
Device 指定網卡設備名
TYPE 指定網卡的類型為橋接
ONBOOT 指定網卡是否開機啟動,切記要設置為yes
BOOTPROTO 指定網卡啟動如何獲取IP地址,設置靜態
IPADDR 設置br0綁定的IP地址
NETMASK 設置子網掩碼地址
GATEWAY 設置網關
建議: TYPE變量的變量值按照第一個字母大寫,其余字母小寫的原則,如Ethernet,Bridge
配置完成之后,重啟網絡服務
如擔心干擾,建議停止NetworkManager 服務,這個服務挺討厭
9.3 停止NetworkManager
[root@master ~]# service NetworkManager stop [root@master ~]#chkconfig NetworkManager off [root@master ~]# service network restart
9.4 查看網卡
[root@master ~]# ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 52:54:00:a7:b7:56 brd ff:ff:ff:ff:ff:ff 4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether 52:54:00:a7:b7:56 brd ff:ff:ff:ff:ff:ff inet 192.168.3.176/24 brd 192.168.3.255 scope global br0 inet6 fe80::5054:ff:fea7:b756/64 scope link valid_lft forever preferred_lft forever
10. 查看橋接設備信息
[root@master ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.525400a7b756 no eth0
11. 查看路由
[root@master ~]# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.3.0 * 255.255.255.0 U 0 0 0 br0 link-local * 255.255.0.0 U 1004 0 0 br0 default 192.168.3.1 0.0.0.0 UG 0 0 0 br0
- 由此,橋接設備br0已經配置成功,當創建虛擬機的時候選擇虛擬網卡接口的時候選擇br0即可
12. 進行虛擬機安裝
開始安裝虛擬機,此時查看橋接設備br0上面的網卡連接情況:
[root@master ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.0025903afe42 no eth0 vnet0