tap的方式使用qemu建立虛擬機器NAT網路

2021-09-02 15:53:52 字數 4098 閱讀 3206

[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根據當前...