网络路由配置
概述
当主机和设备处于同一网段时,可以直接进行通信。然而,当主机和设备不在同一网段时,就必须依赖路由进行网络转换、选择路由路径、安全控制等,以实现不同网络的互联互通与数据包转发。
路由是数据通信网络中最基本的要素。路由信息就是指导报文发送的路径信息,路由的过程就是报文转发的过程。具有路由转发功能的设备称为广义上的路由器。
路由器常常被用来进行路由选择和报文转发。路由器根据收到报文的目的地址选择一条合适的路径,然后将报文传送到下一个路由器,路径终端的路由器负责将报文送交目的主机。
路由就是报文从源端到目的端的路径。当报文从路由器到目的网段有多条路由可达时,路由器可以根据路由表中最佳路由进行转发。最佳路由的选取与发现此路由的路由协议的优先级、路由的度量有关。当多条路由的协议优先级与路由度量都相同时,可以实现负载分担,缓解网络压力。当多条路由的协议优先级与路由度量不同时,可以构成路由备份,提高网络的可靠性。
路由分类
路由可以分为两类:静态路由和动态路由。
- 静态路由:通过用户手动配置的路由。
- 优点:配置方便,对系统要求低,适用于拓扑结构简单并且稳定的小型网络。
- 缺点:不能自动适应网络拓扑的变化,需要人工干预。
- 动态路由:通过动态路由协议发现的路由。
- 优点:动态路由协议有自己的路由算法,能够自动适应网络拓扑的变化,适用于具有一定数量三层设备的网络。
- 缺点:配置对用户要求比较高,对系统的要求高于静态路由,并将占用一定的网络资源和系统资源。
路由表查看
记录路由信息的表被称为路由表。在 SylixOS 系统中,使用 route
命令可以查看系统的路由表。
[root@sylixos:/root]# route
IPv4 Route Table:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.4.0.1 0.0.0.0 UG 0 0 0 en2
10.4.0.94 0.0.0.0 255.255.255.255 UH 0 0 0 en3
10.4.0.0 0.0.0.0 255.255.0.0 U 0 0 0 en3
10.4.120.37 0.0.0.0 255.255.255.255 UH 0 0 0 en2
10.4.0.0 0.0.0.0 255.255.0.0 U 0 0 0 en2
10.4.0.92 0.0.0.0 255.255.255.255 UH 0 0 0 en1
10.4.0.0 0.0.0.0 255.255.0.0 U 0 0 0 en1
127.0.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 lo0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo0
IPv6 Route Table:
Destination Gateway Prefix Flags Metric Ref Use Iface
fe80::21b:22ff:fe56:8d75 :: 128 UH 0 0 0 en2
fe80:: :: 64 U 0 0 0 en2
ff00:: :: 8 U 0 0 0 en2
::1 :: 128 UH 0 0 0 lo0
AODV Route Table:
Destination Nexthop Flags Metric Iface
各列字段说明如下所示:
列 | 含义 |
---|---|
Destination | 目标网络或目标主机。Destination 为 0.0.0.0 时,表示这个是默认路由,所有数据都将发到默认网关 (这里是 10.4.0.1),由其作进一步转发。 |
Gateway | 下一跃点网关地址,0.0.0.0 表示当前记录对应的 Destination 跟本机在同一个网段,通信时不需要经过网关。 |
Genmask | 目的网络的子网掩码 ,Destination 是主机时需要设置为 255.255.255.255,是默认路由时会设置为 0.0.0.0,255.255.255.0、255.255.0.0 等表示匹配某个网络地址,用于到达某个直接相连网络。 |
Flags | 路由标志,U-路由有效,H-目标是个主机,G-需要使用网关,D-路由是由重定向报文创建的 。 |
Metric | 路由距离,到达指定网络所需的中转数。 |
Ref | 路由的引用次数。 |
Use | 路由的使用次数统计,用于显示路由的使用频率。(SylixOS 系统中未使用) |
Iface | 出接口的网卡名字,例如 en2,用于将数据包转发至下一跳。 |
静态路由配置
在 SylixOS 系统中,使用 route
命令加上不同的参数可配置静态路由。在 Shell 界面通过 help route
命令可以查看到该指令的实际使用方式。
[root@sylixos:/root]# help route
show, add, delete, change route table
eg. route
route add -host(-net) 123.123.123.123 mask 255.0.0.0 0.0.0.0 metric 5 dev en1 (add a route and use netif default gateway set)
route add -host(-net) 123.123.123.123 mask 255.0.0.0 123.0.0.1 dev en1 (add a route and use specified gateway set)
route add -host(-net) 0.0.0.0 mask 0.0.0.0 123.0.0.1 dev en1 (set netif default gateway: 123.0.0.1)
route chg -host(-net) 123.123.123.123 mask 255.0.0.0 0.0.0.0 dev en2 (change a route and use netif default gateway set)
route chg -host(-net) 123.123.123.123 mask 255.0.0.0 123.0.0.1 dev en1 (change a route and use specified gateway set)
route chg -host(-net) 0.0.0.0 mask 255.0.0.0 123.0.0.1 dev en1 (set netif default gateway: 123.0.0.1)
route add -host(-net) 0.0.0.0 mask 0.0.0.0 192.168.1.1 dev en2 (set default netif)
route add default dev en2 (set default netif)
route add default gw 192.168.1.1 (set default netif)
route add default gw 192.168.1.1 dev en1 (set default netif)
route del -net 123.0.0.0 mask 255.0.0.0 (delete a net route)
route del -host 145.26.122.35 gw 192.168.1.1 (delete a host route)
route del -host 145.26.122.35 dev en1 (delete a host route)
route [add | del | chg] {-host | -net | -gateway} [dest] [netmask] [gateway] {metric} [dev]
参数介绍如下:
- add:添加新的路由表项。
- del:从路由表中删除删除一条路由。
- chg:更改路由表中的一条路由。
- -host:目标地址是一个主机。
- -net:目标地址是一个网络。
- -gateway:目标地址是一个网关。
- dest:目的地址。
- netmask:目标地址的子网掩码,前面要跟 mask,如 mask 255.255.255.255。
- gateway:下一跃点网关地址。
- metric:设置路由跳数。
- dev:出接口。
添加一条路由
添加一条路由,目标为 192.16.1.0 网络地址,下一跃点网关为 192.168.0.1,出接口为 en2。
[root@sylixos:/root]# route add -net 192.16.1.0 mask 255.255.255.0 192.168.0.1 dev en2
输入
route
命令查看添加的路由信息。[root@sylixos:/root]# route IPv4 Route Table: Destination Gateway Genmask Flags Metric Ref Use Iface 192.16.1.0 192.168.0.1 255.255.255.0 U 0 0 0 en2 0.0.0.0 10.4.0.1 0.0.0.0 UG 1 0 0 en2 10.4.0.94 0.0.0.0 255.255.255.255 UH 1 0 0 en3 10.4.0.0 0.0.0.0 255.255.0.0 U 1 0 0 en3 10.4.120.37 0.0.0.0 255.255.255.255 UH 1 0 0 en2 10.4.0.0 0.0.0.0 255.255.0.0 U 1 0 0 en2 10.4.0.92 0.0.0.0 255.255.255.255 UH 1 0 0 en1 10.4.0.0 0.0.0.0 255.255.0.0 U 1 0 0 en1 127.0.0.1 0.0.0.0 255.255.255.255 UH 1 0 0 lo0 127.0.0.0 0.0.0.0 255.0.0.0 U 1 0 0 lo0
说明:
添加同一个局域网的主机路由时,不使用网关。
删除一条路由
删除一条路由,目标为 192.16.1.0 网络地址,下一跃点网关为 192.168.0.1,出接口为 en2。
[root@sylixos:/root]# route del -net 192.16.1.0 mask 255.255.255.0
输入
route
命令可以看到上文添加的路由已被删除。[root@sylixos:/root]# route IPv4 Route Table: Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.4.0.1 0.0.0.0 UG 0 0 0 en2 10.4.0.94 0.0.0.0 255.255.255.255 UH 0 0 0 en3 10.4.0.0 0.0.0.0 255.255.0.0 U 0 0 0 en3 10.4.120.37 0.0.0.0 255.255.255.255 UH 0 0 0 en2 10.4.0.0 0.0.0.0 255.255.0.0 U 0 0 0 en2 10.4.0.92 0.0.0.0 255.255.255.255 UH 0 0 0 en1 10.4.0.0 0.0.0.0 255.255.0.0 U 0 0 0 en1 127.0.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 lo0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo0
设置默认网关
输入
route
命令可以看到现在的默认网关是 10.4.0.1。[root@sylixos:/root]# route IPv4 Route Table: Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.4.0.1 0.0.0.0 UG 0 0 0 en2 10.4.0.94 0.0.0.0 255.255.255.255 UH 0 0 0 en3 10.4.0.0 0.0.0.0 255.255.0.0 U 0 0 0 en3 10.4.120.37 0.0.0.0 255.255.255.255 UH 0 0 0 en2 10.4.0.0 0.0.0.0 255.255.0.0 U 0 0 0 en2 10.4.0.92 0.0.0.0 255.255.255.255 UH 0 0 0 en1
更改默认网关为 10.4.120.1。
route add default gw 10.4.120.1 dev en2
输入
route
命令可以看到默认网关已经被更改。[root@sylixos:/root]# route IPv4 Route Table: Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.4.120.1 0.0.0.0 UG 0 0 0 en2 10.4.0.94 0.0.0.0 255.255.255.255 UH 0 0 0 en3 10.4.0.0 0.0.0.0 255.255.0.0 U 0 0 0 en3 10.4.120.37 0.0.0.0 255.255.255.255 UH 0 0 0 en2 10.4.0.0 0.0.0.0 255.255.0.0 U 0 0 0 en2 10.4.0.92 0.0.0.0 255.255.255.255 UH 0 0 0 en1
说明:
添加默认网关时,SylixOS 会自动检查网关的可用性,当添加一个不可用的默认网关时,Shell界面会弹出 add default route fail, error: Network unreachable! 信息。
动态路由配置
动态路由是指路由器在运行过程中根据某种规则自动更新路由表,这些规则被称为动态路由协议。
动态路由协议包括 RIP、RIPv2、 RIPng(IPv6)、OSPFv2、OSPFv3、IS-IS、BGP、PIM-SM、PIM-DM、PIM-SSM 等。在 SylixOS 系统中,一般通过部署和运行 Quagga 这个开源路由软件,来完成各种动态路由协议的配置。
Quagga 是一个开源的基于 Zebra 实现了 RIP、OSPF、BGP的动态路由软件。可以通过使用 Quagga 将 SylixOS 设备打造成一台功能完备的路由器。
Quagga 的配置和启动
将 Quagga 软件编译的可执行程序 zebra 和 ripd、bgpd、ospfd、pimd 等路由协议守护程序部署到系统目录
/sbin
下,并且将 libzebra.so 动态库部署到系统/lib
目录下,zebra.conf、ripd.comf、bgpd.conf、ospfd.conf、pimd.conf 等文件部署到系统/etc/quagga/
目录下。创建 Quagga 用户组。
[root@sylixos:/root]# gadd quagga 1000
创建 Quagga 用户。
[root@sylixos:/root]# uadd quagga 123 1 1000 1000 "router user" /home/quagga
创建运行依赖目录。
[root@sylixos:/root]# mkdir /var/run
启动 Quagga。
[root@sylixos:/root]# zebra &
RIP 路由协议
RIP 协议最初是为 Xerox 网络系统的 Xerox parc 通用协议而设计的,是 Internet 中常用的路由协议。RIP 采用距离向量算法,即路由器根据距离选择路由,所以也称为距离向量协议。路由器收集所有可到达目的地的不同路径,并且保存有关到达每个目的地的最少站点数的路径信息,除到达目的地的最佳路径外,任何其它信息均予以丢弃。同时路由器也把所收集的路由信息用 RIP 协议通知相邻的其它路由器。这样,正确的路由信息逐渐扩散到了全网。
RIP 使用非常广泛,它简单、可靠,便于配置。但是 RIP 只适用于小型的同构网络,因为它允许的最大站点数为 15,任何超过 15 个站点的目的地均被标记为不可达。而且 RIP 每隔 30s 一次的路由信息广播也是造成网络的广播风暴的重要原因之一。
综上所述,RIP 动态路由协议具体执行过程如下:
- 向邻居发送整个路由表。
- 每经过一个路由器,跳数自动加 1,最大跳数为 15 跳,16 跳为网络不可达。
- 选择最佳路由,RIP 路由协议以跳数作为度量值根据跳数的多少来选择最佳路由。
- 默认情况下,每隔 30 秒广播一次更新信息。
IP 转发
出于安全考虑,SylixOS 系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的 ip 地址将数据包发往本机另一网卡,该网卡根据路由表继续发送数据包。
SylixOS 系统中是通过 ipforward
命令来对 IP 转发功能进行管理的。
查看 IP 转发功能状态
[root@sylixos:/root]# ipforward IPv4 forward: Off IPv6 forward: Off
开启 IP 转发功能
[root@sylixos:/root]# ipforward 1 [root@sylixos:/root]# ipforward IPv4 forward: On IPv6 forward: On
关闭 IP 转发功能
[root@sylixos:/root]# ipforward 0 [root@sylixos:/root]# ipforward IPv4 forward: Off IPv6 forward: Off
实际场景
静态路由案例
Q:在某公司内部 ,现在有两台主机 A 和 B,IP 地址分别为 192.168.11.2 和 192.168.23.10,中间有两台 SylixOS 设备充当路由器,如何配置才能实现 主机 A 与 主机 B 跨网段通信呢?
A:
- 使用
ifconfig
命令修改两台主机和两台设备的IP地址和网关,并且将网线接在对应的网口上。
打开主机 A 的Shell界面,使用
ping
命令向主机 B 发送数据包, 结果显示请求超时,证明此时主机 A 与 主机 B 之间无可用路由。[root@sylixos:/root]# ping 192.168.23.10 Pinging 192.168.23.10 Request time out. Request time out. Request time out. Request time out. Ping statistics for 192.168.23.10: Packets: Send = 4, Received = 0, Lost = 4(100% loss),
分别打开 R1 和 R2 的Shell界面,通过
ipforward
命令打开设备的 IP 转发功能。[root@sylixos:/root]# ipforward 1 [root@sylixos:/root]# ipforward IPv4 forward: On IPv6 forward: On
打开 R1 的Shell界面,添加一条静态路由。
[root@sylixos:/root]# route add -host 192.168.23.10 mask 255.255.255.0 192.168.150.20 dev en4
打开 R2 的Shell界面,添加一条静态路由。
[root@sylixos:/root]# route add -host 192.168.11.2 mask 255.255.255.0 192.168.150.12 dev en4
打开主机 A 的Shell界面,使用
ping
命令向主机 B 发送数据包, 结果显示发送和响应成功。[root@sylixos:/root]# ping 192.168.23.10 Pinging 192.168.23.10 Reply from 192.168.23.10: bytes=32 time=0.480ms TTL=253 Reply from 192.168.23.10: bytes=32 time=0.317ms TTL=253 Reply from 192.168.23.10: bytes=32 time=0.320ms TTL=253 Reply from 192.168.23.10: bytes=32 time=0.321ms TTL=253 Ping statistics for 192.168.23.10: Packets: Send = 4, Received = 4, Lost = 0(0% loss), Approximate round trip times in milli-seconds: Minimum = 0.317ms, Maximum = 0.480ms, Average = 0.359ms
RIP 协议案例
Q:如下图所示,当有多条路由存在的时候,RIP 协议是否能选择出最佳路由?当 RIP 协议选择的最佳路由突然中断的情况,是否能够自动切换到其他路由上?
A:从图可以看出,当路由器 R1 给主机 B 发送数据时,有两条路由, R1 > R4 > 主机 B 和 R1 > R2 > R3 > 主机 B, 执行下面步骤可以查看出 RIP 协议自动分配哪条路由。
使用
ifconfig
命令修改每台设备的 ip 地址 和网关,并且将网线接在对应的网口上。根据上文所讲,在路由器 R1 、R2 、R3 、R4 中配置和启动 Quagga 软件。
分别在路由器 R1 、R2 、R3 、R4 中启动 RIP 路由协议守护程序。
[root@sylixos:/root]# ripd &
使用 Telnet 工具通过路由器 R1 、R2 、R3 、R4 的 IP 及 2602 端口号进入到 RIP 协议配置界面,密码是 zebra。
Hello, this is Quagga (version 1.2.2). Copyright 1996-2005 Kunihiro Ishiguro, et al. User Access Verification Password:
分别进入路由器 R1 、R2 、R3 、R4 的 RIP 协议配置界面后,首先输入以下指令启动config配置模式。
ripd> enable ripd# configure terminal ripd(config)#
按照下面指令配置路由器 R1。
ripd(config)# router rip ripd(config-router)# network 192.168.11.0/24 ripd(config-router)# network 192.168.12.0/24 ripd(config-router)# end ripd#
按照下面指令配置路由器 R2。
ripd(config)# router rip ripd(config-router)# network 192.168.11.0/24 ripd(config-router)# network 192.168.150.0/24 ripd(config-router)# end ripd#
按照下面指令配置路由器 R3。
ripd(config)# router rip ripd(config-router)# network 192.168.100.0/24 ripd(config-router)# network 192.168.150.0/24 ripd(config-router)# end ripd#
按照下面指令配置路由器 R4。
ripd(config)# router rip ripd(config-router)# network 192.168.100.0/24 ripd(config-router)# network 192.168.12.0/24 ripd(config-router)# end ripd#
分别打开 R1 、R2、R3、R4 的Shell界面,使用
ipforward
命令打开设备的 IP 转发功能。
[root@sylixos:/root]# ipforward 1
[root@sylixos:/root]# ipforward
IPv4 forward: On IPv6 forward: On
- 在 R1 的Shell界面,输入
route
命令查看路由表信息。
[root@sylixos:/root]# route
IPv4 Route Table:
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.100.0 192.168.12.14 255.255.255.0 UG 2 0 0 en4
192.168.150.0 192.168.11.20 255.255.255.0 UG 2 0 0 en5
0.0.0.0 10.7.0.1 0.0.0.0 UG 3 0 0 en6
10.7.130.100 0.0.0.0 255.255.255.255 UH 3 0 0 en6
10.7.0.0 0.0.0.0 255.255.0.0 U 3 0 0 en6
192.168.11.2 0.0.0.0 255.255.255.255 UH 3 0 0 en5
192.168.11.0 0.0.0.0 255.255.255.0 U 3 0 0 en5
192.168.12.12 0.0.0.0 255.255.255.255 UH 3 0 0 en4
192.168.12.0 0.0.0.0 255.255.255.0 U 3 0 0 en4
10.4.0.94 0.0.0.0 255.255.255.255 UH 3 0 0 en3
10.4.0.0 0.0.0.0 255.255.0.0 U 3 0 0 en3
10.4.0.93 0.0.0.0 255.255.255.255 UH 3 0 0 en2
从上文可以看出,路由表中新增了两条路由,目标网络地址为 192.168.100.0(主机 B 的网络地址)的下一跃跳网络地址是 192.168.12.14 ,说明当 R1 向主机 B 发送数据的时候,选择的是路径较短的 R4 的路由。由此,证明 RIP 动态路由协议会优先选择路径最短的路由。
- 修改主机 B 的网关地址为 R4 的 en5 网卡的 IP 地址,因为当主机 B 接收到 R1 发送的数据包时,还需要返回一个响应给 R1,由于主机 B 使用的是默认网关,所以需要将网关修改成下一跳的 IP 地址。
[root@sylixos:/root]# ifconfig en2 gateway 192.168.100.10
- 打开 R1 的Shell界面,使用
ping
命令向主机 B 发送数据包, 结果显示发送和响应成功。
[root@sylixos:/root]# ping 192.168.100.30
Pinging 192.168.100.30
Reply from 192.168.100.30: bytes=32 time=0.155ms TTL=254
Reply from 192.168.100.30: bytes=32 time=0.189ms TTL=254
Reply from 192.168.100.30: bytes=32 time=0.201ms TTL=254
Reply from 192.168.100.30: bytes=32 time=0.215ms TTL=254
Ping statistics for 192.168.100.30:
Packets: Send = 4, Received = 4, Lost = 0(0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0.155ms, Maximum = 0.215ms, Average = 0.190ms
- 当拔掉路由器 R1 与 R4 之间的网线时,在 R1 的Shell界面输入
route
命令查看路由表信息。
[root@sylixos:/root]# route
IPv4 Route Table:
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.150.0 192.168.11.20 255.255.255.0 UG 2 0 0 en5
192.168.100.0 192.168.11.20 255.255.255.0 UG 3 0 0 en5
0.0.0.0 10.7.0.1 0.0.0.0 UG 4 0 0 en6
10.7.130.100 0.0.0.0 255.255.255.255 UH 4 0 0 en6
10.7.0.0 0.0.0.0 255.255.0.0 U 4 0 0 en6
192.168.11.2 0.0.0.0 255.255.255.255 UH 4 0 0 en5
192.168.11.0 0.0.0.0 255.255.255.0 U 4 0 0 en5
192.168.12.12 0.0.0.0 255.255.255.255 UH 4 0 0 en4
192.168.12.0 0.0.0.0 255.255.255.0 U 4 0 0 en4
10.4.0.94 0.0.0.0 255.255.255.255 UH 4 0 0 en3
10.4.0.0 0.0.0.0 255.255.0.0 U 4 0 0 en3
10.4.0.93 0.0.0.0 255.255.255.255 UH 4 0 0 en2
从上文可以看出,路由表自动发生了变化,RIP 协议检测到 R4 路由器发生了异常,自动切换到了另一条可用路由。由此证明,当路由发生异常时,RIP 动态路由协议会自动切换一条可用路由。
- 按照步骤 12 所说,修改主机 B 的网关地址为 R3 的 en5 网卡的 IP 地址 192.168.100.20。
[root@sylixos:/root]# ifconfig en2 gateway 192.168.100.20
- 打开 R1 的Shell界面,使用
ping
命令向主机 B 发送数据包, 结果显示发送和响应成功。
[root@sylixos:/root]# ping 192.168.100.30
Pinging 192.168.100.30
Reply from 192.168.100.30: bytes=32 time=0.325ms TTL=253
Reply from 192.168.100.30: bytes=32 time=0.375ms TTL=253
Reply from 192.168.100.30: bytes=32 time=0.373ms TTL=253
Reply from 192.168.100.30: bytes=32 time=0.360ms TTL=253
Ping statistics for 192.168.100.30:
Packets: Send = 4, Received = 4, Lost = 0(0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0.325ms, Maximum = 0.375ms, Average = 0.358ms