设为首页 收藏本站
查看: 1360|回复: 0

[经验分享] QEMU虚拟机及网桥设置--ubuntu版本

[复制链接]

尚未签到

发表于 2017-6-25 16:00:47 | 显示全部楼层 |阅读模式
  环境:Notebook-PC 3.2.0-61-generic #92-Ubuntu SMP Mon Mar 31 23:47:59 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
  


  1. 在基于 Debian 和 Ubuntu 的系统上,首先要安装含有建立虚拟网络设备 ( TAP interfaces ) 的工具 uml-utilities 和桥接工具 bridge-utils:

  aptitude install uml-utilities

  aptitude install bridge-utils

  为了使你的虚拟机能够访问网络接口,你必须将运行虚拟主机的用户的用户名(通常是你的ubuntu登录用户名)添加到uml-net用户组(请用你的用户名替换其中的“steven”):

  sudo gpasswd -a steven uml-net

  注意:为了使改动生效,请重新启动你的电脑。

  2. 向你的 Debian 或者 ubuntu 操作系统描述你要添加的虚拟网络设备,编辑 /etc/network/interfaces:(请先备份)

  sudo vim /etc/network/interfaces

  在打开的文件后面添加下面的内容,将虚拟网络接口命名为 "tap0",指定该接口IP配置方法为手动,并指定使用该接口的用户(请用你的用户名替换其中的 "steven "):

  auto tap0

  iface tap0 inet manual

  up ifconfig $IFACE 0.0.0.0 up

  down ifconfig $IFACE down

  tunctl_user steven

  3. 另外还需要在 /etc/network/interfaces 中加入如下内容,建立一个名叫 "br0" 的桥,该桥的IP配置方法为通过DHCP配置,主机中的所有网络接口,也包括tap0这个虚拟网络接口,都将建立在这个桥之上:

  auto br0

  iface br0 inet dhcp

  bridge_ports all tap0

  


  在这里你可以根据自己的网络状况做相应的更改,你可以使网络桥使用静态 IP:

  #iface br0 inet static

  address 192.168.1.2

  netmask 255.255.255.0

  network 192.168.1.0

  broadcast 192.168.1.255

  gateway 192.168.1.1




  创建tap网络启动脚本




  • sudo vi /etc/qemu-ifup
  创建qemu-ifup脚本,写入以下内容:




  • #!/bin/sh   
  • #set -x   
  • switch=br0
  • if [ -n "$1" ];then  
  •         /usr/bin/sudo /usr/sbin/tunctl -u `whoami` -t $1  
  •         /usr/bin/sudo /sbin/ip link set $1 up   
  •         sleep 0.5s
  •         /usr/bin/sudo /usr/sbin/brctl addif $switch $1  
  •         exit 0
  • else  
  •         echo "Error: no interface specified"  
  •         exit 1
  • fi
  4. 创建一个空的tap网络关闭脚本(避免关闭虚拟机时的一个警告)




  • sudo vi /etc/qemu-ifdown
  其内容如下:




  • #!/bin/sh  

  


  4. 首次使用需要激活刚才建立的虚拟网络接口和网络桥:

  sudo /sbin/ifup tap0

  sudo /sbin/ifup br0

  这个步骤只需要做一次,下次主机重新启动时,这个接口和桥将自动激活

  5. 让 QEMU 使用这个虚拟网络接口

  kvm -hda debian.img -boot c -localtime -m 512 -net tap -net nic

  撤销网络桥

  1. 禁用网桥和虚拟网卡:

  sudo /sbin/ifdown br0

  sudo /sbin/ifdown tap0

  2. 将前面修改的 /etc/network/interfaces 文件还原。

  


  

sudo qemu-system-x86_64 -enable-kvm -m 1024 testcloudstack1.img -smp 4,sockets=2 -net nic -net tap
  


  

  网桥配置 。我的机器是64位Ubuntu,网桥配置过程如下:

  这个步骤只需要做一次,下次主机重新启动时,这个接口和桥将自动激活。

  1. 在基于 Debian 和 Ubuntu 的系统上,首先要安装含有建立虚拟网络设备 ( TAP interfaces ) 的工具 uml-utilities 和桥接工具 bridge-utils:

  aptitude install uml-utilities

  aptitude install bridge-utils

  为了使你的虚拟机能够访问网络接口,你必须将运行虚拟主机的用户的用户名(通常是你的ubuntu登录用户名)添加到uml-net用户组(请用你的用户名替换其中的“steven”):

  sudo gpasswd -a steven uml-net

  注意:为了使改动生效,请重新启动你的电脑。

  2. 向你的 Debian 或者 ubuntu 操作系统描述你要添加的虚拟网络设备,编辑 /etc/network/interfaces:(请先备份)

  sudo vim /etc/network/interfaces

  在打开的文件后面添加下面的内容,将虚拟网络接口命名为 "tap0",指定该接口IP配置方法为手动,并指定使用该接口的用户(请用你的用户名替换其中的 "steven "):

  auto tap0

  iface tap0 inet manual

  up ifconfig $IFACE 0.0.0.0 up

  down ifconfig $IFACE down

  tunctl_user steven

  3. 另外还需要在 /etc/network/interfaces 中加入如下内容,建立一个名叫 "br0" 的桥,该桥的IP配置方法为通过DHCP配置,主机中的所有网络接口,也包括tap0这个虚拟网络接口,都将建立在这个桥之上:

  auto br0

  iface br0 inet dhcp

  bridge_ports all tap0

  


  在这里你可以根据自己的网络状况做相应的更改,你可以使网络桥使用静态 IP:

  #iface br0 inet static

  address 192.168.1.2

  netmask 255.255.255.0

  network 192.168.1.0

  broadcast 192.168.1.255

  gateway 192.168.1.1


  创建tap网络启动脚本




  • sudo vi /etc/qemu-ifup
  创建qemu-ifup脚本,写入以下内容:




  • #!/bin/sh   
  • #set -x   
  • switch=br0
  • if [ -n "$1" ];then  
  •         /usr/bin/sudo /usr/sbin/tunctl -u `whoami` -t $1  
  •         /usr/bin/sudo /sbin/ip link set $1 up   
  •         sleep 0.5s
  •         /usr/bin/sudo /sbin/brctl addif $switch $1  
  •         exit 0
  • else  
  •         echo "Error: no interface specified"  
  •         exit 1
  • fi
  4. 创建一个空的tap网络关闭脚本(避免关闭虚拟机时的一个警告)




  • sudo vi /etc/qemu-ifdown
  其内容如下:




  • #!/bin/sh  

  


  

    4. 首次使用需要激活刚才建立的虚拟网络接口和网络桥:

  sudo /sbin/ifup tap0

  sudo /sbin/ifup br0

  这个步骤只需要做一次,下次主机重新启动时,这个接口和桥将自动激活

  5. 让 QEMU 使用这个虚拟网络接口

  kvm -hda debian.img -boot c -localtime -m 512 -net tap -net nic

  撤销网络桥

  1. 禁用网桥和虚拟网卡:

  sudo /sbin/ifdown br0

  sudo /sbin/ifdown tap0

  2. 将前面修改的 /etc/network/interfaces 文件还原。

  

  

  kvm -hda ./debian.img -boot c -serial /dev/ttyS0 -localtime -m 512 -net tap -net nic

  这样就可以让虚拟机使用宿主机器的串口设备啦~~

  

  也可以使用NFS做文件系统以及独立的kernel image,但是这种方式未测试通过

  qemu -kernel bzImage-xxxx -append "root=/dev/nfs
nfsroot=192.168.1.152:/exports/nfs/diskless/debian rw ip=dhcp
console=tty" -localtime -m 512 -net tap -net nic

  在Qemu网络中,为了实现虚拟机网卡和真实物理网络的连通,就需要使用桥接网络。通常情况下qemu的桥接网络是通过使用tap虚拟网卡来实现的,具体原理请参考相关文档,这里只介绍配置桥接网络的方法:

  1. 安装tap相关工具




  • sudo apt-get install uml-utilities
  


  2. 配置网桥




  • sudo vi /etc/network/interfaces
  


  修改为以下内容:




  • auto lo
  • iface lo inet loopback
  • auto br0
  • iface br0 inet static
  • bridge_ports eth0 tap0
  • address 10.0.7.6
  • netmask 255.255.0.0
  • network 10.0.0.0
  • broadcast 10.0.255.255
  • gateway 10.0.0.2
  


  3. 创建tap网络启动脚本




  • sudo vi /etc/qemu-ifup
  


  创建qemu-ifup脚本,写入以下内容:




  • #!/bin/sh   
  • #set -x   
  • switch=br0
  • if [ -n "$1" ];then  
  •         /usr/bin/sudo /usr/sbin/tunctl -u `whoami` -t $1  
  •         /usr/bin/sudo /sbin/ip link set $1 up   
  •         sleep 0.5s
  •         /usr/bin/sudo /usr/sbin/brctl addif $switch $1  
  •         exit 0
  • else  
  •         echo "Error: no interface specified"  
  •         exit 1
  • fi
  


  4. 创建一个空的tap网络关闭脚本(避免关闭虚拟机时的一个警告)




  • sudo vi /etc/qemu-ifdown
  


  其内容如下:




  • #!/bin/sh  
  




