当前位置: IT大杂烩 > Ubuntu  > Linux下的路由器搭建(超级详细的图文教程)

Linux下的路由器搭建(超级详细的图文教程)

www.someabcd.com  网友分享于:Jun 8, 2018 5:50:31 PM

标签:

Linux 下的路由器搭建方法

 

【写在前面】

      从22号中午开始琢磨zebra/quagga的用法,一直到晚上11点多都没有什么头绪。各种Google,百度,几近崩溃。由于网上关于zebra/quagga的配置方法都是在真实的若干台电脑上实现的,一直都没有找到完全在虚拟机上进行测试的教程,相当失望。所以,我就决定,如果我要是能够利用多台虚拟机完成实验的内容,我一定要写一个详细的文档放到我的博客上。没有办法,索性自己慢慢摸索吧,但花了一天也没有成功。直到快睡觉时才突然想到,会不会跟我在Virtual Box上设置采用NAT方式联网有关系呢?所以后来改成了桥接的方式,经过今天(23号)一天的测试,总算有了些许成效。虽然花了很长的时间,也走了N多的弯路,但还是学到了不少东西。前几天一直在看《计算机网络》,可实际是光看书并没有让我理解多少知识点。但是经过学习了Linux的路由器搭建后,本质上也加深了我对《计算机网络》的理解。

 

【预习知识】

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

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地址,分为IPv4IPv6两大类。IP地址编址方案将IP地址空间划分为ABCDE五类,其中ABC是基本类,DE类作为多播和保留使用。

     网段:网段一般指一个计算机网络中使用同一物理层设备(传输介质,中继器,集线器等)直接通讯的那一部分。即IP地址范围从一个到另外一个,如,192.168.1.1192.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),它只支持以广播方式发布协议报文。这个协议报文无法携带掩码信息,它只能识别ABC类这样的自然网段的路由,因此RIP-1不支持非连续子网(Discontiguous Subnet)。

     RIP-2是一种无类别路由协议(Classless Routing Protocol。相对与它的前身,拥有更多的优势,比如支持路由标记,在路由策略中可根据路由标记对路由进行灵活的控制等特点。

     由于zebra本身是支持RIP协议的两个版本的,所以可以很轻松地搭建出一个路由器。后面的实验中将使用RIPV2这个协议。Quagga貌似默认就是使用RIPV2协议,而zebra应当需要指定一下。

 

【静态路由的路由器搭建方法】

   

准备工作:

 

     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:

1、两张网卡eth0, eth1,通过桥接方式连接。

2、Eth0(内网),IP设置为:192.168.1.254/24。

3、Eth1(外网),IP可不设定。

Linux Router B:

1、两张网卡eth0, eth1, 通过桥接方式连接。

2、Eth0(外), IP设置为:192.168.1.100/24

3、Eth1(内),IP设置为:192.168.100.254/24

4、默认网关:192.168.1.254

工作站(Workstation):

1、一张网卡eth0,通过桥接方式连接。

2、Eth0,IP设置为:192.168.1.102/24

3、默认网关:192.168.1.254

客户端Linux:

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基本配置完毕了。

1、配置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配置基本成了。见下图:

技术分享

 

1、配置客户端Linux:

 

Step 1: 修改网卡0配置:sudo vim /etc/network/interfaces. 添加内容后如下:

技术分享

 

Step 2:保存配置后重启一下系统。

Step 3:查看一下路由表,route -n,并且尝试ping 一下自己的网关和外部网关,如果成功,则表明客户端也基本配置完了。截图如下:

技术分享

 

1、配置工作站(Workstation):

 

Step 1:同样,修改网络配置文件如下:

技术分享

 

Step 2:保存配置,并重启一次系统,查看一下路由规则是否如下所示:

技术分享

 

测试这个网络

 

     当按照上面的步骤以此配置完成后,此时就可以进行测试了。其实主要就是测试下客户端(在内部网络中)和工作站(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路由器的配置了。

1、配置路由器B(Router B)

      由于路由器B的配置和路由器A配置基本步骤一致,在此就省略了。参见上面的配置方法。

网络参数配置信息(/etc/network/interfaces):

技术分享

 

zebra.conf配置信息:

技术分享

 

ripd.conf的配置信息:

技术分享

 

1、配置客户端A(Client A)

 

     客户端的配置步骤在此不再赘述,在实验一中已经详细说明了。下面给出相关的配置信息。配置时要注意网关的填写,不然可能会导致最后ping测试时不能通过。

网络参数配置信息(/etc/network/interfaces

技术分享

 

1、配置客户端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地址

技术分享

 

ping路由器A的IP1地址

技术分享

 

 

1、ping路由器B的IP2地址

技术分享

 

 

1、ping 路由器B的IP1地址

技术分享

 

 

ping 客户端B的IP地址

技术分享

 

 

客户端B上的测试:

 

 

1、ping路由器B的IP2地址

技术分享

 

1、ping 路由器B的IP1地址

技术分享

 

 

1、ping 路由器A的IP2地址

技术分享

1、ping路由器A的IP1地址

技术分享

 

 

ping 客户端A的IP地址

技术分享

 

 

结束语

 

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

 

【参考资料】

      花了整整两天的时间来学习Linux下的路由器架设。中间走过了不少弯路,最终成功了,这也是比较让人欣慰的吧。期间搜索了很多文档,参考了一些博客和教材上的内容。也很感谢发博客的网友,从他们身上学到了很多东西。自己摸索并学习到的东西最为珍贵,我一直这么认为。所以,一直都没敢放弃,坚持到了最后。也加强了我对Linux系统操作的熟练程度,期间,我一直强制自己不要使用图形化的操作方法,所以我就把系统的X-Window给干掉了。好了,列出一些参考的主要资料和博文吧:

1、《鸟哥的Linux私房菜——基础学习篇》

2、《鸟哥的Linux私房菜——服务器架设篇》第8章。

3、Ubuntu静态路由修改:

http://blog.sina.com.cn/s/blog_67be3b450101de44.html

4、Ubuntu网卡IP配置:

http://os.51cto.com/art/201104/255292.htm

5、linux网关设置实验:

http://yahoon.blog.51cto.com/13184/37077

6、用linux系统做策略路由

http://www.num123.com/post/95

7、配置linux做网关:

http://hi.baidu.com/bigwood88/item/c7735b29faa3ab8cae48f533

8、linux路由表设置:

http://blog.csdn.net/shiniji_hh1126/article/details/6000810

9、如何利用linux双网卡连接两个网络:

http://dxli75.blog.163.com/blog/static/106768289201182310710304/

10关于vmware虚拟机上网设置等:

http://www.cnblogs.com/rollenholt/articles/2580822.html

11、深入解析使用linux+zebra构建软件路由系统:

http://huawei.chinaitlab.com/router/854545.html

12、linux路由zebra的配置:

http://hi.baidu.com/flyabout/item/ad93a20c1b3f03c32e4c6bc4

13、Linux上构建网络路由器:

https://www.ibm.com/developerworks/cn/linux/l-emu/

14、用zebra打造linux下小型路由器:

http://chenguang.blog.51cto.com/350944/269171/

15、百度百科,百度知道等。

        

日志:2014/5/23 周五晚,完成。涉及到了zebra的最简单的用法。吐槽一下,CSDN博客编辑却是效率太低,想要排版好看些,但是太浪费时间了。就这样了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

 

Linux下的路由器搭建(超级详细的图文教程)

标签:

发布此文章仅为传递网友分享,不代表本站观点,若侵权请联系我们删除,本站将不对此承担任何责任。
Copyright ©2018  IT大杂烩  版权所有  京ICP备11030978号-1 网站地图