> 文档中心 > iproute2路由配置(ip rule、ip route、traceroute)

iproute2路由配置(ip rule、ip route、traceroute)


一、Iproute2简介

Iproute2是一个在Linux下的高级网络管理工具软件。实际上,它是通过rtnetlink sockets方式动态配置内核的一些小工具组成的,从Linux2.2内核开始,Alexey Kuznetsov 实现了通过rtnetlink sockets用来配置网络协议栈,它是一个现代的强大的接口。

centos安装iproute2命令:

yum install -y iproute
ip -V

二、iproute2常用命令

在这里插入图片描述
net-tools和iproute2的大致对比:

net-tools iproute2 功能
netstat -r/route -n ip route show 查看路由信息
route add ip route add 添加路由
route del ip route del 删除路由
ifconfig ip link 显示up状态(激活状态)的网卡信息
ifconfig -a ip addr show 显示所有网卡的信息,包含未up的
ifconfig -s ip -s link 显示摘要信息
ifconfig -help ip -help 查看帮助
ifconfig eth0 up ip link set eth0 up 启动网卡
ifconfig eth0 down ip link set eth0 down 停掉网卡
netstat ss 监控工具
netstat -l ss -l 查看listen监听状态的连接信息
iptunnel ip tunnel ip隧道
netstat -g/ipmaddr ip maddr 多播地址管理
arp -na ip neigh arp地址解析信息ip->mac地址

三、路由(ip rule、ip route)

3.1、路由策略(ip rule)

基于策略的路由比传统路由在功能上更强大,使用更灵活,它使网络管理员不仅能够根据目的地址而且能够根据报文大小、应用或IP源地址等属性来选择转发路径。

ip rule 命令:

Usage: ip rule [ list | add | del ] SELECTOR ACTION (add 添加;del 删除; llist 列表)

3.1.1、添加规则
1)Source IP

根据来源端IP来决定数据包参考哪个路由表发送出去。以下两个示例分别指出,如果数据包的来源端IP是192.168.182.10,就参考路由表10;如果来源端IP为192.168.182.0/24网段的IP,就参考路由表20。

ip rule add from 192.168.182.10 table 10  ip rule add from 192.168.182.0/24 table 20 

2)Destination IP

根据目的端IP来决定数据包参考哪个路由表发送出去。以下两个示例分别指出,如果数据包的目的端IP是192.168.183.1,就参考路由表10;如果目的端IP是192.168.183.0/24网段的IP,就参考路由表20。

ip rule add to 192.168.183.1 table 10  ip rule add to 192.168.183.0/24 table 20 

3.1.2、示例:

# 添加路由表echo '1024    tab1' >> /etc/iproute2/rt_tables# 通过路由表 tab1 路由来自源地址为192.168.182.0/24的数据包,优先级220ip rule add from 192.168.182.0/24 table tab1 prio 220# 把源地址为192.168.182.247的数据报的源地址转换为192.168.182.130,并通过表tab1进行路由ip rule add from 192.168.182.247 nat 192.168.182.130 table tab1 prio 320# 删除ip rule del from 192.168.182.0/24 table tab1 prio 220ip rule del from 192.168.182.247 nat 192.168.182.130 table tab1 prio 320

iproute2路由配置(ip rule、ip route、traceroute)

我们执行ip rule show命令所显示内容的第一个字段就是优先级别(prio),数字越小,代表优先级别越高,也代表这条规则可以排得越靠前,如此数据包在进行条件匹配时,就会越早匹配到这条规则,从输出的数据中,默认优先级别0、32766及32767已被占用,因此,在添加规则时,如果没有特别设置优先级别,那么,优先级别默认会从32766开始递减,如32765、32764……,如果我们需要特别设置优先级别,可以在ip rule add命令的最后加上prio XXX参数。

3.2、路由表 (使用 ip route 命令操作静态路由表)

所谓路由表,指的是路由器或者其他互联网网络设备上存储的表,该表中存有到达特定网络终端的路径。路由器的主要工作就是为经过路由器的每个数据包寻找一条最佳的传输路径,并将该数据有效地传送到目的站点。为了完成这项工作,在路由器中保存着各种传输路径的相关数据——路由表(Routing Table),供路由选择时使用,表中包含的信息决定了数据转发的策略。路由表根据其建立的方法,可以分为动态路由表静态路由表

linux 系统中,可以自定义从 1-252个路由表,其中,linux系统维护了4个路由表:

0: 系统保留表253: defulte table 没特别指定的默认路由都放在改表254: main table 没指明路由表的所有路由放在该表,**默认表**255: locale table 保存本地接口地址,广播地址、NAT地址 由系统维护,用户不得更改

备注:我们使用ip route list 或 route -n 或 netstat -rn查看的路由记录,也都是main表中记录。

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

ip route list table table_numberip route list table 1204ip route list table table_nameip route list table tab1

