IP之NAT(二)
来源:互联网 发布:读懂php wsdl中方法 编辑:程序博客网 时间:2024/05/14 20:42
4.2.5 NAT的实现
Source nat的hook name是NF_INET_POST_ROUTING,Destination nat的hook name是NF_INET_PRE_REOUTING和NF_INET_LOCAL_OUT。
建立source nat和destination nat的hook的数据结构(在/net/ipv4/netfilter/nf_nat_rule.c ):
nat的hook 函数,如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被调用,比如说,ftp的helper 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。
(完)
[此为原创,转载请标明出处,谢谢!]
- IP之NAT(二)
- IP之NAT(一)
- [CentOS7环境搭建](二) NAT模式固定IP设置
- NAT之windows实现二
- IP之routing(二)
- lwip之IP(二)
- NAT穿越技术(二)
- C# - P2P与NAT技术之二
- TCP/IP的网络地址转换(NAT)
- ubuntu16 配置静态ip(NAT方式)
- centos配置IP(NAT模式)
- TCP/IP协议学习之二(网际协议IP)
- 《图解TCP/IP》(二)之IP协议详解
- 网络协议之二(IP网际协议)
- TCP/IP之二
- iptables(二),常用规则:屏蔽IP地址、禁用ping、协议设置、NAT与转发、负载平衡、自定义链
- 动态VPN配置(NAT之循环IP配置)
- Linux netfilter 学习笔记 之十一 ip层netfilter的NAT模块初始化以及NAT原理
- Android设备上opencv开发:获得Camera数据
- arm 自制OS
- 链表结构
- 2 URL
- G2R(Game to Reality) 游戏行业的O2O
- IP之NAT(二)
- swift初窥--playground
- 文章标题
- PHP-FIG 定义的 PSR-3 日志接口规范
- API之NSSet的常见用法
- mqtt推送实践
- hdu 2896 病毒入侵 ac自动机入门 附加一组数据
- EL、JSTL
- 多表查询