在linux下使用qemu模拟路由器

在linux下使用qemu模拟路由器,第1张

前段时间,在学一个东西。学到使用qemu的时候,老是出错。原因有两个:一是我用的linux比较新,和书上的版本有差距,所以/etc/network/interfaces失效;二是我用的无线网卡上网,和书上的以太网不同,这就造成桥接的时候需要先桥接到以太网再转发到无线网卡(我在网上看见,wifi联盟的标准是不能无线桥接),而我还是个小白,所以做起来比较费劲。

utuntu17以后,/etc/network/interfaces失效,由netplan代管。但是我也试过netplan,我还是用不来。最好时直接用ip命令或者nmcli命令,免得麻烦。

以下以下是我总结的两个方法。步骤都差不多。方法1使用了老命令,方法2使用了新命令。

ubuntu下如何安装tap虚拟网络设备: https://www.jianshu.com/p/b1d315ea002e

为qemu虚拟机添加桥接网络和路由

在虚拟机的/etc/network/interfaces里面进行配置

重启虚拟机网络

实验:使用ip命令创建网桥,并调通网络

实验目的:ifconfig和tunctl等命令已经或者即将被淘汰,我必须找到官方公布的替代者,以保证以后还能使用这些命令写成的脚本。

添加网卡到网桥,网桥的状态必须时打开

注:两个从属网卡开启混杂模式,目的是让两个从属网卡可以通信。

在虚拟机的/etc/network/interfaces里面进行配置

1.ip命令能够替代ifconfig进行设置,并且能够替代tunctl和brctl进行工作。是一个十分强大的命令

2.网桥是一种特殊的连接。虽不不能明确个中缘由,但是从其拥有两张网卡可以窥知一二,同时命令nmcli和ip都把他归为连接,从这点也可以映证。

RedflagWorkstation下已经带了QEMU

#QEMU-imgcreatewindows.img2G#这个就是创建虚拟机磁盘,2G大小

#QEMU-hdawindows.img-cdrom/dev/acd0-bootd-m512-enable-audio-localtime

-hda是指定硬盘

-cdrom指定使用光驱,这个参数后面必须要跟个文件名,可以是物理光驱/dev/hda,可以使用ISO文件,为文件的路径

-m是指定虚拟机使用的内存大小,如512M

-boot指定虚拟机启动用的设备,-boot后可以选择的参数是a,c,d.其中a是指从软盘启动,c就是用硬盘启动,d是光驱启动。

-enable-audio

-localtime使用实际主板bios上的时间。

应该可以顺利的进入虚拟机了,并开始安装了。

RedflagWorkstation下已经带了QEMU

#QEMU-imgcreatewindows.img2G#这个就是创建虚拟机磁盘,2G大小

#QEMU-hdawindows.img-cdrom/dev/acd0-bootd-m512-enable-audio-localtime

-hda是指定硬盘

-cdrom指定使用光驱,这个参数后面必须要跟个文件名,可以是物理光驱/dev/hda,可以使用ISO文件,为文件的路径

-m是指定虚拟机使用的内存大小,如512M

-boot指定虚拟机启动用的设备,-boot后可以选择的参数是a,c,d.其中a是指从软盘启动,c就是用硬盘启动,d当然就是光驱启动了。

-enable-audio

-localtime使用实际主板bios上的时间。

应该可以顺利的进入虚拟机了,并开始安装了。

安装过程中,要求换盘:在QEMU中按ctrl alt 2切换到QEMUmonitor模式输入?或help可以查看可用命令及使用说明。(在其他版本的QEMU中,运行QEMU加载OS后,这个shell就会自动变成QEMUmonitor模式)

changedevicefilename—changearemovablemedia

如changecdrom/tmp/xp1.iso

常用的快捷键:

ctrl alt F全屏切换

ctrl alt鼠标在虚拟机和主机间切换

虚拟机上网设置两种方式:

1.usermodenetwork:

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

2.tap/tunnetwork:

这种方式要比usermode复杂一些,但是设置好后虚拟机互联网虚拟机主机通信都很容易

这种方式设置上类似vmware的host-only,QEMU使用tun/tap设备在主机上增加一块虚拟网络设备(tun0),然后就可以象真实网卡一样配置它.

dora 5 下的qemu安装使用qemu是最近出现的一种新的虚拟机,本身小巧的系 统和linux的加速,使它一经面世就受到了热烈的欢迎,国内也有不少用户,但没有一篇完整的文章介 绍,使许多人走了不少弯路,其实,安装是比较简单的,较为复杂的部分是在网络部分,下面,就以 Fedora 5加kernel 2.6.17.4做为主机详细介绍qemu的安装和使用

一.安装

下载

qemu最新版是0.81,同时下载加速kmenu,最新版是1.3

http://fabrice.bellard.free.fr/qemu/download.html

先安装Kqemu

$ tar zxvf kqemu-1.3.0pre9.tar.gz

$ cd kqemu-1.3.0pre9

$ su root

# ./configure

# make

# make install

然后安装qemu

# tar zxvf qemu-0.8.1.tar.gz

# cd qemu-0.8.1

#./configure --prefix=/usr/local --enable-kqemu --enable-user --enable-alsa --disable-gcc-check

说明:

--enable-user 可以允许系统下的所有用户使用Qemu

--enable-alas 可以允许系统共享系统的声音系统

--disable-gcc-check 因为wqemu默认是使用gcc3.2,我的系统gcc已经升级到了4.1,所有禁止了qemu对gcc的检查

#make

#make install

经过以上的 *** 作,加速和qemu都已经安装完成了。

二.创建新的img

用户可以将img文件创建到任意位置,只要有足够的空间就行。

# mkdir win2kp

# cd win2k

# qemu-img create win2k.img 2G

Formating 'win2k.img', fmt=raw, size=2097152 kB

2G是指定虚拟机的硬盘大小的

三.网络的设置

国 内的很多人都讲加参数就如何可以使用网络,但实际远没那么简单,我就是一开始看了网络上某人的贴子,结果是反反复复,网络一直不能正常工作,后来从 qemu的网站上下了所有的doc才搞定(比如有人发的贴都是使用-user-net就可以上网了,不但把语法写错了,而且只有这个参数根本就上不了 网!),在此我只说最复杂的部分,就是主机<->虚拟机<->internet全通的模式。

这种方式是使用tun/tap模式,必须崾内核的支持,主机上会增加一块虚拟网络设备(tun0),然后就可以象真实网卡一样配置它.

 首先查看你的内核是否支持tun设备:

 #ls -l /lib/modules/2.6.17.4/kernel/drivers/net/tun.ko

 如果存在,则执行下面的命令,否则重新编译模块。

 #modprobe tun

 这时检查modules:

 #lsmod |grep tun

tun 10240 1

tun 加载成功以后,要手工编辑一个shell.而且必须放在/etc下,文件名必须是qemu-ifup.最后要记得给脚本加上执行权限,如果要允许系 统下的所有用户使用,还必须更改脚本的权限,并在脚本中的命令前加上sudo,下面是是个完整的,给所有用户使用的脚本。

#vi /etc/qemu-ifup :

#!/bin/sh

sudo /sbin/ifconfig $1 192.168.10.1

sudo route add -host 192.168.10.100 dev $1

sudo echo 1 >/proc/sys/net/ipv4/ip_forward

sudo iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE

#chmod a+x /etc/qemu-ifup 

四.安装虚拟系统

虚拟机的启动有很多选项,下面我就以我安装好的win2k来说明

如果要使用shm,必须进行以下的 *** 作

# umount /dev/shm

# mount -t tmpfs -o size=528m none /dev/shm

别忘了启动加速

#modprobe kqemu

shm的容量必须比你将要分配给虚拟机的内存大16m,否则无法使用,上面是准备给虚拟机512m的内存,所以,shm被设置成了528,如果你只给虚拟机256m的内存,上面的size应该是272.

好了,下面准备开始给上面创建的win2k.img装入系统

# qemu -hda /usr/local/win2k/win2k.img -cdrom /dev/hdc -boot d -m 512 -win2k-hack

对于win2k的安装必须指定-win2k-hack参数,否则安装会中途出错退出,这个参数只需要在安装的时候使用,在运行的时候是不需要的。

-hda是指定将要使用的image文件,也就是windows的C盘

-cdrom 是准备给cdrom的驱动器,也就是windows的D盘,有人说这个参数是-cdrom /dev/cdrom,是指定你的主机的cdrom的位置,这是一个天大的错误,这里指的是启动后的虚拟机,和主机的cdrom在哪里没关系,当然,你的 系统必须有cdrom,如果没有cdrom,我想在linux下虚拟mount一个还是很容易的。

-boot d ,就是指定系统从D启动,各上面一项相关的

-m 512,指定分配组虚拟机的内存

如果一切顺利,安装完成以后,你就可以启动系统了

五.启动虚拟机

首先,按前面的介绍,加载好加速和tun的模块,如果前面已经加载了,这里就不再需要了,只在主机重启了以后需要,如果经常使用虚拟机,也可以将它们直接添加进/etc/rc.d/rc.local让系统自动加载。

#modprobe kqemu

#modprobe tun

#qemu -hda /usr/local/win2k/win2k.img -cdrom /dev/hdc -hdb fat:/home/seabird/work -m 512 -localtime -net nic -net tun

参数:

-hdb fat:/home/seabird/work

这是一个非常有用的参数,它的意思是把主机的/home/seabird/work目录直接以fat的格式加载到虚拟机,当然,它是只读的

-localtime,指定虚拟机使用当前的系统时间

-net nic -net tun

这两个参数必须同时使用,否则,你还是上不了网,它的意思是启动虚拟机的网卡同时和主机以及internet通讯,只有这个参数加载的时候,系统才会去读取/etc/qemu-ifup文件,其它的模式是不会读取这个文件的。

启 动完成以后,将win2k的网卡地址指定为192.168.10.100,网关设为1921.68.10.1还记得/etc/qemu- ifup文件吗,这个文件中的地址和你的虚拟机的地址是相关的,并不像有些人说的你可以像主机一样随便指定地址去上网,它是把主机作为一个NAT设备来使 用的。当然,你别忘记指定一个虚拟机可以到达的DNS服务器

六.后记

1.指定虚拟机的网络地址的时候。千万别指一个和你的主机相同网段的,那样,你是不可能上网的。

2.可以去安装98,但到目前的最新版为止,winxp在大多情况下安装是不成功的,这个在qemu的网站上说的很清楚,只有等以后的版本了,所以,你看到的安装winxp的贴子是没有实践的,我在三台配置不同的机器上安装都以失败告终了。

3.win2k运行的时候,如果用它自己的关机是关不掉虚拟机的,原因是不支持电源管理, 教你一个方法,使用win2k的安装/卸载硬件,一步步往下走, 在windows搜索完硬件后出现的对话窗中选择添加新硬件(白痴的windows,我竟然不能让它跳过搜索), ->下一步,选择“否,我想从列表选择硬件”->下一步->NT Apm/legacy支持->下一步,安装完成后你就可以正常关机了。

4.qemu还有一个最大的优点是可以启动你的硬盘上的双系统,如果现在就是双系统,你可以像下面一样直接启动:

#qemu -hda /dev/hda1 -m 512 -net nic -net tun

/hda1是你的另一个系统的硬盘分区,如果你是grub启动,这里就是你的grub所在的位置,等grub菜单出现后,选择想启动的系统就可以了(天啊,别选你现在正在运行的系统啊). Linux联盟收集整理

一、虚拟机的创建:       1.ubuntu下安装好qemu后,使用如下命令创建虚拟机:

qemu-img create -f qcow2 voltdb.img 10g

  -f qcow2是指:qemu采取的镜像格式,qcow2是qemu最常使用的格式,该格式下可以采用来写时复制技术来优化性能;

  voltdb.img是指:镜像名称

  10g是指:镜像文件大小

  2.之后需要为该镜像文件安装 *** 作系统:

  qemu-system-x86_64 -enable-kvm -hda voltdb.img -boot d -cdrom ./ubuntu-16.04-desktop-amd64.iso -m 2048 -vnc :1

  -enable-kvm:使用KVM进行加速(确保在BIOS中开启CPU对虚拟化的支持,若未加此项,则镜像安装会很慢)

  -hda: 指定要安装虚拟机要使用的虚拟磁盘

  -boot d: 指定启动位置,d表示从光盘启动

  -cdrom:指定cdrom为iso文件

  -m: 指定虚拟机内存大小,默认单位是MB

  -vnc:1:通过vnc创建虚拟桌面。(笔者在这里未加-vnc:1时,会提示:Could not initialize SDL(No available video device) - exiting)

  3.此时,ubuntu的命令行会阻塞,我们可以通过在windows下通过TigerVNC去远程连接