路由表序号和表名的对应关系在 /etc/iproute2/rt_tables 文件中,可手动编辑。路由表添加完毕即时生效,下面为实例(最好把默认路由最后添加):

ip route add 192.168.182.0/24 dev ens33 proto kernel scope link src 192.168.182.130 metric 100 table tab1ip route add default via 192.168.182.2 dev ens33 proto static metric 100 table tab1

默认路由需要特别注意,走默认路由的话会导致非同一子网内的访问失败

3.3、route 命令里面的metric是做什么用的?

metric 为路由指定所需跃点数的整数值(范围是 1 ~ 9999),它用来在路由表里的多个路由中选择与转发包中的目标地址最为匹配的路由。所选的路由具有最少的跃点数。跃点数能够反映跃点的数量、路径的速度、路径可靠性、路径吞吐量以及管理属性。

路由算法使用了许多不同的metric以确定最佳路径。复杂的路由算法可以基于多个metric选择路由,并把它们结合成一个复合的metric。常用的metric如下:
1)路径长度

【路径长度】是最常用的路由metric。一些路由协议允许网管给每个网络链接人工赋以代价值,这种情况下,路由长度是所经过各个链接的代价总和。其它路由协议定义了跳数,即分组在从源到目的的路途中必须经过的网络产品,如路由器的个数

2)可靠性

可靠性,在路由算法中指网络链接的可依赖性(通常以位误率描述),有些网络链接可能比其它的失效更多,网路失效后,一些网络链接可能比其它的更易或更快修复。任何可靠性因素都可以在给可靠率赋值时计算在内,通常是由网管给网络链接赋以metric值。

3)延迟

路由延迟指分组从源通过网络到达目的所花时间。很多因素影响到延迟,包括中间的网络链接的带宽、经过的每个路由器的端口队列、所有中间网络链接的拥塞程度以及物理距离。因为延迟是多个重要变量的混合体,它是个比较常用且有效的metric。

4)带宽

带宽指链接可用的流通容量。在其它所有条件都相等时,10Mbps的以太网链接比64kbps的专线更可取。虽然带宽是链接可获得的最大吞吐量,但是通过具有较大带宽的链接做路由不一定比经过较慢链接路由更好。例如,如果一条快速链路很忙,分组到达目的所花时间可能要更长。

5)负载

负载指网络资源,如路由器的繁忙程度。负载可以用很多方面计算,包括CPU使用情况和每秒处理分组数。持续地监视这些参数本身也是很耗费资源的。

6)通信代价

通信代价是另一种重要的metric,尤其是有一些公司可能关系运作费用甚于性能。即使线路延迟可能较长,他们也宁愿通过自己的线路发送数据而不采用昂贵的公用线路。

四、ip route基本用法

4.1、显示ip地址

ip aip address showip addr show dev ens33ip a sh ens33

4.2、列出规则,查看表

ip ruleip rule listip rule show

4.3、增加/删除/清空规则

# 增加规则ip rule add from 192.168.1.10 table 10  ip rule [del|delete]ip rule del from 192.168.1.10 table 10# 清空所有规则,没有参数ip rule flush

4.4、列出路由

ip route listip route showip route# 显示所有路由表的路由ip route show table all

4.5、查看指定网段的路由

ip route list 192.168.182.0/24

4.6、添加路由

ip route add 192.168.182.0/24 dev ens33 proto kernel scope link src 192.168.182.130 metric 100 table tab1# 添加默认路由ip route add default via 192.168.182.2 dev ens33 proto static metric 100 table tab1

4.7、删除路由

ip route del 192.168.182.0/24 dev ens33 proto kernel scope link src 192.168.182.130 metric 100 table tab1ip route del default via 192.168.182.2 dev ens33 proto static metric 100 table tab1

4.8、清空指定网络的路由

# 清空默认表路由ip route flush# 清空指定表路由ip route flush table tab1# 模糊匹配清空路由ip route flush 192.168.182.0/24 #这个是清理所有192.168.182.0/24相关的所有路由,#有时候设置错网关存在多条记录,就需要一次性清空相关路由再进行添加

五、路由分类之动态路由

动态路由是指路由器能够自动地建立自己的路由表,并且能够根据实际情况的变化适时地进行调整。它是与静态路由相对的一个概念,指路由器能够根据路由器之间的交换的特定路由信息自动地建立自己的路由表,并且能够根据链路和节点的变化适时地进行自动调整。当网络中节点或节点间的链路发生故障,或存在其它可用路由时,动态路由可以自行选择最佳的可用路由并继续转发报文。

常见的动态路由协议有以下几个:

路由信息协议(RIP)、OSPF(Open Shortest Path First开放式最短路径优先)、IS-IS(Intermediate System-to-Intermediate System,中间系统到中间系统)、边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议。

六、ip route结合iptables做高级路由策略

1、创建路由表tab2

