当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 2 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [问题]ubuntu8.04下vbox虚拟机联网问题,高手请进。[已解决]
帖子发表于 : 2008-08-03 15:36 
头像

注册: 2006-08-25 10:37
帖子: 736
送出感谢: 0 次
接收感谢: 0 次
ubuntu8.04上装了两台虚拟机:win2k,winxp. 用的是vbox
想设置成host interface模式,静态IP,让三台host可以互联。
以下是设置:

win2k:tap0 IP:192.168.1.4
winxp:tap1 IP:192.168.1.6
u8.04:接口和IP如何设置还不知道,请诸位指教

看了vbox的手册,想用动态方式联网,
即不开虚拟机的时候还是正常的 pon dsl-provider 上网,打开虚拟机就成为局域网方式,
关闭虚拟机还可以 pon 上网. (省去了静态方式的重新启动)

为此,建立了 vnet.sh 脚本文件,内容如下:

***************************************************************************

#!/bin/sh
# vim:set ft=sh:

## 2007-09 windwiny vboxbridgedrun.sh
## 使用前自行修改 id,ip,gw,eth?,br?,tap? 等相关参数,

# VirtualBox Bridging VirtualBox 实现桥接模式
## 参考 http://www.oceanboo.cn/read.php?55

# Ubuntu 里安装软件包
## sudo apt-get install uml-utilities bridge-utils
## ---------------------------------------------------------------------

#function
usage()
{
echo -e "$RED Usage:
$GREEN sudo `basename "$0"` {start|stop} $WHITE\n"
}

if [ `id -u` -ne 0 ]; then
echo " must root can run this "
usage
exit 1
fi


. /lib/lsb/init-functions
[ -e /etc/lsb-base-logging.sh ] && . /etc/lsb-base-logging.sh || true

if [ -f ~/MYIP ] ; then
source ~/MYIP
else
IP=192.168.1.243 && NETMASK=255.255.255.0 && GW=192.168.1.1
fi

#function
start() {
# echo -e "$GREEN `basename "$0"` START $WHITE"
# log_begin_msg "$GREEN `basename "$0"` START $WHITE"
log_begin_msg "`basename "$0"` START"
log_end_msg 0

# Create a tap device with permission for the user running vbox
# 建立一个使用者(user)有权限的设备tap?,-u 参数为自己用户名 或 id。这里的4个lv是我启动VBox的用户名,你应改成你自己的用户名。这里一气整了4个虚拟网卡tap0~tap3,你可以同时运行4台虚拟机。
tunctl -t tap0 -u zz # 不能用 `id -u`,因为使用sudo 执行时id为0,
tunctl -t tap1 -u zz
#tunctl -t tap2 -u zz
#tunctl -t tap3 -u zz
chmod 0666 /dev/net/tun

# Bring up eth? and tap? in promiscuous mode
# 将eth?和tap?网卡界面设为混杂模式(Promiscuous)
ifconfig eth0 0.0.0.0 promisc
ifconfig tap0 0.0.0.0 promisc
ifconfig tap1 0.0.0.0 promisc
#ifconfig tap2 0.0.0.0 promisc
#ifconfig tap3 0.0.0.0 promisc

# Create a new bridge and add the interfaces to the bridge.
# 建立新的桥接界面(bridge),並把 eth?, tap? 加入bridge
brctl addbr br0
brctl addif br0 eth0
brctl addif br0 tap0
brctl addif br0 tap1
#brctl addif br0 tap2
#brctl addif br0 tap3

# 下面是两种获取IP的方式,可以自由选择,把不需要的注释掉就好了。
# 将bridge设成静态IP。IP、子网掩码、网关,这些在第34行设置。
ifconfig br0 $IP netmask $NETMASK up
route add default gw $GW
# 将bridge设成动态DHCP分配IP。我的宽带路由能自己分地址,所以我选择DHCP
#dhclient br0
}


