13.0IP路由基础

物理层

Hub

数据链路层

以太网交换机

用于网路内进行数据转发

网络层

路由器

连接不同的网络,实现网路之间的数据转发

路由器的基本工作原理

自治系统:AS由同一个管理机构

LAN和广播域

根据路由控制的范围可以将路由协议划分为以下两种类型

  • IGP(Interior Gateway Protocol):域内路由协议或内部网关协议

  • EGP (Exterior Gateway Protocol):域间路由协议或外部网关协议

提示:这里说的“域”,专业名称为自治系统路由选择域。是对网络群体划分的最小单位,是一个抽象概念。比如:由于每个企业或组织结构对网络管理方式不尽相同,我们可以将每个企业或组织甚至区域网络视为一个”域“,域内允许自定义的路由策略

更多信息请参见《图解TCP IP》第五版230页

  • IGP:可以使用RIP ( Routing Information Protocol,路由信息协议)、RIP2、OSPF ( Open Shortest Path First, 开放式最短路径优先)等众多协议。

  • EGP:可以使用BCP ( Border Gateway Protocol, 边界网关协议)协议。

路由器选择最优路由的方法

路由表格式:

Destination/Mask Proto Pre Cost Flags NextHop Interface

目标地址/掩码 协议 协议优先级 花费值 下一跳 路径口

优先级值越低越优先选择,协议优先值如下:

direct 0

ospf 10

isis 15

static 60

RIP 100

BGP 255

cost值越小越优先(cost值计算公式:10^8/100x10^6bps)

最长匹配原则:Routing Table中存在多条网络地址相同的记录,则选择更为具体的路由。例如192.168.1. 2的网络地址与192. 168/16和192. 168.1/24两项都匹配。根据最长匹配应该选择192. 168.1/24。

路由转发数据包

路由

# route -n 
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         192.168.0.254   0.0.0.0         UG    0      0        0 eth0

上面输出的数据共有八个字段,你需要注意的有几个地方:

Destination:其实就是Network 的意思;

Gateway:就是该接口的Gateway那个IP啦!若为0.0.0.0 表示不需要额外的IP;

Genmask:就是Netmask 啦!与Destination组合成为一部主机或网域;

Flags:共有多个旗标可以来表示该网域或主机代表的意义: U:代表该路由可用; ​ G:代表该网域需要经由Gateway 来帮忙转递; ​ H:代表该行路由为一部主机,而非一整个网域;

Iface:就是Interface (接口)的意思。

同网域的主机之间传递数据包

假设同网域主机A(ip:192.168.0.1)和主机B(ip:192.168.0.2),主机A向主机B发包。

目的主机B满足网域192.168.0.0/255.255.255.0,即匹配第一条路由。因为第二栏发现Gateway为0.0.0.0,即封包不需要经过Gateway,所以包就会直接从网络接口eth0传递出去。

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

不同网域的主机之间传递数据包

假设网域1存在主机A(ip:192.168.0.1),网域2存在主机B(ip:192.168.1.1),主机A向主机B发包。

目的主机B的IP不在路由规则里面,则封包将使用default路由传送出去。因为第二栏发现Gateway为192.168.0.254,即封包将通过网络接口eth0传递到Gateway192.168.0.254(也称路由器或通讯闸)上,由Gateway192.168.0.254将封包转发到主机B192.168.1.1上。

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.254   0.0.0.0         UG    0      0        0 eth0

注意:网关其实是一台路由器,路由器至少有两块网卡,分别连接 网域1 和 网域2

路由来源

  • Direct 直连路由 本接口已经启动

  • Static 静态路由 管理员手动添加

  • OSPF 动态路由 路由邻居之间相互告知

静态路由是指事先设置在路由器和主机中并将路由信息固定的一种方法。静态路由的设置通常是由使用者手工操作完成的。

例如,有100个IP网的时候,就需要设置近100个路由信息。并且,每增加一个新的网络,就需要将这个新被追加的网络信息设置在所有的路由器上。

动态路由是指让路由协议在运行过程中自动地设置路由控制信息的一种方法。需要设置好路由协议。

如果有一个新的网络被追加到原有的网络中时,只要在新增加网络的路由器上进行一个动态路由的设置即可。路由协议会给相邻路由器发送新添加路由器已知的网络连接信息,同理依次传递给其他路由器,直至整个网络都了解。

疑问:无论是手动设置的静态路由,还是通过路由协议实现的动态路由,似乎最终路由器之间都拥有了相同的Routing Table。但对于连接路由器的主机内,也存在一个Routing Table。主机内Routing Table也和路由器中的Routing Table一致么?若一致,主机内的Roting Table有必要了解整个路由拓扑么?

想了解路由器间Routing Table的格式可参见《图解TCP IP》第五版 137页

静态路由的操作命令

使用route指令

  • 路由查看:route [-nee]

  • 路由添加:route add [-net ; -host] [网域或主机] netmask [mask] [gw; dev]

  • 路由删除:route del [-net ; -host] [网域或主机] netmask [mask] [gw; dev]

  • 默认路由添加:route add default gw [路由器地址]

    更多信息请参考《鸟哥的Linux私房菜》151页

使用ip 指令

  • 路由查看:ip route show

  • 路由添加:ip route add [IP或网段] [via gateway] [ dev 网卡]

  • 路由删除:ip route del [IP或网段] [via gateway] [ dev 网卡]

  • 默认路由添加:ip route add default via [gateway] [dev 网卡]

注意 :

1.相比于route -n,使用ip route show查看到的路由信息更详细,其中需要额外关注的值分别为:

  • proto:此路由的路由协议,主要有redirect、kernel、boot、static、ra等,其中kernel指的 是直接由核心判断自动设定

  • scope:路由的范围,主要是link ,亦即是与本装置有关的直接联机。

    以上两句话,摘抄自《鸟哥的Linux私房菜》,有些晦涩难懂。不过可能可以发现, proto kernel scope link标记的路由都是不需要经过网关(路由器)的路由。如下:

    # route -n 
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         10.0.2.2        0.0.0.0         UG    100    0        0 eth0
    10.0.2.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0
    192.168.61.0    0.0.0.0         255.255.255.0   U     101    0        0 eth1
    
    
    
    # ip route show
    default via 10.0.2.2 dev eth0 proto dhcp                                metric 100 
    10.0.2.0/24          dev eth0 proto kernel scope link src 10.0.2.15     metric 100 
    192.168.61.0/24      dev eth1 proto kernel scope link src 192.168.61.22 metric 101
  • 相比于route add,ip route add可以设定MTU的数值

更多信息请参考《鸟哥的Linux私房菜》157页

如何判断2个IP是否在同一个网段?

你需要知道子网掩码,通过各自IP和子网掩码,计算出网络号,网路号相同,则2个IP处于同一个网段

疑问1:路由A通过网卡eth0通向网域1;路由B通过网卡eth1同样通向网域1。那么通向网域1的封包将从那块网卡流出?判断的标准是什么?

疑问2:网卡eth0有预设路由,网卡eth1也有预设路由,那么封包将通过那块网卡流出?判断的标准是什么?

《鸟哥的Linux私房菜》中说到default gateway应该只能有一个,让不要设置两个default gateway。但并未给出“若有两个预设路由,封包将从那块网卡流出”的答案。需要进一步探索

参考书籍

《鸟哥的Linux私房菜》— 观察主机路由:Route 页码77

策略路由

路由策略

在 Linux 系统启动时,内核会为路由策略数据库配置三条缺省的规则:

  • 0 匹配任何条件 查询路由表local(ID 255) 路由表local是一个特殊的路由表,包含对于本地和广播地址的高优先级控制路由。rule 0非常特殊,不能被删除或者覆盖。

  • 32766 匹配任何条件 查询路由表main(ID 254) 路由表main(ID 254)是一个通常的表,包含所有的无策略路由。系统管理员可以删除或者使用另外的规则覆盖这条规则。

  • 32767 匹配任何条件 查询路由表default(ID 253) 路由表default(ID 253)是一个空表,它是为一些后续处理保留的。对于前面的缺省策略没有匹配到的数据包,系统使用这个策略进行处理。这个规则也可以删除。

查看路由策略:ip rule list

添加路由策略,示例:

  • ip rule add from 192.203.80/24 table inr.ruhep prio 220 通过路由表 inr.ruhep 路由来自源地址为192.203.80/24的数据包

  • ip rule add from 193.233.7.83 nat 192.203.80.144 table 1 prio 320 把源地址为193.233.7.83的数据报的源地址转换为192.203.80.144,并通过表1进行路由

路由表

linux 系统中,linux系统维护了4个路由表,分别为:

  • 0#表: 系统保留表

  • 253#表: defulte table 没特别指定的默认路由都放在改表

  • 254#表: main table 没指明路由表的所有路由放在该表(该表的数据和执行ip route得到的数据一致)

  • 255#表: locale table 保存本地接口地址,广播地址、NAT地址 由系统维护,用户不得更改

提示:除了以上的4个系统路由表,用户可以自定义从 1-252的路由表

路由表的查看可有以下二种方法:

  • ip route list table table_number

  • ip route list table table_name

路由表序号和表名的对应关系在 /etc/iproute2/rt_tables 文件中,可手动编辑。

向路由表添加路由,路由表添加完毕即时生效。示例如下:

  • ip route add 192.168.0.0/24 via 192.168.1.2 table 1 在一号表中添加一条到192.168.0.0网段的路由为192.168.1.2

  • ip route add default via 192.168.1.1 table 1 在一号表中添加默认路由为192.168.1.1

#!/bin/sh
echo 1> /proc/sys/net/ipv4/ip_forward  

iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE  
iptables -t nat -A POSTROUTING -s 172.16.3.0/24 -j MASQUERADE

ip rule add from 192.168.2.25 lookup 5  
ip rule add from 192.168.2.128 lookup 5  
ip route add default via 192.168.0.1 table 5  

ip rule add from 192.168.2.0/24 lookup 6  
ip rule add from 172.16.3.0/24 lookup 6  
ip route add default via 192.168.1.1 table 6  

ip route flush cache

Last updated

Was this helpful?