IP之NAT(二)

4.2.5 NAT的实现

Source nathook nameNF_INET_POST_ROUTING,Destination nathook nameNF_INET_PRE_REOUTING和NF_INET_LOCAL_OUT。

建立source natdestination nathook的数据结构(在/net/ipv4/netfilter/nf_nat_rule.c ):

nathook 函数,如nf_nat_in , nf_nat_out ,nf_nat_local_fn , and nf_nat_fn(在/net/ipv4/netfilter/nf_nat_standalone.c )

 

nf_nat_standalone_init()用来初始化,然后它调用nf_nat_rule_init() 来注册iptables,然后再调用nf_register_hooks() 来建立 NAT hook functions。执行NF_INET_PRE_ROUTING , NF_INET_LOCAL_OUT , and NF_INET_POST_ROUTING的函数分别是nf_nat_in() , nf_nat_local_fn() 和nf_nat_out(),上面的3个函数最终调用nf_nat_fn()来执行nat的操作。

 

上图为nf_nat_fn()的调用关系图。nf_nat_fn()sk_buff中获得链接跟踪信息,如果nfctinfo 是 IP_CT_NEW并且nat 没有被初始化,则alloc_null_binding()被调用,也就是,Nat规则还没有建立时。否则,nf_nat_rule_find()被调用。这两个函数都会执行nf_nat_setup_info()来做地址转换。在nf_nat_setup_info()中,get_unique_tuple()被调用,然后它再调用find_appropriate_src()来查询ipv4.nat_bysource(如果是snat的话)。如果查找失败了,get_unique_tuple()会调用find_best_ips_proto()来获得一个新的tuple

 

ftp的影响

IP layer转换后,helper被调用,比如说,ftphelper function nf_nat_ftp()被调用,如果数据包中包含PORT or PASV command,则mangle_rfc959_packet()被调用;如果数据包中包含EPRT command(PORT command for IPv6),则mangle_eprt_packet()被调用;如果数据包中包含EPSV command,则mangle_epsv_packet()被调用。所有的上面的函数都调用nf_nat_mangle_tcp_packet()来处理TCP的序列号和checksum recomputation


(完)

 

                                            [此为原创,转载请标明出处,谢谢!]


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值