1. 程式人生 > >qemu+kvm 建立虛擬機器並虛擬網絡卡

qemu+kvm 建立虛擬機器並虛擬網絡卡

Linux目前流行的開源虛擬化技術解決方案:
                主機虛擬化:xen, kvm, virtualbox
                容器級:lxc, libcontainer, runC, openvz
                模擬器:qemu

KVM模組load進記憶體之後,系統的執行模式:
                核心模式:GuestOS執行IO類的操作時,或其它的特殊指令操作時的模式;它也被稱為“Guest-Kernel”模式;
                使用者模式:Host OS的使用者空間,用於代為GuestOS發出IO請求;
                來賓模式:GuestOS的使用者模式;所有的非IO類請求;

Qemu:
                處理器模擬器
                模擬各種IO裝置
                將模擬裝置連線至主機的物理裝置
                提供使用者介面

               qemu-kvm 可以完成虛擬機器建立,安裝,啟動執行
               qemu-img 輔助對磁碟映象的管理
               qemu-IO 對IO使用情況管理

執行中的一個kvm虛擬機器就是一個qemu-kvm程序,執行qemu-kvm程式並傳遞給它合適的選項及引數即能完成虛擬機器啟動,終止此程序即能關閉虛擬機器;

安裝使用KVM:
            判斷CPU是否支援硬體虛擬化:
                grep -i -E '(vmx|svm|lm)' /proc/cpuinfo

modprobe kvm
yum install qemu-kvm
ln -sv /usr/libexec/qemu-kvm /usr/bin
mkdir /VMs/c{1,2,3} -pv
cp cirros-no_cloud-i386.img /VMs/c1/        ## cirros 是一個微型映象檔案 用來測試
brctl addbr br-and ##建立虛擬網橋
ip link set br-and up ##啟動網橋

編寫啟動虛擬機器時要執行的指令碼,預設為/etc/qemu-ifup

vim /etc/qemu-ifup
 #!/bin/bash
      bridge=br0
  if  [ -n "$1" ];then
      ip link set $1 up
      sleep 1
      brctl addif $bridge $1
      [ $? -eq 0 ] && exit 0 || exit 1
  else
      echo "Error: no interface specified."
  exit 2
  fi    

 chmod +x /etc/qemu-ifup

建立虛擬機器並虛擬網絡卡網橋

qemu-kvm -smp 1 -m 32 -name c2 -drive file=/data/img/c1.img,if=virtio,media=disk,format=qcow2 -vnc :1 -net nic,
model=e1000,macaddr=52:54:00:00:00:01 -net tap,script=/etc/qemu-ifup -daemonize


#######
-smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]:指明虛擬機器上vcpu的數量及拓撲;
-name NAME:當前虛擬機器的名稱,要惟一;
-drive [file=file][,if=type][,media=d][,index=i] [,cache=writethrough|writeback|none|directsync|unsafe][,format=f]:
file=/PATH/TO/SOME_IMAGE_FILE:映像檔案路徑;
if=TYPE:塊裝置匯流排型別,ide, scsi, sd, floppy, virtio,
media=TYPE:介質型別,cdrom和disk;
format=f:磁碟映像檔案的格式;
-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v] 為虛擬機器建立一個網路介面,並將其新增至指定的VLAN;

-net nic,model=? model=type:指明模擬出的網絡卡的型號,ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,virtio;
macaddr=mac:指明mac地址;52:54:00:
-net tap[,vlan=n][,name=str][,fd=h][,fds=x:y:...:z][,ifname=name][,script=file][,downscript=dfile]:
通過物理的TAP網路介面連線至vlan n;
script=file:啟動虛擬機器時要執行的指令碼,預設為/etc/qemu-ifup

#########
-vnc :1 通過vncserver終端1 連結可以在圖形化介面登入



yum install tigervnc-server
圖形化介面執行vncviewer


在出現的登入介面輸入提示的登入
user:cirros
password:cubswin:)


讓虛擬機器通訊

為建立的虛擬主機新增ip地址 內網地址 可隨意建立
ifconfig add eth0 10.1.0.1/16


讓虛擬主機可以和網橋通訊,在宿主機上執行
ip addr add 10.1.0.222/16 br-and ##給虛擬網橋新增地址
echo 1 > /proc/sys/net/ipv4/ip_forward ## 開啟路由轉發


讓虛擬主機可以和宿主機僅主機通訊
iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT --to-source 172.16.250.200


讓虛擬主機可以被訪問到
iptables -t nat -A PREROUTING -d 172.16.250.200 -p tcp --dport 22022 -j DNAT --to-destination 10.1.0.1:22