


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、迈普学习总结经过在公司里学习了几个月,把大体的工作总结于下:在参与1800-20 3G路由的开发中,我参与了l2tp, gre,静态路由, ipsec,日志关键信息提取的编写。并同时参与了ipsec-tools源码,linux kernel网络协议栈源码,l2tpd源码分析。并且同时了解了vrrp,rip等协议。L2TP模块:L2tp代码流程:连接请求lnslac连接成功lnslacPpp连接请求lnslacPpp允许连接协商lnslacPpp配置文件lnslacPpp配置文件lnslacPpp配置ACKlnslacPpp配置ACKlnslacPpp 认证lnslacncp 网络配置lnsla
2、c接受ncp 网络配置lnslacACKlaclns其中认证过程分为pap和chap认证: Pap认证:认证信息lnslac通过认证lnslacChap认证:发送加密数据,使LAC认证lnslac认证信息lnslac通过认证lnslac大体过程应该是这样的,中间也许有错,主要是记不大清楚了。Pppd向内核注册过程如下图:internet路由器lns路由器lac内网2内网1拓扑图:做lac的路由器通过拨号到lns,通过上面的连接认证后,lns会给lac分配一个私有ip地址,该Ip地址可以和2通信。通过这个过程后,久可以让内网1的pc访问内网2的pc。Gre模块:internet路由器内网2路由器
3、内网1模型:开始的时候,内网1和内网2是不能相互到达的,因为中间有许多中间网络。当建立好GRE隧道后,内网1就可以和内网2通信了。实现:GRE脚本主要通过iproute2这个工具实现。使用的主要脚本命令:Ip route add $name mode gre remote $remoteip local $localip ttl 255Ip route set $name upIp route add net $net/$mask dev $name脚本流程:脚本从lua保存的配置文件中获取到上面的变量值,然后通过以上指令,将变量值设置到相应的隧道中。责任:主要担任gre模块的测试(与linu
4、x)。DDNS模块:原理:DDNS又叫动态域名解析。实用环境是在用户动态获取IP地址的情况下。因为传统的DNS只能与固定IP地址绑定,一旦IP地址发生变化,相应的域名将不能解析到变换后的IP地址上。然后DDNS改变了这一点。它以动态域名绑定的方式来完成这一点。什么叫动态域名呢?就是指在用户的IP地址发生改变时,相应的DDNS客户端会把自己现在的变化后的IP地址传给DDNS服务器,告诉它自己的IP地址已经发生变化,需要服务器将以前绑定域名的IP换成现在变化后的IP地址。如果内部在加上端口映射,那么久可以实现路由器内部的主机间接与DNS绑定,即其他人通过域名就能访问的内网的某台计算上的服务器。责任
5、:DDNS的测试。静态路由模块:原理:举个例子,当一个路由器刚接入到一个网络中时,在这个陌生的环境中,它根本不知道去某个地址该怎么走,静态路由就相当于一个指路人,它告诉路由器某个IP地址该怎么走。配置的时候,只需要告诉路由器到达某个网络需要从哪张网卡和相应网卡出去的网关地址就可以了。这样凡是到那个网络的IP数据包,路由器都会将它从相应网卡转发出去(ttl-1)。它并不关心数据包能否真正的到达。实现:具体命令:route add net $net mask $netmask gw $gateway dev $device责任:静态路由的脚本的基本框架。Ipsec模块:原理:在内核2.6版本中已经
6、存在ipsec模块,该模块的主要作用是让数据包经过加密/认证从安全的隧道中到达指定的目标地址。它的有几种数据包格式,一种是esp,一种是ah,另一种是esp+ah。他们的报文格式如下:Ah是一种用于认证报文,它主要是给数据包提供认证,防重放;ESP是一种用于加密报文,当然它也有认证的功能,并且也具有抗重放的机制。它是一种更优越于AH的报文结构。另外,esp+ah则是一种集esp和ah于一身的格式,当然它的安全性就更不可否认了。整个模块分为两大类:第一类,kernel ipsec的实现,第二类上层应用程序ike即为ipsec模块协商认证算法和加密算法的协议。下面谈谈ike协议。Ike协议分为两个
7、阶段,第一阶段协商对对方的身份进行认证,并且为第二阶段的协商提供一条安全可靠的通道。第一个阶段又分为3种模式,我们常用的有两种模式,一个是主模式,一个是积极模式。第二阶段主要对IPSEC的安全性能进行协商,产生真正可以用来加密数据流的密钥。主模式(IKE SA 阶段):安全提议,转换载荷,一些详情接收端发起端安全提议,转换载荷,一些详情接收端发起端DH算法产生公共密钥,密钥交换接收端发起端DH算法产生公共密钥,密钥交换接收端发起端加密ID,进行身份认证接收端发起端加密ID,进行身份认证接收端发起端以上过程中包含验证信息,我就没特别指出了。具体参见如下:发送cockie包,用来标识唯一的一个IP
8、SEC会话。IKE阶段一(主模式):发送消息1 initiator=responsor isakmp header sa payload proposal payload transform payload 定义一组策略: 加密方法:DES 认证身份方法:预共享密钥 认证散列:MD5 存活时间:86400秒 Diffie-Hellman group:1IKE阶段二(主模式):发送消息2 initiatorresponsor 通过DH算法产生共享密钥 KE(Key Exchang) Payload nonce(暂时) PayloadDH算法: A: P(较大的质数) B: P(较大的质数) G
9、G PriA(随机产生) PriB(随机产生) PubA=GPriA mod P PubB=GPriB mod P 交换PubA和PubB Z=PubBPriA mod P Z=PubAPriB mod P Z就是共享密钥,两个自我产生的Z应相同,它是用来产生3个SKEYID的素材。IKE阶段四(主模式):发送消息4 initiatorresponsor Identity Payload:用于身份标识 Hash Payload:用来认证 以上2个负载都用SKEYID_e加密IKE阶段六(主模式):发送消息6 initiatorresponsor 同样定义一组策略,继续用SKEYID_e加密:
10、Encapsulation ESP Integrity checking SHA-HMAC DH group 2 Mode TunnelIPSec阶段二(快速模式):发送消息2 initiatorresponsor 用来核实responsor的liveness。 至此,整个IPSec协商的两个过程已经完成,两端可以进行安全的数据传输。实现:ike协议我们主要是通过利用开源软件ipsec-tools来实现的。责任:负责ipsec的代码BUG解决(BUG数量多,就不列出了),ipsec的证书申请脚本编写(研究了openssl)。Ipsec-tools流程:eay_init();/opensll初始
11、化initlcconf();/本地配置文件初始化initrmconf();/远端配置文件初始化oakley_dhinit();/dh算法初始化compute_vendorids();/dpdparse(ac, av);/传进来的参数分析ploginit();/本地日志初始化pfkey_init()/内核接口af_key初始化,主要是向内核注册isakmp_cfg_init(ISAKMP_CFG_INIT_COLD)/isakmp配置初始化cfparse();/配置文件分析,别且赋值给相应结构体session();/主要会话下面是session函数里面的实现:sched_init();/调度初始
12、化init_signal();/信号初始化admin_init()/和setkey, racoonctl的连接口初始化initmyaddr();/初始化本地地址isakmp_init()/isakmp初始化initfds();/初始化select的套接字natt_keepalive_init ();/初始化nat协商的相关内容for (i = 0; i sock);/监听到ike连接信息和ike协商信息处理函数pfkey_handler();/监听的内核af_key发上来的信息处理函数(包含发起ike协商等)isakmp_handler(p-sock);函数里最重要的函数是isakmp_mai
13、n()isakmp_handler(p-sock);()这个函数里面除了数据包有效性检查外,ph1_main()第一阶段函数,quick_main()第二阶段处理函数,这两个函数最重要。这两个函数内分别用了一个重要的结构体:如下ph1exchange 整个racoon就靠这个结构体来进行协商。(可以说是贯穿整个racoon)static int (*ph1exchange2PHASE1ST_MAX)_P(struct ph1handle *, vchar_t *) = /* error */ , , , /* Identity Protection exchange */ nostate1,
14、ident_i1send, nostate1, ident_i2recv, ident_i2send, ident_i3recv, ident_i3send, ident_i4recv, ident_i4send, nostate1, , nostate1, ident_r1recv, ident_r1send, ident_r2recv, ident_r2send, ident_r3recv, ident_r3send, nostate1, nostate1, nostate1, , , /* Aggressive exchange */ nostate1, agg_i1send, nost
15、ate1, agg_i2recv, agg_i2send, nostate1, nostate1, nostate1, nostate1, nostate1, , nostate1, agg_r1recv, agg_r1send, agg_r2recv, agg_r2send, nostate1, nostate1, nostate1, nostate1, nostate1, , , /* Base exchange */ nostate1, base_i1send, nostate1, base_i2recv, base_i2send, base_i3recv, base_i3send, n
16、ostate1, nostate1, nostate1, , nostate1, base_r1recv, base_r1send, base_r2recv, base_r2send, nostate1, nostate1, nostate1, nostate1, nostate1, , ,;可以看的到上面有第一阶段有三个模式的发送和接受函数(main , Aggressive, base);其中有每一个模式下的交互消息 一个函数。同时也有验证函数。如果熟悉几种模式的发包流程,相信通过函数定义的名字 就可以轻松知道 函数是干嘛用的了。(注意存在状态判断函数,发送和接收函数,每个阶段都不同)以上
17、函数会在ph1_main()调用,在pfkey_handler()调用的则是协商发起方。static int (*ph2exchange2PHASE2ST_MAX)_P(struct ph2handle *, vchar_t *) = /* error */ , , , /* Quick mode for IKE */ nostate2, nostate2, quick_i1prep, nostate2, quick_i1send, quick_i2recv, quick_i2send, quick_i3recv, nostate2, nostate2, , nostate2, quick_r
18、1recv, quick_r1prep, nostate2, quick_r2send, quick_r3recv, quick_r3prep, quick_r3send, nostate2, nostate2, ,;可以看到上面的第二阶段即快速模式下的发送和接受函数,这些函数就是ike第二阶段协商使用的。其中有二阶段的每个包的发送和接受,状态函数。具体是怎么实现的 请参看相应的源代码。以上的ph2handle会在,quick_main()中调用。各个处理方法和流程参考代码就可以了。这就是大概流程,其中可能会涉及到openssl编码问题(第一阶段的算法为二阶段的传递信息编码)。日志分析:编写选
19、出特定信息的脚本。通过awk的传参和让AWK进行处理。Linux kernel网络协议栈流程:LINKIp_recv()IP包头有效性检查IP header check主要改变Mark,tos,ttlManagle(PREROUTING)整个路由抉择可以过滤多播或组播通过找到的策略调用相关SA封装IPSEC数据包NAT (PREROUTEING)DNATDe_fragment Route decisionOutput_routeInput_routeOuput_route接受包过滤Managle(INPUT)安全路由检查,查找路由表 (包括查找IPSEC策略)Filter(INPUT)Some
20、_check包括本机IPSEC数据包处理,或tcp,udp,icmp等Transfer(tcp, udp handle)Recvmsg() (socket)Managle (FORWARD)ESP,AH (使用netif_rx())等Local processFilterFORWARDsendmsg() (socket)转发包过滤Transfer(tcp, udp handle)安全路有检查,查找路由表(包括查找IPSEC策略)Route decisionInput_routeOutput_route通过找到的策略调用相关SA封装IPSEC数据包Managle (OUTPUT)Nat (OUT
21、PUT)发送包过滤Filter(OUTPUT)主要改变Mark,tos,ttlManagle(POSTROUTING)SNATLINKIp_Send_out()NAT (POSTROUTING)IP_fragmentQOS图1,tcp/ip 协议栈AF_INET运行结构图(包含IPSEC, netfilter,af_key)Netfilter维护链表:netfilter定义了一个二维的链表头数组structlist_headnf_hooksNPROTONF_MAX_HOOKS来表示所有协议族的各个挂接点,NPROTO值为32,可表示linux所支持所有32个协议族(include/linux/
22、socket.h文件中定义),也就是使用socket(2)函数的第一个参数的值,如互联网的TCP/IP协议族PF_INET(2)。每个协议族有NF_MAX_HOOKS(8)个挂接点,但实际只用了如上所述的5个,数组中每个元素表示一个协议族在一个挂接点的处理链表头。AF_IPXAF_AX25AF_LOCALAF_INETPREROUTING FORWARD INPUT OUTPUT POSTROUTING.managlemanaglemanaglemanaglemanaglenatnatfilterfilternatfilter.图2,netfilter 维护的链表结构图例如:在IPv4(PF_
23、INET协议族)下,各挂接点定义在:NF_IP_PRE_ROUTING中,在IP栈成功接收sk_buff包后处理,挂接点在在net/ipv4/ip_input.c的函数intip_rcv(structsk_buff*skb,structnet_device*dev,structpacket_type*pt)中使用:returnNF_HOOK(PF_INET,NF_IP_PRE_ROUTING,skb,dev,NULL,ip_rcv_finish);挂接点的操作由结构structnf_hook_ops定义:include/linux/netfilter.hstructnf_hook_opsstr
24、uctlist_headlist;/ 链表头,用于将此结构接入操作链表/*Userfillsinfromheredown.*/nf_hookfn*hook;/钩子函数intpf; /协议族inthooknum;/挂接点如:PREROUTING/*Hooksareorderedinascendingpriority.*/intpriority;/优先级;优先级列表:NF_IP_PRI_FIRST=INT_MIN,NF_IP_PRI_CONNTRACK=-200,NF_IP_PRI_MANGLE=-150,NF_IP_PRI_NAT_DST=-100,NF_IP_PRI_FILTER=0,NF_I
25、P_PRI_NAT_SRC=100,NF_IP_PRI_LAST=INT_MAXaf_inet模块挂接(详细运转关系,由于时间原因,就不在叙述):inet_init()即使用socket套接字建立之后,调用函数如:ioctl, send, recv, setsockopt,close, connect等的注册(传输层到网络层)。添加到结构体proto_list中。注册套接字操作函数,STREAM,RAW, DGRAM用户空间使用socket选择PF_INET后,把内核调用的函数inet_create添加到结构体net_familiesPF_INET中。主要分配结构体sock(INET_sock
26、)注册socket调用函数当通过ip_rcv之后的路由抉择以后的传输层处理函数,如tcp handle,添加到结构体inet_protosprotocol中。注册传输层处理函数(包括IGMP)初始化ARP,IP,TCP,UDP,ICMP相关参数,添加相关信息。初始化相关信息(namespace),如路由表初始化添加结构体ip_packet_type,下层软件通过ip_packet_type类型来判断需要调用的模块。注册模块处理类型IPV4af_key模块挂接(详细运转关系,由于时间原因,就不在叙述):内核中PF_KEY实现要完成的功能是实现维护内核的安全联盟(SA)和安全策略(SP)数据库,以
27、及和用户空间的接口。Ipsec_afkey_init()即使用socket套接字建立之后的端口操作。这里只注册了结构体pfkey_sock大小。挂接到链表proto_list中注册套接字操作函数用户空间使用socket选择PF_KEY后,把内核调用函数afkey_create添加到结构体net_familiesPF_INET中。主要分配结构体sock,设置操作函数结构体pfkey_ops,包含sendmsg(), recvmsg()函数注册socket调用函数登记通知(notify)处理pfkeyv2_mgr登记通知(notify)处理pfkeyv2_mgr, 挂接到链表xfrm_km_lis
28、t中。详细过程略xfrm_state表:xfrm状态用来描述SA在内核中的具体实现structxfrm_state /*Note:bydstisre-usedduringgc*/每个状态结构挂接到三个HASH链表中 structhlist_nodebydst;/按目的地址HASH structhlist_nodebysrc;/按源地址HASH structhlist_nodebyspi;/按SPI值HASH atomic_trefcnt;/所有使用计数 spinlock_tlock;/状态锁 structxfrm_idid;/ID structxfrm_selectorsel;/状态选择子 u
29、32genid; /*Keymangerbits*/struct u8state; u8dying; u32seq; km; /*Parametersofthisstate.*/struct u32reqid; u8mode; u8replay_window; u8aalgo,ealgo,calgo; u8flags; u16family; xfrm_address_tsaddr; intheader_len; inttrailer_len; props; structxfrm_lifetime_cfglft;/生存时间 /*Datafortransformer*/structxfrm_alg
30、o*aalg;/hash算法 structxfrm_algo*ealg;/加密算法 structxfrm_algo*calg;/压缩算法 /*Dataforencapsulator*/structxfrm_encap_tmpl*encap;/NAT-T封装信息 /*Dataforcare-ofaddress*/xfrm_address_t*coaddr; /*IPCompneedsanIPIPtunnelforhandlinguncompressedpackets*/structxfrm_state*tunnel; /*Ifatunnel,numberofusers+1*/atomic_ttu
31、nnel_users; /*Stateforreplaydetection*/structxfrm_replay_statereplay; /*Replaydetectionstateatthetimewesentthelastnotification*/structxfrm_replay_statepreplay; /*internalflagthatonlyholdsstatefordelayedaeventatthe *moment */u32xflags; /*Replaydetectionnotificationsettings*/u32replay_maxage; u32replay_maxdiff; /*Replaydetectionnotificationtimer*/structtimer_listrtimer; /*Statistics*/structxfrm_statsstats; structxfrm_lifetime_curcurlft; structtimer_listtimer; /*Lastusedtime*/u64lastused; /*Referencetodatacommontoalltheinstancesof
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 探索视觉传播设计与制作的试题及答案
- 2024年二手车评估师就业市场的洞察与考试试题及答案
- 防学生早恋课件
- 汽车维修工的工作流程与实务操作试题及答案
- 二手车技术评估中的常见问题试题及答案
- 2024古代文学史高频考题及答案
- 2024年美容师考试注意事项总结试题及答案
- 2024古代文学常考知识考题试题及答案
- 2024年统计学考试实战技巧提升试题及答案
- 独特视角看2025年小学一年级语文考试试题及答案
- 新版《医疗器械经营质量管理规范》(2024)培训试题及答案
- 2025年初级社会工作者综合能力全国考试题库(含答案)
- 语文课程标准解读及实践:五下第二单元课本剧《猴王出世》剧本
- GB/T 6109.2-2008漆包圆绕组线第2部分:155级聚酯漆包铜圆线
- GB/T 17747.1-2011天然气压缩因子的计算第1部分:导论和指南
- 2023年金钥匙科技初三化学CESL活动竞赛决赛试题及答案
- 电动汽车无线充电技术课件
- 耳鼻咽喉头颈外科学-5.osash及喉科学
- 第章微生物的遗传与变异
- GB∕T 21489-2018 散粮汽车卸车装置
- 教育部人文社科项目申请书范本-2-副本
评论
0/150
提交评论