KVM 虛擬機的網絡模式學習及配置

                        KVM 虛擬化環境中的網絡模式

    最近學習了KVM,對它的網絡模式設置不是很清晰,就找了資料來看,大部分都表述的不是很清晰,下面是根據幾篇博客整理的,並且通過實驗驗證。以前系統學習過Vmware的網絡模式,KVM的網絡模式多少和它有些相似,還比較容易理解。


KVM 客戶機網絡連接有三種方式:
  -host-only:看網上說也叫隔離模式,個人理解就類似於Vmware的僅主機模式,意思就是將所有的虛擬機組成一個局域網,不能和外界通信,不能訪問Internet,其他主機也不能訪問虛擬主機,安全性高。
  -NAT方式: 
   - 用戶網絡(User Networking):讓虛擬機訪問主機、互聯網或本地網絡上的資源的簡單方法,但是不能從網絡或其他的客戶機訪問客戶機,性能上也需要大的調整。
  -Bridge方式:
    - 虛擬網橋(Virtual Bridge):這網絡模式下客戶機與宿主機處於同一網絡環境,類似於一臺真實的宿主機,直接訪問網絡資源,設置好後客戶機與互聯網,客戶機與主機之間的通信都很容易。
--------------------------------------------------------------------------------------------



host-only:
     僅(虛擬)主機模式比較簡單,拓撲圖如下:
               



