netfilter_netfilter安装_linux netfilter

电脑杂谈  发布时间:2017-03-09 11:06:42  来源:网络整理

netfilter安装_netfilter_linux netfilter

@Author: cjcj cj.yangjun@gmail.com <c-j.iteye.com>

程序demo:

毕业设计会放到 上,有兴趣一起完善的兄弟联系我哈!!

NAT实现

进度:

5.13

潦草地完成NAT模块,暂时收工。

完成netlink的通讯,以及修改pool池数据结构的bug.完成状态存储,查询匹配功能。

5.7凌晨

完成内核态初步钩子函数。匹配ip,tcp,udp信息

内核的数据结构很讲究共性和特性。这个我还没感知到。

目前暂时完成用于存储的数据结构和固定大小队列,其实应该用hashtable的。结构体如下:

struct object_table
{
	__be32	saddr;
	__be32	daddr;
	__be16	source;
	__be16	dest;
	int status;
	//static int MAXNUM=0;
	struct object_table *next;
	struct object_table *prv;//为了便于从尾部查询

}

概念:

流程:

eth0(public ip 10.10.10.1):

DNAT(PRE_ROUTING):

接受外网的数据包。saddr(202.202.202.2) daddr(10.10.10.1) 需要查询匹配(ip+port),查询202.202.202.2+port。

匹配成功,则根据查询结果修改daddr为192.168.0.2+port(查询从尾部开始)

匹配不成功,则无须更改或者丢弃。

接受内网的数据包。saddr(192.168.0.2) daddr(202.202.202.2)

SNAT(POST_ROUTING):

发送数据包给外网。netfiltersaddr(192.168.0.2) daddr(202.202.202.2)需要存储状态,存储192.168.0.2+port,202.202.202.2+port,并修改saddr为10.10.10.1。(为了提高效率,不用查询后插入)

发送数据包给内网。saddr(202.202.202.2) daddr(192.168.0.2)

eth1(private ip 192.168.0.1):(所有的数据包都转发给eht0处理)

eth3(ip 192.168.0.2);

eth4(ip 202.202.202.2);

1. 数据包进入Hook函数后,进行规则匹配;

2. 如果所有match都匹备,则进行SNAT模块的动作,即snat 的target模块;

3. 源地址转换的规则一般是…… -j SNAT –to X.X.X.X,SNAT用规则中预设的转换后地址X.X.X.X,修改连接跟踪表中的replay tuple;

5. 对于回来的数据包,应该能在状态跟踪表中,查找与之对应的replay tuple,也就能顺藤摸瓜地找到原始的tuple中的信息,将应答包中的目的地址改回来,这样,整个数据传送就得以顺利转发了;

谢谢独孤九贱前辈的总结和对2.4的源码分析

* NF_IP_PRE_ROUTING (0)

数据报在进入路由代码被处理之前,数据报在IP数据报接收函数ip_rcv()(位于net/ipv4/ip_input.c,Line379)的最后,也就是在传入的数据报被处理之前经过这个HOOK。在ip_rcv()中挂接这个HOOK之前,进行的是一些与类型、长度、版本有关的检查。

经过这个HOOK处理之后,数据报进入ip_rcv_finish()(位于 net/ipv4/ip_input.c,Line306)


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-36628-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...