一、相关概念

1. 路由(Routing)

路由是指设备从一个接口上收到数据包,根据数据包的目的地址进行定向并转发到另一个接口的过程。

2. 路由表(routing table)

所谓路由表,是指路由器或者其它互联网网络设备上存储的表,该表中存有到达特定网络终端的路径,在某些情况下,还有一些与这些路径相关的度量,表中包含的信息决定了数据转发的策略。路由表根据其建立的方法,可以分为动态路由表和静态路由表。

Linux 2.x以上,路由表由1~2^31范围内的数字或文件/etc/iproute2/rt_tables中的名称标识。其中,系统维护了4个路由表(0, 253, 254, and 255),其余管理员可自定义:

0#表:系统保留表

253#表:default table,是一个空表为一些后续处理保留的

254#表:main table,所有没指明路由表的路由保存在该表

255#表:local table,保存本地路由和广播路由,由系统维护

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

3. 策略路由

策略路由是指按照用户制定的策略进行路由选择,是一种比基于目标网络进行路由更加灵活的数据包路由转发机制,它使网络管理员不仅能够根据目的地址而且能够根据报文大小、应用或IP源地址等属性来选择转发路径。

4. 路由选择

当TCP/IP需要向某个IP地址发起通信时,它会对路由表进行评估,以确定如何发送数据包。评估过程如下:

(1) TCP/IP使用需要通信的目的IP地址和路由表中每一个路由项的网络掩码进行相与计算,如果相与后的结果匹配对应路由项的网络地址,则记录下此路由项。

(2) 当计算完路由表中所有的路由项后:

(a) TCP/IP选择记录下的路由项中的最长匹配路由(网络掩码中具有最多“1”位的路由项)来和此目的IP地址进行通信。

(b) 如果存在多个最长匹配路由,那么选择具有最低跃点数的路由项。

(c) 如果存在多个具有最低跃点数的最长匹配路由,那么:均根据最长匹配路由所对应的网络接口在网络连接的高级设置中的绑定优先级来决定(一般有线(eth0) > 无线 (wlan0) > 移动信号(4G))。

(d) 如果优先级一致,则选择最开始找到的最长匹配路由。(排在前面的路由)

网络路由的优先级介于主机路由和默认路由之间,精度越高,优先级越高。

二、route

传统显示/操作内核IP路由表的工具(net-tools工具包的一部分),主要用途是通过接口设置到特定主机或网络的静态路由。

1. 查看路由表信息

-C

显示路由缓存

-v

显示详细的操作

-n

显示数字地址,不尝试确定主机名,加快显示速度

-e

使用netstat格式显示路由表

-ee

使用更详细的信息显示路由表

路由表输出项说明:

Destination

目标网络或目标主机

Gateway

网关地址或”*”(如果未设置)

Genmask

目标网络的网络掩码,”255.255.255.255”为主机,”0.0.0.0”为默认路由

Flags

路由标记,可能的标记包括:

U--路由是活动的

H--主机路由

G--网关路由

R--恢复动态路由产生的表项

D--由路由的后台程序动态创建

M--由路由的后台程序修改

! --阻塞路由

Metric

路由距离,到达指定网络所需的跳跃数(linux内核没有使用)

Ref

使用此路由的活动进程个数(linux内核没有使用)

Use

查找此路由的次数

Iface

该路由项对应的输出接口

2. 操作静态路由

命令格式:route [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]

add

添加路由

del

删除路由

-net

目标是一个网络

-host

目标是一个主机

target

目标网络或主机,可以是IP地址或网络主机名

netmask NM

添加网络路由时用到的网络掩码

netmask匹配的位数越高该条路由匹配时的优先级也越高

gw GW

指定通过网关路由,后面接网关地址

metric M

设置路由的metric字段(路由跳数)。它用在路由表里存在多个路由时选择与转发包中的目标地址最为匹配的路由,所选的路由具有最少的跃点数,故Metric值越小,优先级越高。

dev If

指定网络接口发送数据,如果dev If是最后一个选项,则dev可以省略

3. 应用实例

1)添加默认网关路由

route add default gw 192.168.7.1

2)删除默认网关路由

route del default gw 192.168.7.1

3)添加到指定网络的路由

route add -net 224.0.0.0/8 ens33

4)删除到指定网络的路由

route del -net 224.0.0.0 netmask 255.0.0.0 ens33

三、ip route

配置内核路由表中静态路由的工具,是iproute2工具包的一部分,可以和ip rule工具组合配置策略路由。

1. 命令格式

常见命令格式如下:

ip route { list | flush } SELECTOR
ip route 操作命令 匹配条件 [ via [ FAMILY ] ADDRESS ] [ dev STRING ]

ip route

查看默认路由表(main)路由

ip route {add|append}

添加新路由

ip route change

更改路由,修改当前存在的路由

ip route replace

更改或添加新路由

ip route {del|delete}

根据条件(to、tos、preference和table关键字值)删除指定路由

ip route {list|show}

显示路由表的内容或匹配特定条件的路由,缺省为显示main表

to SELECTOR--显示特定目的地的路由

table TABLEID--显示指定表的路由,TABLEID为路由表的id或all(所有路由表)、cache(路由缓存)其中之一

from SELECTOR--显示特定源的路由

protocol RTPROTO--显示指定协议的路由

scope SCOPE_VAL--显示指定作用域的路由

type TYPE--显示指定类型的路由

dev NAME--显示经过指定设备接口的路由

via [ FAMILY ] PREFIX--显示通过特定下一跳路由的路由

src PREFIX--显示通过特定上一跳路由的路由

ip route flush

删除特定条件的路由,参数同ip route show

ip route get ADDRESS

获取特定IP的路由包信息

【附录】

to TYPE PREFIX

路由目的地址,TYPE缺省为unicast,PREFIX缺省为0/0

metric NUMBER

路由跳数

preference NUMBER

路由权重

table TABLEID

将要操作的路由表

dev NAME

发送接口名称

via [ FAMILY ] ADDRESS

下一跳路由的地址,该字段取决于路由类型

src ADDRESS

指定使用特定源地址(多IP或多网卡情况),只对该主机产生的网络包有效

scope SCOPE_VAL

目的地作用域,SCOPE_VAL可以是数值或字符串(/etc/iproute2/rt_scopes),缺省时网关单播路由为global,直接单播和广播路由为link,本地路由为host

protocol RTPROTO

路由协议标记,RTPROTO可以是数值或字符串(/etc/iproute2/rt_protos),缺省时为boot,常见的有如下几种:

redirect--ICMP重定义创建

kernel--内核自动配置创建

boot--系统启动过程创建,路由进程启动后将被删除

static--管理员手动创建

ra--路由发现协议创建

FAMILY := [ inet | inet6 | ipx | dnet | mpls | bridge | link ]

TYPE := [ unicast | local | broadcast | multicast | throw | unreachable | prohibit | blackhole | nat ]

TABLE_ID := [ local| main | default | all | NUMBER ]

SCOPE := [ host | link | global | NUMBER ]

RTPROTO := [ kernel | boot | static | NUMBER ]

2. 应用实例

1)显示路由

示例一:显示指定路由表的路由

ip route show table 10

示例二:显示指定网段的路由

ip route list 192.168.7.0/24

示例三:显示所有路由表的路由

ip route show table all

2)添加路由表

示例一:通过添加路由方式添加路由表

ip route add 192.168.11.0/24 dev ens33 table 100

注:table 100为不存在的路由表ID

示例二:通过配置文件方式添加路由表

echo "252 TEST" >> /etc/iproute2/rt_tables

注:252 为路由表ID,TEST为路由表名

3)添加路由

命令格式:ip route add TARGET [via GW] [dev IFACE] [src SOURCE_IP] [table TABLEID]

【注】TARGET可以是:

主机路由:具体IP地址

网络路由:NETWORK/MASK

示例一:添加默认路由

ip route add default via 192.168.7.1 table 10

示例二:添加到指定网络的路由

ip route add 192.168.11.0/24 via 192.168.7.1 metric 10 table 10

示例三:添加到指定主机的路由

ip route add 192.168.11.1 dev ens33

4)追加路由

ip route append 192.168.5.0/24 via 192.168.7.1

5)修改路由

方法一:

ip route change 192.168.2.0/24 via 192.168.7.2

方法二:

ip route replace 192.168.3.0/24 via 192.168.7.2

6)删除路由

命令格式:ip route del TARGET [via GW] [dev IFACE] [src SOURCE_IP] [table TABLEID]

示例一:删除指定表中默认路由

ip route del default table 100

示例二:删除特定网络路由

ip route del 192.168.5.0/24 via 192.168.7.1

示例三:删除指定表中特定网络路由

ip route del 192.168.1.0/24 table 100

7)清空路由表

示例一:清空所有路由表

ip route flush

示例二:清空指定网络的路由

ip route flush 192.168.2.0/24

三、ip rule

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

1)优先级:0,匹配任何数据包,查询路由表local(ID 255)。local表是一个特殊的路由表,包含本地和广播地址的高优先级控制路由,使用者不应删除或重写它

2)优先级:32766,匹配任何数据包,查询路由表main(ID 254)。main表是包含所有非策略路由的常规路由表。管理员可以删除或用其他规则重写此规则

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

1. 命令格式

ip rule [ list | add | del | flush] SELECTOR ACTION

常见操作如下:

ip rule add

插入新规则

ip rule {del|delete}

删除特定规则

ip rule flush

删除所有规则,没有参数

ip rule show

显示规则,list和lst等同于show,没有参数

常见匹配条件如下:

type TYPE (default)

选择规则类型匹配,共有如下几种类型:unicast、blackhole、unreachable、prohibit、nat

from PREFIX

选择源地址前缀匹配

to PREFIX

选择目的地址前缀匹配

iif NAME

选择要匹配的接收设备

oif NAME

选择要匹配的发送设备

fwmark MARK

选择fwmark值匹配

priority PREFERENCE

指定此规则的优先级,每个规则都有唯一优先级,preference和order等同于priority

table TABLEID

规则匹配时要查找的路由表标识

ACTION := [ table TABLE_ID ]

[ realms [SRCREALM/]DSTREALM ]

[ goto NUMBER ]

TABLE_ID := [ local | main | default | NUMBER ]

【注】不要混淆路由表和策略:规则指向路由表,多个规则可以引用同一个路由表,且某些路由表可以没有策略指向它。如果系统管理员删除了指向某个路由表的所有规则,这个表就没有用了,但是仍然存在,直到里面的所有路由都被删除,它才会消失。

2. 应用实例

1)显示规则

命令格式:ip rule {show|list|lst}

输出说明:

a) 第一个字段表示规则的优先级,数字越小,表示优先级越高

b) 第二个字段表示匹配条件

c) 第三个字段表示表id,可能是表名或数值

2)添加规则

命令格式:ip rule add 匹配条件 [优先级] [表id]

【注】表缺省为main;优先级缺省从main或自定义最低优先级序号开始,然后依次递减,即优先级越来越高

示例一:添加源IP段和目的IP策略路由

ip rule add from 192.168.7.0/24 to 8.8.8.8 prio 10 table 200

示例二:添加接收设备策略路由

ip rule add dev ens33 table 1

示例三:添加fwmark值策略路由

ip rule add fwmark 1

3)删除规则

命令格式:ip rule del [匹配条件] [优先级] [表id]

【注】匹配条件、表id、优先级可以同时指定其中一个或多个,如果缺省会按照优先级顺序,从最高优先级依次删除

示例一:根据优先级删除

ip rule del prio 10

示例二:根据匹配条件删除

ip rule del from 192.168.7.0/24 to 8.8.8.8

示例三:根据路由表id删除

ip rule del table 200

示例四:根据匹配条件、表id和优先级删除

ip rule del from 192.168.7.0/24 to 8.8.8.8 prio 10 table 200

四、参考资料

1. https://www.cnblogs.com/EasonJim/p/8424731.html

2. https://blog.csdn.net/u011857683/article/details/83795435

