linux netfilter路由表,Linux netfilter 学习笔记 之十四 netfilter模块会修改数据包关联的路由缓存吗...
起因:
最近在完成网关的一个相关功能时,对于网关本身通过socket发送的数据包,没有从正确的wan接口发送出去,但是在udp_sendmsg
函数里打印出来的
信息显示路由查找是正确的,但是当数据包进入OUTPUT HOOK点的hook函数处理后,其路由缓存就发生了变化,难道netfilter模块还
会修改数据包的路由缓存吗?
本文主要是因为上面所说的问题而进行分析的,其实也就是自己阅读netfilter的代码不够仔细,导致没有注意到netfilter模块也会改变数据包的
路由缓存,
所以本文以此命题,以提醒自己。
1. 修改数据包路由缓存的case
修改数据包的路由缓存,按模块来分,可分为两个方面
NAT模块:
a)在PRE_ROUTING链,当修改了数据包的目的地址后,若数据包的dst指针不为空,则需要release该dst指针,迫使协议栈重新查找路由
(但是这个查找路由还是由协议栈实现的)。
b)在OUTPUT链,当修改了数据包的目的地址后,由于此时的数据包已经进行了路由查找,接下来协议栈也不会再进行路由查找,所以此时
就会调用ip_route_me_harder重新查找路由,这次查找就由netfilter模块代劳了 MANGLE模块
a)在OUTPUT链,当修改了数据包的源ip地址/目的ip地址/tos/mark后,则会调用函数ip_route_me_harder
综上,可以发现。当netfilter模块修改了数据包的ip地址、tos或者mark后,若是后续协议栈还会进行路由查找,则netfilter模块只是将数据包的dst指针
设置为空; 若后续协议栈不再进行路由查找了,则netfilter模块则会自己调用路由查找函数,为数据包重新查找路由。
例如,当我们在mangle表的OUTPUT链,增加了一个修改数据包的mark值的规则后,就需要小心了,如果我们使用了策略路由,增加了策略规
则参数,但是ip_route_me_harder里却没有在flowi的查找变量里增加对该变量的设置后,就可能使策略路由匹配出错。
在我实现的功能里,就在策略规则里增加了新的判断成员,但是仅仅考虑了协议栈中路由查找的函数,却忘了在netfilter模块的路由查找函数里也
增加对该成员的判断,从而对本地发出的数据包,出现策略路由匹配失败的问题。
也怪自己没有对路由代码有一个全面的分析,对于路由查找还不是很熟悉,后面会开始学习路由。
linux netfilter路由表,Linux netfilter 学习笔记 之十四 netfilter模块会修改数据包关联的路由缓存吗...相关推荐
- TensorFlow学习笔记(十四)TensorFLow 用mnist数据做classification
之前的例子,给的都是tf来做regression,也就是回归问题,现在用tf来做一个classification的处理,也就是分类问题. 这里用的数据集是mnist数据. 代码: "&quo ...
- Cty的Linux学习笔记(十四)
Linux学习笔记--第十四篇 环境变量配置文件: /etc/profile:预设了几个重要的变量,例如PATH,USER,LOGNAME,MAIL,INPUTRC,HOSTNAME,HISTSIZE ...
- Windows保护模式学习笔记(十四)—— 阶段测试
Windows保护模式学习笔记(十四)-- 阶段测试 题目一 解题步骤 题目二 解题步骤 题目一 描述:给定一个线性地址,和长度,读取内容 int ReadMemory(OUT BYTE* buffe ...
- OpenCV学习笔记(十四):重映射:remap( )
OpenCV学习笔记(十四):重映射:remap( ) 图像的坐标映射是通过原图像与目标图像之间建立一种映射关系,这种映射关系有两种,一种是计算原图像任意像素在映射后图像的坐标位置,另一种是计算变换后 ...
- QT学习笔记(十四):QLayout的属性介绍
QT学习笔记(十四):QLayout的属性介绍 主要包括QBoxLayout.和QGridLayout以及QFormLayout等的参数类似. 我主要说明一下QGridLayout在QtDesigne ...
- MATLAB学习笔记(十四)
MATLAB学习笔记(十四) 一.线性方程组求解 1.1 直接法 1.1.1 利用左除运算符 1.1.2 利用矩阵分解 1.2 迭代法 1.2.1 雅可比(Jacobi)迭代法 1.2.2 高斯-赛德 ...
- python数据挖掘学习笔记】十四.Scipy调用curve_fit实现曲线拟合
#2018-03-28 10:02:08 March Wednesday the 13 week, the 087 day SZ SSMR python数据挖掘学习笔记]十四.Scipy调用curve ...
- Spring Security技术栈学习笔记(十四)使用Spring Social集成QQ登录验证方式
上一篇文章<Spring Security技术栈开发企业级认证与授权(十三)Spring Social集成第三方登录验证开发流程介绍>主要是介绍了OAuth2协议的基本内容以及Spring ...
- 深度学习笔记(十四)—— 超参数优化[Hyperparameter Optimization]
这是深度学习笔记第十四篇,完整的笔记目录可以点击这里查看. 训练神经网络会涉及到许多超参数设置.神经网络中最常见的超参数包括: the initial learning rate lea ...
最新文章
- Socketserver 笔记
- 多任务学习(Multi-Task Learning, MTL)、其他分类形式、与迁移学习的关系
- 使用FIO对SATA、SSD和PCIe Flash进行测试
- SpringMVC运行流程分析
- 长度最小的子数组--滑动窗口
- 雅诗兰黛天猫超级品牌日:未央唇膏、红装小棕瓶“当红不让”
- 访问修饰符,封装,继承
- i++和++i作为参数时的编译器处理方式分析
- Springboot打jar包项目无法访问jsp问题解决
- Docker-compose编排微服务顺序启动解决方案
- ArcGIS 后台服务器抛出异常
- 安阳工学院ACM历史(续)
- 【数据】社区发现数据集
- Encoded password does not look like BCrypt的原因及解决办法
- powerbuilder建数据库
- vue项目通讯录_vue 自定义组件实现通讯录功能
- Markdown 教程: 1 数学公式和特殊符号
- 文字图片水平居中对齐
- IPv6 路由信息查看命令
- MySQL中的聚簇索引、非聚簇索引、联合索引和唯一索引
热门文章
- 华为的JAVA面试题及答案(部分)
- Vue + Spring Boot 学习笔记02:引入数据库实现用户登录功能
- 【BZOJ1406】【codevs2478】密码箱,数论练习
- 【BZOJ1082】【codevs2456】栅栏,让人抓狂的优化剪枝
- 2017.9.9 堵塞的交通 思考记录
- 【Level 08】U07 Mixed Feelings L1 Day trip
- 【英语学习】【WOTD】accolade 释义/词源/示例
- 【英语学习】【WOTD】sentient 释义/词源/示例
- js如何提高for循环的效率_如何提高rv减速机的散热效率
- 开源资产管理系统_部署开源夜莺运维监控平台V3版本