echo '1025    tab2' >> /etc/iproute2/rt_tables

2、添加 ip rule 规则

 ip rule add  fwmark 3  table tab2 

(fwmark 3是标记,table tab1是路由表tab1。 意思就是凡是标记了 3 的数据使用tab1 路由表)
3、添加路由规则

ip route add 192.168.182.0/24 dev ens33 proto kernel scope link src 192.168.182.130 metric 100 table tab2# 添加默认路由ip route add default via 192.168.182.2 dev ens33 proto static metric 100 table tab2

4、使用iptables给相应的数据打上标记:

 iptables -A PREROUTING -t mangle -i ens33 -s 192.168.182.130-192.168.182.180 -j MARK --set-mark 3

因为mangle的处理是优先于 nat 和fiter表的,所以相应数据包到达之后先打上标记,之后再通过ip rule规则。对应的数据包使用相应的路由表进行路由,最后读取路由表信息,将数据包送出网关。

七、traceroute命令使用

7.1、简介

traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes,用户可另行设置。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。linux系统中,我们称之为traceroute,在 Windows中为tracert。 traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。

7.2、命令格式:

traceroute [-dFlnrvx][-f][-g…][-i][-m][-p][-s][-t][-w][主机名称或IP地址][数据包大小]

命令参数:

-d 使用Socket层级的排错功能。-f 设置第一个检测数据包的存活数值TTL的大小。-F 设置勿离断位。-g 设置来源路由网关,最多可设置8个。-i 使用指定的网络界面送出数据包。-I 使用ICMP回应取代UDP资料信息。-m 设置检测数据包的最大存活数值TTL的大小。-n 直接使用IP地址而非主机名称。-p 设置UDP传输协议的通信端口。-r 忽略普通的Routing Table,直接将数据包送到远端主机上。-s 设置本地主机送出数据包的IP地址。-t 设置检测数据包的TOS数值。-v 详细显示指令的执行过程。-w 设置等待远端主机回报的时间。-x 开启或关闭数据包的正确性检验。
7.3、简单使用

1)不加任何参数

$ traceroute www.baidu.com 

输出:

traceroute to www.baidu.com (183.232.231.174), 30 hops max, 60 byte packets 1  gateway (192.168.182.2)  0.094 ms  0.077 ms  0.044 ms  0.079 ms 2  * * * * 3  * * * * 4  * * * * 5  * * * * 6  * * * * 7  * * * * 8  * * * * 9  * * * *10  * * * *11  * * * *12  * * * *13  * * * *14  * * * *15  * * * *16  * * * *17  * * * *18  * * * *19  * * * *20  * * * *21  * * * *22  * * * *23  * * * *24  * * * *25  * * * *26  * * * *27  * * * *28  * * * *29  * * * *30  * * * *

说明:

  • 记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是ms,其实就是-q的默认参数。探测数据包向每个网关发送3个数据包后,网关响应后返回的时间;如果您用 traceroute -q 4 www.baidu.com ,表示向每个网关发送4个数据包。
  • 有时我们traceroute一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。
  • 有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台DNS出现问题时,不能解析主机名、域名时,也会有延时长的现象;您可以加**-n 参数来避免DNS解析**,以IP格式输出数据。
    2)跳数设置(-m)
$ traceroute -m 10 www.taobao.com

输出:

traceroute to www.baidu.com (183.232.231.174), 10 hops max, 60 byte packets 1  gateway (192.168.182.2)  0.116 ms  0.095 ms  0.036 ms 2  * * * 3  * * * 4  * * * 5  * * * 6  * * * 7  * * * 8  * * * 9  * * *10  * * *

3)显示IP地址,不查主机名(-n)

$ traceroute -n -m 4 www.baidu.com

输出:

traceroute to www.baidu.com (183.232.231.174), 4 hops max, 60 byte packets 1  192.168.182.2  0.079 ms  0.039 ms  0.037 ms 2  * * * 3  * * * 4  * * *

4)探测包使用的基本UDP端口设置8080(-p)

$ traceroute -p 8080 -m 4 www.baidu.com

输出:

traceroute to www.baidu.com (183.232.231.174), 4 hops max, 60 byte packets 1  gateway (192.168.182.2)  0.096 ms  0.042 ms  0.067 ms 2  * * * 3  * * * 4  * * *

5)绕过正常的路由表,直接发送到网络相连的主机(-r)

$ traceroute -r www.baidu.com

输出:

traceroute to www.baidu.com (183.232.231.174), 30 hops max, 60 byte packetsconnect: Network is unreachable

6)把对外发探测包的等待响应时间设置为3秒(-w)

$ traceroute -w 3 -m 4 www.baidu.com

输出:

traceroute to www.baidu.com (183.232.231.174), 4 hops max, 60 byte packets 1  gateway (192.168.182.2)  0.102 ms  0.065 ms  0.066 ms 2  * * * 3  * * * 4  * * *