
一、网络结构
有台运行windows的主机,装双网卡,采用网络共享方式运行锐捷认证软件,当与外网连接的主机。其内网网卡自动被系统设置为192.168.0.1。
有路由器A,其WAN口与192.168.0.1的主机网卡向连。其WAN口地址静态设置为192.168.0.2,网关192.168.0.1,DNS等也按要求设置好。路由A的内网IP设置为192.168.1.1,其他LAN口设置为DHCP方式自动分配IP,形式为192.168.1.2-254。
有台装ubuntu 8.04的PC机,装双网卡,为eth0,eth1。eth0连路由器A的一个LAN口,IP地址静态设置为192.168.1.100,网关192.168.1.1。eth1的网卡静态设置IP地址为192.168.2.1,网关不设置。eth1网卡又与路由B的WAN口相连。此计算机在本例中当个路由器用,当然此机也可以上网的。
路由B的WAN口与eth1相连,IP静态设置为192.168.2.2,网关192.168.2.1。它的内网IP为192.168.3.1,其LAN口设置为DHCP自动分配IP,地址空间为192.168.3.2-254
另台PC机连路由B的其中一个LAN口,IP自动获取为192.168.3.100,网关为192.168.3.1。
至此,介绍完全部的网络结构。
二、ubuntu 计算机上的设置
1.设置eth0,eth1网卡。方法在网上有专门的介绍,就是修改/etc/network/interfaces文件。注意,不用为eth1网卡设网关。
2.在/etc/sysctl.conf文件中,设置net.ipv4.ip_forward=1,默认是被注释掉的。
3.重启电脑,让配置生效。
4.重启后,可以使用ifconfig,看网卡地址是否设置好(没设置好,就要重设置,用sudo /etc/init.d/networking stop、start、restart等命令)。如果设置好了,就要设置route,使用以下指令:
sudo route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.2.2 dev eth1
意思是,让所有发向192.168.3.1-255地址的数据,通过eth1网卡,先发向路由器B的WAN口,剩下的过程由路由器B内部完成最终的转发。
在ubuntu8.04下这样应该就可以了,有些route系统自己设置了。如有异常,用route查看路由信息,要保证有以下几条:
default 由gateway 192.168.1.1 由eth0网卡出
192.168.2.0 由eth1网卡出
192.168.3.0 由gateway 192.168.2.2 由eth1网卡出
具体的可能与此有出入,但应保证有以上几条规则。没有的话,就自己加上去。在ubuntu上的设置就完了,此时ubuntu主机应该可以上网,但通过路由B上网的pc应该都不能上网,还要完成下面的设置。
三、路由器A上的静态路由设置
用ubuntu主机,用192.168.1.1登录路由器A的设置页面。在静态路由表中设置规则(具体的设置有点差别)
让所有发向192.168.3.0段的数据,由网关192.168.1.100转发。
让所有发向192.168.2.0段的数据,由网关192.168.1.100转发。
即把以上网段数据发向UBUNTU机的eth0网卡,ubuntu机当个路由器使用。至此,192.168.3.0网段的计算机应该都能上网了。
我以前一直忽略的第三步设置,导至设置失败。我以前以为数据路由都对原始数据包重新打包后传输的,即在本例子中,如果IP为192.168。3.100的计算机发个通向202.x.x.x的数据包,经过其相连的路由器B后,路由直接在外部加个新的层,变为由192.168.2.2向202.x.x.x发的包,由路由B的wan口发向UBUNTU主机,主机再加个包,变为192.168.1.100发向202.x.x.x的包,由网卡eth0发出,依次类推直到目的主机。收包也应该一样,由202.x.x.x返回的包,一路"拆封",发到路由A后,会变为由202.x.x.x向192.168.1.100的包,可以直接由路由器A发向ubuntu主机,再由ubuntu主机继续拆封,转至192.168.3.100,而不用再设置路由A的静态路由了。但实际上并非如此,但真正的原理,我还没搞清楚,似乎按如下理解,可以解释这一事实:
路由器不会改变源地址和目的地址,只是按照目的地址,向设置的网关转发。
如按以上理解,192.168.3.100发向202.x.x.x的全过程应为:
1.192.168.3.100 先发给路由B,B判断目的地址不在内网中,从WAN口发至192.168.2.1,即ubuntu机的eth1.
2.ubuntu机也按照路由协议,由eth0口发向默认网关192.168.1.1.
3.依次类推,直到目的主机,主机返回数据的目的地址为192.168.3.100。直到路由器A。
4.路由器判断目的地址,如没设置静态路由,按照默认路由发,又由WAN口发向外部。所以192.168.3.100一直不能受到包。因此必须在路由A中设置静态路由,让包正确的往下级网络传。
5.传到ubuntu机上的eth0上,有系统内部设置的路由,把发向192.168.3.0所有的包,由eth1发向网关192.168.2.2,进入路由B,再由路由B转给目的主机。
应该是这样的,哎,真复杂。