环境
os: ubuntu 10.10
qemu: 0.12.5
网卡:双网卡
主要采用tap搭建网桥方式实现的host(ubuntu)和guest(arm linux)之间的通讯
由于单网卡环境下发现host和guest能联网之后,host却无法上网了,所以又增加了一块网卡解决了这个问题。也就是说eth0用来上网,eth1用来和guest搭建网桥。
下面简述一下配置过程
1.安装 uml-utilities和bridge-utils
jim@jim-laptop:~$ sudo apt-get install uml-utilities bridge-utils
2.设置组权限
jim@jim-laptop:~$ sudo gpasswd -a jim uml-net
3.修改网络配置
sudo gedit /etc/network/interfaces
编辑内容如下
auto lo
iface lo inet loopback
# The bridge network interface(s)
auto br0
iface br0 inet static
address 192.168.1.2
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
bridge_ports eth1
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off
4.编辑/etc/qemu-ifup文件
#!/bin/sh
echo "Executing /etc/qemu-ifup"
echo "Bringing up $1 for bridged mode..."
sudo /sbin/ifconfig $1 0.0.0.0 promisc up
echo "Adding $1 to br0..."
sudo /usr/sbin/brctl addif br0 $1
sleep 2
jim@jim-laptop:~$ sudo chmod 776 /etc/qemu-ifup
5.重启电脑
sudo reboot
一定要重启,否则改动是不会生效的。
6.设置host的eth1设置ip地址
将eth1的ip设置为192.168.1.7
jim@jim-laptop:~$ sudo ifconfig eth1 192.168.1.7 jim@jim-laptop:~$
7. guest设置
7.1.启动guest
jim@jim-laptop:~/software/virtual-pc/qemu$ sudo qemu-system-arm -M versatilepb -kernel vmlinuz-2.6.18-6-versatile -hda debian_lenny_arm_small.qcow2 -append "root=/dev/sda1" -m 256M -net nic,vlan=0 -net tap,vlan=0 Executing /etc/qemu-ifup Bringing up tap0 for bridged mode... Adding tap0 to br0...
一定要用root权限来执行,否则打不开设备
7.2.修改guest IP地址
修改guest的/etc/network/interfaces文件,将ip地址设为192.168.1.10
auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.1
7.3.重启guest
8.查看host的网络配置
jim@jim-laptop:~$ ifconfig
....
br0 Link encap:以太网 硬件地址 00:50:04:e6:e9:e8
inet 地址:192.168.1.2 广播:192.168.1.255 掩码:255.255.255.0
inet6 地址: fe80::250:4ff:fee6:e9e8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:42 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:98 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:0
接收字节:2134 (2.1 KB) 发送字节:8883 (8.8 KB)
eth1 Link encap:以太网 硬件地址 02:16:02:2c::09:e9
inet 地址:192.168.1.7 广播:192.168.1.255 掩码:255.255.255.0
inet6 地址: fe80::250:4ff:fee6:e9e8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:0 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:142 错误:0 丢弃:0 过载:0 载波:142
碰撞:0 发送队列长度:1000
接收字节:0 (0.0 B) 发送字节:14206 (14.2 KB)
中断:3 基本地址:0x300
tap0 Link encap:以太网 硬件地址 ea:39:de:d7:b4:b7
inet6 地址: fe80::e839:deff:fed7:b4b7/64 Scope:Link
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 跃点数:1
接收数据包:42 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:39 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:500
接收字节:2722 (2.7 KB) 发送字节:4597 (4.5 KB)
....
注意,br0设备只有在启动了guest之后才能看到,注意br0,tap0和eth1的ip地址。
br0 : 192.168.1.2
tap0 : 没有ip地址
eth1 : 192.168.1.7
要是IP地址不对,说明前面的配置是错的。
9.ping测试
在host上ping guest
jim@jim-laptop:~$ ping 192.168.1.10 PING 192.168.1.10 (192.168.1.10) 56(84) bytes of data. 64 bytes from 192.168.1.10: icmp_req=1 ttl=64 time=16.4 ms 64 bytes from 192.168.1.10: icmp_req=2 ttl=64 time=2.15 ms 64 bytes from 192.168.1.10: icmp_req=3 ttl=64 time=1.98 ms
现在host和guest应该可以互相ping通了。
如果ping不通,就用ifconfig br0看看有没有br0设备
jim@jim-laptop:~$ ifconfig br0
br0 Link encap:以太网 硬件地址 00:50:04:e6:e9:e8
inet 地址:192.168.1.2 广播:192.168.1.255 掩码:255.255.255.0
inet6 地址: fe80::250:4ff:fee6:e9e8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:0 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:77 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:0
接收字节:0 (0.0 B) 发送字节:7873 (7.8 KB)
要是没有br0设备就开启br0
jim@jim-laptop:~$ sudo ifconfig br0 up jim@jim-laptop:~$
这样网路就通了。
10.特别说明
还没完,这样配置完之后,guest是没法上网的,如何既能上网又能使用网桥我还没有特别好的办法,目前是通过两个启动脚本切换来做到的,虽然麻烦但能用。
10.1不上网的启动脚本 br.sh(使用网桥)
jim@jim-laptop:~/software/virtual-pc/qemu$ cat br.sh #!/bin/bash qemu-system-arm -M versatilepb -kernel vmlinuz-2.6.18-6-versatile -hda debian_lenny_arm_small.qcow2 -append "root=/dev/sda1" -m 256M jim@jim-laptop:~/software/virtual-pc/qemu$
注意:执行的时候要执行
jim@jim-laptop:~/software/virtual-pc/qemu$ sudo ./br.sh
guest启动以后没有ip地址,如果需要把ip地址设置成192.168.1.10,就执行下面的脚本
debian-armel:~# ifconfig eth0 192.168.1.10 debian-armel:~#
10.2.上网的启动脚本 nat.sh(使用NAT)
jim@jim-laptop:~/software/virtual-pc/qemu$ cat nat.sh #!/bin/bash qemu-system-arm -M versatilepb -kernel vmlinuz-2.6.18-6-versatile -hda debian_lenny_arm_small.qcow2 -append "root=/dev/sda1" -m 256M -net nic,vlan=0 -net tap,vlan=0 jim@jim-laptop:~/software/virtual-pc/qemu$
