Linux 路由配置与使用

概念

路由信息用于指导数据包从源地址查找到目的地址传输路径的信息;

路由分类

根据路由信息的来源分为静态路由和动态路由

静态路由

由管理员手动配置的路由表项信息,根据路由形式的不同,静态路由又可细分为:

直连路由:基于设备直连子网形成的路由信息

基本路由:基于报文目的地址寻找下一跳路径的路由信息。

策略路由:可以基于报文的源地址、目的地址、源端口、目的端口等多种因素对报文转发路径进行更细致的控制。

动态路由

基于某种动态路由协议,由设备间自动协商产生的路由信息,根据动态路由协议的不同,动态路由可以分为:RIP、OSPF、BGP等;

本次主要学习了解静态路由,动态路由相关内容不在此展开。

路由配置

如上所述,静态路由通过手工配置,动态路由根据协议协商生成,因此这里主要介绍静态路由的配置。

基本路由

Linux 下配置路由有多种方式

route命令

route命令用于在Linux系统中查看或配置IP路由表,它允许用户查看当前系统的路由表,添加静态路由、删除路由等。

route命令使用说明:

route -CFvnNee -A family \|-4\|-6 显示路由信息

route -v -A family \|-4\|-6 add -net\|-host target netmask Nm gw Gw metric N mss M window W irtt I reject mod dyn reinstate \[dev If] 添加路由表项信息

route -v -A family \|-4\|-6 del -net\|-host target gw Gw netmask Nm metric M \[dev If] 删除路由表项信息。

参数选项说明:

-n, --numeric 以数字形式显示,不反向解析名字

-e, --extend 显示扩展信息,--ee显示路由表项的所有参数信息

-F, --fib 显示转发信息库中的路由信息

-C, --cache 显示路由缓存中的信息

target 目的网络或主机

-net 目标是网络

-host 目标是主机地址

gw 下一跳网关地址

dev 出接口,将路由信息和某个特定网络设备关联

使用示例:

  1. 添加路由信息

route add -net 3.3.3.0/24 gw 1.1.1.1

route add -net 4.4.4.0 netmask 255.255.255.0 gw 1.1.1.1 dev eth0

route add -host 3.3.3.3 gw 192.168.68.152 dev ens33

2)删除某条路由信息

route del -net 3.3.3.0/24

route del -host 3.3.3.3 gw 192.168.68.152 dev ens33

ip route 命令

在新的Linux系统中,route命令逐渐被ip route 命令取代;ip route同样用于操作Linux内核的路由表信息

ip route 命令使用说明:

ip route { add | del | change | append | replace } ROUTE 添加/删除/修改等更新路由信息

ip route { show | flush } SELECTOR 显示/清空路由信息

选项参数说明:

路由类型 (TYPE)

type unicast | local | broadcast | multicast | throw | unreachable | prohibit | blackhole | nat ;

选择器(SELECTOR )

SELECTOR := root PREFIX match PREFIX exact PREFIX table TABLE_ID vrf NAME proto RTPROTO type TYPE scope SCOPE

root PREFIX: 根据源地址前缀匹配

match PREFIX: 根据目的地址前缀匹配

table 路由表名/ID,已知有 local| main | default | all | NUMBER

blackhole: 丢弃匹配的数据包。

unreachable: 丢弃匹配的数据包,并生成"Network is unreachable"错误。

prohibit: 丢弃匹配的数据包,并生成"Communication is administratively prohibited"错误。

使用示例:

1)添加路由信息

ip route add 3.3.3.3/24 via 1.1.1.1

ip route add 10.1.1.0/30 encap mpls 200/300 via 10.1.1.1 dev eth0

  1. 删除路由信息

ip route del 3.3.3.3

ip route del 10.1.1.0/30 encap mpls 200/300 via 10.1.1.1 dev eth0

策略路由

在传统路由算法中,只能基于目的地址进行路由选择。但是如果对路由选择有更复杂的要求,比如针对不同源地址、传输层端口甚至是payload进行更细致的路由控制,传统的基于目的地址的路由表就无法满足需求了,需要使用功能更加强大的策略路由。

每条策略路由的规则由一个选择器和一个动作组成。按照优先级顺序进行规则匹配,优先级数字越小越优先。被选择器匹配的报文会执行对应的操作,操作如果成功,则根据指定的路由转发数据,之后停止匹配,如果执行失败,则报错并且终止匹配,否则将继续执行下一条规则。

linux 系统下通过ip rule命令来管理配置策略路由,默认存在三条策略路由信息;

ip rule show

0: from all lookup local # 优先级为0,匹配任意源地址,查询local路由表转发

32766: from all lookup main # 优先级为32766,匹配任意源地址,查询main路由表转发

32767: from all lookup default # 优先级为32767,匹配任意源地址,查询default路由表转发

由此可见,Linux内核下,策略路由其实分两部分:

1)策略信息,指定了匹配报文的条件及要执行的动作

2)路由信息,基于策略指定的路由表匹配转发报文

路由表添加

在配置策略指定table TABLE_ID时,默认只能指定数字,这样容易模糊路由表的用途;

在Linux内核中,表ID 与表名的对应关系存放在 /etc/iproute2/rt_tables,因此若要配置时允许指定表名,可以在文件添加ID 与表名的对应关系,echo "100 test" | tee -a /etc/iproute2/rt_tables, 如下所示:

策略配置

ip rule命令用于操纵Linux 内核中策略路由规则来控制路由选择算法。

ip rule 使用说明:

ip rule { add | del } SELECTOR ACTION

ip rule { flush | save | restore }

ip rule list \[ SELECTOR ]

SELECTOR := not from PREFIX to PREFIX tos TOS fwmark FWMARK\[/MASK ]

iif STRING \] \[ oif STRING \] \[ pref NUMBER \] \[ l3mdev

uidrange NUMBER-NUMBER

ACTION := table TABLE_ID nat ADDRESS realms \[SRCREALM/DSTREALM ]

goto NUMBER SUPPRESSOR

SUPPRESSOR := suppress_prefixlength NUMBER suppress_ifgroup DEVGROUP

TABLE_ID := local \| main \| default \| NUMBER

参数选项说明:

选择器(SELECTOR):

from PREFIX: 根据源地址前缀匹配

to PREFIX: 根据目的地址前缀匹配

tos TOS: 根据ip包头TOS字段的值进行匹配

fwmark FWMARK/MASK: 配合iptables -t mangle 打标记,根据标记进行匹配

iif STRING: 选择要匹配的数据包的输入接口。

oif STRING: 选择要匹配的出接口设备。只对来自本地套接字并与设备绑定的报文有效

pref NUMBER: 规则的优先级。这里的pref可以替换成priority或者order,效果是一样的。

动作(ACTION):

table TABLE_ID: 在规则匹配的时候,指定使用的路由表,被匹配的数据包将按照指定的路由表进行路由。此处的table也可以替换为lookup,效果是一样的。

blackhole: 丢弃匹配的数据包。

unreachable: 丢弃匹配的数据包,并生成"Network is unreachable"错误。

prohibit: 丢弃匹配的数据包,并生成"Communication is administratively prohibited"错误。

使用示例:

添加策略

来自192.168.22.3的数据包,都参考id为10的路由表进行转发

ip rule add from 192.168.22.3 table 10

设置规则的优先级为100,发往192.168.23.0/24的数据包,都参考id为20的路由表进行转发

ip rule add to 192.168.23.0/24 table 20 pref 100

给协议是tcp,源地址是192.168.24.0/24,目的端口是80的数据包,在路由前打上1的标记

iptables -t mangle -A PREROUTING -p tcp -m multiport --dports 80 -s 192.168.24.0/24 -j MARK --set-mark 1

将标记为1的数据包,参考id为iptables_table的路由表进行转发

ip rule add fwmark 1 table iptables_table

来自192.168.25.0/24的数据包都将丢弃

ip rule add from 192.168.25.0/24 blackhole

ip rule add from 192.168.26.0/24 unreachable

ip rule add from 192.168.27.0/24 prohibit

路由配置

由上述添加的策略路由可知,策略路由若要生效,需在指定的路由表中添加相应的路由信息,路由信息的添加参考上述基本路由配置介绍。

参考连接

Linux策略路由详解

相关推荐
DS小龙哥3 小时前
基于树莓派PICO2设计的汽车少儿安全预警系统
网络·安全·汽车
想你依然心痛3 小时前
嵌入式容器:Docker与BalenaOS在边缘设备上的实践——容器运行时与OTA
运维·docker·容器
solar应急响应3 小时前
【银狐应急复盘】伪装 Telegram 的“白加黑”银狐木马,从深度溯源到彻底清除的闭环响应实录(附自查 IOC)
网络·安全
竣达技术3 小时前
NAS / 服务器断电数据丢失?UPS 配套 USB关机保护板,市电断电池低自动提示服务器/电脑关机
运维·服务器·电脑
Lottie20263 小时前
京东电商进阶运营:精准定价+安全铺货+竞品监控+利润管控全自动化方案
运维·安全·自动化
章老师说3 小时前
NGINX官方谈Lua风险:这其实是两条网关技术路线之争
运维·nginx·负载均衡·lua·openresty
国科安芯3 小时前
基于ASM1042S2S的箭载通信网络抗辐射加固方案研究
服务器·网络·嵌入式硬件·fpga开发·架构·信号处理
云栖梦泽在3 小时前
跨境电商账号频繁验证怎么办?从公网 IP、ASN、浏览器环境到登录稳定性排查
网络·网络协议·tcp/ip·网络安全·性能优化
wbs_scy3 小时前
仿 muduo 高并发服务器项目:实现 Any 通用容器并理解 std::any
运维·服务器
A_humble_scholar3 小时前
Linux(十六)从页表到线程封装:深入理解 Linux 线程的共享、控制与封装
linux