免费注册 查看新帖 |

Chinaunix

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

关于DNAT的接收处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-19 11:36 |只看该作者 |倒序浏览
有两台机器,一台机器的IP是A_ip,另一台是B_ip.

在A上配置了如下规则(没有配置SNAT规则):
iptables -t nat -A OUTPUT -d 10.6.0.0/16 -j DNAT
        --to-destination B_IP:100


现在A_IP发送到10.6.0.0的数据,会被转换成到B_ip:100.
并且接收到的应答应是到A_IP的。
这时就需要对接收到的包进行源地址转换,请问是在哪里进行转换的?

是路由之前,还是在路由之后?
谢谢。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2011-09-19 11:41 |只看该作者
回复 1# asweisun_shan

这时就需要对接收到的包进行源地址转换,请问是在哪里进行转换的?

DNAT 是对包的目的地址进行转换

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
3 [报告]
发表于 2011-09-19 11:42 |只看该作者
本帖最后由 Godbach 于 2011-09-19 11:44 编辑

回复 1# asweisun_shan
DNAT 应该是在路由之前

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
4 [报告]
发表于 2011-09-19 16:37 |只看该作者
回复 1# asweisun_shan
应答包的源地址修改是在conntrack_in的hook点进行的,而conntrack_in的hook点的操作是在PRE_ROUTING上完成的。
所以应答包的源地址修改是在路由之前完成的。

论坛徽章:
0
5 [报告]
发表于 2011-09-19 22:04 |只看该作者
回复 4# 瀚海书香


非常谢谢。
能告诉我内核中处理的代码吗?

另外,NF_INET_PRE_ROUTING这个hook还会处理DNAT相关的内容吗?
我觉得只要iptables没有相应规则,则就不处理了。

论坛徽章:
0
6 [报告]
发表于 2011-09-19 22:55 |只看该作者
回复 5# asweisun_shan

   2.6.20内核:
    nf_nat_rule.c ->  ipt_dnat_reg
就是在PREROUTING点上做的DNAT

论坛徽章:
0
7 [报告]
发表于 2011-09-23 22:50 |只看该作者
看了下内核源码。
NAT注册了4个钩子,数据结构在nf_nat_ops中。
如果iptables配置了DNAT规则,则调用DNAT相关的target,就是ipt_dnat_reg(这个并不修改任何地址)。
如果配置了SNAT,则调用SNAT相关的target。

发送数据的时候,
是先修改目的地址--->路由--》发送出去。

接收数据包时,
IP层处理-》PRE_ROUTING->路由->LOCAL_IN->TCP层。

接收的时候,在PRE_ROUTING, LOCAL_IN都可以修改接收包的源地址。
PRE_ROUTING的处理函数是nf_nat_in:
LOCAL_IN的处理函数是nf_nat_fn;

而有如下的调用关系;
nf_nat_in(PRE_ROUTING)
|------nf_nat_fn(LOCAL_IN)
     |------nf_nat_packet
       |------manip_pkt(修改数据包!!)


所以,在路由前后都存在修改数据包地址的可能性。
至于什么场景下会在路由前,什么场景会在路由之后,就不得知了。
(以上只是个人揣测,自己还要继续看代码。)

回复  asweisun_shan
应答包的源地址修改是在conntrack_in的hook点进行的,而conntrack_in的hook点的操作 ...
瀚海书香 发表于 2011-09-19 16:37

论坛徽章:
0
8 [报告]
发表于 2011-09-24 20:19 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP