最近了解了一下pptp client的代码,简单记录一下,以防后面有用。
按照流程,pptp client启动时,会启动pppd去创建新的ppp连接,并生成新的接口,例如ppp1。
大体的数据流程是,当创建了ppp1,同时可以配置路由,这样需要vpn走的数据就可以走到ppp1接口,ppp1接口对应的处理是pppd,这是应用层deamon,pppd和gre-2-ppp进程通过pty进行通信,gre-2-ppp将数据加密,最后自己创建socket把数据发送到对端,返回的数据,则socket负责收取,解密后,通过pty回到ppp接口,这样就类似于一个正常的ppp数据。
这里我们只是了解到,所有的和pptp相关的都是在用户空间做的,如果需要优化,可以将其搬到内核空间实现。
进一步,具体如何通过pty和ppp来工作,那我想破解之道在于理解ppp协议的工作,把ppp协议工作理解了,pppoe之流也好理解了。
在最近3.0内核中,我看到了pptp在内核中的实现,其实大体应该就是数据发送加密由内核做,数据接收解密也在内核中完成,但是问题是认证如何实现ÿ