橋接網絡介紹及配置步驟

    Bridge方式,即客戶機通過網橋連接到宿主機網絡環境中,可以使客戶機成爲網絡中具有獨立IP的主機。
     注: 客戶機,即用KVM安裝在linux宿主機中的虛擬機。
    
    橋接網絡,也叫物理設備共享,被用作把一個物理設備複製到一臺虛擬機。
                     


    網橋的基本原理就是創建一個橋接接口,並把物理主機的eth0綁定到網橋上,客戶機的網絡模式需要配置爲橋接模式,這可以在安裝的時候用 --network bridge=br0 選項指定,也可在虛擬機xml配置文件中定義。

 - 宿主機
  1.編輯修改網絡設備腳本文件,增加網橋設備br0
 
  1. vi /etc/sysconfig/network-scripts/ifcfg-br0
  2. DEVICE=br0
  3. TYPE=Bridge
  4. ONBOOT=yes
  5. NM_CONTROLLED=no
  6. BOOTPROTO=static
  7. IPADDR=192.168.8.112
  8. NETMASK=255.255.255.0
  9. GATEWAY=192.168.8.2
  10. DNS1=192.168.8.2
  11. DNS2=8.8.8.8
 
  2.編輯修改網絡設備腳本文件,修改網卡設備eth0
  1. [root@web1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
  2. DEVICE=eth0
  3. HWADDR=00:0C:29:2B:3F:66
  4. TYPE=Ethernet
  5. UUID=dfd0c3de-5954-4c81-abe6-e7958f31549d
  6. ONBOOT=yes
  7. NM_CONTROLLED=no
  8. BOOTPROTO=none
  9. #IPADDR=192.168.8.112
  10. #NETMASK=255.255.255.0
  11. #GATEWAY=192.168.8.2
  12. #DNS1=192.168.8.2
  13. #DNS2=8.8.8.8
  14. BRIDGE=br0 // 將 eth0 綁定到網橋接口 br0 上
 
  3.重啓網絡服務
  1.  service network restart
  4.校驗橋接接口
  1. [root@web1 ~]# brctl show
  2. bridge name bridge id STP enabled interfaces
  3. br0 8000.000c292b3f66 no eth0
  4. vnet0
  5. vnet1
  6. virbr0 8000.5254000d29b0 yes virbr0-nic

 - 客戶機  
   客戶機安裝時注意,網絡要選擇用br0橋接方式。

(1)安裝客戶機時指定:
  1. virt-install \
  2. --name CentOS6.8 \
  3. --ram 512 \
  4. --disk path=/kvm_data/CentOS6.8.img,size=30 \
  5. --vcpus 1 \
  6. --os-type linux \
  7. --os-variant rhel6 \
  8. --network bridge=br0 \ // 橋接網絡
  9. --graphics none \
  10. --console pty,target_type=serial \
  11. --location 'http://mirrors.aliyun.com/centos/6/os/x86_64/' \ // 這裏使用網絡鏡像
  12. --extra-args 'console=ttyS0,115200n8 serial'

(2)若客戶機已經安裝好,想修改其網絡模式爲橋接,則在其xml配置文件中有定義,可以修改:
  virsh edit coohx
  1. .....
  2. .....
  3. <interface type='bridge'>
  4. <mac address='52:54:00:ad:4c:86'/>
  5. <source bridge='br0'/>
  6. <model type='virtio'/>
  7. <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
  8. </interface>
  9. <interface type='bridge'>
  10. <mac address='52:54:00:d5:0d:34'/>
  11. <source bridge='br0'/>
  12. <model type='virtio'/>
  13. <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
  14. </interface>
  15. .....
  16. .....
這裏虛擬機coohx的兩個網卡都是橋接網絡。


- 登錄客戶機,配置網卡ip

 這裏我給虛擬機添加了2塊網卡,eth0/1,分別對應宿主機的virnet0/virnet1,虛擬機配置如下:

vi /etc/sysconfig/network-scripts/ifcfg-eth0  // 橋接模式,連接到網橋br0.
  1. DEVICE="eth0"
  2. BOOTPROTO="static"
  3. BROADCAST="192.168.8.255"
  4. DNS1="192.168.8.2"
  5. GATEWAY="192.168.8.2" // 網關爲宿主機所在局域網的網關
  6. HWADDR="52:54:00:AD:4C:86"
  7. IPADDR="192.168.8.16" // 與宿主機處於同一局域網
  8. IPV6INIT="yes"
  9. IPV6_AUTOCONF="yes"
  10. NETMASK="255.255.255.0"
  11. NM_CONTROLLED="yes"
  12. ONBOOT="yes"
  13. TYPE="Ethernet"
  14. #UUID="a3b35d6a-c4b2-49e2-b35b-999c3bf3243e"

============================================================================================= 


NAT網絡簡介及配置步驟

 NAT方式是kvm安裝後的默認方式。它支持主機與虛擬機的互訪,同時也支持虛擬機訪問互聯網,但不支持外界訪問虛擬機。

列出linux宿主機當前KVM的所有網絡模式:
  1. [root@web1 ~]# virsh net-list --all
  2. 名稱 狀態 自動開始 Persistent
  3. --------------------------------------------------
  4. default 活動 yes yes
default網絡(virbr0上)是宿主機安裝kvm虛擬機自動安裝的。

查看網絡接口:
  1. [root@web1 ~]# ifconfig -a |grep -A5 vir*
  2. virbr0 Link encap:Ethernet HWaddr 52:54:00:0D:29:B0
  3. inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
  4. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  5. RX packets:0 errors:0 dropped:0 overruns:0 frame:0
  6. TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
  7. collisions:0 txqueuelen:0
  8. --
  9. virbr0-nic Link encap:Ethernet HWaddr 52:54:00:0D:29:B0
  10. BROADCAST MULTICAST MTU:1500 Metric:1
  11. RX packets:0 errors:0 dropped:0 overruns:0 frame:0
  12. TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
  13. collisions:0 txqueuelen:500
  14. RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

virbr0是由宿主機KVM相關模塊安裝的一個虛擬網絡接口(TAP設備),也是一個switch和bridge,負責把內容分發到各虛擬機。

拓撲圖如下:
                    
                 
 

virbr0是一個橋接器,給虛擬機羣虛擬了一個局域網,這個局域網的網絡號默認爲 192.168.122.0,可在宿主機上查看:

  1. [root@web1 ~]# brctl show
  2. bridge name bridge id STP enabled interfaces
  3. br0 8000.000c292b3f66 no eth0
  4. virbr0 8000.5254000d29b0 yes virbr0-nic
  1. [root@web1 ~]# route -n
  2. Kernel IP routing table
  3. Destination Gateway Genmask Flags Metric Ref Use Iface
  4. 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
  5. 192.168.8.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
  6. 169.254.0.0 0.0.0.0 255.255.0.0 U 1040 0 0 br0
  7. 0.0.0.0 192.168.8.2 0.0.0.0 UG 0 0 0 br0
virbr0是kvm虛擬機NAT網絡模式的重要角色,相當於Wmware中NAT網絡模式中的虛擬NAT服務器。

同時kvm 安裝時默認 NAT 網絡模式,他會修改宿主機的 iptables 規則,來實現 NAT網絡模式的功能:
其中filter表項如下:
  1. [root@web1 ~]# iptables -nvL
  2. Chain INPUT (policy ACCEPT 138K packets, 20M bytes)
  3. pkts bytes target prot opt in out source destination
  4. 0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 //由libvirt腳本自動寫入
  5. 0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 //由libvirt腳本自動寫入
  6. 0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67 //由libvirt腳本自動寫入
  7. 0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67 //由libvirt腳本自動寫入
  8. Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
  9. pkts bytes target prot opt in out source destination
  10. 0 0 ACCEPT all -- * virbr0 0.0.0.0/0 192.168.122.0/24 state RELATED,ESTABLISHED //由libvirt腳本自動寫入
  11. 0 0 ACCEPT all -- virbr0 * 192.168.122.0/24 0.0.0.0/0 //由libvirt腳本自動寫入
  12. 0 0 ACCEPT all -- virbr0 virbr0 0.0.0.0/0 0.0.0.0/0 //由libvirt腳本自動寫入
  13. 0 0 REJECT all -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
  14. 0 0 REJECT all -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
  15. Chain OUTPUT (policy ACCEPT 221K packets, 18M bytes)
  16. pkts bytes target prot opt in out source destination

INPUT鏈接收所有的 tcp/udp包,開放端口53和67,查看系統服務監聽狀態,這兩個端口是dnsmasq服務的端口號:
  1. [root@web1 ~]# netstat -lanp |grep -E '53|67'
  2. tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 2178/dnsmasq
  3. tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 1555/named
  4. tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 1555/named
  5. tcp 0 0 ::1:53 :::* LISTEN 1555/named
  6. tcp 0 0 ::1:953 :::* LISTEN 1555/named
  7. udp 0 0 192.168.122.1:53 0.0.0.0:* 2178/dnsmasq
  8. udp 0 0 127.0.0.1:53 0.0.0.0:* 1555/named
  9. udp 0 0 0.0.0.0:67 0.0.0.0:* 2178/dnsmasq
  10. udp 0 0 ::1:53 :::* 1555/named
這裏kvm需要用到dnsmasq服務,二者詳細關係,後面再總結。

再看NAT表項的規則:
  1. [root@web1 ~]# iptables -nvL -t nat --line-numbers
  2. Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
  3. num pkts bytes target prot opt in out source destination
  4. Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
  5. num pkts bytes target prot opt in out source destination
  6. 1 0 0 MASQUERADE tcp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
  7. 2 0 0 MASQUERADE udp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
  8. 3 0 0 MASQUERADE all -- * * 192.168.122.0/24 !192.168.122.0/24
  9. 4 0 0 MASQUERADE all -- * * 192.168.122.0/24 0.0.0.0/0
  10. Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
  11. num pkts bytes target prot opt in out source destination
 轉發所有來自virbr0上的數據包,將他們的ip轉化爲外網IP,實現訪問internet。


  -NAT網絡配置步驟
   - 宿主機上:

從xml文件定一個NAT網絡,會被加載到虛擬機配置文件.
 
配置NAT網絡相關的網絡配置文件:/usr/share/libvirt/networks/default.xml的內容,這裏選擇默認
  1. [root@web1 ~]# vim /usr/share/libvirt/networks/default.xml
  2. <network>
  3. <name>default</name> // 網絡名
  4. <bridge name="virbr0" />
  5. <forward/>
  6. <ip address="192.168.122.1" netmask="255.255.255.0">
  7. <dhcp>
  8. <range start="192.168.122.2" end="192.168.122.254" />
  9. </dhcp>
  10. </ip>
  11. </network>
標記爲自動啓動:

  1. [root@web1 ~]# virsh net-autostart default
  2. 網絡default標記爲自動啓動
啓動網絡

  1. [root@web1 ~]# virsh net-start default

查看網絡:default已經啓動,配置文件/usr/share/libvirt/networks/default.xml
  1. [root@web1 ~]# virsh net-list
  2. 名稱 狀態 自動開始 Persistent
  3. --------------------------------------------------
  4. default 活動 yes yes



   - 客戶機上的配置:

[root@web1 ~]# virsh edit coohx
  1. <interface type='bridge'>
  2. <mac address='52:54:00:ad:4c:86'/>
  3. <source bridge='br0'/>
  4. <model type='virtio'/>
  5. <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
  6. </interface>
  7. <interface type='network'>
  8. <mac address='52:54:00:d5:0d:34'/> // 這張網卡對應宿主機的vnet1
  9. <source network='default'/> //加載NAT網絡配置
  10. <model type='virtio'/>
  11. <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
  12. </interface>

啓動虛擬機,查看網橋與網卡綁定信息:
  1. [root@web1 ~]# brctl show
  2. bridge name bridge id STP enabled interfaces
  3. br0 8000.000c292b3f66 no eth0
  4. vnet0
  5. virbr0 8000.5254000d29b0 yes virbr0-nic
  6. vnet1
 vnet1網卡綁定到了 virbr0上面,也就是虛擬機的eth1網卡爲NAT網絡模式。


    - 登錄客戶機,配置網卡eth1的ip

vi /etc/sysconfig/network-scripts/ifcfg-eth1   // NAT網絡模式,連接到網橋 virbr0  ,由它轉發(iptables 規則實現)
  1. DEVICE="eth1"
  2. BOOTPROTO="static"
  3. BROADCAST="192.168.122.255"
  4. DNS1="192.168.122.1"
  5. GATEWAY="192.168.122.1" // 網關爲 virbr0
  6. HWADDR="52:54:00:d5:0d:34"
  7. IPADDR="192.168.122.112"
  8. IPV6INIT="yes"
  9. IPV6_AUTOCONF="yes"
  10. NETMASK="255.255.255.0"
  11. NM_CONTROLLED="no"
  12. ONBOOT="yes"
  13. TYPE="Ethernet"
  14. #UUID="a3b35d6a-c4b2-49e2-b35b-999c3bf3243e"

   - 驗證:
  1. [root@KVM-2 ~]# traceroute www.baidu.com
  2. traceroute to www.baidu.com (61.135.169.125), 30 hops max, 60 byte packets
  3. 1 bogon (192.168.122.1) 4.666 ms 4.330 ms 4.315 ms // 數據包先到 virbr0上,再由iptables 規則轉發
  4. 2 * * *
  5. 3 * * *
  6. 4 * * *
  7. 5 * * *
  8. 6 * * *
  9. 7 *
  10. [root@KVM-2 ~]# ping www.baidu.com
  11. PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data.
  12. 64 bytes from 61.135.169.121: icmp_seq=1 ttl=127 time=22.7 ms
  13. 64 bytes from 61.135.169.121: icmp_seq=2 ttl=127 time=24.0 ms
  14. --- www.a.shifen.com ping statistics ---
  15. 2 packets transmitted, 2 received, 0% packet loss, time 1121ms
  16. rtt min/avg/max/mdev = 22.774/23.414/24.054/0.640 ms

總結: 
     配置了kvm的網絡環境,感覺和 Vmware 的網絡模式差不多,Vmware有三種網絡模式:橋接、Host-only、NAT,配置比較方便。 這裏的virbr0結合iptables規則以後實現的nat功能和Vmware中NAT網絡模式中虛擬NAT服務器所實現的功能一樣,只不過需要手動配置,比較麻煩。














發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章