系统:
宿主机: 64位amd ubuntu 9.10
虚拟机: 32位windows xp
分区: XP在C盘,ubuntu 在sda6
这儿用的是直接启动C盘的XP,并没有和网上教程里的新建一个文件等,好处是磁盘性能好。
KVM的用法可以参考qemu的用法,如果用桥接又用到tap/tun相关。因为显示问题又用到VNC和rdesktop,因为这几方面都不熟悉。所以在网上狂搜。终于实现虚拟机桥接方式,通过宿主机pppoe拨号上网,并且虚拟机和宿主机遇独立上网拨号,互不影响。
在这儿记下,也算是对这两天的总结:
1 KVM用法
下面这地址是官方英文:
(有用)
下面是IBM网上的文章,有相当强的参考价值:
http://www.ibm.com/developerworks/cn/linux/l-cn-kvm/index.html
下面是在别的LINUX上使用的,但是相当对我有参考作用,特别是其中的命令和手动设置的步骤,省却不少对tap/tun的了解。
http://hi.baidu.com/516139799/blog/item/d7d7ee17661ea1064a90a7b4.html
其他的记在下面,也有用:
http://hi.baidu.com/ericden/blog/item/6751ae99306ca6026e068c8a.html
%E7%BD%91%E7%BB%9C%E6%A1%A5%E6%8E%A5%E6%96%B9%E6%A1%88
看起来很多,但一路走来,发现从理论上有以下几个地方要理解,明白了就会很快上手KVM:
1
对于ADSL pppoe拨号上网的系统来说,宿主机唯一物理网卡eth0的IP地址是没用的。我设定它主要是有时候用路由上网,不用修改interfaces文件了。(有人说设置它的IP对桥接是没有用的,但也没有坏处。没有试验不敢乱说),还有别的用,见下面。
2
在安装完对应包之后,tap设备和桥接口br0等是可以随时创立,修改并删除的。
有几个命令必须熟练掌握,省却重启动的时间来调试虚拟机。如:
# tunctl -t tap0 -u root
# brctl addbr br0
# ifconfig eth0 0.0.0.0 promisc
3
在interfaces文件中设置和手动执行是一样的效果。一开始最好手动,这样了解最透。熟悉了用脚本列为自启动项是一样的项果。
4
网桥起到交换机的作用。我这次的虚拟机和宿主机等于通过一个交换机(网桥)上网,所以这两台主机(从软件方面看是)如果要互相访问不如设在一个网段内。所以宿主机的eth0我设定了和虚拟机一个网段的IP,这样可以ping通。以后共享什么的也方便。
5
最好看看桥接的网拓图,对于实践也很有帮助。我的理解是在KVM参数里传入了tap0这样一个宿主机已经设置好的虚拟网卡,而虚拟机里的网卡IP,netmask,dns之类的东西必须和上网方式一致。说来话长,上面链接里有的这里就不多说了。
6
KVM启动参数里的-net nic 参数里可以指定虚拟网卡的型号。想快的话用virtio,我的系统不指定的话默认是rtl8139的(建议一开始不指定,因为virtio的驱动必须下载后安装,而8139的自认)。
下面CP了一些对我最有用的资料,希望以后可以省些时间安装:
3.1 Guest系统的网卡直接和公司局域网相连
假设 Host系统的 eth0 和公司局域网相连,通过dhcp获取IP地址,并通过局域网接入Internet。在这种网络拓扑下,Guest系统的网卡相当于直接接入公司的局域网,这种接入是通过桥接实现的,我们看看怎么做。
添加虚拟网卡接口,-u 后跟运行KVM的用户名,也就是说,此用户可以使用tap0
# tunctl -t tap0 -u root
添加网桥设备接口
# brctl addbr br0
把物理网卡eth0配置为promisc模式
# ifconfig eth0 0.0.0.0 promisc
把物理网卡eth0加入网桥
# brctl addif br0 eth0
获取网桥设备的IP地址
# dhclient br0
把虚拟网卡加入网桥
# brctl addif br0 tap0
激活虚拟网卡
# ifconfig tap0 up
这是最快捷的虚拟机上网方式,启动虚拟机就跟启动局域网的一台物理机器一样,马上就可以获取IP地址上网。
S:实用小指令
刪除 tap0
tunctl -d tap0
刪除 br0
ifconfig br0 down
brctl delbr br0
将tap0, eth0 移出bridge(br0)
brctl delif br0 tap0
brctl delif br0 eth0
我的interfaces:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
broadcast 192.168.1.255
up ifconfig eth0 0.0.0.0 promisc up
auto tap0
iface tap0 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down
tunctl_user root
auto br0
iface br0 inet static
bridge_ports eth0 tap0
address 192.168.1.3
netmask 255.255.255.0
broadcast 192.168.1.255
#如果换路由器上网的话我的加上下面两行,别的不动。192.168.1.1是路由器IP。
#network 192.168.1.1
#gateway 192.168.1.1
在系统已经根据interfaces创立并设置了tap0和br0之后,我通过以下命令手动执行成功,记下来备用。
有一些先删除已有接口(tap0,br0)的命令没有记下来(上面链接里都有),还有必须先poff下线之后做这些事情。也就是说先清理之后才能进行下面的操作。
root@a-desktop:~# tunctl -t tap0 -u root
root@a-desktop:~# brctl addbr br0
root@a-desktop:~# ifconfig eth0 0.0.0.0 promisc
root@a-desktop:~# brctl addif br0 eth0
root@a-desktop:~# ifconfig br0 192.168.1.3这一步可以用dhclient br0(DHCP)代替,如果可以的话。
root@a-desktop:~# brctl addif br0 tap0
root@a-desktop:~# ifconfig tap0 up
kvm -m 1024 -drive file=/dev/sda,index=0,cache=writeback -localtime -net nic,vlan=0,model=virtio,macaddr=13-54-29-12-76-66 -net tap,vlan=0,ifname=tap0,script=no -soundhw es1370 -vnc 127.0.0.1:0
最后可以用vncviewer 127.0.0.1:0 登录,如果虚拟机(我的是windows xp)开通远程桌面的话还可以用:
rdesktop 192.168.1.4:3389 -u administrator -p ?????? -g 1920x1020 -D -r sound:local
远程登录,显示效果和声音都正常了。
当然随着远程桌面管理员登录又牵扯出更多的问题(windows远程登录)。
我的系统还有些小问题:
每次退出后我必须对某些接口如tap0重新执行:ifconfig tap0 up命令。这可能是由于退出时执行了/etc/qemu-ifdown脚本文件有关。而qemu-ifup启动脚本已经在KVM启动时被禁用了。
以后再说吧,这个启动脚本和退出脚本也很有关,否则会出一些摸不着头脑了问题。
使用有些版本的vncview可能会有些两个鼠标的问题,方法之一是在kvm启动参数中加上 -usbdevice tablet :
kvm -m 1024 -drive file=/dev/sda,index=0,cache=writeback -localtime
-net nic,vlan=0,model=virtio,macaddr=13-54-29-12-76-66 -net
tap,vlan=0,ifname=tap0,script=no -soundhw es1370 -usbdevice tablet -vnc 127.0.0.1:0
阅读(1669) | 评论(0) | 转发(0) |