IP之NAT(二)

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。

(完)

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

时间: 2024-10-25 06:09:10

IP之NAT(二)的相关文章

铁通网络没有一个真实的公网IP,NAT转换能不能解决?

铁通网络没有一个真实的公网IP,NAT转换能不能解决? 我的是铁通宽带,现在想用自己的机子做一个动态主机,可是因为铁通垃圾网络的NAT转发问题,使用cn99qdns手动更新动态域名IP后公网能解析域名,但无法访问我的机子也无法ping通,这个问题谁帮我解决啊,谢谢哈.问题解决了之后另有重赏. 你首先确认你是否拥有外网IP.铁通有部分用户是共享上网,几百户一个共享一个外网IP. 现在的路由器上一般都有DMZ设置,你把你要对外网开放的主机设置成DMZ,即可PING通了. 到工信部网站http://w

unbuntu(乌班图)虚拟机修改ip地址NAT模式

每次进入Ubuntu,ip地址都会有变化,如果有软件链接的话,肯定会很烦!! 一.简单粗暴方式: 1.肯定要打开Ubuntu了,不知道你们是什么版本的,楼主用的是16版的,然后工具栏里的"编辑(E)"下的"虚拟网络编辑器(N)" "虚拟网络编辑器"里选择NAT模式,下面的子网IP===>获取权限 "更改设置"==>子网IP可以修改了,设置自己喜欢IP地址网段==>''DHCP设置''里面有起始IP地址设置自己

TCP/IP协议简介(二) 之 链路层介绍

链路层介绍 一.简介 上一节已经介绍过,网络层协议的数据单元是 IP 数据报 ,而数据链路层的工作就是把网络层交下来的 IP 数据报 封装为 帧(frame)发送到链路上,以及把接收到的帧中的数据取出并上交给网络层. 为达到这一目的,数据链路必须具备一系列相应的功能,主要有: 将数据封装为帧(frame),帧是数据链路层的传送单位: 控制帧的传输,包括处理传输差错,调节发送速率与接收方相匹配: 在两个网络实体之间提供数据链路通路的建立.维持和释放的管理. 数据帧的结构是这样的: 二.控制帧的传输

VMWare虚拟机下为Ubuntu 12.04.2配置静态IP(NAT方式)

http://www.cnblogs.com/objectorl/archive/2012/09/27/vmware-ubuntu-nat-static-ip-settings.html 参考以上方式,但是这个版本需要多执行一步 gedit /etc/NetworkManager/NetworkManager.conf将managed=false 改成true 具体步骤如下: 静态IP设置查看NAT模式IP1 gedit/etc/network/interfaces添加如下内容    iface

VMWare虚拟机下为Ubuntu 12.04.1配置静态IP(NAT连接方式)

背景 在虚拟机下运行操作系统,尤其是Linux系统已经是非常常见的做法.有时你想在虚拟机下搭建一个(模拟)服务器来供主机访问,比如搭建一个telnet/ssh.此时你会发现,每次启动虚拟机,VMWare为虚拟机系统分配一个动态IP,这样每次去连接虚拟机的telnet时很不方便.如果设成静态IP就好了. VMnet8和NAT 如果你的虚拟机是以NAT方式连入互联网的话,那么虚拟机的IP地址非配,网关以及互联网访问权限均由VMWare提供的叫做VMnet8虚拟网卡所提供.所以一切和设置静态IP有关的

VMWare虚拟机下为Ubuntu 配置静态IP(NAT方式)ping通主机

背景 在虚拟机下运行操作系统,尤其是Linux系统已经是非常常见的做法.有时你想在虚拟机下搭建一个(模拟)服务器来供主机访问,比如搭建一个telnet/ssh.此时你会发现,每次启动虚拟机,VMWare为虚拟机系统分配一个动态IP,这样每次去连接虚拟机的telnet时很不方便.如果设成静态IP就好了. VMnet8和NAT 如果你的虚拟机是以NAT方式连入互联网的话,那么虚拟机的IP地址非配,网关以及互联网访问权限均由VMWare提供的叫做VMnet8虚拟网卡所提供.所以一切和设置静态IP有关的

华为Easy IP和NAT Server实现原理

本文接上篇,继续介绍华为路由器另两种NAT实现方式的工作原理. 6.1.3 Easy IP实现原理 Easy IP方式的实现原理与上节介绍的地址池NAPT转换原理类似,可以算是NAPT的一种特例,不同的是Easy IP方式可以实现自动根据路由器上WAN接口的公网IP地址实现与私网IP地址之间的映射(无需创建公网地址池). Easy IP主要应用于通过路由器WAN接口IP地址作为要被映射的公网IP地址的情形,特别适合小型局域网接入Internet的情况.这里的小型局域网主要指中小型网吧.小型办公室

IP之NAT(一)

4.2.4 NAT 私有地址如下: 10.0.0.0 – 10.255.255.255 (10.0.0.0/8), 172.16.0.0 – 172.31.255.255 (172.16.0.0/12), 192.168.0.0 – 192.168.255.255 (192.168.0.0/16) NAT对于ICMP协议的影响 对于icmp协议,不仅icmp packet的header的地址需要做nat,它的payload也需要做nat,因为payload中有错误信息相关的IP address.

IP寻址过程二

,跨三层交换机 1,由于 B 的 IP 地址并没有和 A 在一个网段,所以当 A 向 B 发送数据时, A 并不会直接把数据给 B ,而是交给自己的网关,所以 A 首先会 ARP 广播请求 网关 的 MAC 地址 A 得到网关的 MAC 地址后,以它为数据帧的目标 MAC 地址进行封装数据,并发送出去 2,Router1 收到该帧后,检查该帧的目标 IP ,并到自己的路由表查找如何到达该网段发现能够到,并且下一跳地址是 routerB 的 s0 端口,于是将数据重新封装,将源地址改为 s0 端口