当前位置:文档之家› linux路由协议网络协议栈

linux路由协议网络协议栈

迈普学习总结

经过在公司里学习了几个月,把大体的工作总结于下:

在参与1800-20 3G路由的开发中,我参与了l2tp, gre,静态路由, ipsec,日志关键信息提取的编写。并同时参与了ipsec-tools源码,linux kernel 网络协议栈源码,l2tpd源码分析。并且同时了解了vrrp,rip等协议。

L2TP模块:

L2tp代码流程:

其中认证过程分为pap和chap认证:

Pap认证:

Chap认证:

大体过程应该是这样的,中间也许有错,主要是记不大清楚了。

Pppd 向内核注册过程如下图:

做lac 的路由器通过拨号到lns ,通过上面的连接认证后,lns 会给lac 分配一个私有ip 地址,该Ip 地址可以和

2通信。

通过这个过程后,久可以让内网1的

pc 访问内网2

的pc 。

Gre 模块:

模型:

开始的时候,内网1和内网2是不能相互到达的,因为中间有许多中间网络。当建立好GRE 隧道后,内网1就可以和内网2通信了。

实现:GRE 脚本主要通过iproute2这个工具实现。使用的主要脚本命令: Ip route add $name mode gre remote $remoteip local $localip ttl 255 Ip route set $name up Ip route add net $net/$mask dev $name

脚本流程:脚本从lua 保存的配置文件中获取到上面的变量值,然后通过以上指令,将变量值设置到相应的隧道中。 责任:主要担任gre 模块的测试(与linux )。

DDNS 模块:

原理:DDNS 又叫动态域名解析。实用环境是在用户动态获取IP 地址的情况下。因为传统的DNS 只能与固定IP 地址绑定,一旦IP 地址发生

是指在用户的IP地址发生改变时,相应的DDNS客户端会把自己现在的变化后的IP地址传给DDNS服务器,告诉它自己的IP地址已经发生变化,需要服务器将以前绑定域名的IP换成现在变化后的IP地址。如果内部在加上端口映射,那么久可以实现路由器内部的主机间接与DNS绑定,即其他人通过域名就能访问的内网的某台计算上的服务器。

责任:DDNS的测试。

静态路由模块:

原理:举个例子,当一个路由器刚接入到一个网络中时,在这个陌生的环境中,它根本不知道去某个地址该怎么走,静态路由就相当于一个指路人,它告诉路由器某个IP地址该怎么走。配置的时候,只需要告诉路由器到达某个网络需要从哪张网卡和相应网卡出去的网关地址就可以了。这样凡是到那个网络的IP数据包,路由器都会将它从相应网卡转发出去(ttl-1)。它并不关心数据包能否真正的到达。

实现:具体命令:route add –net $net mask $netmask gw $gateway dev $device

责任:静态路由的脚本的基本框架。

Ipsec模块:

原理:在内核2.6版本中已经存在ipsec模块,该模块的主要作用是让数据包经过加密/认证从安全的隧道中到达指定的目标地址。它的有几种数据包格式,一种是esp,一种是ah,另一种是esp+ah。他们的报文格式如下:

Ah是一种用于认证报文,它主要是给数据包提供认证,防重放;ESP是一种用于加密报文,当然它也有认证的功能,并且也具有抗重放的机制。它是一种更优越于AH的报文结构。另外,esp+ah则是一种集esp和ah于一身的格式,当然它的安全性就更不可否认了。

整个模块分为两大类:第一类,kernel ipsec的实现,第二类上层应用程序ike即为ipsec模块协商认证算法和加密算法的协议。下面谈谈ike协议。

Ike协议分为两个阶段,第一阶段协商对对方的身份进行认证,并且为第二阶段的协商提供一条安全可靠的通道。第一个阶段又分为3种模式,我们常用的有两种模式,一个是主模式,一个是积极模式。第二阶段主要对IPSEC的安全性能进行协商,产生真正可以用来加密数据流的密钥。

主模式(IKE SA 阶段):

以上过程中包含验证信息,我就没特别指出了。具体参见如下:

发送cockie包,用来标识唯一的一个IPSEC会话。

IKE阶段一(主模式):发送消息1 initiator====>responsor

isakmp header

sa payload

proposal payload

transform payload

定义一组策略:

加密方法:DES

认证身份方法:预共享密钥

存活时间:86400秒

Diffie-Hellman group:1

IKE阶段二(主模式):发送消息2 initiator<====responsor

同上

IKE阶段三(主模式):发送消息3 initiator====>responsor

通过DH算法产生共享密钥

KE(Key Exchang) Payload

nonce(暂时) Payload

DH算法:

A: P(较大的质数) B: P(较大的质数)

G G

PriA(随机产生) PriB(随机产生)

PubA=G^PriA mod P PubB=G^PriB mod P

交换PubA和PubB

Z=PubB^PriA mod P Z=PubA^PriB mod P

Z就是共享密钥,两个自我产生的Z应相同,它是用来产生3个SKEYID的素材。

IKE阶段四(主模式):发送消息4 initiator<====responsor

同上

主模式第3、4条消息其实就是DH算法中需要交换的几个参数,然后路由器再通过DH算法计算出的公共密钥计算出以下3个参数(这是在发送第5、6个消息前完成的):

SKEYID_d:留在在第二阶段用,用来计算后续的IKE密钥资源;

SKEYID_a:散列预共享密钥,提供IKE数据完整性和认证;

SKEYID_e:用来加密下一阶段的message,data, preshared key,包括第二阶段。

IKE阶段五(主模式):发送消息5 initiator====>responsor

Identity Payload:用于身份标识

Hash Payload:用来认证

以上2个负载都用SKEYID_e加密

IKE阶段六(主模式):发送消息6 initiator<====responsor

同上

消息5、6是用来验证对等体身份的。至此IKE协商第一阶段完成。

主要会发送6个报文,由于最后一组报文发送的是身份,此时身份已经加密,因此,只能采用地址进行认证,但其安全性高于积极模式。缺点是耗时比积极模式长。

积极模式:

主要发送3个报文,安全性没有主模式好,由于其ID不加密,因此可用于移动客户端模式。即不用地址作为ID。优点:速度快,缺点安全性不高。

第二阶段快速模式(IPSec SA 阶段):

相关主题