(下载地址:https://github.com/TigerVNC/tigervnc/releases)

  在TigerVNC中,我们输入ip:1(注意圆角半角的:)连接即可连接到voltdb.img虚拟镜像的安装界面,在那里完成虚拟机 *** 作系统的安装即可。

二、配置桥接网络

   qemu采用两种方式配置上网:

其一,默认方式为用户模式网络(Usermode Networking),数据包由NAT方式通过主机的接口进行传送。

其二,使用桥接方式(Bridged Networking),外部的机器可以直接联通到虚拟机,就像联通到你的主机一样。

  第一,用户模式

虚拟机可以使用网络服务,但局域网中其他机器包括宿主机无法连接它。比如,它可以浏览网页,但外部机器不能访问架设在它里面的web服务器。

默认的,虚拟机得到的ip空间为10.0.2.0/24,主机ip为10.0.2.2供虚拟机访问。可以ssh到主机(10.0.2.2),用scp来拷贝文件。

第二,桥接模式

这种模式允许虚拟机就像一台独立的主机一样拥有网络。这种模式需要网卡支持,一般的有线网卡都支持,绝大部分的无线网卡都不支持

1.配置host    

     桥接就是把一台机器上的若干个网络接口“连接”起来。其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互相转发。

    目的:使得局域网内可以通过ssh登陆虚拟机

1.1首先,安装两个配置网络所需软件包:  

      apt-get install bridge-utils        # 虚拟网桥工具

      apt-get install uml-utilities       # UML(User-mode linux)工具

1.2创建网桥,并添加端口,如下显示的是/etc/network/interface配置文件下的设置

[plain] view plain copy

source /etc/network/interfaces.d/*

# The loopback network interface

auto lo

iface lo inet loopback

#以下是之前未添加网桥时的配置

# The primary network interface

#auto enp3s0

#iface enp3s0 inet static

#       address 192.168.66.149

#       netmask 255.255.255.0

#       network 192.168.66.0

#       broadcast 192.168.66.255

#       gateway 192.168.66.1

#       dns-nameservers 114.114.114.114

#       dns-search foolsky

#添加网桥br0

auto br0

iface br0 inet static  #之前上网时采用静态IP,所以这里依然使用此

address 192.168.66.149 #将之前上网的ip地址分配给网桥。

network 192.168.66.0

netmask 255.255.255.0

broadcast 192.168.66.255

gateway 192.168.66.1

bridge_ports enp3s0 tap0 #为网桥添加两个接口,分别是enp3s0(之前默认的上网网口)和tap0

bridge_stp off

bridge_fd 0

bridge_maxwait 0

dns-nameservers 114.114.114.114

#添加接口enp3s0,上网方式采用自动

auto enp3s0

iface eth0 inet manual

此时,查看当前网络配置:注意:enp3s0是未分配ip的。

请点击输入图片描述

1.3使用brctl配置网桥:

tunctl -t tap0 -u 用户名       # 创建一个tap0接口,只允许指定用户访问

brctl addif br0 tap0                # 在虚拟网桥中增加一个tap0接口

ifconfig tap0 0.0.0.0 promisc up    # 打开tap0接口

brctl showstp br0          br0网桥显示如下:

请点击输入图片描述

1.4修改/etc/qemu-ifup虚拟机的启动脚本,替换成如下内容:

[plain] view plain copy

#!/bin/bash

switch=br0

if [ -n "$1" ] then

ip link set $1 up

sleep 1

brctl addif ${switch} $1

exit 0

else

echo “Error: no interface specified”

exit 1

fi

1.5使用如下命令行启动qemu虚拟机

sudo qemu-system-x86_64 -enable-kvm -boot c -drive file=/usr/local/ubuntu.img,if=virtio -m 1024 -smp 2 -netdev type=tap,script=/etc/qemu-ifup,downscript=no,id=net0 -device virtio-net-pci,netdev=net0,mac=00:11:22:33:44:AB -vnc :1 -daemonize

file:指定镜像位置

script:指向启动脚本的位置。

-daemonize:使得改启动命令 不在阻塞,执行完该命令后依然可以执行其他命令。

mac:为虚拟机的默认网卡分配指定的虚拟mac地址,可自行设定(MACADDR 可以指定一个mac地址,但要注意,第一个字节必须为偶数,如00,52等,不能为奇数(01),否则会有不可预料的问题。因为奇数保留为多播使用。)

2.配置虚拟机内 *** 作系统的网络

此时,我们依然需要通过TigerVNC进入虚拟机已安装的 *** 作系统,进入后,修改/etc/network/interfaces如下:

[plain] view plain copy

# interfaces(5) file used by ifup(8) and ifdown(8)

auto lo

iface lo inet loopback

auto enp0s3

#以下内容是新加入的,之前并未为enp0s3分配ip以及上网方式。

iface enp0s3 inet static

address 192.168.66.155  #设置该ip与网桥同一网段,下边的内容相同即可。

netmask 255.255.255.0

network 192.168.66.0

gateway 192.168.66.1

brodcast 192.168.66.255

dns-nameservers 114.114.114.114

bridge_fd 9

bridge_hello 2

bridge_maxage 12

bridge_stp off

之后重启虚拟机中 *** 作系统,即可在局域网内通过ssh连接qemu中的 *** 作系统。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11750586.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存