%# -*- coding: utf-8-unix -*- \section{三层路由器组网} \label{sec:c:router-ob:s:networking} \subsection{实验目的} \label{subsec:c:router-ob:s:networking_object} 本实验的主要目的是让学生将自己开发的路由器进行组网实验, 引入路由协议的配置与学习,实现多网段主机间的相互通信。 熟悉Quagga软件的安装与使用和两种基本路由协议(RIP与OSPF)的配置与使用。 \subsection{实验内容} \label{subsec:c:router-ob:s:networking_content} 使用学生开发的路由器平台,搭建至少跨两跳路由器的复杂路由组网环境, 验证多网段主机的相互连通性。主要完成以下内容: \begin{enumerate} \item \textbf{搭建自研路由器环境:}使用学生自己研发的路由器组建网络, 搭建不少于3台路由器和2台测试主机的网络环境进行验证; \item \textbf{安装并配置路由协议学习环境:}运行Quagga环境, 分配配置RIP路由协议与OSPF路由协议,并将两种协议启动运行; \item \textbf{验证组网功能:}验证不同路由协议下组网运行功能, 验证不同网段内主机的相互通信功能 \item \textbf{观察分析路由器工作流程:}观察各路由节点学习非互联网段的路由转发表, 打印输出各路由节点的FIB表 \item \textbf{观察分析内核FIB的变化:}在网络正常运行状态下, 断开中间某个路由器间的链路,观察断开链路两端路由器的内核FIB表变化情况, 同时验证路由器内FIB表同步情况 \end{enumerate} \subsection{实验原理、方法和手段} \label{subsec:c:router-ob:s:networking_principle} \subsubsection{路由协议及基本工作原理} 路由协议工作在路由器的控制平面,创建了路由表,描述了网络拓扑结构。 通过在路由器之间共享路由信息来相互学习总个网络可达区域内可到达的路由网段信息。 路由信息在相邻路由器之间传递,确保所有路由器知道到其它路由器的路径。 路由协议主要包括:RIP、OSPF、IS-IS和BGP等。 RIP、OSPF、IS-IS是内部网关协议(IGP), 适用于单个ISP的统一路由协议的运行, 一般由一个ISP运营的网络位于一个AS(自治系统)内, 有统一的AS number(自治系统号)。 BGP是自治系统间的路由协议,是一种外部网关协议, 多用于不同ISP之间交换路由信息,以及大型企业、政府等具有较大规模的私有网络。 \subsubsection{路由组网环境} 本实验建议采用学生自研的路由器进行组网测试, 组网测试通过的组可以在中间穿插商用路由器一起验证。 \subsection{实验条件} \label{subsec:c:router-ob:s:networking_requirement} \begin{itemize} \item 可编程网络平台两个,交换测试主机两台, 网络配置与连接拓扑如图\ref{fig:c:router-ob_networking-topo}所示; \item 串口线一根,网线三根; \item 学生自研路由器程序。 \end{itemize} \begin{figure}[!ht] \centering \includegraphics[width=12cm]{networking-topo} \caption{三层路由组网实验拓扑图} \label{fig:c:router-ob_networking-topo} \end{figure} \subsection{实验步骤} \label{subsec:c:router-ob:s:networking_procedure} \begin{enumerate} \item 在每个路由器节点安装quagga软件,配置其正常工作。 路由协议选择RIP和OSPF两种,每次测试只启动一种协议即可; \begin{itemize} \item Quagga安装 \begin{code}[console] root@HNXS-FAST:/home/hnxs# apt-get install quagga 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 建议安装: snmpd 下列【新】软件包将被安装: quagga 升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 1 个软件包未被升级。 有 1 个软件包没有被完全安装或卸载。 需要下载 1,154 kB 的归档。 解压缩后会消耗 4,605 kB 的额外空间。 获取:1 https://mirrors.ustc.edu.cn/ubuntu-ports xenial-updates/main armhf quagga armhf 0.99.24.1-2ubuntu1.4 [1,154 kB] 已下载 1,154 kB,耗时 1秒 (997 kB/s) 正在预设定软件包 ... 正在选中未选择的软件包 quagga。 (正在读取数据库 ... 系统当前共安装有 21814 个文件和目录。) 正准备解包 .../quagga_0.99.24.1-2ubuntu1.4_armhf.deb ... 正在解包 quagga (0.99.24.1-2ubuntu1.4) ... 正在处理用于 libc-bin (2.23-0ubuntu3) 的触发器 ... 正在处理用于 ureadahead (0.100.0-19) 的触发器 ... 正在处理用于 systemd (229-4ubuntu4) 的触发器 ... 正在设置 quagga (0.99.24.1-2ubuntu1.4) ... 正在处理用于 libc-bin (2.23-0ubuntu3) 的触发器 ... 正在处理用于 ureadahead (0.100.0-19) 的触发器 ... 正在处理用于 systemd (229-4ubuntu4) 的触发器 ... \end{code} \item Quagga启动配置 \begin{code}[console] root@HNXS-FAST:/home/hnxs# vim /etc/quagga/daemons zebra=yes bgpd=no ospfd= yes ospf6d=no ripd= yes ripngd=no isisd=no babeld=no \end{code} 将上述文件内容中的3个no修改为yes,表示启动该功能模块。 \item RIP协议启动配置 \begin{code}[console] root@HNXS:/home/hnxs# vim /etc/quagga/ripd.conf \end{code} ripd.conf配置文件示例如下: \begin{code}[text] ! -*- rip -*- ! ! RIPd sample configuration file ! ! $Id: ripd.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $ ! hostname ripd password zebra ! ! debug rip events ! debug rip packet ! router rip ! network 11.0.0.0/8 ! network eth0 ! route 10.0.0.0/8 ! distribute-list private-only in eth0 network obx0 network obx1 network obx2 network obx3 neighbor 192.168.3.1 ! !access-list private-only permit 10.0.0.0/8 !access-list private-only deny any ! !log file /var/log/quagga/ripd.log ! log stdout \end{code} 上述文件是S4-A路由器的rip配置文件,另一台配置文件与上述基本相同, 只是其neighbor的地址是192.168.3.2。 这两台路由器是通过S4-A的一个端口(IP为192.168.3.1, 故其neighbor为192.168.3.2)和S4-B的一个端口(IP为192.168.3.2)连接起来的。 \item OSPF协议启动配置 \begin{code}[console] root@HNXS:/home/hnxs# vim /etc/quagga/ospfd.conf \end{code} ospfd.conf配置文件示例如下: \begin{code}[text] ! -*- ospf -*- ! ! OSPFd sample configuration file ! ! hostname ospfd password zebra !enable password please-set-at-here ! !router ospf ! network 192.168.1.0/24 area 0 ! ospf router-id 192.168.3.1 network 192.168.0.0/24 area 0 network 192.168.1.0/24 area 0 network 192.168.2.0/24 area 0 network 192.168.3.0/24 area 0 log stdout \end{code} 上述为S4-A路由器的配置文件,另一台路由器配置文件为: \begin{code}[text] ! -*- ospf -*- ! ! OSPFd sample configuration file ! ! hostname ospfd password zebra !enable password please-set-at-here ! !router ospf ! network 192.168.1.0/24 area 0 ! ospf router-id 192.168.3.2 network 192.168.4.0/24 area 0 network 192.168.5.0/24 area 0 network 192.168.6.0/24 area 0 network 192.168.3.0/24 area 0 log stdout \end{code} \end{itemize} \item 启动路由协议 \begin{code}[console] root@HNXS:/home/hnxs# systemctl start quagga \end{code} \item 将自研路由器和测试主机组网,路由节点不少于2个,连线可以组成环状; \item 运行自研路由器,并在两个测试主机上分别ping对方主机IP地址; 请参考实验\ref{sec:c:router-ob:s:router}内容。 \item 观察某个节点路由器分组处理流程, 从打印消息上观察控制平面与数据平面的分组处理情况; \item 观察每个节点上内核FIB表内容; \begin{code}[console] root@HNXS-FAST:/mnt/openbox# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 obx0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 obx1 192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 obx2 192.168.3.0 0.0.0.0 255.255.255.0 U 0 0 0 obx3 192.168.4.0 192.168.3.2 255.255.255.0 UG 2 0 0 obx3 192.168.5.0 192.168.3.2 255.255.255.0 UG 2 0 0 obx3 192.168.6.0 192.168.3.2 255.255.255.0 UG 2 0 0 obx3 \end{code} 观察新增加的表项内容,最后三条是非本地路由可直达的网段, 其均需要通过192.168.3.2网送才可达。 \item 观察路由器FIB表的更新情况,判断是否检测到内核FIB变化,是否已经同步更新; \end{enumerate} \subsection{思考题} \label{subsec:c:router-ob:s:networking_rethink} \begin{enumerate} \item 路由协议的邻接信息学习后如何去重?如何收敛? \item 默认网关的作用是什么? \end{enumerate} \subsection{注意事项及有关说明} \label{subsec:c:router-ob:s:networking_notice} \begin{enumerate} \item RIP协议与OSPF协议一定要根据网络连接接口及相应IP地址配置网段信息, 修改文件时注意不要使用中文符号; \item 每次只启动一个协议,以更好验证其效果。 \end{enumerate} \subsection{考核方法} \label{subsec:c:router-ob:s:networking_criterion} 完成本次实验,需要提交一份实验报告和一分程序输出日志。 \begin{enumerate} \item (20分)在规定时间内完成实验,并提交实验成果; \item (30分)实验报告内容详细,有关键步骤截图与分析说明; \item (20分)所有节点正常运行,不同网段的主机可以相互ping通; \item (20分)Quagga安装配置正确,RIP和OSPF配置正确,工作正常; \item (10分)实验报告与源代码内容完整、格式整洁。 \end{enumerate}