qemu-bridge 网络搭建:
#apt-get install uml-utilities
安装uml-utilities,User Mode Linux 是Linux内核的一种移植,这个包能够提供一些虚拟化的工具,而这里我们将用到网卡的虚拟化工具tunctl:
#apt-get install bridge-utils
这个就更不用说了,想要实现网桥,那么就需要安装网桥的工具了,brctl就是这个包来提供的哦~
然后把所有需要使用tap0虚拟网卡的同志加入uml-net组里使其具有访问/dev/net/tun的权限
#gpasswd -a <user> uml-net
Note: 把<user>换成你用虚拟机的所有用户,不要照抄哦~
(你可以看到ls -l /dev/net/tun)
crw-rw—- 1 root uml-net 10, 200 2008-08-05 16:11 /dev/net/tun
否则会:"
warning: could not open /dev/net/tun: no virtual network emulation
Could not initialize device ‘tap’
"
修改了以后可能需要重新登录才能生效,如果不想那样,那就
#chmod 666 /dev/net/tun
就可以了,不过感觉不那么好..
很多人就奇怪怎么不能初始化呢,问题就在权限上了~
初始化tap0网卡给用户:
#tunctl -u <User> -t tap0
-u 用户名
-t设备名,谁说一定要是tap0来着?你用love007当网卡我也没意见阿~,但默认的是tap0,这也是网上教程泛滥的原因吧
确认一下:
#/sbin/ifconfig tap0
tap0 Link encap:Ethernet HWaddr AA:2D:FF:82:4A:3F
inet6 addr: fe80::a82d:ffff:fe82:4a3f/64 Scope:Link
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:65 errors:0 dropped:0 overruns:0 frame:0
TX packets:83 errors:0 dropped:317 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:6588 (6.4 KiB) TX bytes:9300 (9.0 KiB)
OK!好了~
用完了还可以删除它哦,很多教程没有说这个,呵呵
# tunctl -d tap0
Set ‘tap0′ nonpersistent
这样就把虚拟网卡给删除了~
#ifconfig tap0
tap0: error fetching interface information: Device not found
很简单吧?
然后就是修改Debian的网络配置文件 /etc/network/interface
首先说明一下我机器的情况:我这里是主机使用的网桥是br0,,机器上有2块网卡,分别是eth1,eth2(没有eth0,升级以后就被修改了…)其中eth2是连接internet的,eth1有时带笔记本过来插上就用,很方便,而tap0留给qemu或者其他虚拟机都可以
#vi /etc/network/interface
auto lo
iface lo inet loopback
auto br0
iface br0 inet static
address 192.168.1.103
netmask 255.255.255.0
gateway 192.168.1.1
network 192.168.1.0
broadcast 192.168.1.255
bridge_ports eth1 eth2 tap0
bridge_maxwait 4
bridge_fd 9
bridge_maxage 12
bridge_stp off
如果想要这样配置还需要一个前提 就是安装了ifupdown(好像一般都安装了…你可用确认一下$dpkg -l ifupdown )但我还是提一下,否则需要在rc.local里面写命令(用ifconfig和brctl),但其实原理是一样的
Note:
br0的配置就是把它当一个普通的网卡,参数配好,然后从外面看你的主机的时候会看到的是br0也就是大网桥的地址,机器上所有的服务所使用的IP也是这个IP,当然你有其他配置就另说了,我是指的默认配置的话,从外面来看br0就像你这个机器的实际网卡一样
bridge_ports 这个就是需要加入网桥的网卡了,这里根据我的情况是eth1(笔记本连入时需要的网卡),eth2(主internet网卡),tap0(虚拟机网卡),如果你有多个虚拟机或多个网卡,都写这吧~一开机就初始化了,呵呵~方便
bridge_maxwait
这个是启动网桥时最大等待时间,有时如果应用程序需要绑定特定网卡时就需要等待网桥完全启动以后,否则可能会出现绑定错误哦
bridge_fd
设置网桥的转发延迟,默认是15,可以修改的小一点,其他的不设置也应该没什么问题
然后保存
qemu启动网络的时候总回去运行/etc/qemu-ifup
但我们现在已经在主机上把网络环境构建好了,所以不运行它也没问题,所以我们
#cp qemu-ifup qemu-ifup.bak
备份一下,以防万一
#vi qemu-ifup
写入以下内容,主要是不想让以前的东西起作用
#!/bin/sh
echo "Executing /etc/qemu-ifup…"
然后
$mkdir -p $HOME/bin
$vi $HOME/bin/qemu-start
加入:
#!/bin/sh
ARGS="-hda /home/yexing/nfs/debian_bak.img -boot c -net nic,vlan=0 -net tap,vlan=0,ifname=tap0 -m 256 -localtime"
echo "Starting QEMU with…"
echo $ARGS
echo "…."
exec qemu $ARGS
这样就不用记那么多难记的命令了,
然后
$qemu-start &
就可以运行拉~:)
Note:
-boot :表示从硬盘启动
-net nic:表示使用网卡,如果不加的话,会建立一个单独的网卡
-net tap 表示使用主机tap 网络,也就是我们前面建立的虚拟网络拉~
里面的vlan不用加也是可以的,ifname是tap网络的网卡名字,最好写上告诉系统的tap0网卡
-m 表示使用多少M的内存
更多的选项我也不是很明白
man qemu
看一下好了
为了每次启动的时候都能自动加载,讲以下2行加入到/etc/rc.local里:
#vi /etc/rc.local
/usr/sbin/tunctl -t tap0 -u <User>
/sbin/ifconfig tap0 up
/usr/sbin/brctl addif br0 tap0
<User>是用qemu虚拟机的用户名
前一句是建立tap0这个虚拟网卡,后一句是讲其加入到br0这个网桥里去
OK!大功告成!
对了还要把$HOME/bin 加入到你的$PATH里去,别忘了!
有问题,联系yexingok { at } gmail.com

Linode-很不错的VPS