热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Debian6KVM虚拟机winxp无线网络桥接

基于内核的虚拟机KVM(Kernel-basedVirtualMachine)是linux平台上的全虚拟化解决方案KVM需要包含虚拟化支持的x86硬件,intelVT或者AMD-V。KVM使用修改后的QEMU作为前端工具,QEMU通过/dev/kvm设备与KVM交互。自kernel版本2.6.20KVM随主线内核一起发

基于内核的虚拟机KVM(Kernel-based Virtual Machine)是linux平台上的全虚拟化解决方案

KVM需要包含虚拟化支持的x86硬件,intel VT或者AMD-V。KVM使用修改后的QEMU作为前端工具,QEMU通过/dev/kvm设备与KVM交互。自kernel版本2.6.20 KVM随主线内核一起发行。

前提条件(prerequisite)

可以使用KVM的前提条件是CPU支持虚拟化技术,Intel VT或者AMD-V
$egrep ‘(svm|vmx)’ /proc/cpuinfo
如果有输出则说明CPU支持硬件虚拟化,SVM(Secure Virtual Machine)是AMD CPU支持硬件虚拟化的标志,VMX是INTEL CPU支持硬件虚拟化的标志

egrep '(svm|vmx)' /proc/cpuinfo
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx constant_tsc arch_perfmon bts aperfmperf pni monitor vmx est tm2 xtpr pdcm
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx constant_tsc arch_perfmon bts aperfmperf pni monitor vmx est tm2 xtpr pdcm

KVM安装

sudo apt-get install qemu-kvm

从squeeze开始KVM的包名改为qemu-kvm,kvm只是个占位dummy包

安装qemu-utils(ubuntu 10.04 不需要这一步)

sudo apt-get install qemu-utils

This package provides QEMU related utilities:
* qemu-img: QEMU disk image utility
* qemu-io: QEMU disk exerciser
* qemu-nbd: QEMU disk network block device server

创建vdisk

sudo qemu-img create winxp.img 20G

创建一个20G的raw格式的(默认)虚拟磁盘文件,更多参数见man qemu-img

虚拟机磁盘位置/home/wiloon/vm/winxp.img

分区格式:Ext4; (不要把硬盘文件放在btrfs分区上,  磁盘性能会超级差)

qemu-img create winxp.img 20G
Formatting 'winxp.img', fmt=raw size=10737418240

网桥配置:

1. 是否加载tun模块?
lsmod | grep tun

2. 检查/dev/net/tun的权限
ls -l /dev/net/tun

3. 检查/etc/qemu-ifup的权限
当前用户需要有可执行权限

4. 检查是否已经安装bridge-utils软件包
rpm -qa | grep bridge 来查询,如果没有就请安装bridge-utils包,主要是脚本中一般需要用到brctl这个命令的。

#eth0
auto eth0
     iface eth0 inet manual
     address 192.168.1.192
     netmask 255.255.255.0
     gateway 192.168.1.1
#tap0, for the vm
auto tap0
     iface tap0 inet manual
     tunctl_user youeusername
#wlan0
auto wlan0
iface wlan0 inet dhcp
      wpa-ssid "XXXX"
      wpa-psk "XXXX"
#br0
auto br0
iface br0 inet dhcp
bridge_ports wlan0 tap0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off

bridge_ports wlan0 tap0,此处将主机的bonding接口wlan0, tap0加入网络桥.

将youeusername改为你登陆主机的用户名

手动配置网络之后就不再需要随系统启动的network manager. 可以在sysv-rc-conf里把network manager 禁用掉.http://www.wiloon.com/wordpress/?p=2278

使用桥接网络,客户机必须使用主机的一个tap设备将客户机的网络接口连接到主机的网络桥,tap设备可以用两种方式来设置

一种是静态方式,直接把tap设备的配置写道/etc/network/interfaces文件中,并将tap接口加入网络桥.
增加更多的tap接口依次类推

