免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1668 | 回复: 3
打印 上一主题 下一主题

[网络子系统] NAT回调函数的执行问题【已解决】 [复制链接]

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-11-26 10:31 |只看该作者 |倒序浏览
本帖最后由 jiufei19 于 2014-11-27 10:55 编辑

最近在看linux nat处理,其中snat和dnat的大体代码读完了,对具体地址变换的操作基本了解了其工作原理,但是今天忽然对一个初始问题感到模糊了。下面我简单描述下问题,希望得到解答。

nf_nat_in和nf_nat_out这两个回调函数所对应的hook ops究竟是什么时候注册到系统中的,感到不清楚,追踪了下源码,发现有如下调用序列:

nf_nat_stanalone_init
  |-nf_register_hooks
     |-nf_register_hook

那么是否可以这样理解,只要系统支持nat功能,那么上述调用过程自动就被执行了,于是nf_nat_in和nf_nat_out两个回调函数随着Netfilter的加载而自动被挂在对应的链上了,于是如果用户配置了nat规则,那么系统就按此规则进行处理,如果没有配置任何nat规则,这两个回调函数还是会被调用执行,只是在各自的执行过程中,会去查找规则,但是此时由于用户没有配置任何规则,则直接返回了。

我的理解是否正确呢?

论坛徽章:
0
2 [报告]
发表于 2014-11-27 10:00 |只看该作者
会通过nf_nat_rule_find(skb, hooknum, in, out, ct);函数去匹配iptables 配置的nat规则

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
3 [报告]
发表于 2014-11-27 10:43 |只看该作者
回复 2# destan19


    谢谢destan19的解答。不过我的问题不是这个意思,我是说是否是在这个init函数中系统自动注册了NAT相关的所有回调函数,以后凡是有任何skb经过时,即使没有做任何实际的NAT规则的配置,这些回调函数还是会被执行的,只不过没有任何实际效果罢了。

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
4 [报告]
发表于 2014-11-27 10:58 |只看该作者
本帖最后由 jiufei19 于 2014-11-27 11:23 编辑

回复 3# jiufei19

自己顶下,仔细看了下代码,问题解决了:

module_init(nf_nat_standalone_init),显然NAT作为模块加载时会执行该函数,于是nat的回调自然被预先注册到了各个hook点了
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP