[b]基本概念:[/b]
vm:虛擬機器
主機:建立虛擬機器的伺服器
[b]需求:用nat的方式,利用qemu建立乙個虛擬機器,使虛擬機器可以訪問外網[/b]
目前主機的ip為192.168.139.85
想設定vm的ip段為192.168.122.0段,dhcp自動獲取ip,並訪問外網
[b]基本原理[/b]:
[color=darkred]
使用tap的方式建立vm,
建立乙個網橋virbr0,
把這個網橋作為閘道器192.168.122.1,
把tap繫結到這個網橋virbr0上,
tap裝置是通到vm裡面的eth0的,
所以建立的所有vm都在網橋上就可以互相訪問,
在主機上使用dnsmasq建立dhcp服務,繫結到virbr0上,
這樣所有繫結到網橋的vm即可使用dhcp服務,
在vm中使用dhclient就可以獲取到主機dhcp服務提供的ip位址,
在主機上設定nat的iptables,
然後開啟系統的**功能。
[/color]
[b]需要安裝[/b]:qemu,tap,brctl,iptables,需要乙個核心檔案bzimage,乙個作業系統映象檔案hda.img
[b]環境[/b]:ubuntu 14.04.4 lts
[b]一.建立乙個120m的簡版linux的映象hda.img,要求支援ip,ifconfig,iptables,dhclient等網路命令[/b]
建立方法
這個debootstrap命令國內可能不通,去aws上操作吧,如果已經有了可用的img檔案,直接看第二步
具體細節參考:[b]使用qemu的建立基本的虛擬機器[/b] [url]
得到bzimage的核心檔案和hda.img的作業系統映象
[b]二.使用qemu建立虛擬機器,配置主機的網路[/b]
-kernel 指定核心檔案bzimage
-drive 指定硬碟檔案 hda.img,也可以用 -hda hda.img
-nographic 不用圖形化介面,如果沒有這個就要指定-vnc 0.0.0.0:1引數通過vncviewer訪問了
例如-boot 是設定啟動引數,d為光碟機,c為第乙個硬碟,
-net 指定網路配置([b]這裡重要[/b])
一共有三種
[color=red]-net nic [/color]必須有的基本配置,macaddr 設定mac位址,model是網絡卡的型別,可以model=?檢視有哪些型別
[color=red]-net tap [/color]使用橋接模式的,需要指定啟動script=和關閉downscript,
fd是指向已經有的tap裝置,name是在monitor模式使用info network看到的名字,ifname是tap裝置在主機中的名字
[color=red]-net user [/color]使用者模式,qemu使用slirp實現了一整套tcp/ip協議棧
一般nic必須有,tap和user選乙個使用
這裡注意使用[color=red]-net tap,ifname=tap1[/color] 建立tap裝置.
建立虛擬機器後,
主機ip link show
發現多了個tap1裝置
建立乙個網橋,
把tap1繫結到橋上,
#建立網橋
brctl addbr virbr0
ip link set tap1 up
#把tap繫結到網橋
brctl addif virbr0 tap1
#設定nat的iptables
iptables -t nat -a postrouting -s "192.168.122.0/255.255.255.0" ! -d "192.168.122.0/255.255.255.0" -j masquerade
#設定linux核心的**
echo 1 >/proc/sys/net/ipv4/ip_forward
#ifconfig eth0 promisc
[b]三.主機上啟動dnsmasq服務,提供dhcp的server功能,
注意引數指向剛建的virbr0橋上[/b]
dnsmasq --strict-order --except-inte***ce=lo --inte***ce=virbr0 --listen-address=192.168.122.1 --bind-inte***ces --dhcp-range=192.168.122.2,192.168.122.254 --conf-file="" --pid-file=/var/run/qemu-dhcp-virbr0.pid --dhcp-leasefile=/var/run/qemu-dhcp-virbr0.leases --dhcp-no-override
關鍵點是[color=red]--inte***ce=virbr0 [/color]
--dhcp-range 設定網段範圍
[b]四.在虛擬機器中,dhcp配置網路[/b]
[color=red]注意這裡是在vm裡面操作的,上面的都是在主機上操作[/color]
ip link set eth0 up
#獲取ip
dhclient
#測試ping 閘道器
#檢視ifconfig eth0
#成功設定ip 192.168.122.37
cat /etc/resolv.conf
#發現dns也自動建立了
#ip route檢視路由
#也可以自己設定閘道器和ip
#route add default gw 192.168.122.1 netmask 255.255.255.0
[img]
[b]埠對映:[/b]
在vm中啟動http服務,開啟80埠:
在主機上
iptables -t nat -a prerouting -p tcp -d 192.168.139.85 --dport 81 -j dnat --to 192.168.122.37:80
192.168.139.85是主機ip
192.168.122.37是vm的ip
把vm的80埠對映到主機81上,
注意這裡,在主機上netstat -nltp|grep 81是看不到的
iptables -t nat -l
檢視變化
如果要刪掉這條規則,把-a換成-d
訪問 就訪問到vm內部了
學習記錄 qemu的安裝與使用
1,背景 由於要除錯的韌體是mips,電腦一般都是x86架構,因此需要安裝qemu虛擬機器做除錯使用 2,安裝 請移步 linux 也可以參考 對於不是需要跟蹤最新的工具,還是建議使用自動安裝方法 sudo apt get install qemu3,使用 安裝完成之後的效果圖 vmlinux 3....
建立物件的方式 建立函式的方式
1 字面量 var obj 2 建構函式建立物件 function star name,age var obj new star 朱一龍 30 3 new關鍵字 var obj new object 1 普通函式 function fn 2 匿名函式 var fn function 3 new fu...
qemu建立vm和vcpu進入kvm的流程
kvm是乙個核心模組,它實現了乙個 dev kvm的字元裝置來與使用者進行互動,通過呼叫一系列ioctl函式可以實現qemu和kvm之間的切換。1 qemu發起kvm create vm的ioctl建立虛擬機器 qemu從vl.c main開始,通過configure accelerator根據當前...