Linux系统route、ip route、ip rule简介相关推荐

  1. Linux系统下如何设置IP地址?

    Linux系统下如何设置IP地址?我们可以通过命令设定IP的方法,不过此方法的前提条件是用户需root权限.在linux系统的 /etc/sysconfig/network-script/ifcfg- ...

  2. linux ubuntu 获取ip,linux系统(ubuntu)怎么查看ip地址

    基于linux内核的国产操作系统是否能够被大众接受是一个至关重要的问题,那么linux的基本操作中,如何查看本机的ip地址呢?下面学习啦小编就以ubuntu为例,来解释这个问题. linux系统(ub ...

  3. 装机linux系统后,修改ip地址

    装机linux系统后,修改ip地址 装了一台centos的电脑,本地设置绑定ip地址,使用root账户登录,进入系统. 进入 /etc/sysconfig/network-scripts 目录,修改网 ...

  4. java实现在Linux系统中动态切换IP

    java实现在Linux系统中动态切换IP 本文提供了一个可以在linux系统中,使用Java代码切换本地IP地址的方案: Tips: 1.本程序用于在Linux服务器上切换IP,在windows上无 ...

  5. Linux系统中手动配置IP地址(CentOS 7、8为例)

    第一步:进入网卡配置目录 [root@huyuxuan /]# cd /etc/sysconfig/network-scripts [root@huyuxuan network-scripts]# l ...

  6. linux系统下管理网口ip设置密码,Linux系统管理-(12)-网络配置IP命令

    ip命令: ip [ OPTIONS ] OBJECT { COMMAND | help } object: link addr route link : show [dev name|up] 显示l ...

  7. 刚在虚拟机上装的Linux系统,ifconfig后IP地址怎么成了127.0.0.1了

    之前在虚拟机上装了Linux系统,用了一段时间后想删除了重新装一下,然而装完以后ifconfig后,出现的是 [root@localhost ~]# ifconfig lo Link encap:Lo ...

  8. linux系统里route -n不起作用,Linux系统中的route解析

    今天遇到一个问题,服务器A  telnet服务器B  873 不通. 双方均检测防火墙,发现权限都开通,且没有问题. 后来发现是路由的问题 A路由如下(只看内网): [root@BJ-YF-3 ~]# ...

  9. linux系统中如何查ip,在Linux系统中查看ip的命令是什么

    在Linux系统中查看ip的命令是什么 发布时间:2020-04-30 10:32:07 来源:亿速云 阅读:432 作者:小新 在排除网络问题,设置新连接或配置防火墙时,了解设备的 IP 地址非常重 ...

  10. linux系统修改bond的ip,Linux下快速设定ip bond,linux设定ipbond

    Linux下快速设定ip bond,linux设定ipbond 在计算机网路普及的初期,很多OS系统都使用的为单网卡方式,即一个网卡使用一个IP地址.随着网络要求的不断提高,我们可以对多个网卡进行绑定 ...

最新文章

  1. Visual Studio调试之符号文件
  2. php api 无符号整数基数为16的整数参数的字符串表示形式,php基础语法
  3. [征求意见]团队发展、技术交流主题、团队机构
  4. springboot 定时任务注入线程池
  5. Excel酷炫技能,批量修改工作表名称,让你的工作事半功倍
  6. 【转】ABP源码分析一:整体项目结构及目录
  7. gdb 调试_GDB调试指南-源码查看
  8. 2018python做图形界面哪个库简单_2018年常见的python编程开发库都有哪些类型
  9. python pdf报告_python生成pdf报告、python实现html转换为pdf报告
  10. 链表的常见操作(转)
  11. Oracle Concepts Guide 中 Oracle 实例 和 数据库 【关系图】
  12. linux 串口与并口,并口和串口的区别是什么
  13. 晶体管电路设计下 【日】铃木雅臣
  14. python保存超大数据excel表格——大于65532
  15. Day05_生命周期_组件进阶
  16. Doom3bfg 技术说明
  17. stm32f103 ds18B20 驱动及芯片资料
  18. Ext2.2 combo 多选效果
  19. 用c语言验证5阶魔方矩阵,穷举法打印n阶魔方矩阵
  20. unity3d 工程原理_Unity3D——镜面反射原理及实现(一)

热门文章

  1. Linux系统关闭防火墙命令
  2. 【每日早报】2019/11/15
  3. 中华好诗词大学季第二季(三)
  4. PHP怎么实现页面重定向?
  5. 64位Windows10系统安装.NET Framework 3.5
  6. 将汉字和字母转换为Unicode码
  7. 同事来信:生死边缘,与空难擦肩而过
  8. 实体间的联系存在着( )_【活动】迎新年送实体黑球+实况足球手游国服曼联精选抽黑视频!...
  9. C# 关于JArray和JObject封装JSON对象
  10. ioremap函数分析