先讲下我实验的网络环境:
台式机,上面有两网卡,一个接外网,另一个接笔记本。台式里的操作系统是XP,里面装了虚拟机(里面是UBUNTU的6.10SERVER)

实现的目标:
让虚拟机里的linux连接到外网(启动后自动拨号上网),同时XP和另一台笔记本都可以直接通过这虚拟机里的LINUX进行共享式的上网。

网上有和多关于主机和虚拟机里操作系统一起上网的举例。一般都是让WIN具有NAT服务,然后让虚拟机里的操作系统一起上网。偶这里反一反,而且感觉让LINUX暴露在外网可以让本来安全系数就很低的WIN系统加上一层屏障。

那么怎么实现呢?

首先,得先做好规划,也就是给机器上的网卡先设置好本地IP。

1
2
3
4
5
连接外网的卡是eth0(XP里的本地连接)
address:192.168.1.2
netmask:255.255.255.0
gateway:192.168.1.1(是虚拟机里连接外网卡的IP地址)
nameserver:这里设置为本地ISP所提供的地址(可通过linux拨号成功后查看/etc/resolv.conf来得知)
1
2
3
内部的卡(XP里的本地连接2)
address:193.168.1.1
netmask:255.255.255.0

虚拟机里的LINUX也有两网卡,都是以网桥的形式和实际的两个物理网卡对应(基本上可以理解为分身)

1
2
3
设置eth0为连接外网的
address:192.168.1.1
netmask:255.255.255.0

设置eth1(和XP的连接2一样)

1
2
3
4
5
笔记本上的卡
address:193.168.1.2
netmask:255.255.255.0
gateway:193.168.1.1(是XP本地连接2的地址)
nameserver:这里设置为本地ISP所提供的地址(可通过linux拨号成功后查看/etc/resolv.conf来得知)

好了,现在可以做下互相的PING,看看有没有都能PING上。

接下来就是要让LINUX具备NAT(地址转发)的功能,原理很简单,就是让所有内部的机器(包括台式的XP)在出外网卡的时候将自己原来的IP地址伪装成由ISP提供的外网IP,并搭配上所指定的DNS服务器地址来进行上网。

这个NAT实现起来其实非常的简单,对于UBUNTU 6。10 SERVER来说就只有两步(前提是PPPOE已经拨通)
1。开启IP转移

echo 1 > /proc/sys/net/ipv4/ip_forward
(原来的值是0,现在改成1就让它开启了)

2。对于内部所有的地址在向外转移的时候都进行伪装(MASQUERADE)

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

好了,现在功能基本上就完成了,当然iptables还可以做包过滤和其他一些功能,从而实现防火墙的效果 ,还可以端口印射。。。而且感觉上网速度比以前快了些,呵呵:)