免费注册 查看新帖 |

Chinaunix

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

[网络子系统] 关于nat还原的问题 [复制链接]

论坛徽章:
8
羊年新春福章
日期:2015-03-19 02:03:312015亚冠之北京国安
日期:2015-06-16 22:04:45程序设计版块每日发帖之星
日期:2015-06-23 22:20:00每日论坛发贴之星
日期:2015-06-23 22:20:002015亚冠之首尔
日期:2015-06-24 19:18:072015亚冠之广州恒大
日期:2015-08-06 10:29:442015亚冠之柏太阳神
日期:2015-11-02 11:21:0515-16赛季CBA联赛之辽宁
日期:2015-12-09 15:05:02
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-10-12 10:38 |只看该作者 |倒序浏览
本帖最后由 firocu 于 2014-10-12 14:36 编辑

最简单的路由器 在postrouting 做了snat(masquade)那么回来的报文怎么unsnat呢?
我看了九贱的帖子,一笔带过了。 我不太懂的地方是在nat_packet这个函数里面在发现是rely的报文,要判断ct→status & IPS_DST_NAT 为真 才修改skb里的IP port,我不清楚reply的报文何时给ct→status打的DST_NAT的标记位,看代码好象是prerouting的ip_nat_setup_info这个函数,可是我看到必须改了ct的tuple才能给ct→status打标记位,反复的修改ct,我觉得自己想的不对。


================答案3.17的代码和原来没多大变化就是函数名字变了===========
发包-POSTROUTING ->SNAT ->修改ct: nf_nat_setup_info-> ct->status |= IPS_SRC_NAT;->修改skb:nf_nat_packet

收报-PREOUTING-> DNAT->修改skb:nf_nat_packet
{
    enum nf_nat_manip_type mtype = HOOK2MANIP(hooknum);   //因为是在PREROUTING, 所以是DNAT, 我以前一直以为, de-snat在postrouting中做的.                                                                                          
                                                                                                                                                      
    if (mtype == NF_NAT_MANIP_SRC)                                                                                                                    
        statusbit = IPS_SRC_NAT;                                                                                                                     
    else                                                                                                                                             
        statusbit = IPS_DST_NAT;        //到这里                                                                                                              
                                                                                                                                                      
    /* Invert if this is reply dir. */                                                                                                               
    if (dir == IP_CT_DIR_REPLY)                                                                                                                       
        statusbit ^= IPS_NAT_MASK;        //翻转一下变成SNAT                                                                                                     
                                                                                                                                                      
    /* Non-atomic: these bits don't change. */                                                                                                        
    if (ct->status & statusbit) {                 //正好和发包是的   ct->status |= IPS_SRC_NAT;匹配了, 开始de-snat.                                                                                                
        struct nf_conntrack_tuple target;
}



您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP