一.使用virt-manager創建和管理虛擬機
1.使用VNC Viewer連接進入虛擬化平臺主機


2.打開終端輸入virt-manager命令啟動virt-manager虛擬機管理界面
#virt-manager

3.通過virt-manager安裝CentOS 6.6的虛擬機
點擊如圖所示圖標新建虛擬機:

選擇PXE引導,我的網絡內存在一個系統自動化部署服務器:

選擇操作系統類型和版本:

設置內存和CPU個數:

設置硬盤大小,這里采用動態擴展磁盤空間方式:

忽略這個錯誤,由于是虛擬磁盤,不用擔心空間,只需要保證系統空間不會超過物理磁盤實際空間:

勾選選項是可以查看配置在安裝前:

我們可以在這個界面進行設置,我這里就不設置了,直接點擊Begin Installation:

我們選擇安裝個基本的系統:

進入安裝了:

可以觀察安裝時Virt-manager界面的情況:
可以知曉虛擬機正在運行,可以查看CPU的使用情況:

安裝完成后如圖;

關閉虛擬機,在虛擬機輸入關機指令即可將虛擬機關閉;
基于virt-manager創建管理虛擬機就完成了,很簡單的。
下面的實驗我們還是使用cirros輕量級的linux系統。
二.KVM虛擬化平臺的網絡模型
1.網絡模型介紹
一般虛擬機虛擬網絡的設置主要包括三種方式。主要如下:
NAT模式
也有人稱此種模式為host模式。在這種模式下虛擬機可以理解成沒有自己的獨立網卡。所有訪問虛擬機的請求其實是直接發送給宿主機,然后通過訪問宿主機轉發到虛擬機上的。相應的虛擬機訪問其他網絡,也是先轉發到宿主機然后在轉發出去。對于宿主機之外的網絡,是不知道該虛擬機存在的。
Bridge模式
橋接模式是使用比較多的模式,它是虛擬機擁有自己的獨立網卡和IP,然后通過借用宿主機的網卡對外連接網絡。它把宿主機的網卡當作了一種橋,通過這個橋連接外網的世界。在這種模式下,可以簡單的理解成虛擬機和宿主機是兩個不同的機器,有獨立IP可以相互訪問。對于虛擬機的IP獲取,一般可以直接指定也可以通過DHCP獲取得到。
Internal模式(host-only)
這個是把虛擬機之間的網絡和主機的網絡隔離開來。虛擬機是一片網絡,主機也是一片網絡,彼此之間不能相互訪問。
橋接模型我們前面使用的很多例子,我這里就不做介紹了,我重點介紹一下host-only模型和NAT模型。
2.host-only模式實例
1).我們創建一個host-only的橋設備,將虛擬機之間的網絡和KVM虛擬化平臺宿主機隔離開來;
# brctl addbr isolationbr
查看橋設備:
# brctl showbridge name bridge id STP enabled interfacesbr0 8000.000c293e6326 yes eth0isolationbr 8000.000000000000 novirbr0 8000.525400305441 yes virbr0-nic
但是這個橋設備是未激活的,我們需要使用ip命令激活橋設備:
# ip link set isolationbr up
激活后查看我們的橋設備:
# ip link show1: lo: <LOOPBACK,UP,LOWER_UP> mtu65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:002: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000 link/ether 00:0c:29:3e:63:26 brd ff:ff:ff:ff:ff:ff3: br0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether 00:0c:29:3e:63:26 brd ff:ff:ff:ff:ff:ff4: virbr0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether 52:54:00:30:54:41 brd ff:ff:ff:ff:ff:ff5: virbr0-nic: <BROADCAST,MULTICAST>mtu 1500 qdisc noop state DOWN qlen 500 link/ether 52:54:00:30:54:41 brd ff:ff:ff:ff:ff:ff16: isolationbr:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether 6e:5e:8d:39:56:b5 brd ff:ff:ff:ff:ff:ff17: vnet1:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWNqlen 500 link/ether 3a:ce:49:1d:f4:a3 brd ff:ff:ff:ff:ff:ff18: vnet2:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWNqlen 500 link/ether 62:fc:96:5c:1f:7d brd ff:ff:ff:ff:ff:ff
2).啟動兩個虛擬機:
第一臺cirros虛擬機:

啟動后從vncviewer登錄如圖:

第二臺cirros虛擬機,啟動時需要指定mac地址;

啟動后從vncviewer登錄如圖:

查看兩臺虛擬機的ip地址:


使用ping測試兩臺虛擬機的連通性:

現在是連通的哦!
我們啟動兩臺虛擬機后我們的vnet1和vnet2網卡是橋接在br0上的;
# brctl showbridge name bridge id STP enabled interfacesbr0 8000.000c293e6326 yes eth0 vnet1 vnet2isolationbr 8000.000000000000 novirbr0 8000.525400305441 yes virbr0-nic
3).我們現在將vnet1和vnet2橋接到isolationbr上:
先將vnet1和vnet2從橋接設備br0上移除:
# brctl delif br0 vnet1# brctl delif br0 vnet2
現在查看橋接設備的網卡,兩個虛擬機的網卡未橋接在橋接設備br0上了:
# brctl showbridge name bridge id STP enabled interfacesbr0 8000.000c293e6326 yes eth0isolationbr 8000.000000000000 novirbr0 8000.525400305441 yes virbr0-nic
我們再去兩臺虛擬機進行ping連通性測試:

現在虛擬機的連通性是不通的。
下面我們將vnet1和vnet2的網卡橋接到我們剛創建的橋接設備isolationbr上:
# brctl addif isolationbr vnet1# brctl addif isolationbr vnet2
去查看橋接設備的網卡關聯:
# brctl showbridge name bridge id STP enabled interfacesbr0 8000.000c293e6326 yes eth0isolationbr 8000.3ace491df4a3 no vnet1 vnet2virbr0 8000.525400305441 yes virbr0-nic
我們虛擬機的兩個網卡已經關聯到了isolationbr橋設備上;
我們再去虛擬機上測試連通性:

現在兩臺虛擬機之間是在同一個網絡的,可以實現通信,但是跟宿主機之間是隔離的,我們虛擬機與宿主機之間的聯通性是不能連通的。如果我們需要實現虛擬機與宿主機之間的通信,那么我們就需要開啟NAT模型,下面就介紹NAT模型。
3.NAT模型實例
其實就是配置host-only網絡內的主機同外部主機通信實驗,開啟橋設備的NAT功能。
1).我們虛擬機的地址是經過網絡內的DHCP服務器分配的,我們為了實驗來手動設置兩臺虛擬機的地址和橋接設備isolationbr的地址
兩臺虛擬機的ip設置如圖:

橋設備isolationbr的ip設置如圖:
[root@createOS ~]# ifconfig isolationbr 10.0.0.254/8 up[root@createOS ~]# ifconfig isolationbrisolationbr Link encap:Ethernet HWaddr 3A:CE:49:1D:F4:A3 inet addr:10.0.0.254 Bcast:10.255.255.255 Mask:255.0.0.0 inet6 addr: fe80::6c5e:8dff:fe39:56b5/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1 errors:0 dropped:0overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:28 (28.0 b) TX bytes:468(468.0 b)
設置完成后測試虛擬機之間網絡連通性:

我們將虛擬機的網關指向isolationbr橋設備地址即可與宿主機進行連通:

2).我們還是不能與物理網絡中的真實網關172.16.0.1通信,我們需要將宿主機的路由轉發功能打開:
# sysctl -w net.ipv4.ip_forward=1net.ipv4.ip_forward = 1
我們先來通過虛擬機ping一下網關,如圖:

在進行ping連通性測試的時候我們再在宿主機上打開抓包功能查看數據包:
# tcpdump -i eth0 icmp -nntcpdump: WARNING: eth0: no IPv4 addressassignedtcpdump: verbose output suppressed, use -vor -vv for full protocol decodelistening on eth0, link-type EN10MB(Ethernet), capture size 65535 bytes10:24:52.377558 IP 10.0.0.2 >172.16.0.1: ICMP echo request, id 1793, seq 0, length 6410:24:53.384063 IP 10.0.0.2 >172.16.0.1: ICMP echo request, id 1793, seq 1, length 64
數據報文能夠到達網關設備,但是數據包不能回來了。
我們需要開啟宿主機的路由功能,設置防火墻中的nat模式:
# iptables -t nat -A POSTROUTING -s 10.0.0.0/8 ! -d 10.0.0.0/8 -j MASQUERADE# iptables -t nat -L POSTROUTINGChain POSTROUTING (policy ACCEPT)target prot opt source destination MASQUERADE tcp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535MASQUERADE udp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24 MASQUERADE all -- 10.0.0.0/8 !10.0.0.0/8
開始從虛擬機ping測試到達真實網關的連通性:

同時開始抓包,我們在宿主機eth0和橋接設備isolationbr上都要抓包:
橋接設備isolationbr的抓包:
# tcpdump -i isolationbr -nntcpdump: verbose output suppressed, use -vor -vv for full protocol decodelistening on isolationbr, link-type EN10MB(Ethernet), capture size 65535 bytes10:35:35.391069 IP 10.0.0.2 >172.16.0.1: ICMP echo request, id 2305, seq 0, length 6410:35:35.393619 ARP, Request who-has10.0.0.2 tell 10.0.0.254, length 2810:35:35.395095 ARP, Reply 10.0.0.2 is-at52:54:00:65:43:21, length 2810:35:35.395137 IP 172.16.0.1 >10.0.0.2: ICMP echo reply, id 2305, seq 0, length 6410:35:36.394760 IP 10.0.0.2 >172.16.0.1: ICMP echo request, id 2305, seq 1, length 6410:35:36.395943 IP 172.16.0.1 >10.0.0.2: ICMP echo reply, id 2305, seq 1, length 6410:35:41.426182 ARP, Request who-has10.0.0.254 tell 10.0.0.2, length 2810:35:41.427695 ARP, Reply 10.0.0.254 is-at3a:ce:49:1d:f4:a3, length 28
可以發現虛擬機的請求到達了網關,網關也回復了;這里的地址轉換未顯示,但是可以猜測是通過nat地址轉換eth0將虛擬機的請求發送給網關。
宿主機的eth0抓包:
# tcpdump -i eth0 icmp -nntcpdump: WARNING: eth0: no IPv4 addressassignedtcpdump: verbose output suppressed, use -vor -vv for full protocol decodelistening on eth0, link-type EN10MB(Ethernet), capture size 65535 bytes10:35:35.392027 IP 172.16.31.7 >172.16.0.1: ICMP echo request, id 2305, seq 0, length 6410:35:35.393361 IP 172.16.0.1 >172.16.31.7: ICMP echo reply, id 2305, seq 0, length 6410:35:36.395052 IP 172.16.31.7 >172.16.0.1: ICMP echo request, id 2305, seq 1, length 6410:35:36.395860 IP 172.16.0.1 >172.16.31.7: ICMP echo reply, id 2305, seq 1, length 64
宿主機的eth0通過nat功能將虛擬機的請求轉換成本機地址向網關請求回復了;
3).上述的步驟可以通過腳本自動化實現哦!
安裝dnsmasq軟件給虛擬機提供DHCP服務自動分配IP地址:
# yum install -y dnsmasq
注意:由于我們的KVM平臺存在一個vibrd0的網卡,它自動啟動了dnsmasq服務,我們在使用NAT模型時如果不是使用的這個網卡,我們就需要將其dnsmasq服務關閉。
關閉dnsmasq服務:
#kill 6378
nat模型腳本示例:
開啟nat功能的腳本;
#vim /etc/qemu-natup#!/bin/bashBRIDGE=isolationbrNETWORK=10.0.0.0GATEWAY=10.0.0.254NETMASK=255.0.0.0DHCPRANGE=10.0.0.1,10.0.0.100TFTPROOT=BOOTP=function check_bridge(){if brctl show | grep "^BRIDGE"&> /dev/null;then return 1else return 0fi}function create_bridge(){ brctl addbr "BRIDGE" brctl stp "BRIDGE" on brctl setfd "BRIDGE" 0 ifconfig "$BRIDGE""GATEWAY" netmask "$NETMASK" up}function enable_ip_forward(){ echo 1 > /proc/sys/net/ipv4/ip_forward}function add_filter_rules(){ iptables -t nat -A POSTROUTING -s"$NETWORK"/"$NETMASK" ! -d"$NETWORK"/"$NETMASK" -j MASQUERADE}function start_dnsmasq(){ps -ef | grep "dnsmasq" |grep -v"grep" &> /dev/nullif [ $? -eq 0 ];then echo "warning:dnsmasq is already running" return 1fidnsmasq --strict-order--except-interface=lo --interface=$BRIDGE --listen-address=$GATEWAY--bind-interfaces --dhcp-range=$DHCPRANGE --conf-file=""--pid-file=/var/run/qemu-dhcp-$BRIDGE.pid --dhcp-leasefile=/var/run/qemu-dhcp-$BRIDGE.leases--dhcp-no-override ${TFTPROOT:+"--enable-tftp"}${TFTPROOT:+"--tftp-root=$TFTPROOT"}${BOOTP:+"--dhcp-boot=$BOOTP"}}function setup_bridge_nat(){check_bridge "$BRIDGE"if [ $? -eq 0 ];then create_bridgefienable_ip_forwardadd_filter_rules "$BRIDGE"start_dnsmasq "$BRIDGE"}if [ -n "$1" ];then setup_bridge_nat ifconfig "$1" 0.0.0.0 up brctl addif "$BRIDGE""$1" exit 0else echo "Error:no interfacespecified" exit 1fi關閉nat功能及從橋設備移除虛擬網卡腳本:
#vim /etc/qemu-natdown#!/bin/bashBRIDGE="isolotionbr"if [ -n "$1" ];then ip link set $1 down brctl delif "$BRIDGE" $1 ip link set "$BRIDGE" down brctl delbr "$BRIDGE" iptables -t nat -F exit 0else echo "Error: no interface specified" exit 1fi
設置腳本執行權限:
# chmod +x /etc/qemu-natup# chmod +x /etc/qemu-natdown
啟動第一臺虛擬機:

我們去查看dnsmasq服務啟動與否:
# ps -ef | grep "dnsmasq" |grep-v "grep"nobody 38355 1 0 11:49 ? 00:00:00 dnsmasq --strict-order--except-interface=lo --interface=isolationbr --listen-address=10.0.0.254--bind-interfaces --dhcp-range=10.0.0.1,10.0.0.100 --conf-file=--pid-file=/var/run/qemu-dhcp-isolationbr.pid--dhcp-leasefile=/var/run/qemu-dhcp-isolationbr.leases --dhcp-no-override
查看宿主機上的網卡設備:
# ifconfig |grep -Ei"(vnet1|vnet2)"vnet1 Link encap:Ethernet HWaddr16:85:A7:5C:84:9D vnet2 Link encap:Ethernet HWaddrE6:81:C9:31:4F:78
啟動虛擬機后在vncserver上連接到虛擬機界面操作,我們進行查看IP地址,可以發現我們的dnsmasq已經自動分配IP地址給虛擬機了。

查看一下宿主機的防火墻中的NAT規則:
#iptables -t nat -L POSTROUTINGChain POSTROUTING (policy ACCEPT)target prot opt source destination MASQUERADE all -- 10.0.0.0/8 !10.0.0.0/8
嘿嘿,我把防火墻NAT規則都給清空了,所以這里就只有一條規則了。o(∩_∩)o
在虛擬機上進行網絡連通性測試:

在測試的同時開啟抓包哦!
橋接設備網卡的數據報文如下:
# tcpdump -i isolationbr -nn tcpdump: verbose output suppressed, use -vor -vv for full protocol decodelistening on isolationbr, link-type EN10MB(Ethernet), capture size 65535 bytes12:05:14.655667 IP 10.0.0.83 >172.16.0.1: ICMP echo request, id 257, seq 0, length 6412:05:14.658466 IP 172.16.0.1 >10.0.0.83: ICMP echo reply, id 257, seq 0, length 6412:05:15.657273 IP 10.0.0.83 >172.16.0.1: ICMP echo request, id 257, seq 1, length 6412:05:15.658252 IP 172.16.0.1 >10.0.0.83: ICMP echo reply, id 257, seq 1, length 6412:05:19.659800 ARP, Request who-has10.0.0.83 tell 10.0.0.254, length 2812:05:19.661522 ARP, Request who-has10.0.0.254 tell 10.0.0.83, length 2812:05:19.661569 ARP, Reply 10.0.0.254 is-at16:85:a7:5c:84:9d, length 2812:05:19.662053 ARP, Reply 10.0.0.83 is-at52:54:00:88:88:88, length 2812:05:47.759101 ARP, Request who-has10.0.0.47 tell 10.0.0.83, length 2812:05:47.760926 ARP, Reply 10.0.0.47 is-at52:54:00:12:34:56, length 2812:05:47.761579 IP 10.0.0.83 >10.0.0.47: ICMP echo request, id 513, seq 0, length 6412:05:47.765075 IP 10.0.0.47 >10.0.0.83: ICMP echo reply, id 513, seq 0, length 6412:05:48.759703 IP 10.0.0.83 >10.0.0.47: ICMP echo request, id 513, seq 1, length 6412:05:48.760848 IP 10.0.0.47 >10.0.0.83: ICMP echo reply, id 513, seq 1, length 6412:05:52.775287 ARP, Request who-has10.0.0.83 tell 10.0.0.47, length 2812:05:52.776601 ARP, Reply 10.0.0.83 is-at52:54:00:88:88:88, length 2812:05:59.376454 IP 10.0.0.83 >172.16.31.7: ICMP echo request, id 769, seq 0, length 6412:05:59.376548 IP 172.16.31.7 >10.0.0.83: ICMP echo reply, id 769, seq 0, length 6412:06:00.482899 IP 10.0.0.83 >172.16.31.7: ICMP echo request, id 769, seq 1, length 6412:06:00.483035 IP 172.16.31.7 >10.0.0.83: ICMP echo reply, id 769, seq 1, length 6412:06:04.376987 ARP, Request who-has10.0.0.83 tell 10.0.0.254, length 2812:06:04.378153 ARP, Reply 10.0.0.83 is-at52:54:00:88:88:88, length 28
物理網卡的數據報文如下:
# tcpdump -i eth0 icmp -nntcpdump: WARNING: eth0: no IPv4 addressassignedtcpdump: verbose output suppressed, use -vor -vv for full protocol decodelistening on eth0, link-type EN10MB (Ethernet),capture size 65535 bytes12:05:14.657680 IP 172.16.31.7 >172.16.0.1: ICMP echo request, id 257, seq 0, length 6412:05:14.658427 IP 172.16.0.1 >172.16.31.7: ICMP echo reply, id 257, seq 0, length 6412:05:15.657329 IP 172.16.31.7 >172.16.0.1: ICMP echo request, id 257, seq 1, length 6412:05:15.658215 IP 172.16.0.1 >172.16.31.7: ICMP echo reply, id 257, seq 1, length 64
至此,我們的KVM虛擬化平臺的網絡模型就介紹完成了,這些模型對以后的云計算平臺網絡的虛擬化也是很重要的。
新聞熱點
疑難解答
圖片精選