本文章摘自linux公社

https://www.linuxidc.com/Linux/2015-07/120224p1.htm

 

写在前面

从22号中午开始琢磨zebra/quagga的用法,一直到晚上11点多都没有什么头绪。各种Google,百度,几近崩溃。由于网上关于zebra/quagga的配置方法都是在真实的若干台电脑上实现的,一直都没有找到完全在虚拟机上进行测试的教程,相当失望。所以,我就决定,如果我要是能够利用多台虚拟机完成实验的内容,我一定要写一个详细的文档放到博客上。

没有办法,索性自己慢慢摸索吧,但花了一天的时间也没有成功。直到快睡觉的时候才突然想到,会不会跟我在Virtual Box上设置采用NAT方式联网有关系呢?所以后来改成了桥接的方式,经过23号一天的测试,总算有了些许成效。到了24号,已经基本熟悉了路由器搭建的方法。虽然花了很长的时间,也走了N多的弯路,但还是学到了不少东西。前几天一直在看《计算机网络》,可实际是光看书并没有让我理解多少知识点。但是经过学习了Linux的路由器搭建后,本质上也加深了我对《计算机网络》的理解。

一直都在尝试着完善这篇文档,感觉写出一篇不错的文档还要加上排版的话很花费时间。但是,毕竟可以学到很多东西。

好了,说一下下面将要做的几个实验。本来只想做一下和zebra/quagga有关的路由器搭建实验的,但是又想到,既然接触了这个东西,为何不多学一种方法呢?所以,下面的静态路由的路由器搭建就是采用最基本的系统工具或者直接修改配置文件来实现的。而跟zebra/quagga有关的实验则放在动态路由的路由器器搭建的实验中,演示了使用两种路由协议,即RIPv2和OSPF协议,搭建路由器的方法。

Quagga上使用验证加固BGP会话安全  http://www.linuxidc.com/Linux/2015-05/118102.htm

预习知识

在进行路由器的搭建之前,需要了解一些基本的知识。下面将会一一道来。

1、什么是路由表,路由表产生的类型有哪些?

答:路由表,指的是路由器或者其他互联网网络设备上存储的表,该表中存有到达特定网络终端的路径,在某些情况下,还有一些与这些路径相关的度量。

在Linux系统下的路由表是从有小网络排列到大网络的。我们可以使用route -n 查看主机上的路由表。参见下面的截图:
 
 
路由表的产生类型:
静态路由表:
由系统管理员事先设置好固定的路由表称之为静态(static)路由表,一般是在系统安装时就根据网络的配置情况预先设定的,它不会随未来网络结构的改变而改变。
 
动态路由表:
动态(Dynamic)路由表是路由器根据网络系统的运行情况而自动调整的路由表。路由器根据路由选择协议(Routing Protocol)提供的功能,自动学习和记忆网络运行情况,在需要时自动计算数据传输的最佳路径。
路由器通常依靠所建立及维护的路由表来决定如何转发。 
 
2、什么是路由器? 
答:在局域网中,主机可以通过广播的方式来进行网络数据包的发送,但是在不同的网段类的主机想要互相连接时就必须通过路由器来实现。

路由器(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构成。
保护网络:由Linux Router B和客户端Linux所组成。

在开始实验之前,我们先来确定下各个设备的配置信息,然后在下面配置时回到这儿参照配置系统网卡:

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/24
3、Eth1(内),IP设置为:192.168.100.254/24
4、默认网关:192.168.1.254
1、一张网卡eth0,通过桥接方式连接。
2、Eth0,IP设置为:192.168.1.102/24
3、默认网关:192.168.1.254
1、一张网卡eth0,通过桥接方式连接。
2、Eh0, IP设置为192.168.100.12/24
3、默认网关:192.168.100.254

开始实验

依次启动四个虚拟机,同时登陆到系统中。接下来,切换到root模式。开始进行系统的配置。
 
1、配置Linux Router A
 
Step 1: 修改网卡0的IP地址,子网掩码等信息。终端输入命令:sudo vi /etc/network/interfaces,然后添加内容后如下:
   
 
Step 2: 保存上述配置。
 
Step 3:启用IP传递。具体修改方法参见上面的预习知识中的问题二。若已经修改成功后,则重启一次系统。接下来重启一次系统。此时,Linux Router A基本配置完毕了。
 
2、配置Linux Router B:
 
Step 1: 配置网卡0和网卡1:sudo vi /etc/network/interfaces,然后在后面添加内容如下:
   
Step 2:保存修改后的配置。
Step 3:启用IP传递。具体修改方法参见上面的预习知识中的问题二。若已经修改成功后,则重启一次系统。
Step 4:使用ifconfig查看修改有没有成功,参见下面的截图:
   
Step 5: 查看一下路由表是否正确,终端输入route -n,得到如下结果,重点第一行的内容确定配置无误:
   
Step 6: ping下路由器A,看看是否能ping通。如果可以,表示路由器A和路由器B配置基本成了。见下图:
   
3、配置客户端Linux:
 
Step 1: 修改网卡0配置:sudo vim /etc/network/interfaces. 添加内容后如下:
 
   
Step 2:保存配置后重启一下系统。
Step 3:查看一下路由表,route -n,并且尝试ping 一下自己的网关和外部网关,如果成功,则表明客户端也基本配置完了。截图如下:
   
 
4、配置工作站(Workstation):
Step 1:同样,修改网络配置文件如下:
 
   
 
Step 2:保存配置,并重启一次系统,查看一下路由规则是否如下所示:
 

测试这个网络

当按照上面的步骤以此配置完成后,此时就可以进行测试了。其实主要就是测试下客户端(在内部网络中)和工作站(Workstation,在外部网络中)之间能否相互ping通,如果可以的的话,说明我们的系统搭建成功了。测试分别如下:

测试1:在客户端中ping工作站的IP地址:
 
 
测试2:在工作站中ping客户端的IP地址:  
    

结束语

通过上面的实验可以发现,在Linux下面做个静态的路由很简单。只需要将网络IP与网络接口对应启动好即可,然后加上IP Forward的功能,让Linux内核支持数据包传递,接下来其他的工作就交给Linux的内核来解决了。
 

动态路由的路由器搭建方法——使用RIP协议

前面在搭建静态的路由器时,并没有使用到zebra/quagga这个软件。因为系统自带的工具已经足够配置了。但是当需要架设一个动态路由器的时候,还是借助于zebra/quagga软件比较方便。
 
动态路由通常用在路由器和路由器之间的沟通,所以想要让路由器具有动态的功能,必须了解到对方路由器上面所提供的动态路由协议才可以,这样两台路由器才能够通过该协议来沟通彼此的路由规则。下面的实验将基于较为简单的RIPV2协议来实现。不论启动什么样的路由协议,都必须要先启动zebra才可以。主要原因如下:
zebra这个daemon的功能是更新内核的路由规则;
rip这个daemon则是用于向附近的其他路由器沟通协调路由规则的传送与否。
 

准备工作

准备四个不同的虚拟机系统,具体见上面的静态路由器搭建的准备工作。

实验内容

本次实验的网络连接如下图所示,其中共有三个局域网的网段,其中最大的是192.168.1.0/24这个外部局域网,另外有两个内部局域网,分别是192.168.100.0/24和192.168.200.0/24。
在开始实验之前,还是需要敲定一下各个虚拟机的配置信息:
Router A:
1、两张网卡,通过桥接方式连接
2、IP1:192.168.1.200/24
3、IP2:192.168.200.254/24
4、默认网关:192.168.1.254
 
Router B:
1、两张网卡,通过桥接方式连接
2、IP1:192.168.1.100/24
3、IP2:192.168.100.254/24
4、默认网关:192.168.1.254
 
Client A:
1、一张网卡,通过桥接的方式连接
2、IP:192.168.200.10/24
 
Client B:
1、一张网卡,通过桥接的方式连接
2、IP:192.168.100.10/24

开始实验

在开始实验之前,先依次启动四个虚拟机系统。
1、配置路由器A(Router A)
Step 1:修改网络参数,具体修改方法参见实验一。修改的配置文件内容如下:
 
Step 2:保存配置信息,并且重启一次系统让配置生效。
Step 3:配置路由器上的zebra。在Ubuntu下面,zebra的配置文件在目录:/usr/local/etc/下。在终端中切换到上面的目录中。
Step 4:新建一个zebra用的配置文件:sudo vi zebra.conf。然后在文本编辑器中填写如下内容,包括名称,密码。然后保存这个配置文件。接下来运行命令:zebra -d来启动zebra。
   
Step 5:运行命令:netstat -tnupl | grep zebra,可以看到zebra这个服务的主要任务就是要修改Linux系统内核内的路由,所以它仅仅就是监听本机接口罢了,并不会监听外部接口。
 
   
Step 6:登陆到端口2601中,可以在其中输入?或者help来显示帮助的命令提示。此外可以用show ip route 来显示路由规则。具体见下图。
     
上面的图片就显示了目前的接口和默认路由。显示中的具体含义如下:
K:代表以类似route命令加入内核的路由规则,包括route-ethN所产生的规则。
C:代表由网络接口所设置的IP而产生的相关的路由规则。
S:以zebra功能所设置的静态路由信息。
R:就是通过RIP协议所增加的路由规则。
 
Step 7:设置并启用ripd服务。ripd服务可以在两台路由器之间进行路由规则的交换与沟通。具体设置方法如下:
接下来进行配置文件的填写,内容如下:
   
Step 8:保存上述配置,并启动ripd服务,输入sudo ripd -d即可。这样就完成了基本的RIP路由器的配置了。
 
2、配置路由器B(Router B)
 
由于路由器B的配置和路由器A配置基本步骤一致,在此就省略了。参见上面的配置方法。
网络参数配置信息(/etc/network/interfaces):
   
zebra.conf配置信息:
   
ripd.conf的配置信息:
配置客户端A(Client A)
 
客户端的配置步骤在此不再赘述,在实验一中已经详细说明了。下面给出相关的配置信息。配置时要注意网关的填写,不然可能会导致最后ping测试时不能通过。
 
网络参数配置信息(/etc/network/interfaces):
   
 
配置客户端B(Client B)
 
客户端的配置步骤在此不再赘述,在实验一中已经详细说明了。下面给出相关的配置信息。
 
网络参数配置信息(/etc/network/interfaces):
   

测试这个网络

1、检查RIP协议的沟通是否正常
 
以路由器1为例,在终端中输入route -n查看有没有新添加的路由规则,见下图,看到倒数第二条显示的就是增加的路由规则。
   
然后登陆到端口2601中进行查看,如果出现了下面R>* 的输出就表明配置成功了。同样也可以在路由器B中查看得到类似的结果。
 
此外,还可以观察ripd的日志输出来确认。日志输出如下截图所示。可以看到RECV packet之类的日志信息。
   
2、进行ping测试。
 
当没有路由器A和路由器B之间的相互沟通,位于两个不同的网段的客户端A和客户端B是不能进行通信的。也就是说在进行ping测试时,是无法通过的,但是有了路由器A和路由器B,两个不同网段的路由器就可以进行正常通信了。接下来将给出ping测试的结果。
 
客户端A上的测试:
1、ping路由器A的IP2地址
   
 
2、ping路由器A的IP1地址
 
 
3、ping路由器B的IP2地址
 
4、ping 路由器B的IP1地址
 
 
5、ping 客户端B的IP地址
   
 
客户端B上的测试:
 
1、ping路由器B的IP2地址
 
 
2、ping 路由器B的IP1地址   
 
 
3、ping 路由器A的IP2地址   
 
 
4、ping路由器A的IP1地址   
 
 
5、ping 客户端A的IP地址   

结束语

上述的几个测试结果表明,无论怎么ping,网络总是通的。这也就表明,实验取得了成功。可见使用zebra软件的RIPv2协议,可以很轻松地将路由规则分享到附近局域网的其他路由器上面。比起单纯地使用route来修改Linux内核路由表要轻松许多。
 

动态路由的路由器搭建方法——使用OSPF协议

上面已经成功演示了如何使用zebra/quagga工具配合ripd服务搭建路由器的简要方法。接下来需要演示的就是zebra/quagga支持的另外一种路由协议——OSPF。关于OSPF协议的简要介绍在预习知识中已经提到,不再赘述。下面的实验将会演示基于这个路由协议的简单使用方法。
 
为了方便起见,我仍然使用了上面的那个实验(即“动态路由的路由器搭建方法——使用RIP协议”)的虚拟机系统。所以,实验的内容就不再赘述,这里仅仅换成OSPF协议来实现。此外,关于实验的前期准备工作也和上面的实验相同,不再赘述。
 
最后,需要说明的是,由于ospf这个daemon在运行时需要从zebra程序中获得接口信息,故zebra程序必须先于ospfd运行。ospfd不支持多个OSPF进程,不能指定OSPF进程号。下面开始实验。
 

开始实验

在开始实验之前,需要确保四台虚拟机系统正常运行。如果ripd服务正在运行,需要将它关掉。
1、配置路由器A(Router A)
Step 1:配置网络参数以及zebra.conf文件。这些参数和上面的那个实验是相同的,在此不再赘述。配置完毕后在终端中运行zebra -d即可。如下图:
 
 
Step 2:配置ospfd服务需要的配置文件,即ospfd.conf。首先切换到配置文件所在的目录,使用vi编辑器创建一个新的文件ospfd.conf,并输入相关的配置信息(第二个截图)。
   
   
 
Step 3:保存上一步创建的配置文件,然后关闭vi编辑器。在终端中执行ospfd -d开启服务。紧接着,查看端口2604有没有成功开启。同时,可以查看路由表(输入sh ip ospf route),还有ospf接口设置(输入sh ip ospf interface)。如下面的截图所示。
   
   
 
Step 4:再到端口2601中查看一些关键信息。具体步骤如下图所示。我们需要重点关注的是路由表显示信息。可以看到在下面的截图中,路由表信息中有O 192.168.1.0/24 is directly connected之类的字样,那是由ospfd产生的。
   
 
Step 5:查看日志输出,步骤见下面的截图。通过日志的输出,我们可以在配置路由器2之后,轻松判定两个路由器之间的有没有收到来自对方的hello数据包。在下面这个日志截图中,我们可以看到,路由器每10s就会发送出去一个hello数据包。
好了,关于路由器A的配置到此结束了。
 
2、配置路由器B(Router B)
由于在配置路由器B时,操作的步骤基本同路由器A配置相同,只是在网段和IP地址等方面有稍许区别。所以不再赘述,详细设置步骤参见路由器A的设置。非常容易。还要注意,在开启ospfd之前,要保证zebra先运行。
 
下面给出一些重要的配置文件参数和其他重要信息的截图。
1.    ospfd.conf文件内容:
 
 
2.    查看路由表,同样,我们可以看到O 192.168.1.0/24 之类的两行,它们是由ospfd服务产生的。   
 
 
3.    查看一下日志输出,首先进入到tty2中,运行命令:tail -f /usr/local/etc/ospfd.log。截图如下。仔细观察日志输出,我们可以看到,路由器B已经接收到来自路由器A(192.168.1.200)发送过来的hello数据包了。可见,我们已经成功了。
   
 
4.    接下来,进入端口2604中。输入命令sh ip ospf neighbor,见下面的截图。从截图中,我们可以看到,路由器A的ID已经显示出来了。可见,路由器A已经被当做为邻居而被识别了。同样的方法,我们可以在路由器A中可以看到路由器B的ID也在邻居列表中。可见,二者相互识别了。
 
 
5.    输入show ip ospf database,可以看到更为详细的信息被输出了。由此,我们可以进一步确认,两个路由器成功地相互识别了。好了,大功告成。接下来我们将会进入测试阶段。

测试这个网络

又到了最后测试的环节了。还是和前面一样,使用ping的方式进行测试。如果可以ping通,表明测试成功。两个处于不同网段的客户端可以正常通信了。下面给出详细ping测试的截图。

客户端A上的ping测试:
1.    Ping路由器A上的IP1地址
 
 
2.    Ping 路由器A上的IP2地址
 
3.    Ping 路由器B上的IP1地址
 
4.    Ping 路由器B上的IP2地址
 
5.    Ping 客户端B的IP地址
 
客户端B上的ping测试   
由于测试方法和客户端A的ping测试相同,为了节省篇幅,在此就省略了。

结束语

上面的ping测试结果表明,我们的路由器都已经成功工作了。两个不同网段的客户端也成功相互通信了。
 
使用OSPF路由协议搭建路由器的方法到此结束了。实验也取得了成功。可以看到,实际操作起来非常简单,和上一个实验,即使用RIP协议搭建路由器,操作类似。可见,zebra/quagga中将不同的协议进行模块化设计后,使用的时候就非常方便了,可以轻松地启用一种协议,也可以关闭一个协议。非常方便使用。
 
查看了zebra的源码后,发现别人写的代码非常规范,也很喜欢那样的风格,正在学习。此外,还可以从代码中学到别人是如何进行日志管理和输出的。
 

动态路由的路由器搭建方法——使用BGP协议

在上面的两个实验中,已经演示了zebra/quagga软件支持的两种内部网关协议构建路由器的方法。使用起来也很简单。接下来的实验,我将会使用zebra/quagga支持的边界网关协议——BGP协议,来构建两台路由器进行测试。关于什么是BGP协议,在前面的预习知识中已经给出了简要的介绍,在此不再赘述。下面的实验将会演示使用zebra/quagga的BGP协议来构建动态路由的路由器的简要方法。主要是掌握构建的基本方法,当然,也有更多的功能值得挖掘。
 
在开始实验之前,我们依然要做一些准备工作。但为了方便,我们直接使用了第二个实验(即“动态路由的路由器搭建方法——使用RIP协议”)框图以及部分设置。要做的仅仅是改变路由器协议罢了。详细的准备工作参见第二个实验开始的部分。

开始实验

在开始实验之前,我们需要确定zebra已经在后台运行,可以使用命令:ps -ef | grep zebra进行查看,在此需要注意的是,zebra.conf的配置文件不要改动,我们继续使用上面的实验用的配置文件。
 
 
配置路由器A(Router A)   
Step 1:进入目录/usr/local/etc下面,创建配置文件:bgpd.conf,或者也可以复制那个sample配置文件。接下来,在vi编辑器中编辑配置文件,我配置的内容如下:
 
 
Step 2 :保存上面的配置文件,同时在终端中输入:bgpd -d来启动bgpd服务。接下来,我们进入到端口2605中,来查看一些关于bgp的信息,详细的操作见下面的截图:
 
Step 3:和前面的实验一样,我们可以在另外一个终端标签页中打开日志的输出,方便后面观察,可以看到,此时它尝试连接到邻居是失败的,因为我们还没有配置路由器B,待完成后回来观察即可看到差别。操作如下:
 
配置路由器B(Router B)   
考虑到路由器B和路由器A的配置过程基本相同,无非就是在配置文件方面有些差别,在此就不再重复步骤了,详细步骤参见路由器A的配置。对了,在启动bgpd之前,还是要记得先保证zebra这个daemon在运行中。好了,下面会给出一些重要的截图:
1、bgpd.conf文件:
 
 
2、进入2605端口后查看有关bgp的信息:

测试这个网络

如果上面的步骤都是正确无误,且保证zebra和bgpd这两个daemon都在两个路由器上正常运行的话,就可以进行下面的一些测试了。

路由器A或者B上的信息:
1、日志输出:
根据输出的日志可以判断两个路由器其实已经能够相互识别了。
 
 
 
2、端口2601中的路由表信息:
可以看到,有一条路由规则:B>* 192.168.100.0/24这一行。这个便是bgpd产生的。
 
3、端口2605中的邻居显示:
下面的截图中,可以很清楚的看到,路由器A已经识别到了邻居192.168.1.100,即路由器B的eth0的IP地址。所以说,我们已经配置成功了。
 
客户端上的ping测试:
由于ping测试方法与前几个实验是一样的,下面仅给出截图说明两个不同网段的客户端可以通信即可。
其中客户端A的IP地址设置为:192.168.200.10/24,客户端B为:192.168.100.10/24。
客户端A使用ping命令测试客户端B的IP地址:   
 

结束语

上面的测试结果表明,我们使用BGP协议搭建的路由器已经可以工作了。位于两个不同网段的客户端A和B之间也可以相互ping通,所以,整个实验也就完成了。

上面的三个实验分别使用了RIP协议、OSPF协议、BGP协议来搭建路由器。演示了使用zebra/quagga搭建路由器的基本方法。可以看到,其实总的来说并不是特别困难,同时,也可以看到zebra/quagga软件却是很强大!

LInux Zebra的更多相关文章

  1. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

  2. Linux下使用Quagga(Zebra)搭建路由器记录(转)

    写在前面 从22号中午开始琢磨zebra/quagga的用法,一直到晚上11点多都没有什么头绪.各种Google,百度,几近崩溃.由于网上关于zebra/quagga的配置方法都是在真实的若干台电脑上 ...

  3. 用Zebra打造Linux下小型路由器

    用Zebra打造Linux下小型路由器 现在的Internet网络相当庞大,不可能在不同的网络之间建立直接的连接,所以这时就必须用路由器为不同网络之间的通信提供路径选择.Linux下搭建路由器价格非常 ...

  4. linux查看端口及端口详解

    今天现场查看了TCP端口的占用情况,如下图   红色部分是IP,现场那边问我是不是我的程序占用了tcp的链接,,我远程登陆现场查看了一下,这种类型的tcp链接占用了400多个,,后边查了一下资料,说E ...

  5. linux端口详解

    Linux端口总结如下: 0|无效端口,通常用于分析操作系统 1|传输控制协议端口服务多路开关选择器 2|管理实用程序 3|压缩进程 5|远程作业登录 7|回显 9|丢弃 11|在线用户 13|时间 ...

  6. linux 运维知识体系

    这里将会介绍一下,LINUX运维工程师的知识体系. 只能说是个人理解吧.并不是必要或者充分的,仅供网友参考. 大部分本博客都有涉及,并不完整. 1.LINUX运维基础 1.1.LINUX系统的简介,分 ...

  7. linux下ifconfig, DNS以及route配置

    转载:http://blog.csdn.net/wangjingfei/article/details/5283632/ 熟悉使用ifconfig 会非常方便. ifconfig eth0 新ip 然 ...

  8. linux 常用端口

    常用端口 下面的表格中列举了包括在红帽企业 Linux 中的服务.守护进程.和程序所使用的最常见的通信端口.该列表还可以在 /etc/services 文件中找到.要查看由互联网号码分派局(IANA) ...

  9. linux 运维常用工具表

    https://code.google.com/p/httperf/  ※测量Web服务器的性能 ./configure   make &&make install http://ww ...

随机推荐

  1. BZOJ2084[Poi2010]Antisymmetry——回文自动机

    题目描述 对于一个01字符串,如果将这个字符串0和1取反后,再将整个串反过来和原串一样,就称作“反对称”字符串.比如00001111和010101就是反对称的,1001就不是.现在给出一个长度为N的0 ...

  2. OneinStack——PHP多版本共存

    前言 我事先安装的是LNMP环境,PHP版本为7.2,但是现在环境需要一个PHP5.6,所以就准备安装个上版本,顺带写个安装教程,写完后我发现了原来有直接安装的命令!所以后面的内容大家可以忽略了!从配 ...

  3. Java 属性映射(DozerBeanMapper)

    package com.kps.common.utils; import java.util.ArrayList; import java.util.Collection; import java.u ...

  4. Codeforces1101F Trucks and Cities 【滑动窗口】【区间DP】

    题目分析: 2500的题目为什么我想了这么久... 考虑答案是什么.对于一辆从$s$到$t$的车,它有$k$次加油的机会.可以发现实际上是将$s$到$t$的路径以城市为端点最多划分为最大长度最小的$k ...

  5. codeforces1093G Multidimensional Queries 【线段树】

    题目分析: 搜索2^k种情况,线段树分别处理就行了,正确性明显. 代码: #include<bits/stdc++.h> using namespace std; ; int n,k; ] ...

  6. Leetcode 27.移除元素 By Python

    给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...

  7. 不能靠眼睛之 KEIL 中失效代码灰暗特性

    @2019-02-15 [问题描述] 使用 KEIL(带灰暗特性版本) 查看头文件代码时,其中有依据不同宏定义对应不同执行语句代码部分,依据灰暗特性呈现生效与失效代码,靠眼睛反应就是灰暗呈现为失效代码 ...

  8. OO第三阶段纪实

    $0 写在前面 万里长征已过大半,即将迎来胜利的曙光.一路走来,经历过种种艰难,体会颇深.希望能记录下这篇博文,来总结这一个月来的收获与感悟. $1 规格化设计的发展历史 上世纪50年代,软件伴随着第 ...

  9. pre标签内文本自动换行

    pre标签内文本自动换行 给pre标签添加一个css样式 pre { white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap; /* ...

  10. jenkins自动打包部署项目

    首先去jenkins的官网下载安装包 https://jenkins.io/   个人下载是长期稳定的那个版本,下载后,得到一个.msi的安装包: 点击进行安装,然后一直点击下一步. jenkins会 ...