[问题]vbox中,两台虚拟机如何联成局域网(已解决)

Kvm、VMware、Virtualbox、Xen、Qemu 等
回复
xxmw
帖子: 50
注册时间: 2008-07-19 12:44

[问题]vbox中,两台虚拟机如何联成局域网(已解决)

#1

帖子 xxmw » 2008-07-28 2:39

主机ubuntu8.04,通过有线宽带路由上网,VBox1.5.6,
首先根据前人的介绍,安装两个软件包uml-utilities和bridge-utils,用apt-get还是新立得自己选吧。
根据前人提供的脚本文件,内容如下:

代码: 全选

#!/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 lv # 不能用 `id -u`,因为使用sudo 执行时id为0,
   tunctl -t tap1 -u lv
   tunctl -t tap2 -u lv
   tunctl -t tap3 -u lv
   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 
将这段代码复制,粘贴到文本文件,找个地方保存为vnet.sh,修改文件的权限,增加执行权限(见图)。
在保存vnet.sh文件的目录下,根据需要执行下面的命令
启动虚拟网卡
sudo ./vnet.sh start
停止虚拟网卡
sudo ./vnet.sh stop
重启虚拟网卡
sudo ./vnet.sh restart

在VBox中设置,虚拟机1(win2000)网卡设成Host interface,主机界面tap0,见图。虚拟机2(winxp)网卡设成Host interface,主机界面tap1,见图。
启动虚拟机1和虚拟机2,在虚拟机里分别设置其网卡获取IP方式为DHCP,设置工作为WORKGROUP,可以查看虚拟机获取的IP地址,见图。在虚拟机的网上邻居中就可以找到相邻的计算机,见图。设置共享资源,即可。
附件
vnet.sh属性修改
vnet.sh属性修改
Screenshot-win2000设置.png
Screenshot-winxp设置.png
Screenshot-win2000 [运行中] - VirtualBox OSE.png
Screenshot-winxp [运行中] - VirtualBox OSE.png
Screenshot-winxp [运行中] - VirtualBox OSE-1.png
上次由 xxmw 在 2008-07-28 5:09,总共编辑 1 次。
xxmw
帖子: 50
注册时间: 2008-07-19 12:44

#2

帖子 xxmw » 2008-07-28 2:40

主机是ubuntu8.04
头像
qlhn
帖子: 736
注册时间: 2006-08-25 10:37
联系:

#3

帖子 qlhn » 2008-07-29 14:08

我也刚刚安了两台虚拟机,正愁连不上局域网

楼主的帖子可谓及时。
xxmw
帖子: 50
注册时间: 2008-07-19 12:44

#4

帖子 xxmw » 2008-07-30 4:50

我的路由限制分配的地址数是两个,无奈。
只好将4台虚拟机的网卡设为intrnal network 网络名称自定,构成局域网,第一台虚拟机(debian)添加设置第二块网卡为NAT,启动虚拟机设置IP地址192.168.160.1~192.168.16.254,掩码255.255.255.0,debian虚拟机的NAT网卡设为DHCP。debian虚拟机安装软件包squid3,设置代理服务器,其他虚拟机在浏览器中指定代理服务器192.168.16.1:8080,都可以正常上网了。
squid配置文件/etc/squid3/squid.conf

代码: 全选

#代理服务器监听的内网网卡IP地址和端口
http_port 192.168.16.1:8080
#缓存的大小,内存的1/3~1/2大小
cache_mem 64 MB
cache_dir ufs /var/spool/squid3 4096 16 256
cache_effective_user proxy #squid默认的用户
cache_effective_group proxy #squid默认的组
dns_nameservers 10.0.2.3	#域名解释服务器,连接NAT的那块网卡自动获得的
#日志
cache_access_log /var/log/squid3/access.log
cache_log /var/log/squid3/cache.log
cache_store_log /var/log/squid3/store.log
#代理服务器主机名
visible_hostname 192.168.16.1
#代理服务器管理员邮箱
cache_mgr pingyuanv@126.com
#允许所有IP地址的客户机连接
acl all src 0.0.0.0/0.0.0.0
http_access allow all
建立缓存目录
sudo /usr/sbin/squid3 -z
启动squid
sudo /etc/init.d/squid3 start
停止squid
sudo /etc/init.d/squid3 stop
重启squid
sudo /etc/init.d/squid3 restart
重新加载配置文件
sudo /etc/init.d/squid3 reload
xxmw
帖子: 50
注册时间: 2008-07-19 12:44

#5

帖子 xxmw » 2008-07-31 3:48

squid在客户端设置代理,太麻烦,干脆用虚拟机(debian)弄个软路由。
debian虚拟机的设置
网卡0 intrnal network 网络名自定
网卡1 NAT
启动debian,设置
eth0
192.168.16.1
255.255.255.0
eth1
dhcp

安装IP伪装工具包
#apt-get install ipmasq
重启
查看eth1的DNS信息,我的是10.0.2.3

其他虚拟机设置
网卡0 intrnal network 网络名同上
启动虚拟机,设置
eth0
IP:192.168.16.XXX XXX你随便给个数2~254
掩码:255.255.255.0
网关:192.168.16.1
DNS:10.0.2.3
激活
OK
头像
sevk
帖子: 2060
注册时间: 2007-05-08 16:26
系统: arch
来自: 火星内核某分子内某原子核内
联系:

#6

帖子 sevk » 2008-07-31 9:21

VBOX虚拟机和主机->局域网的简单方法
viewtopic.php?t=102270&highlight=&sid=8 ... 4f25c24449
笔记本 :
F208S : gentoo
A460P i3G D6 : UBUNTU + WIN7
UN43D1 : UBUNTU + WIN7
1000人超级QQ群 LINUX + WIN : 31465544 或 18210387
回复