qemu虚拟机通过tun/tap上网

qemu虚拟机通过tun/tap上网
======================


v0.1 2014.1.1 在学习perf的时候,需要使的qemu虚拟机可以上网,下面是上网的设置过程


参考: http://www.360doc.com/content/12/0611/14/7982302_217438857.shtml


考虑用tun/tap的方式,那么需要宿主机(本人的是ubuntu12.04)的内核支持tun/tap的功能,
宿主机内核是支持这样的功能的,如果您用的操作系统内核不支持tun/tap,需要下载源码
然后编译对应的模块,然后插入对应的模块。


   1) 主机已经有了/dev/net/tun, 需要修改可执行权限:
           sudo chmod o+x /dev/net/tun
          可以通过主机/boot/config-XXX文件查看是否配置了CONFIG_TUN, 2.6.X以后的内核
          已默认将TUN直接编译进内核,所以这里是CONFIG_TUN=y


   2) 下载tunctl工具的源码:
          http://sourceforge.net/prjects/tunctl/
          解压之后直接make就好了。过程中有可能会出现make: docbook2man: Command not 
          found, 这个是在生成对应的帮助文档的时候缺少了docbook2man的工具,现在ls一
         下发现tunctl已经编译好了,这个错误可以不用去管。同样的道理make install也
          会出错,不用make install了,直接用tunctl就可以了


   3) 参考[1]进行设置,要注意确定主机内核对TUN/TAP设备和虚拟网桥的支持,这里采用
         TUN/TAP的方式搭建网络。第一步已经确认了TUN/TAP,现在只需要确认网桥:
         思路是要先找到网桥的内核配置项, 然后去/boot/config-XXX下查看:
         随便一个内核源码,查看linux-src/net/bridge/Kconfig,其中第一项就是参考[1]
         中的网桥的说明,可见配置项就是CONFIG_BRIDGE; 在/boot/config-XXX中查看,发
         现CONFIG_BRIDGE=m, 于是用sudo modprobe bridge将其插入内核中


   4) 将参考[1]中的配置在这里重复一下:
          ifconfig eth0 down                # 关闭网口
          brctl addbr br0                      # 添加虚拟的网桥
          brctl addif br0 eth0              # 在网桥上添加网口
          brctl stp br0 off                 
          brctl setfd br0 1                 
          brctl sethello br0 1              
          ifconfig br0 0.0.0.0 promisc up        # 释放br0的ip地址
          ifconfig eth0 0.0.0.0 promisc up      # 释放eth0的ip地址
          dhclient br0 # 自动获得br0的ip地址
          brctl show br0
          brctl showstp br0


          tunctl -t tap0 -u root         # 设定虚拟网卡上的端口tap0
          brctl addif br0 tap0 # 在网桥上添加虚拟网卡的端口tap0
          ifconfig tap0 0.0.0.0 promisc up # 释放tap0的ip地址
          brctl showstp br0


   5) 启动qemu虚拟机:
          sudo qemu-system-x86_64 -m 1024 -net nic -net tap,ifname=tap0,script=no,downscript=no ./ubuntu_qemu.img
          这里假设虚拟机已经可以运转起来,关于ubuntu_qemu.img的制作可以查看qemu-img的用法


   6) 测试虚拟机网络:
        ping www.baidu.com
        可以了


附录:
   虚拟机自己的ip是:192.168.201.108/25
   br0的ip是:              192.168.201.23/25
   tap0, eth0没有ip, 但是eth0, br0的MAC地址相同
   主从之间通过上面的ip可以相互通信,另一台独立的pc通过虚拟机ip可以和虚拟机通信

+----------+     
|bridge:   |---> br0 (ip:192.168.201.23/25 78:ac:c0:a8:fc:fe)
|br0          |---> eth0(78:ac:c0:a8:fc:fe)
|                |
+----------+

|tap0(ca:fd:08:a3:65:9d)

|eth0(192.168.201.108/25 52:54:00:12:34:56)
+-----------+
| guest os|

|                 |

+-----------+



你可能感兴趣的:(调试工具及系统管理)