@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_L,C_L同在一个网段内。S_L为真实服务器,G_W为伪服务器。
c_w访问S_L:80端口,假设数据包内容如下:
到达G(gateway)后,它必须把ip给替换,则当数据到达G_L时数据内容:
然后当G_L回复的包,它的内容:
G须得将src替换:
在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
|
阅读(1329) | 评论(0) | 转发(0) |