`
haoningabc
  • 浏览: 1477870 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

tap的方式使用qemu建立虚拟机NAT网络

阅读更多
基本概念:
vm:虚拟机
主机:建立虚拟机的服务器


需求:用nat的方式,利用qemu建立一个虚拟机,使虚拟机可以访问外网
目前主机的ip为192.168.139.85
想设置vm的ip段为192.168.122.0段,dhcp自动获取ip,并访问外网

基本原理

使用tap的方式建立vm,
建立一个网桥virbr0,
把这个网桥作为网关192.168.122.1,
把tap绑定到这个网桥virbr0上,
tap设备是通到vm里面的eth0的,
所以建立的所有vm都在网桥上就可以互相访问,
在主机上使用dnsmasq建立dhcp服务,绑定到virbr0上,
这样所有绑定到网桥的vm即可使用dhcp服务,
在vm中使用dhclient就可以获取到主机dhcp服务提供的ip地址,
在主机上设置nat的iptables,
然后打开系统的转发功能。




需要安装:qemu,tap,brctl,iptables,需要一个内核文件bzImage,一个操作系统镜像文件hda.img
环境:Ubuntu 14.04.4 LTS

一.建立一个120M的简版linux的镜像hda.img,要求支持ip,ifconfig,iptables,dhclient等网络命令
建立方法
debootstrap        --variant=minbase         --include=util-linux,dhcp-client,ssh,vim,make,psmisc,mini-httpd,net-tools,iproute,iputils-ping,procps,telnet,iptables,wget,tcpdump,curl,gdb,binutils,gcc,libc6-dev,lsof,strace         --exclude=locales,aptitude,gnupg,cron,udev,tasksel,rsyslog,groff-base,manpages,gpgv,man-db,apt,debian-archive-keyring,sysv-rc,sysvinit,insserv,python2.6         --arch i386         etch etch         'http://archive.debian.org/debian'

这个debootstrap命令国内可能不通,去aws上操作吧,如果已经有了可用的img文件,直接看第二步

具体细节参考:使用qemu的建立基本的虚拟机 http://haoningabc.iteye.com/blog/2306941
得到bzImage的内核文件和hda.img的操作系统镜像

二.使用qemu建立虚拟机,配置主机的网络
qemu-system-i386 -kernel bzImage -drive file=hda.img,if=ide,cache=none -append "console=ttyS0 root=/dev/sda rw rdinit=/sbin/init notsc=1"  -nographic -boot order=dc,menu=on -net nic,vlan=0,macaddr=52:54:00:12:34:22,model=e1000,addr=08 -net tap,name=haha,ifname=tap1,script=no,downscript=no

-kernel 指定内核文件bzImage
-append 配合kernel使用的内核参数,这里指定了启动文件/sbin/init
-drive 指定硬盘文件 hda.img,也可以用 -hda hda.img
-nographic 不用图形化界面,如果没有这个就要指定-vnc 0.0.0.0:1参数通过vncviewer访问了
例如
 qemu-system-i386 -kernel /root/jslinux/obj/linux-x86-basic/arch/i386/boot/bzImage -drive file=hda_hasbacking_file.qcow2,if=ide,cache=none -append "root=/dev/sda rw rdinit=/sbin/init notsc=1"  -vnc 0.0.0.0:1 -boot order=dc,menu=on -net nic,vlan=0,macaddr=52:54:00:12:34:22,model=e1000,addr=08 -net tap,name=haha,ifname=tap1,script=no,downscript=no

-boot 是设置启动参数,d为光驱,c为第一个硬盘,
-net 指定网络配置(这里重要)
一共有三种
-net nic 必须有的基本配置,macaddr 设置mac地址,model是网卡的类型,可以model=?查看有哪些类型
-net tap 使用桥接模式的,需要指定启动script=和关闭downscript,
fd是指向已经有的tap设备,name是在monitor模式使用info network看到的名字,ifname是tap设备在主机中的名字
-net user 用户模式,qemu使用Slirp实现了一整套tcp/ip协议栈

一般nic必须有,tap和user选一个使用

这里注意使用-net tap,ifname=tap1 建立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


三.主机上启动dnsmasq服务,提供dhcp的server功能,
注意参数指向刚建的virbr0桥上

dnsmasq --strict-order --except-interface=lo --interface=virbr0 --listen-address=192.168.122.1 --bind-interfaces  --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 

关键点是--interface=virbr0
--dhcp-range 设置网段范围

四.在虚拟机中,dhcp配置网络
注意这里是在vm里面操作的,上面的都是在主机上操作
ip link set eth0 up
#获取ip
dhclient
#测试ping 网关
ping 192.168.122.1
ping www.baidu.com
#查看
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



如果使用普通桥接参考 桥接的方式使用qemu建立虚拟机http://haoningabc.iteye.com/blog/2306736


端口映射:

在vm中启动http服务,开启80端口:
mini-httpd 
netstat -nltp|grep 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
访问http://192.168.139.85:81 就访问到vm内部了
  • 大小: 81.4 KB
分享到:
评论

相关推荐

    QEMU虚拟机网卡及网络配置

    ### QEMU虚拟机网卡及网络配置详解 #### 基本概念 QEMU是一款开源的虚拟机模拟器,能够模拟完整的系统环境,包括处理器、内存、存储设备以及网络设备等。为了使虚拟机能够正常地与其他物理或虚拟机进行通信,QEMU...

    qemu-kvm配置bridge

    - 启动虚拟机:使用qemu-kvm命令启动虚拟机,并指定使用网卡设备tap0连接到桥接网络,实现虚拟机与宿主网络的互通。 5. 拷贝系统到U盘:安装完成后,可以使用dd命令将虚拟磁盘镜像复制到U盘,制作成启动U盘。 6. ...

    详解QEMU网络配置的方法

    这种方式实现虚拟机上网很简单,类似vmware里的nat,qemu启动时加入-user-net参数,虚拟机里使用dhcp方式,即可与互联网通信,但是这种方式虚拟机与主机的通信不方便。 tap/tun network : 这种方式要比user mode...

    启动脚本qemu-ifup

    在启动虚拟机时创建和打开指定的TAP接口,并将该接口添加到虚拟网桥中---

    qemu.rar~~~~~~

    QEMU提供了多种网络模型,如`user`模式(NAT)、`bridge`模式(桥接)和`tap`模式等。这里以最常用的`user`模式为例,让虚拟机通过主机的NAT网络访问互联网: ```bash qemu-system-x86_64 -m 2048M -cdrom path/to/...

    qemu-kvm 配置 bridge 1

    总之,QEMU-KVM 的 Bridge 配置涉及到创建桥接接口、绑定物理网卡、设置 TAP 接口,以及在虚拟机启动时连接到桥接网络,从而实现虚拟机与物理网络之间的无缝通信。这个过程对于需要在虚拟环境中进行网络测试或部署多...

    云计算基础架构-KVM服务创建虚拟机.pptx

    在KVM中,我们使用tap设备来实现这一点,它创建了一个桥接,让虚拟机的数据包可以直接通过宿主机的网络接口进行转发。 掌握这些步骤后,你就能在自己的环境中部署和管理KVM虚拟机了。这个过程不仅涵盖了基本的KVM...

    vmware中linux怎么设置网络.docx

    对于QEMU虚拟机,也有两种网络模式: 1. **用户模式网络(User Mode Network)** - 类似于VMware的NAT模式,通过-user-net参数启动QEMU,虚拟机使用DHCP获取IP,可以直接访问互联网,但与宿主机通信不便。 2. **TAP...

    qemu-devel.nongnu.org.0

    6. **网络模拟**:QEMU提供了多种网络模型,如用户空间网络堆栈(tap接口)、桥接、NAT,以及对Virtio网络设备的支持,以实现高效的虚拟机间通信和与物理网络的连接。 7. **存储模拟**:QEMU支持多种虚拟磁盘格式,...

    虚拟化技术

    - **NAT模式**:网络地址转换模式。 - **Bridge模式**:桥接模式。 - **Route模式**:路由模式。 - **Isolation模式**:隔离模式。 ##### 2. TUN与TAP - **TUN**:模拟第三层设备,处理IP数据包。 - **TAP**:模拟...

Global site tag (gtag.js) - Google Analytics