分类: LINUX
2008-12-14 13:11:54
使用了linux下的虚拟网卡;虚拟网卡Tun/tap驱动是一个开源项目,支持很多的类UNIX平台,OpenVPN和Vtun都是基于它实现隧道包封装。
首先,ubuntu下:
apt-get install uml-utilities--网卡
apt-get install bridge-utils--网桥
virtualBox上网方式有三种
1:nat
这种方式在客户机上不用做设置,直接自动捕获就行了,得到的地址也和外部地址不一样.
我这里是
IP:10.0.2.15
gw:10.0.2.2
可以访问外网,但主客机不能互访。
2:Host Interface
我的方法是:host(ubuntu)创建一虚拟网卡,在virtualbox中的网络部分选择host interface,同时指定该host interface为创建的虚拟网卡;指定为eth0或者不指定的话,会提示failed;
创建一张tap0
#sudo tunctl -t tap0 -u myusername
#sudo ifconfig tap0 up
#sudo ifconfig tap0 192.168.0.1(可以为其他,只要不和host的eth0同一网段)
guest(redhat)启动后,设定eth0与tap0同一网段;
#sudo ifconfig eth0 192.168.0.3
guest和host可以互相通信;
使得guest访问外网,只需将host当成一路由;
对于host,开启转发功能:
#echo 1 > /proc/sys/net/ipv4/ip_forward
对于guest,添加路由表项:
#sudo route add -net 162.*.*.0/* netmask 255.255.255.0 dev eth0
ok
-------------------------------------------
leemars更出了其他四种方案:
-----------------------------------------------------------------------------
方案一:
其实是利用iptables的nat功能来实现主客机通信的
引用自leemars,这个我没试
Host :
#echo 1 > /proc/sys/net/ipv4/ip_forward #打开转发功能
#iptables -t nat -A POSTROUTING -j MASQUERADE #利用iptables完成NAT功能
#chmod 0666 /dev/net/tun #设置访问权限
#tunctl -t tap0 -u leemars #建立一个tap设备, 名字为tap0, 所有者为leemars
#ifconfig tap0 up #激活tap0
#ifconfig tap0 10.10.10.1 netmask 255.255.255.0 #为tap0指定IP和网段, 为10.10.10.1/24.
Guest :
网卡设置如下:
IP : 10.10.10.10
Netmask : 255.255.255.0
Gateway : 10.10.10.1
Guest -> WAN :
由Linux的iptables完成NAT功能, 提供WAN的访问服务.
Guest -> Host :
10.10.10.1是真实的Host. Guest对Host的任何访问都可以通过访问10.10.10.1来完成.
Host -> Guest :
10.10.10.10是真实的Guest. Host对Guest的任何访问都可以通过访问10.10.10.10来完成.
----------------------------------------
方案二 : Transparent Bridge (Layer 2)
生成一个网桥,然后将虚拟网卡和物理网卡用网桥连接起来.
Host :
#chmod 0666 /dev/net/tun #设置访问权限
#tunctl -t tap0 -u leemars #建立一个tap设备, 名字为tap0, 所有者为leemars
#ifconfig eth0 0.0.0.0 promisc #使eth0进入promiscuous模式
#ifconfig tap0 0.0.0.0 promisc #使tap0进入promiscuous模式
#brctl addbr br0 #增加一个网桥
#brctl addif br0 eth0 #将eth0加入网桥
#ifconfig eth0 up #激活eth0
#dhclient br0 #为br0设置IP地址
#brctl addif br0 tap0 #将tap0加入网桥
#ifconfig tap0 up #激活tap0
Guest :
网卡设置为DHCP. 或者在设置为Host的Subnet中的一个IP地址, 如下例:
IP : 192.168.1.201
Netmask : 255.255.255.0
Gateway : 192.168.1.1
可以实现主客机直接互访
-----------------------------------------------------------------------------
方案三 : Transparent IP (Layer 3) proxy ARP bridge (by parprouted)
这个我没试,因为需要parprouted这个软件的
Host :
#echo 1 > /proc/sys/net/ipv4/ip_forward #打开转发功能
#chmod 0666 /dev/net/tun #设置访问权限
#tunctl -t tap0 -u leemars #建立一个tap设备, 名字为tap0, 所有者为leemars
#ip link set tap0 up #激活tap0
#ip addr add 169.1.1.1/32 dev tap0 #为tap0任意指定一个私有地址
#parprouted [-d] ath0 tap0 #启动parprouted监听ath0和tap0. -d参数为Debug模式
Guest :
网卡设置如下:
IP : 192.168.1.201
Netmask : 255.255.255.0
Gateway : 192.168.1.1
Guest -> WAN :
由网关来提供WAN的访问服务.
Guest -> Host :
直接访问Host的IP地址即可.
Host -> Guest :
直接访问Guest的IP地址即可.
--------------------------------------------
方案四 : ARP Proxy(by Linux) + Route
通过路由来进行主客机通信的
Host :
#echo 1 > /proc/sys/net/ipv4/ip_forward #打开转发功能
#chmod 0666 /dev/net/tun #设置访问权限
#tunctl -t tap0 -u leemars #建立一个tap设备, 名字为tap0, 所有者为leemars
#ip link set tap0 up #激活tap0
#route add -host 192.168.1.201 dev tap0 #增加一个路由, 将192.168.1.201定向到tap0
#echo 1 > /proc/sys/net/ipv4/conf/ath0/proxy_arp #打开ath0上的ARP Proxy
#echo 1 > /proc/sys/net/ipv4/conf/tap0/proxy_arp #打开tap0上的ARP Proxy
Guest :
网卡设置如下:
IP : 192.168.1.201
Netmask : 255.255.255.0
Gateway : 192.168.1.1
直接可以互访了
------------------------------------------
3.Internal network
一sun工程所的Solution: