Chinaunix首页 | 论坛 | 博客
  • 博客访问: 451142
  • 博文数量: 64
  • 博客积分: 3271
  • 博客等级: 中校
  • 技术积分: 727
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-30 18:42
文章分类

全部博文(64)

文章存档

2013年(1)

2011年(19)

2010年(42)

2009年(2)

分类: LINUX

2010-04-17 12:18:18

@auther

 

                                           dnat源码追踪

 

 

 

 

注册的钩子

 


图1.

ipv4_conntrack_in,                                       ipv4_confirm,
                                                                          
nf_nat_in                                                  nf_nat_out,

                                                             I
                            ----->---------------------------I
                            I 路由
                            I
         ---->-------->---- I
                                                      nf_nat_local_fn,
nf_nat_fn
ipv4_confirm                                        ipv4_conntrack_local,


连接示意:



图2.
              
                                    I-------S_L
                                    I
         internet    ---G_W===G_L---I
C_W----                             I
                                    I-------C_L


 

如上图所示,G(ateway)有两个出口一端连接wan,一端连接lan,在交换机上,称为G_L,S_LC_L同在一个网段内。S_L为真实服务器,G_W为伪服务器。


c_w访问S_L80端口,假设数据包内容如下:


src:C_W:xx
dst:G_W:80

到达Ggateway)后,它必须把ip给替换,则当数据到达G_L时数据内容:


src:C_W:xx

dst:S_L:80

然后当G_L回复的包,它的内容:

src:S_L:80

dst:C_W:xx

G须得将src替换:


src:G_W:80

dst:C_W:xx


在iptables 执行以下命令:


iptables -t nat -A PREROUTING --dst $G_W -p tcp --dport 80 -j DNAT --to-destination $S_L


所以连接追踪conntrack必须保存的tuple为来时的,reply的数据,如下:

      ct->tuplehash[IP_CT_DIR_ORIGNAL].tuple=
                                     src:C_W:xx
                                     dst:G_W:80
      ct->tuplehash[IP_CT_DIR_REPLY].tuple=
                                     src:S_L:80
                                     dst:C_W:xx


阅读(1287) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~