#function
stop() {
# echo -e "$GREEN `basename "$0"` STOP $WHITE"
# log_begin_msg "$GREEN `basename "$0"` STOP $WHITE"
log_begin_msg "`basename "$0"` STOP"
log_end_msg 0

## 刪除 tap?
tunctl -d tap0
tunctl -d tap1
#tunctl -d tap2
#tunctl -d tap3
##
## 停止 br?
ifconfig br0 down
## 将 tap?, eth? 移出bridge
brctl delif br0 eth0
brctl delif br0 tap0
brctl delif br0 tap1
#brctl delif br0 tap2
#brctl delif br0 tap3
## 刪除 br?
brctl delbr br0
##

## 自定义恢复IP地址,默认网关
ifconfig eth0 $IP netmask $NETMASK up
route add default gw $GW
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
usage
exit 1
;;
esac

exit 0

********************************************************************

想用虚拟机的时候,先在终端键入如下内容:
$sudo ./vnet.sh start

然后打开虚拟机win2k,winxp,这一步都很顺利.下面问题来了:
在win2k里 ping 不通 winxp,同样winxp也 ping 不通 win2k (这是最要命的)
但都可以ping通网关192.168.1.1, 也可以ping通 br0 (192.168.1.243)
ubuntu8.04 的局域网IP如何设置还不清楚,望诸位指出.

下面是 ifconfig 命令的内容:
~$ ifconfig
br0 Link encap:以太网 硬件地址 00:c0:9f:2f:68:c7
inet 地址:192.168.1.243 广播:192.168.1.255 掩码:255.255.255.0
inet6 地址: fe80::2c0:9fff:fe2f:68c7/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:169 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:34 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:0
接收字节:17101 (16.7 KB) 发送字节:4670 (4.5 KB)

eth0 Link encap:以太网 硬件地址 00:c0:9f:2f:68:c7
inet6 地址: fe80::2c0:9fff:fe2f:68c7/64 Scope:Link
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 跃点数:1
接收数据包:1660 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:2066 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:1000
接收字节:1034467 (1010.2 KB) 发送字节:344027 (335.9 KB)
中断:11 基本地址:0x2100

eth0:avahi Link encap:以太网 硬件地址 00:c0:9f:2f:68:c7
inet 地址:169.254.8.15 广播:169.254.255.255 掩码:255.255.0.0
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 跃点数:1
中断:11 基本地址:0x2100

lo Link encap:本地环回
inet 地址:127.0.0.1 掩码:255.0.0.0
inet6 地址: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 跃点数:1
接收数据包:1670 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:1670 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:0
接收字节:83692 (81.7 KB) 发送字节:83692 (81.7 KB)

tap0 Link encap:以太网 硬件地址 00:ff:54:20:d5:06
inet6 地址: fe80::2ff:54ff:fe20:d506/64 Scope:Link
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 跃点数:1
接收数据包:73 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:102 错误:0 丢弃:6 过载:0 载波:0
碰撞:0 发送队列长度:500
接收字节:10218 (9.9 KB) 发送字节:9741 (9.5 KB)

tap1 Link encap:以太网 硬件地址 00:ff:e7:79:e1:24
inet6 地址: fe80::2ff:e7ff:fe79:e124/64 Scope:Link
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 跃点数:1
接收数据包:339 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:266 错误:0 丢弃:65 过载:0 载波:0
碰撞:0 发送队列长度:500
接收字节:27287 (26.6 KB) 发送字节:20202 (19.7 KB)


************************************************************************

还想问一句,这个:

eth0:avahi Link encap:以太网 硬件地址 00:c0:9f:2f:68:c7
inet 地址:169.254.8.15 广播:169.254.255.255 掩码:255.255.0.0
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 跃点数:1
中断:11 基本地址:0x2100

是什么东西?怎么会有 "169.254.8.15" 这个IP地址?

望达人们多多指教.


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-08-06 14:17 
头像

注册: 2006-08-25 10:37
帖子: 736
送出感谢: 0 次
接收感谢: 0 次
问题解决了!原来都是由于我的疏忽,把win2k的ip 192.168.1.4,打成了192.169.1.4
现在没问题了.
在这两天的摸索中,又学会了设置ubuntu的IP 地址: ifconfig eth0 xx.xx.xx.xx netmask xx.xx.xx.xx up
可以把这一句加到 vnet.sh 中去,下面就是我用的 vnet.sh 文件:
代码:
#!/bin/sh
# vim:set ft=sh:

## 2007-09 windwiny   vboxbridgedrun.sh
## 使用前自行修改  id,ip,gw,eth?,br?,tap?  等相关参数,

# VirtualBox Bridging VirtualBox 实现桥接模式
## 参考 http://www.oceanboo.cn/read.php?55

#  Ubuntu 里安装软件包
## sudo apt-get install uml-utilities bridge-utils
## ---------------------------------------------------------------------

#function
usage()
{
    echo -e  "$RED Usage:
    $GREEN sudo `basename "$0"` {start|stop}  $WHITE\n"
}

if [ `id -u` -ne 0 ]; then
    echo " must root can run this "
    usage
    exit 1
fi


. /lib/lsb/init-functions
[ -e /etc/lsb-base-logging.sh ] && . /etc/lsb-base-logging.sh || true

if [ -f ~/MYIP ] ; then
   source ~/MYIP
else
   IP=192.168.1.243 && NETMASK=255.255.255.0 && GW=192.168.1.1
fi

#function
start() {
#   echo -e "$GREEN  `basename "$0"` START  $WHITE"
#   log_begin_msg "$GREEN  `basename "$0"` START  $WHITE"
   log_begin_msg "`basename "$0"` START"
   log_end_msg 0

   
   # Create a tap device with permission for the user running vbox
   # 建立一个使用者(user)有权限的设备tap?,-u 参数为自己用户名 或 id。这里的4个lv是我启动VBox的用户名,你应改成你自己的用户名。这里一气整了4个虚拟网卡tap0~tap3,你可以同时运行4台虚拟机。
   tunctl -t tap0 -u zz # 不能用 `id -u`,因为使用sudo 执行时id为0,
   tunctl -t tap1 -u zz
   #tunctl -t tap2 -u zz
   #tunctl -t tap3 -u zz
   chmod 0666 /dev/net/tun

   # Bring up eth? and tap? in promiscuous mode
   # 将eth?和tap?网卡界面设为混杂模式(Promiscuous)
   ifconfig eth0 0.0.0.0 promisc
   ifconfig tap0 0.0.0.0 promisc
   ifconfig tap1 0.0.0.0 promisc
   #ifconfig tap2 0.0.0.0 promisc
   #ifconfig tap3 0.0.0.0 promisc

   # Create a new bridge and add the interfaces to the bridge.
   # 建立新的桥接界面(bridge),並把 eth?, tap? 加入bridge
   brctl addbr br0
   brctl addif br0 eth0
   brctl addif br0 tap0
   brctl addif br0 tap1
   #brctl addif br0 tap2
   #brctl addif br0 tap3

   # 下面是两种获取IP的方式,可以自由选择,把不需要的注释掉就好了。
   # 将bridge设成静态IP。IP、子网掩码、网关,这些在第34行设置。
   ifconfig br0 $IP netmask $NETMASK up
   route add default gw $GW
   ifconfig eth0 192.168.1.2 netmask 255.255.255.0 up   
   #route add default gw 192.168.1.1



   # 将bridge设成动态DHCP分配IP。我的宽带路由能自己分地址,所以我选择DHCP
    #dhclient br0
}


#function
stop() {
#   echo -e "$GREEN  `basename "$0"` STOP  $WHITE"
#   log_begin_msg "$GREEN  `basename "$0"` STOP  $WHITE"
   log_begin_msg "`basename "$0"` STOP"
   log_end_msg 0

   ## 刪除 tap?
   tunctl -d tap0
   tunctl -d tap1
   #tunctl -d tap2
   #tunctl -d tap3
   ##
   ## 停止 br?
   ifconfig br0 down
   ## 将 tap?, eth? 移出bridge
   brctl delif br0 eth0
   brctl delif br0 tap0
   brctl delif br0 tap1
   #brctl delif br0 tap2
   #brctl delif br0 tap3
   ## 刪除 br?
   brctl delbr br0
   ##

   ## 自定义恢复IP地址,默认网关
   ifconfig eth0 192.168.1.2 netmask $NETMASK up  #这两句根据你的需要取舍吧。
   route add default gw $GW                       #   
}

case "$1" in
    start)
   start
   ;;
    stop)
   stop
   ;;
    restart)
   stop
   start
   ;;
    *)
   usage
   exit 1
   ;;
esac

exit 0

记住给vnet.sh加上可执行属性.

这个方案我觉得比较适合adsl 上网的用户(一台机器)
平时可以 pon dsl-provider 上网
要用虚拟机的时候,先运行 vnet.sh
$sudo ./vnet.sh start

用完了虚拟机,先把 vbox关闭, 再运行它
$sudo ./vnet.sh stop

之后, 还可以用pon 上网
通过这几天的安装使用,总得来说, 我觉得 vbox还是比较好用的


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 2 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译