被桥接的网卡会开启混杂模式!!,据说无线网卡没有对应的”混杂模式”一说……,但是流量监控还是能看到其它计算机的流量,…这个还要继续google…..

如果启动tap0时报错:tap0: ERROR while getting interface flags: No such device, 安装uml-utilities, 并重启系统.

设置ebtables…

sudo ebtables -t nat -A POSTROUTING -o wlan0 -j snat --to-src 00:1b:77:05:aa:4f --snat-arp --snat-target ACCEPT
sudo ebtables -t nat -A PREROUTING -p IPv4 -i wlan0 --ip-dst 192.168.1.199 -j dnat --to-dst 52:54:00:12:34:02 --dnat-target ACCEPT
sudo ebtables -t nat -A PREROUTING -p ARP -i wlan0 --arp-ip-dst 192.168.1.199 -j dnat --to-dst 52:54:00:12:34:02 --dnat-target ACCEPT

#00:1b:77:05:aa:4f 无线网卡也是网桥的物理地址.
#192.168.1.199 虚拟机的IP.
#52:54:00:12:34:02 虚拟机的物理地址.

半虚拟化驱动Virtio

Virtio是KVM/Linux的I/O虚拟化框架,以增强KVM的IO效率,是与其他虚拟化平台的半虚拟化(Paravirtualized)类似的东西,主要应用于磁盘设备和网络接口设备。主流的linux发行版已经默认支持Virtio,如果客户机是linux则无需其他设置,直接可以使用Virtio设备,但是如果客户机是windows,则需要在客户机安装Virtio设备驱动,甚至在windows开始安装之前需要提前加载块设备驱动。windows Virtio驱动可从这里下载http://www.linux-kvm.com/ (磁盘驱动: virtio-win-1.1.16.vfd,网卡驱动: virtio-win-0.1-15.iso)

KVM主机端设置完毕后,开始安装客户机,我的客户端版本是Windows XP SP3 x32, 因为主机是32位的(IBMX60s/CPU L2400)客户机只能选32位。

因为要使用半虚拟化(Paravirtualized)驱动virtio,但是当前的Debian Stable版本也就是squeeze发行版的kvm并不支持从virtio驱动器启动(seabios 0.5.1-3),所以需要更新一下seabios,从Debian官方sid源下载seabios 0.6.3-2,然后手动安装该包seabios_1.6.3-2_all.deb

http://packages.debian.org/sid/all/seabios/download

$sudo dpkg -i seabios_1.6.3-2_all.deb

KVM核心参数 http://www.wiloon.com/wordpress/?p=1711

sudo apt-get install seabios

sudo apt-get install ebtables

安装windows XP SP3 x32客户机

首先从http://www.linux-kvm.com/下载virtio for windows驱动,使用如下脚本启动虚拟安装

#!/bin/sh
sudo kvm -bios /usr/share/seabios/bios.bin -smp 1 -m 512 -rtc base=localtime,clock=host -boot order=d -net nic,model=virtio,macaddr=52-54-00-12-34-02 -net tap,ifname=tap0,script=no,downscript=no -drive file=/home/wiloon/vm/winxp.img,if=virtio,index=0,media=disk,format=raw,cache=writeback -drive file=/media/M_DEV/Tools/win/system/windows_xp_professional_SP3_x86.iso,index=2,media=cdrom -fda /home/wiloon/tools/kvm/virtio-win-1.1.16.vfd

安装开始后记得按F6安装磁盘的virtio驱动

安装网卡驱动

#!/bin/sh
sudo kvm -bios /usr/share/seabios/bios.bin -smp 1 -m 512 -rtc base=localtime,clock=host -boot order=d -net nic,model=virtio,macaddr=52-54-00-12-34-02 -net tap,ifname=tap0,script=no,downscript=no -drive file=/home/wiloon/vm/winxp.img,if=virtio,index=0,media=disk,format=raw,cache=writeback -drive file=/home/wiloon/tools/kvm/virtio-win-0.1-15.iso,index=2,media=cdrom

桥接后,br0的IP就是宿主机的IP,而虚拟机的IP需要在虚拟机内设定。至于是动态IP还是静态IP,需要根据使用者的需要来设定。因为虚拟 机桥接接入局域网以后,虚拟机就相当于是局域网内的一台实体计算机,与宿主机平行,所以IP的设定要谨慎一些。如果宿主机是静态IP,而虚拟机是动态 IP,那么请确保局域网内有一台DHCP服务器来分配IP。

设定虚拟机IP的时候,请不要跟br0的IP相同,否则会造成IP冲突,导致宿主机或虚拟机不能连接网络。

如果出现虚拟机、宿主机和网关能够互相ping通,但虚拟机不能浏览网络等情况,请检查虚拟机的DNS设置。如果出现宿主机或虚拟机断开网络,请检查桥接网络中网桥是否连接好,网关是否设置好.



推荐阅读
  • 在Ubuntu 18.04上使用Nginx搭建RTMP流媒体服务器
    本文详细介绍了如何在Ubuntu 18.04上使用Nginx和nginx-rtmp-module模块搭建RTMP流媒体服务器,包括环境搭建、配置文件修改和推流拉流操作。适用于需要搭建流媒体服务器的技术人员。 ... [详细]
  • 本文详细介绍了如何在Oracle VM VirtualBox中实现主机与虚拟机之间的数据交换,包括安装Guest Additions增强功能,以及如何利用这些功能进行文件传输、屏幕调整等操作。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 利用 Calcurse 在 Linux 终端高效管理日程与任务
    对于喜爱使用 Linux 终端进行日常操作的系统管理员来说,Calcurse 提供了一种强大的方式来管理日程安排、待办事项及会议。本文将详细介绍如何在 Linux 上安装和使用 Calcurse,帮助用户更有效地组织工作。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 本文介绍如何使用JavaScript中的for循环来创建一个九九乘法表,适合初学者学习循环结构的应用。 ... [详细]
  • 高级缩放示例.就像谷歌地图一样.它仅缩放图块,但不缩放整个图像.因此,缩放的瓷砖占据了恒定的记忆,并且不会为大型缩放图像调整大小的图像.对于简化的缩放示例lookhere.在Win ... [详细]
  • 汇编语言:编程世界的始祖,连C语言都敬畏三分!
    当C语言还在萌芽阶段时,它首次接触到了汇编语言,并对其简洁性感到震惊。尽管汇编语言的指令极其简单,但它却是所有现代编程语言的基础,其重要性不言而喻。 ... [详细]
  • 本文介绍了Linux操作系统的核心组成部分——内核及其版本分类,以及市面上常见的几种Linux发行版,旨在为初学者提供一个清晰的学习路径。 ... [详细]
  • HTML前端开发:UINavigationController与页面间数据传递详解
    本文详细介绍了如何在HTML前端开发中利用UINavigationController进行页面管理和数据传递,适合初学者和有一定基础的开发者学习。 ... [详细]
  • 本文介绍了如何在不同操作系统上安装Git,以及一些基本和高级的Git操作,包括项目初始化、文件状态检查、版本控制、分支管理、标签处理、版本回退等,并简要提及了开源许可协议的选择。 ... [详细]
  • 如何在Mozilla Firefox中调整GIF动画的循环次数
    本文介绍了如何通过调整Mozilla Firefox的高级设置来控制GIF动画的播放次数,帮助用户根据个人喜好自定义浏览体验。 ... [详细]
  • 在 Ubuntu 22.04 LTS 上部署 Jira 敏捷项目管理工具
    Jira 敏捷项目管理工具专为软件开发团队设计,旨在以高效、有序的方式管理项目、问题和任务。该工具提供了灵活且可定制的工作流程,能够根据项目需求进行调整。本文将详细介绍如何在 Ubuntu 22.04 LTS 上安装和配置 Jira。 ... [详细]
author-avatar
吕小布
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有