这里先使用直接拔掉校园网的方法来完成这个实验,在最后再详细解释一下如何在插入校园网的情况下依然可以成功使用局域网。

# 基本实验步骤

首先我们需要按照实验的拓扑图连线,然后分别修改 员工 和 服务器 上的 IP地址。

打开 windows-网络设置 会发现,我们实验室的电脑上有 2 个网络,1个标注为校园网(ip地址为172.x.x.x);另一个标注为实验网,其对应的物理接口如下:

显然我们这个实验是要通过实验网来完成的,所以分别把线接入到下面的接口,同时把设置里面的实验网ip地址、掩码、网关修改为实验要求的地址

然后在中间的路由器上配置好网关:

// 进入RCMS路由器管理
Router#configure terminal
Router(config)#interface gigabitethernet 0/0
Router(config-i)#ip address 192.168.10.1 255.255.255.0
Router(config-if)#exit
Router(config)#interface gigabitethernet 0/1
Router(config-if)#ip address 10.1.1.1 255.255.255.0
Router(config-if)#exit

这一步结束之后,理论上,我们的员工和服务器可以互相 ping 通了

从员工发给路由器的包,路由器可以根据 该包的目的ip地址 和 掩码(刚在RCMS设置的) 确定出网络段,然后路由器就可以知道他应该发往哪个网关所对应的接口(出口),也就可以顺利地发给服务器。反过来也是一样的。

但是实际实验大家会发现,很大概率是 ping 不通的。

这是因为,同时插入校园网和局域网网线的时候,主机上有 2 个网络接口是激活的,然后当 client 尝试去 ping server 的时候,操作系统很有可能错误地把原本应该发往 实验网接口 的包发错给了 校园网接口。

所以呢,如果我们直接拔掉校园网,这个问题就解决了。拔掉校园网之后就只剩下 实验网接口 是激活的,所有从这个机器发出的包都会直接流向这个接口,client 和 server 的交流毫无阻碍。

所以现在,在服务器上部署完 3w serverftp server 这两个应用之后,员工的电脑就都可以正常的访问,这 2 个的部署过程不再赘述。

最后一步,再次进入RCMS,进行ACL配置:

// 定义 类型为 time-range 命名为 work-time 的变量
Router(config)#time-range work-time
// 为 work-time 变量赋值
Router(config-time-range)#periodic weekdays 09:00 to 18:00
Router(config-time-range)#exit

使用刚定义的变量设置 ACL 规则:

Router(confia)#ip access-list extended accessctrl
// !只允许员工的主机在上班时间访问FTP服务器
Router(config-ext-nacl)#permit tcp 192.168.10.0 0.0.0.255 host 10.1.1.10 eq ftp time-range work-time
Router(config-ext-nacl)#permit tcp 192.168.10.0 0.0.0.255 host 10.1.1.10 eq ftp-data time-range work-time
// !不允许员工的主机在上班时间访问www服务器
Router(config-ext-nacl)# deny tcp 192.168.10.0 0.0.0.255 host 10.1.1.10 eq www time-range work-time
// !允许员工的主机在非上班时间访问www服务器
Router(config-ext-nacl)#permit tcp 192.168.10.0 0.0.0.255 host 10.1.1.10 eq www
Router(config-ext-nacl)#exit

(补充一句,我们上面设置的规则只限制了 tcp-wwwtcp-ftp,而 ping 使用的协议不是这 2 个,所以不被过滤(此处有端联想 wireShark 的过滤设置))

把 ACL 规则应用到 G 0/0 接口的流入方向·:

outer(config)#interface gigabitethernet 0/0
Router(config-if)#ipaccess-group accessctrl in
Router(config-if)#end

然后验证结果。实验就完成了。需要修改时间时,可以先通过查看路由器的时间,然后把 work-time 变量的值设置为另一种情况就可以了。

# 保留校园网的情况

可能会有的同学很想要一边做实验一边逛b站,直接拔掉校园网就显得不那么优雅。

接下来的内容涉及到静态路由配置,已经超出本实验,作为探索内容。

现在我们以访问 www 服务器为例,重新捋一遍这个过程:

在没有拔掉互联网的情况下,当浏览器想要访问 10.1.1.10 的时候,他会通过 system call 生成如下的包:

应用层写明了 http GET() 方法,即向服务器请求资源。

接着应用层的内容放入传输层(此处是tcp)的包的正文部分,tcp头部的目的端口设置为80(http协议默认端口),源端口是任意的。

接着以上的内容作为网络层(ip)的正文,ip头部的目的ip地址设置为 10.1.1.10,源ip地址为本机地址。

最后再把以上内容作为链路层 datagram 的正文,头部设置好源和目的 MAC 地址。

构造完这个包之后,就可以发出去了。

可是操作系统拿着手里的包,站在分岔路口发愁:

他不知道自己应该把包塞进上面的接口,还是塞进下面的接口。

因为本地的路由表没有告诉他,拿到发往 10.1.1.10 的包时,应该放进哪一个接口。

没错,其实不仅路由器有路由表,我们的主机也是有路由表的。

只是平时我们的电脑只会连接 1 个网络,所以不管三七二十一直接把网络包塞进那个接口准没错,所以一般也用不上这个路由表。但是现在我们出现了分岔路,本地路由表配置就有必要了。

在 powershell 中通过 route print 命令可以查看本地路由表:

具体修改原理就是添加一个路由规则:对于员工电脑来说,当出现目的ip地址为 10.1.1.10 的包时,把该包放入网关为 192.168.10.1 对应的接口就可以,示例:

route add 10.1.1.10 mask 255.255.255.0 192.168.10.1 metric 1
# metric 可以理解为路由策略优先级,数字越小优先级越高

设置之后,员工访问服务器时,就可以成功把包通过实验网接口发出去了:

但是!如果这个时候尝试在员工电脑 ping 10.1.1.10,依然会发现请求超时!

正确的写法是:

ping 10.1.1.10 -S 192.168.10.10

即在 ping 的时候指定好发送源ip地址,这个命令是可以在当前情况下 100% ping 通服务器的。

为什么需要显示指定才可以呢,因为操作系统只知道发往 10.1.1.10 的包发往哪个接口,也就是能发到局域网,但是当响应包从服务器返回的时候,这个包却发不回来。

这是因为 ping 在没有指定好 -S 参数的时候,默认使用了 校园网的ip地址(172.x.x.x) 来构造包。当这个包发到服务器的时候,服务器将该包的 源ip地址 拷贝出来,作为响应包的 目的ip地址,发回去。

然后这个包到达中间路由器的时候,路由器看见他的目的地址是 172.x.x.x,看了看自己的路由表,完全不知道该发给谁!(我们一开始只配置了那2个接口的网关和掩码),所以就把他丢掉了:

所以现在我们的问题就变成了,包发是发出去了,但是寄出地址填错了,导致服务器响应的时候包裹寄不回来。

在 ping 的时候我们可以指定源地址,但是在浏览器访问 www 服务器的时候,源ip地址是浏览器自己填的,我们一般干涉不了。所以会发现,能通过带 -S 参数的 ping 连通了,但是 www 服务器资源无法获取!

后续解决方法还没解决)