从22号中午开始琢磨zebra/quagga的用法,一直到晚上11点多都没有什么头绪。各种Google,百度,几近崩溃。由于网上关于zebra/quagga的配置方法都是在真实的若干台电脑上实现的,一直都没有找到完全在虚拟机上进行测试的教程,相当失望。所以,我就决定,如果我要是能够利用多台虚拟机完成实验的内容,我一定要写一个详细的文档放到博客上。
没有办法,索性自己慢慢摸索吧,但花了一天的时间也没有成功。直到快睡觉的时候才突然想到,会不会跟我在Virtual Box上设置采用NAT方式联网有关系呢?所以后来改成了桥接的方式,经过23号一天的测试,总算有了些许成效。到了24号,已经基本熟悉了路由器搭建的方法。虽然花了很长的时间,也走了N多的弯路,但还是学到了不少东西。前几天一直在看《计算机网络》,可实际是光看书并没有让我理解多少知识点。但是经过学习了Linux的路由器搭建后,本质上也加深了我对《计算机网络》的理解。
一直都在尝试着完善这篇文档,感觉写出一篇不错的文档还要加上排版的话很花费时间。但是,毕竟可以学到很多东西。
好了,说一下下面将要做的几个实验。本来只想做一下和zebra/quagga有关的路由器搭建实验的,但是又想到,既然接触了这个东西,为何不多学一种方法呢?所以,下面的静态路由的路由器搭建就是采用最基本的系统工具或者直接修改配置文件来实现的。而跟zebra/quagga有关的实验则放在动态路由的路由器器搭建的实验中,演示了使用两种路由协议,即Ripv2和OSPF协议,搭建路由器的方法。
预习知识在进行路由器的搭建之前,需要了解一些基本的知识。下面将会一一道来。
1、什么是路由表,路由表产生的类型有哪些?答:路由表,指的是路由器或者其他互联网网络设备上存储的表,该表中存有到达特定网络终端的路径,在某些情况下,还有一些与这些路径相关的度量。
在Linux系统下的路由表是从有小网络排列到大网络的。我们可以使用route -n 查看主机上的路由表。参见下面的截图:路由器(Router)又称网关设备(Gateway)是用于连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络或者一个子网。当数据从一个子网传输到另一个子网时,可通过路由器的路由功能来完成。因此,路由器具有判断网络地址和选择IP路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网,路由器只接受源站或其他路由器的信息,属网络层的一种互联设备。
在Linux系统中,路由表和转发数据包的功能都是Linux内核所提供。在我们的Ubuntu14.04系统中,默认情况下是没有开启数据包转发功能的。需要开启的方法主要有两种:
第一种方法是:echo 1 > /proc/sys/net/ipv4/ip_forward,但是这样的修改在系统重启后失效了。
第二种方法是:编辑/etc/sysctl.conf文件,找到net.ipv4.ip_forward=1这一行,然后将前面的#号去除即可。这样就可以一劳永逸了。具体的方法参见下面的截图:
3、什么是网卡?在Linux系统下,网卡信息如何查看?
答:网卡是工作在链路层的网络组建,是教育网中连接计算机和传输介质的接口,不仅能实现与局域网传输介质之间的物理连接和电信号匹配,还涉及到帧的发送和接收、帧的封装与拆封、介质访问控制、数据的编码与解码以及数据缓存的功能等。
那么,我们在Linux系统如何查看网卡信息呢?很简单使用ifconfig命令即可。eth表示的是以太网卡,参见下面的截图。可以看到,我的电脑上一块以太网卡eth0,可以看到它的硬件地址、ip地址等各种信息。
4、什么是IP地址,网段,网关,子网掩码?在Linux系统下,我们应该如何查看和修改这些参数呢?
答:IP地址:IP地址(英语:Internet Protocol Address)是一种在Internet上的给主机编址的方式,也称为网际协议地址。常见的IP地址,分为IPv4与IPv6两大类。IP地址编址方案将IP地址空间划分为A、B、C、D、E五类,其中A、B、C是基本类,D、E类作为多播和保留使用。
网段:网段一般指一个计算机网络中使用同一物理层设备(传输介质,中继器,集线器等)直接通讯的那一部分。即IP地址范围从一个到另外一个,如,192.168.1.1到192.168.1.254。网关:网关(Gateway)又称网间连接器、协议转换器。默认网关在网络层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和路由器类似,不同的是互连层。网关既可以用于广域网互连,也可以用于局域网互连。当今很多局域网采用都是路由来接入网络的,因此通常指的网关就是路由器的IP。
子网掩码:子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
在Linux下面,我们可以通过ifconfig命令来查看网卡的IP地址,子网掩码等信息。参见问题3的截图。可以通过route -n命令或者netstat -r命令等来查看网关信息,参加问题1的截图。
通常有两种方法来修改诸如IP地址,子网掩码之类的信息。一种方式是通过命令行的方式,即使用命令ifconfig, ip route add等命令(详细使用这些命令的方法可以通过man或者help命令来查看)来进行修改,但是通过命令行的方式来修改并不是一劳永逸的,它们会在系统重启后恢复原来的状态。所以,另外一种方法便是直接修改配置文件的方法了。关于配置文件,Ubuntu主要是通过修改/etc/network/interfaces文件来实现。后面的实验会给出修改的方法。
5、什么是RIP协议?RIPV1和RIPV2协议之间有什么关系?
答:在后面的动态路由搭建的实验中,将会使用到这种古老但又简单的路由协议。所以,我们应当提前了解下这个协议的基本知识。RIP协议是一种内部网关协议(IGP),是一种动态路由选择协议,用于自治系统(AS)内的路由信息的传递。RIP协议基于距离矢量算法(DistanceVectorAlgorithms),使用“跳数”(即metric)来衡量到达目标地址的路由距离。这种协议的路由器只关心自己周围的世界,只与自己相邻的路由器交换信息,范围限制在15跳(15度)之内。超过15跳后自然就无法到达了。RIP协议在当前有两个版本,分别是RIPV1协议以及后来更新的RIPV2协议。RIP-1是有类别路由协议(Classful Routing Protocol),它只支持以广播方式发布协议报文。这个协议报文无法携带掩码信息,它只能识别A、B、C类这样的自然网段的路由,因此RIP-1不支持非连续子网(Discontiguous Subnet)。RIP-2是一种无类别路由协议(Classless Routing Protocol)。相对与它的前身,拥有更多的优势,比如支持路由标记,在路由策略中可根据路由标记对路由进行灵活的控制等特点。由于zebra本身是支持RIP协议的两个版本的,所以可以很轻松地搭建出一个路由器。后面的实验中将使用RIPV2这个协议。Quagga貌似默认就是使用RIPV2协议,而zebra应当需要指定一下。6、什么是OSPF协议?有什么优点?答:简要地来说,OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。是对链路状态路由协议的一种实现,隶属内部网关协议(IGP),故运作于自治系统内部。著名的迪克斯加算法被用来计算最短路径树。与RIP相比,OSPF是链路状态协议,而RIP是距离矢量协议。
它有很多优点,比如:1、OSPF是真正的LOOP- FREE(无路由自环)路由协议。源自其算法本身的优点。(链路状态及最短路径树算法)2、OSPF收敛速度快:能够在最短的时间内将路由变化传递到整个自治系统。3、提出区域(area)划分的概念,将自治系统划分为不同区域后,通过区域之间的对路由信息的摘要,大大减少了需传递的路由信息数量。也使得路由信息不会随网络规模的扩大而急剧膨胀。4、将协议自身的开销控制到最小。5、通过严格划分路由的级别(共分四极),提供更可信的路由选择。6、良好的安全性,ospf支持基于接口的明文及md5 验证。7、OSPF适应各种规模的网络,最多可达数千台。7、什么是BGP协议?有什么主要特征?答:BGP协议即边界网关协议,而上面的两种协议——RIP协议和OSPF协议则属于内部网关协议。
边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议。 BGP 是唯一一个用来处理像因特网大小的网络的协议,也是唯一能够妥善处理好不相关路由域间的多路连接的协议。 BGP 构建在 EGP 的经验之上。 BGP 系统的主要功能是和其他的 BGP 系统交换网络可达信息。网络可达信息包括列出的自治系统(AS)的信息。这些信息有效地构造了 AS 互联的拓朴图并由此清除了路由环路,同时在 AS 级别上可实施策略决策。
BGP路由选择协议执行中使用4种分组:打开分组(open)、更新分组(update)、存活分组(keepalive)、通告分组(notification)。
BGP的主要特征有:1、用属性(Attribute)描述路径,而不是用度量值;2、使用TCP(端口179)作为传输协议,继承了TCP的可靠性和面向连接的特性;3、通过Keepalive信息来检验TCP的连接;4、具有丰富的属性特征,方便实现基于策略的路由;5、拥有自己的BGP表;6、支持VLSM和CIDR;7、适合在大型网络中使用。静态路由的路由器搭建方法准备工作1、在虚拟机(我用的是Virtual Box,若干次测试表明,在Ubuntu上使用这个虚拟机软件比较流畅)上安装上一个Linux系统,比如我用的Ubuntu 14.04桌面版。然后配置好系统,安装上zebra/quagga软件。
2、连续复制得到另外三个相同的虚拟。
3、配置这几个系统。考虑到我们实际使用中需要开启四个虚拟机系统,所以肯定会很卡顿。所以,我的做法是,把X-Window给关闭,即让系统开机后直接进入tty1。这样做的好处是,可以明显减少物理内存的占用,即使开启4个也没有卡顿的现象。当然,前提是要熟悉基本的Linux操作。设置方法如下:修改/etc/default/grub文件如下:
保存配置后,在终端中输入sudo update-grub2,重启后即可生效。最终的效果如下:
在开始实验之前,我们先来确定下各个设备的配置信息,然后在下面配置时回到这儿参照配置系统网卡:
Linux Router A | Linux Router B | 工作站 | 客户端 |
1、两张网卡eth0, eth1,通过桥接方式连接。2、Eth0(内网),IP设置为:192.168.1.254/24。3、Eth1(外网),IP可不设定。 | 1、两张网卡eth0, eth1, 通过桥接方式连接。2、Eth0(外), IP设置为:192.168.1.100/243、Eth1(内),IP设置为:192.168.100.254/244、默认网关:192.168.1.254 | 1、一张网卡eth0,通过桥接方式连接。2、Eth0,IP设置为:192.168.1.102/243、默认网关:192.168.1.254 | 1、一张网卡eth0,通过桥接方式连接。2、Eh0, IP设置为192.168.100.12/243、默认网关:192.168.100.254 |
当按照上面的步骤以此配置完成后,此时就可以进行测试了。其实主要就是测试下客户端(在内部网络中)和工作站(Workstation,在外部网络中)之间能否相互ping通,如果可以的的话,说明我们的系统搭建成功了。测试分别如下:
测试1:在客户端中ping工作站的IP地址:又到了最后测试的环节了。还是和前面一样,使用ping的方式进行测试。如果可以ping通,表明测试成功。两个处于不同网段的客户端可以正常通信了。下面给出详细ping测试的截图。
客户端A上的ping测试:1. Ping路由器A上的IP1地址如果上面的步骤都是正确无误,且保证zebra和bgpd这两个daemon都在两个路由器上正常运行的话,就可以进行下面的一些测试了。
路由器A或者B上的信息:1、日志输出:根据输出的日志可以判断两个路由器其实已经能够相互识别了。上面的测试结果表明,我们使用BGP协议搭建的路由器已经可以工作了。位于两个不同网段的客户端A和B之间也可以相互ping通,所以,整个实验也就完成了。
上面的三个实验分别使用了RIP协议、OSPF协议、BGP协议来搭建路由器。演示了使用zebra/quagga搭建路由器的基本方法。可以看到,其实总的来说并不是特别困难,同时,也可以看到zebra/quagga软件却是很强大!
说明:本文档最先发表在我的CSDN博客上。博客搬家到博客园,做了些更新和修改发表。水平有限,难免有错,恳请指正。
参考资料1、《鸟哥的Linux私房菜——基础学习篇》2、《鸟哥的Linux私房菜——服务器架设篇》第8章。3、Ubuntu静态路由修改:http://blog.sina.com.cn/s/blog_67be3b450101de44.html4、Ubuntu网卡IP配置:http://os.51cto.com/art/201104/255292.htm5、linux网关设置实验:http://yahoon.blog.51cto.com/13184/370776、用linux系统做策略路由:http://www.num123.com/post/957、配置linux做网关:http://hi.baidu.com/bigwood88/item/c7735b29faa3ab8cae48f5338、linux路由表设置:http://blog.csdn.net/shiniji_hh1126/article/details/60008109、如何利用linux双网卡连接两个网络:http://dxli75.blog.163.com/blog/static/106768289201182310710304/10关于vmware虚拟机上网设置等:http://www.CUOXin.com/rollenholt/articles/2580822.html11、深入解析使用linux+zebra构建软件路由系统:http://huawei.chinaitlab.com/router/854545.html12、linux路由zebra的配置:http://hi.baidu.com/flyabout/item/ad93a20c1b3f03c32e4c6bc413、在Linux上构建网络路由器:https://www.ibm.com/developerworks/cn/linux/l-emu/14、用zebra打造linux下小型路由器:http://chenguang.blog.51cto.com/350944/269171/15、Quagga简介及Quagga使用基础谈用Quagga配置RIP协议:http://blog.chinaunix.net/uid-20775448-id-3498524.html16、百度百科:关于RIP协议的介绍:http://baike.baidu.com/view/330622.htm?fr=aladdin17、百度百科:关于OSPF协议的介绍:http://baike.baidu.com/view/6234950.htm?from_id=421662&type=syn&fromtitle=OSPF%E5%8D%8F%E8%AE%AE&fr=aladdin18、百度百科:关于什么是网卡的介绍:http://baike.baidu.com/view/4230.htm?fr=aladdin19、百度百科:关于IP、子网掩码等的介绍:http://baike.baidu.com/link?url=TIdI7vjqK_bC_YqzbS7YKR4A4MTsQJ9Y1h2BnLoKJTUkMMwx_KvGBbzInV-ae4B620、百度百科:关于网关的介绍:http://baike.baidu.com/view/807.htm21、百度百科:关于路由器的介绍:http://baike.baidu.com/view/1360.htm?fr=aladdin22、百度百科:关于BGP协议的介绍:http://baike.baidu.com/view/875886.htm?from_id=1989644&type=syn&fromtitle=BGP%E5%8D%8F%E8%AE%AE&fr=aladdin23、用zebra做BGP实验:http://biaoming.CUOxin.com/blog/39588来自为知笔记(Wiz)新闻热点
疑难解答