- 浏览: 1477870 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (691)
- linux (207)
- shell (33)
- java (42)
- 其他 (22)
- javascript (33)
- cloud (16)
- python (33)
- c (48)
- sql (12)
- 工具 (6)
- 缓存 (16)
- ubuntu (7)
- perl (3)
- lua (2)
- 超级有用 (2)
- 服务器 (2)
- mac (22)
- nginx (34)
- php (2)
- 内核 (2)
- gdb (13)
- ICTCLAS (2)
- mac android (0)
- unix (1)
- android (1)
- vim (1)
- epoll (1)
- ios (21)
- mysql (3)
- systemtap (1)
- 算法 (2)
- 汇编 (2)
- arm (3)
- 我的数据结构 (8)
- websocket (12)
- hadoop (5)
- thrift (2)
- hbase (1)
- graphviz (1)
- redis (1)
- raspberry (2)
- qemu (31)
- opencv (4)
- socket (1)
- opengl (1)
- ibeacons (1)
- emacs (6)
- openstack (24)
- docker (1)
- webrtc (11)
- angularjs (2)
- neutron (23)
- jslinux (18)
- 网络 (13)
- tap (9)
- tensorflow (8)
- nlu (4)
- asm.js (5)
- sip (3)
- xl2tp (5)
- conda (1)
- emscripten (6)
- ffmpeg (10)
- srt (1)
- wasm (5)
- bert (3)
- kaldi (4)
- 知识图谱 (1)
最新评论
-
wahahachuang8:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
websocket的helloworld -
q114687576:
http://www.blue-zero.com/WebSoc ...
websocket的helloworld -
zhaoyanzimm:
感谢您的分享,给我提供了很大的帮助,在使用过程中发现了一个问题 ...
nginx的helloworld模块的helloworld -
haoningabc:
leebyte 写道太NB了,期待早日用上Killinux!么 ...
qemu+emacs+gdb调试内核 -
leebyte:
太NB了,期待早日用上Killinux!
qemu+emacs+gdb调试内核
基本概念:
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命令国内可能不通,去aws上操作吧,如果已经有了可用的img文件,直接看第二步
具体细节参考:使用qemu的建立基本的虚拟机 http://haoningabc.iteye.com/blog/2306941
得到bzImage的内核文件和hda.img的操作系统镜像
二.使用qemu建立虚拟机,配置主机的网络
-kernel 指定内核文件bzImage
-append 配合kernel使用的内核参数,这里指定了启动文件/sbin/init
-drive 指定硬盘文件 hda.img,也可以用 -hda hda.img
-nographic 不用图形化界面,如果没有这个就要指定-vnc 0.0.0.0:1参数通过vncviewer访问了
例如
-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绑定到桥上,
#设置nat的iptables
#设置linux内核的转发
三.主机上启动dnsmasq服务,提供dhcp的server功能,
注意参数指向刚建的virbr0桥上
关键点是--interface=virbr0
--dhcp-range 设置网段范围
四.在虚拟机中,dhcp配置网络
注意这里是在vm里面操作的,上面的都是在主机上操作
如果使用普通桥接参考 桥接的方式使用qemu建立虚拟机:http://haoningabc.iteye.com/blog/2306736
端口映射:
在vm中启动http服务,开启80端口:
在主机上
192.168.139.85是主机ip
192.168.122.37是vm的ip
把vm的80端口映射到主机81上,
注意这里,在主机上netstat -nltp|grep 81是看不到的
查看变化
如果要删掉这条规则,把-A换成-D
访问http://192.168.139.85:81 就访问到vm内部了
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内部了
发表评论
-
tinyemu
2019-01-24 17:59 1433参考https://bellard.org/jslinux/t ... -
建立tap设备的c的代码
2019-01-08 19:09 474tapper.c #include <stdio.h& ... -
jslinux总结帖
2019-01-04 21:33 1134注意个问题: chrome不要用两个tab页,否则ping不通 ... -
br0和tap0的互相影响
2019-01-02 19:17 815转载 http://www.cnblogs.com/wlei/ ... -
jslinux-deobfuscated-network
2017-02-13 22:37 714基础知识 查看网络包 tcpdump -i eth0 -e ... -
用buildroot为jslinux建立最小rootfs
2016-11-18 17:59 1270############################### ... -
Tunnels with iproute2
2016-11-14 15:22 585copy from http://members.ferrar ... -
nginx rewrite替代apache rewrite
2016-10-18 20:30 834清理chrome的缓存 chrome://appcache-i ... -
vxlan多台主机的vm之间不同网段互通
2016-09-19 21:06 4373组播: 试验: 在三台机器上 192.168.139.251 ... -
vxlan多台主机的vm之间相同网段互通
2016-09-19 16:30 2239三台机器 建立namespace ... -
qemu用tap方式启动vm的网络试验(ip route)
2016-09-14 11:29 2806ip route add 192.168.8.0/24 via ... -
qemu的不断网动态迁移的试验
2016-06-28 16:16 950需求: 目前有两台服务器 192.168.139.117 19 ... -
kvm的nested嵌套
2016-06-27 18:25 1330关键点是 modprobe kvm_intel nested= ... -
qemu的动态迁移的试验
2016-06-25 21:48 14261.安装qemu-2.5.1.tar 解决 ... -
libvirt建立快照和基本使用
2016-06-25 15:51 1637如果使用qemu的快照方式 在monitor中操作 (qe ... -
socket的方式使用qemu建立虚拟机
2016-06-24 17:54 1910qemu的-net参数 -net nic 必须有,基本配置mo ... -
qemu建立基本的虚拟机
2016-06-23 17:04 1985使用qemu建立虚拟机 1.需要内核文件 bzImage ... -
qemu用nat的方式使用tap建立虚拟机
2016-06-23 16:15 11普通桥接参考 http://haoningabc.iteye. ... -
tap的方式使用qemu建立虚拟机桥接网络
2016-06-22 20:53 7838需求:建立一个虚拟机,使网络和内网一样,当一台普通接入内网的服 ... -
websocket和tap使用select关联
2016-06-14 22:01 749c语言的socket基础http://haoningabc.i ...
相关推荐
### QEMU虚拟机网卡及网络配置详解 #### 基本概念 QEMU是一款开源的虚拟机模拟器,能够模拟完整的系统环境,包括处理器、内存、存储设备以及网络设备等。为了使虚拟机能够正常地与其他物理或虚拟机进行通信,QEMU...
- 启动虚拟机:使用qemu-kvm命令启动虚拟机,并指定使用网卡设备tap0连接到桥接网络,实现虚拟机与宿主网络的互通。 5. 拷贝系统到U盘:安装完成后,可以使用dd命令将虚拟磁盘镜像复制到U盘,制作成启动U盘。 6. ...
这种方式实现虚拟机上网很简单,类似vmware里的nat,qemu启动时加入-user-net参数,虚拟机里使用dhcp方式,即可与互联网通信,但是这种方式虚拟机与主机的通信不方便。 tap/tun network : 这种方式要比user mode...
在启动虚拟机时创建和打开指定的TAP接口,并将该接口添加到虚拟网桥中---
QEMU提供了多种网络模型,如`user`模式(NAT)、`bridge`模式(桥接)和`tap`模式等。这里以最常用的`user`模式为例,让虚拟机通过主机的NAT网络访问互联网: ```bash qemu-system-x86_64 -m 2048M -cdrom path/to/...
总之,QEMU-KVM 的 Bridge 配置涉及到创建桥接接口、绑定物理网卡、设置 TAP 接口,以及在虚拟机启动时连接到桥接网络,从而实现虚拟机与物理网络之间的无缝通信。这个过程对于需要在虚拟环境中进行网络测试或部署多...
在KVM中,我们使用tap设备来实现这一点,它创建了一个桥接,让虚拟机的数据包可以直接通过宿主机的网络接口进行转发。 掌握这些步骤后,你就能在自己的环境中部署和管理KVM虚拟机了。这个过程不仅涵盖了基本的KVM...
对于QEMU虚拟机,也有两种网络模式: 1. **用户模式网络(User Mode Network)** - 类似于VMware的NAT模式,通过-user-net参数启动QEMU,虚拟机使用DHCP获取IP,可以直接访问互联网,但与宿主机通信不便。 2. **TAP...
6. **网络模拟**:QEMU提供了多种网络模型,如用户空间网络堆栈(tap接口)、桥接、NAT,以及对Virtio网络设备的支持,以实现高效的虚拟机间通信和与物理网络的连接。 7. **存储模拟**:QEMU支持多种虚拟磁盘格式,...
- **NAT模式**:网络地址转换模式。 - **Bridge模式**:桥接模式。 - **Route模式**:路由模式。 - **Isolation模式**:隔离模式。 ##### 2. TUN与TAP - **TUN**:模拟第三层设备,处理IP数据包。 - **TAP**:模拟...