文档介绍:经过在公司里学习了几个月,把大体的工作总结于下:在参与1800-203G路由的开发中,我参与了l2tp,gre,静态路由,ipsec,日志关键信息提取的编写。并同时参与了ipsec-tools源码,linuxkernel网络协议栈源码,l2tpd源码分析。并且同时了解了vrrp,rip等协议。L2TP模块:L2tp代码流程:cp网络配置lnslac接受ncp网络配置lnslacACKlaclns其中认证过程分为pap和chap认证:Pap认证:hap认证:发送加密数据,使LAC认证lnslac认证信息lnslac通过认证lnslac大体过程应该是这样的,中间也许有错,主要是记不大清楚了。Pppd向内核注册过程如下图:路由器lns路由器lac内网2内网1拓扑图:做lac的路由器通过拨号到lns,通过上面的连接认证后,lns会给lac分配一个私有ip地址,该Ip地址可以和2通信。通过这个过程后,久可以让内网1的pc访问内网2的pc。Gre模块:路由器内网2路由器内网1模型:开始的时候,内网1和内网2是不能相互到达的,因为中间有许多中间网络。当建立好GRE隧道后,内网1就可以和内网2通信了。实现:GRE脚本主要通过iproute2这个工具实现。使用的主要脚本命令: Iprouteadd$namemodegreremote$remoteiplocal$localipttl255 Iprouteset$nameup /$maskdev$name脚本流程:脚本从lua保存的配置文件中获取到上面的变量值,然后通过以上指令,将变量值设置到相应的隧道中。责任:主要担任gre模块的测试(与linux)。DDNS模块:原理:DDNS又叫动态域名解析。实用环境是在用户动态获取IP地址的情况下。因为传统的DNS只能与固定IP地址绑定,一旦IP地址发生变化,相应的域名将不能解析到变换后的IP地址上。然后DDNS改变了这一点。它以动态域名绑定的方式来完成这一点。什么叫动态域名呢?就是指在用户的IP地址发生改变时,相应的DDNS客户端会把自己现在的变化后的IP地址传给DDNS服务器,告诉它自己的IP地址已经发生变化,需要服务器将以前绑定域名的IP换成现在变化后的IP地址。如果内部在加上端口映射,那么久可以实现路由器内部的主机间接与DNS绑定,即其他人通过域名就能访问的内网的某台计算上的服务器。责任:DDNS的测试。静态路由模块:原理:举个例子,当一个路由器刚接入到一个网络中时,在这个陌生的环境中,它根本不知道去某个地址该怎么走,静态路由就相当于一个指路人,它告诉路由器某个IP地址该怎么走。配置的时候,只需要告诉路由器到达某个网络需要从哪张网卡和相应网卡出去的网关地址就可以了。这样凡是到那个网络的IP数据包,路由器都会将它从相应网卡转发出去(ttl-1)。它并不关心数据包能否真正的到达。实现:具体命令:$maskgw$gatewaydev$device责任:静态路由的脚本的基本框架。Ipsec模块:原理:,该模块的主要作用是让数据包经过加密/认证从安全的隧道中到达指定的目标地址。它的有几种数据包格式,一种是esp,一种是ah,另一种是esp+ah。他们的报文格式如下:Ah是一种用于认证报文,它主要是给数据包提供认证,防重放;ESP是一种用于加密报文,当然它也有认证的功能,并且也具有抗重放的机制。它是一种更优越于AH的报文结构。另外,esp+ah则是一种集esp和ah于一身的格式,当然它的安全性就更不可否认了。整个模块分为两大类:第一类,kernelipsec的实现,第二类上层应用程序ike即为ipsec模块协商认证算法和加密算法的协议。下面谈谈ike协议。Ike协议分为两个阶段,第一阶段协商对对方的身份进行认证,并且为第二阶段的协商提供一条安全可靠的通道。第一个阶段又分为3种模式,我们常用的有两种模式,一个是主模式,一个是积极模式。第二阶段主要对IPSEC的安全性能进行协商,产生真正可以用来加密数据流的密钥。主模式(IKESA阶段):安全提议,转换载荷,一些详情接收端发起端安全提议,转换载荷,一些详情接收端发起端DH算法产生公共密钥,密钥交换接收端发起端DH算法产生公共密钥,密钥交换接收端发起端加密ID,进行身份认证接收端发起端加密ID,进行身份认证接收端发起端以上过程中包含验证信息,我就没特别指出了。具体参见如下:发送cockie包,用来标识唯一的一个IPSEC会话。IKE阶段一(主模式):发送消息1    initiator====>responsor     isakmpheader     sapayload     proposalpayload     transformpayload     定义一组策略: