共计 17320 个字符,预计需要花费 44 分钟才能阅读完成。
从 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、适合在大型网络中使用。
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2015-07/120224p2.htm
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:保存配置,并重启一次系统,查看一下路由规则是否如下所示:
从 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、适合在大型网络中使用。
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2015-07/120224p2.htm
当按照上面的步骤以此配置完成后,此时就可以进行测试了。其实主要就是测试下客户端 (在内部网络中) 和工作站 (Workstation,在外部网络中) 之间能否相互 ping 通,如果可以的的话,说明我们的系统搭建成功了。测试分别如下:
测试 1:在客户端中 ping 工作站的 IP 地址:
测试 2:在工作站中 ping 客户端的 IP 地址:
通过上面的实验可以发现,在 Linux 下面做个静态的路由很简单。只需要将网络 IP 与网络接口对应启动好即可,然后加上 IP Forward 的功能,让 Linux 内核支持数据包传递,接下来其他的工作就交给 Linux 的内核来解决了。
前面在搭建静态的路由器时,并没有使用到 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 内核路由表要轻松许多。
上面已经成功演示了如何使用 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 的源码后,发现别人写的代码非常规范,也很喜欢那样的风格,正在学习。此外,还可以从代码中学到别人是如何进行日志管理和输出的。
在上面的两个实验中,已经演示了 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 软件却是很强大!
本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-07/120224.htm