如此配置完成后,即可使用以下命令启动qemu,直接使用网桥,而不必作其他配置(FILENAME为镜像文件路径):




  • sudo qemu-system-x86_64 -hda $FILENAME -net nic,model=e1000,macaddr=DE:AD:BE:EF:3E:10 net tap -m 512 -vnc 10.60.1.124:10  
  


  说明:[主机操作系统为 Fedora 16 x86_64]使用qemu的网桥模式,这样由qemu创建的guest os和
主机操作系统在同一个局域网内,即局域网内的所有主机都可以访问 该guest
os。当然由于网桥可以在直接网桥方式和NAT/Masquerading 方式下工作,因此guest 和 host可以在同一个子网内(直接桥接方
式)也可以将guest隐藏起来,不与host在同一个子网,如下图 (http://en.gentoo-wiki.com/wiki/KVM#Networking_2)。

  直接网桥模式:


                     host   
+-----------------------+
|                       |        KVM GUEST1
|  +-----------+        |     +--------------+
LAN ------+--+---  eth0  |   +----------+---  nic0     |      
|  |     tap0 -----+    |     | 192.168.0.83 |      KVM GUEST2         
|  |     tap1 -----+    |     +--------------+  +--------------+
|  +-----------+   |    |                       |              |
|          br0     +----+-----------------------+---- nic0     |
|    192.168.0.88       |                       | 192.168.0.84 |
+-----------------------+                       +--------------+

  NAT/Masquerading (网络地址转换/隐藏)网桥模式:

                     host   
+-----------------------+
|                       |        KVM GUEST1
|   192.168.1.88        |     +--------------+
LAN ------+-----  eth0            |     |              |
|  +-----------+   +----+-----+-----nic0     |   
|  |     tap0 -----+    |     | 192.168.0.83 |      KVM GUEST2         
|  |     tap1 -----+    |     +--------------+  +--------------+
|  +-----------+   |    |                       |              |
|          br0     +----+-----------------------+---- nic0     |
|    192.168.0.88       |                       | 192.168.0.84 |
+-----------------------+                       +--------------+

  第一步:安装和设置网桥(参考Virtualization With KVM On A Fedora 14 Server)


  • 安装网桥和准备工作

yum install bridge-utils

  为了让网桥顺利工作,需要关闭Network Manager,因为Network Manager好像不 支持网桥启动,可以先查看Network Manager是否启动,由于从Fedora14以后, 采用了Systemd 作为linux的系统和服务管理器,因此查看和关闭服务使用:

systemctl status networkmanager.service
systemctl stop networkmanager.service

  永久关闭该服务使用:

chkconfig NetworkManager off
chkconfig --levels 35 network on

  这时候重启网络,看看什么情况

systemctl restart network.service


  • 开始配置网卡和网桥
  /etc/sysconfig/network-scripts/ifcfg-p4p1的内容如下:重点需要关注的是 这里的NMCONTROLLED="no",而不是"yes",就是说要关闭network manager,另 外就是加上了BRIDGE=br0。 (至于为什么是p4p1 不是eth0等,那是fedora新版本采用的名称)

DEVICE=p4p1
#BOOTPROTO=static
ONBOOT=yes
NM_CONTROLLED="no"
TYPE=Ethernet
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System p4p1"
UUID=5dd47203-fffb-671a-4fd0-4cff98347a3b
HWADDR=00:25:64:8E:58:8C
PREFIX0=24
BRIDGE=br0

  还需要配置网桥,使用/etc/sysconfig/network-scripts/ifcfg-br0文件来完成, 可以看到该文件中配置了ip,gateway,dns等

DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.0.88
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=192.168.0.1
DELAY=0
STP=off

  这时候重启网络

systemctl restart network.service

  正常的情况下应该看到如下信息:

[abelard@localhost ~]$ ifconfig
br0       Link encap:Ethernet  HWaddr 00:25:64:8E:58:8C  
inet addr:192.168.0.88  Bcast:192.168.0.255  Mask:255.255.255.0
inet6 addr: fe80::225:64ff:fe8e:588c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:11611 errors:0 dropped:0 overruns:0 frame:0
TX packets:10348 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:8935226 (8.5 MiB)  TX bytes:1445532 (1.3 MiB)
lo        Link encap:Local Loopback  
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:16436  Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:480 (480.0 b)  TX bytes:480 (480.0 b)
p4p1      Link encap:Ethernet  HWaddr 00:25:64:8E:58:8C  
inet6 addr: fe80::225:64ff:fe8e:588c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:12061 errors:0 dropped:0 overruns:0 frame:0
TX packets:10384 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:9225251 (8.7 MiB)  TX bytes:1497788 (1.4 MiB)
Interrupt:16

  可以使用nslookup www.google.com命令看看是否有问题!
  第二步,创建tap设备 有了网桥以后,先使用

[abelard@localhost ~]$ sudo lsmod | grep tun

  如果没有任何信息,使用

[abelard@localhost ~]$ sudo modprobe tun
[abelard@localhost ~]$ sudo lsmod | grep tun
tun                    14111  0

  如果还没有信息,就需要google一下,查找怎么yum一个tun模块。有信息的话, 就继续。 使用tunctl命令创建tap设备,并将tap设备添加到网桥br0中,

[abelard@localhost ~]$ sudo tunctl -b  -t tap0
[abelard@localhost ~]$ brctl addif br0 tap0
[abelard@localhost ~]$ sudo ifconfig tap0 up
[abelard@localhost ~]$ ifconfig
br0       Link encap:Ethernet  HWaddr 00:25:64:8E:58:8C  
inet addr:192.168.0.88  Bcast:192.168.0.255  Mask:255.255.255.0
inet6 addr: fe80::225:64ff:fe8e:588c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:12165 errors:0 dropped:0 overruns:0 frame:0
TX packets:10867 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:9116034 (8.6 MiB)  TX bytes:1529806 (1.4 MiB)
lo        Link encap:Local Loopback  
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:16436  Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:480 (480.0 b)  TX bytes:480 (480.0 b)
p4p1      Link encap:Ethernet  HWaddr 00:25:64:8E:58:8C  
inet6 addr: fe80::225:64ff:fe8e:588c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:12677 errors:0 dropped:0 overruns:0 frame:0
TX packets:10903 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:9431240 (8.9 MiB)  TX bytes:1584348 (1.5 MiB)
Interrupt:16
tap0      Link encap:Ethernet  HWaddr 26:A1:36:5F:18:64  
UP BROADCAST MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

  这时候,网桥和tap设备都可以工作了,意味着qemu的网桥模式可以开始。
  第三步 在qemu中使用网桥模式
  使用过两种方式,
  (1) 不设置启动脚本

sudo qemu-kvm -hda CentOs5.7.img -net nic,macaddr=00:1d:92:ab:3f:78 -net tap,ifname=tap0,script=no,downscript=no -boot c

  这种方式,因为没有用到启动脚本(script=no,downscript=no),因此需要手动来使用上面的命令:

[abelard@localhost ~]$ brctl addif br0 tap0
[abelard@localhost ~]$ sudo ifconfig tap0 up

  (2) 设置qemu网络启动脚本/etc/qemu-ifup

#!/bin/sh
brctl addif br0 $1
ifconfig $1 up 0.0.0.0 promisc

  使用以下命令就可以启动guest os,并且可以在同一个子网中访问这个guest(192.168.0.81) 了,

sudo qemu-kvm -hda CentOs5.7.img -net nic,macaddr=00:1d:92:ab:3f:78 -net tap,ifname=tap0  -boot c

  或

sudo qemu-kvm -hda CentOs5.7.img -net nic,macaddr=00:00:00:00:00:00 -net tap,ifname=tap0 -boot c

  或

sudo qemu-kvm -hda CentOs5.7.img -net nic -net tap,ifname=tap0 -boot c
  






Kvm 网络桥接方案
  下面介绍配置KVM桥接网络的方法: \\特别注意,大部分不能桥接无线网卡。。。只能桥接PCI网卡。。。。

安装桥接工具:
  代码:

sudo apt-get install bridge-utils

  安装创建TAP界面的工具:
  代码:

sudo apt-get install uml-utilities

  编辑网络界面配置文件

代码:

sudo vi /etc/network/interfaces
,根据你的情况加入以下内容:

  代码:

auto eth0
iface eth0 inet static \\这里可以为DHCP
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.1

  或使用最保守的eth0配置:

auto eth0

iface eth0 inet manual
  auto tap0

iface tap0 inet manual

up ifconfig $IFACE 0.0.0.0 up

down ifconfig $IFACE down

tunctl_user lm \\lm是我的用户名,在这里换为你的用户名
  auto br0

iface br0 inet static \\当然这里也可以使用DHCP分配

bridge_ports eth0 tap0

address 192.168.1.3

netmask 255.255.255.0

network 192.168.1.0

broadcast 192.168.1.255

gateway 192.168.1.1
  

激活tap0和br0: //有些时候会不奏效,但重启后就行了
  代码:

sudo /sbin/ifup tap0
sudo /sbin/ifup br0

  好了以后ifconfig看一下,多了一个tap0和br0, br0上的IP地址就是你本机的IP地址。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-388057-1-1.html 上篇帖子: 微服务的一些实践 下篇帖子: mac使用minikube
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表