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

        2) 删除路由信息

        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策略路由详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/661644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LEETCODE 170. 交易逆序对的总数

class Solution { public:int reversePairs(vector<int>& record) {if(record.size()<1)return 0;//归并 递归int left,right;left0;rightrecord.size()-1;int nummergeSort(left,right,record);return num;}int mergeSort(int left,int right, vector<int>…

【Qt】Json在Qt中的使用

Json JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;广泛用于互联网应用程序之间的数据传输。JSON基于JavaScript中的对象语法&#xff0c;但它是独立于语言的&#xff0c;因此在许多编程语言中都有对JSON的解析和生成支持。…

STM32CubeIDE 使用标准库来编写程序

这些天我想找一个软件来实现软件的替代。就找到了st 的生态。可是现在st 生态都在极力的推荐HAL 库,但是习惯了标准库的朋友们,还不是很习惯。 先上总结一下,为了好记忆: 一、 在编译栏做如下设置 1、头文件设置 2、源文件设置 二、指定具体的预定义宏 1、USE_STDPERIPH_D…

数据结构-图的最小生成树

最小生成树介绍 最小生成树(Minimum Cost Spanning Tree)是代价最小的连通网的生成树&#xff0c;即该生成树上的边的权值和最小 最小生成树的性质&#xff1a; 必须使用且仅使用连通网中的n-1条边来联结网络中的n个顶点&#xff1b; 不能使用产生回路的边&#xff1b; 各…

Linux部署幻兽帕鲁服务器,PalWorld开服联机教程,保姆级教程

------另一个号申请积分-------- Linux系统搭建PalWorld私服&#xff0c;幻兽帕鲁开服联机教程&#xff0c;保姆级教程 最近这游戏挺火&#xff0c;很多人想跟朋友联机&#xff0c;如果有专用服务器&#xff0c;就不需要房主一直开着电脑&#xff0c;稳定性也好得多。 幻兽帕…

Kubernetes operator(五)api 和 apimachinery 篇

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 Kubernetes operator学习 系列第五篇&#xff0c;主要对 k8s.io/api 和 k8s.io/apimachinery 两个项目 进行学习基于 kubernetes v1.24.0 代码分析Kubernetes operator学习系列 快捷链接 Kubernetes operator&a…

大数据StarRocks(九):资源隔离实战

前言 自 2.2 版本起&#xff0c;StarRocks 支持资源组管理&#xff0c;集群可以通过设置资源组&#xff08;Resource Group&#xff09;的方式限制查询对资源的消耗&#xff0c;实现多租户之间的资源隔离与合理利用。在 2.3 版本中&#xff0c;StarRocks 支持限制大查询&#…

Android配置GitLab CI/CD持续集成,Shell版本的gitlab-runner,FastLane执行,上传蒲公英

mac环境下&#xff0c; 首选需要安装gitlab-runner和fastlane brew install gitlab-runner brew install fastlane 安装完成&#xff0c;来到我们在gitlab下新建的Android项目&#xff0c;我们开始创建gitlab-runner 1、创建runner 点开runner&#xff0c;点击新建runner …

自然语言nlp学习四

5-5 BMTrain--ZeRO_哔哩哔哩_bilibili 5-6 BMTrain--Pipeline Parallel (流水线并行)_哔哩哔哩_bilibili 5-12 BMCook--背景介绍_哔哩哔哩_bilibili 5-20 BMInf--背景介绍_哔哩哔哩_bilibili 6-7 机器问答--QA介绍_哔哩哔哩_bilibili 6-8 机器问答--阅读理解_哔哩哔哩_bilibili…

常用API1 ---Math

包含用于执行基本数学运算的方法&#xff0c;如初等指数、对数、平方根和三角函数。 常用方法&#xff1a; package MyApi.a01mathdemo01;public class MathDemo01 {public static void main(String[] args) {//abs 获取参数的绝对值System.out.println(Math.abs(-88));System…

江科大stm32学习笔记10——对射式红外传感器

一、接线 上电之后可以看到对射式红外传感器亮两个灯&#xff0c;如果此时用挡光片挡住两个黑色方块中间的部分&#xff0c;则只亮一个灯。 二、代码 将4-1的工程文件夹复制粘贴一份&#xff0c;重命名为“5-1 对射式红外传感器计次”&#xff0c;打开keil&#xff0c;右键添…

认识 SYN Flood 攻击

文章目录 1.什么是 SYN Flood 攻击&#xff1f;2.半连接与全连接队列3.如何防范 SYN Flood 攻击&#xff1f;参考文献 1.什么是 SYN Flood 攻击&#xff1f; SYN Flood 是互联网上最原始、最经典的 DDoS&#xff08;Distributed Denial of Service&#xff09;攻击之一。 SYN…

[C#][opencvsharp]opencvsharp sift和surf特征点匹配

SIFT特征和SURF特征比较 SIFT特征基本介绍 SIFT(Scale-Invariant Feature Transform)特征检测关键特征&#xff1a; 建立尺度空间&#xff0c;寻找极值关键点定位&#xff08;寻找关键点准确位置与删除弱边缘&#xff09;关键点方向指定关键点描述子 建立尺度空间&#xff0…

SpringBoot RestTemplate 设置挡板

项目结构 代码 BaffleConfig /*** Description 记录配置信息* Author wjx* Date 2024/2/1 14:47**/ public interface BaffleConfig {// 是否开启挡板的开关public static boolean SWITCH true;// 文件根目录public static String ROOT_PATH "D:\\TIS\\mock";// …

最新2024如何解决谷歌浏览器Chrome谷歌翻译无法使用问题

快速恢复谷歌浏览器一键翻译功能在Chrome 中安装好【翻译】插件 Macbook 操作步骤&#xff1a; 1点击“前往”&#xff0c;打开“前往文件夹” 2 在对话框中输入“/etc” 囝找到“hosts”文件&#xff0c;复制粘贴到桌面 3 在复制的文件最后新起一行&#xff0c;输入并保存&am…

VUE3+TS使用OpenSeadragon学习之旅,实现多图片切换效果

1.官方网站&#xff1a;OpenSeadragon 2.使用npm下载插件&#xff1a;npm install openseadragon 3.在 index.html文件引入资源 <link rel"stylesheet" href"node_modules/openseadragon/build/openseadragon/openseadragon.css" /><script src…

消息队列的应用场景

消息队列的应用场景 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用耦合&#xff0c;异步消息&#xff0c;流量削锋等问题实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构使用较多的消息队列有ActiveMQ&#xff0c;RabbitMQ&#xff0c;Ze…

用户界面(UI)、用户体验(UE)和用户体验(UX)的差异

对一个应用程序而言&#xff0c;UX/UE (user experience) 设计和 UI (user interface) 设计非常重要。UX设计包括可视化布局、信息结构、可用性、图形、互动等多个方面。UI设计也属于UX范畴。正是因为三者在一定程度上具有重叠的工作内容&#xff0c;很多从业多年的设计师都分不…

ffmpeg合成mp3音频,解决音频属性不一致问题

1. 需求&#xff0c;amr转成mp3&#xff0c;再将此mp3和其他mp3合成 2. 问题&#xff1a;拼接后的第一段音频可以播放&#xff0c;第二段自动跳过&#xff0c;无法播放。 3. 解决&#xff1a; 3.1 查看各文件属性 # 查看amr转为mp3文件的属性&#xff1a;ffprobe 文件名&am…

嵌入式软件工程师面试题——2025校招社招通用(C/C++)(五十一)

说明&#xff1a; 面试群&#xff0c;群号&#xff1a; 228447240面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但…