【IT168 专稿】前文《网管经验谈:配置Linux下的×××网络》,笔者介绍了使用CIPE建立Linux计算机直接的×××,目前,许多用户因业务发展,不断更新或升级网络,从而造成自身用户环境差异较大,整个网络系统平台参差不齐,在服务器端大多使用Linux和Unix的,桌面端使用Windows 9X/2000/XP。所以在企业应用中往往是Linux/Unix和Windows操作系统共存形成异构网络。如果希望Linux计算机与Windows计算机建立×××连接那么可以使用PPTP技术。
一、 PPP协议以及PPTP协议简介
    1. PPP协议简介
    点到点隧道协议(PPTP)PPTP是Ascend通信公司、ECI电话公司、微软、3com以及USRobotics公司共同合作的成果。这个工作组称为PPTP论坛。PPTP的基础是很好绑定且相互区别的函数。之所以这样做是因为这样可以使用户和生产商能利用Internet的普遍特性。通过支持一种标准,用户可以通过本地ISP拨号并能够安全地通过Internet隧道连接到他们的公司网络。这样可以使公司减少产生和支持自身远程访问硬件的要求。点对点隧道协议(PPTP)是建立在IP、PPP协议上的一种高层协议,而IP、PPP协议是Internet工程任务组(IETF)所支持的两个极其重要的Internet标准协议。简单地说就是PPTP是IP与PPP自然发展的结果。点对点隧道协议并不是微软公司单独开发的,而是与几个主要的通信硬件开发商联合开发的。微软和其它PPTP的支持者已经将PPTP介绍给了Internet工程任务组。为了了解PPTP的基本内容,必须研究一下PPP协议。
    PPP协议简介
    串行线路网际协议(SLIP)是一种通信协议,使用RS-232串口与调制解调器相连,支持通过拨号方式与因特网连接(即使用TCP/IP)。SLIP改变标准的因特网数据报,它在因特网数据报中添加一个SLIPEND字符,由此而改变了数据报。数据报允许将此字符独立看待。SLIP需要一个端口配置为八位数据,无奇偶校验,和硬件流控制。然而,SLIP不提供错误检测,只依靠高层协议控制。如果运行特殊的有错误倾向的拨号连接,SLIP本身的作法将不令人满意。为正确运行,必须在每次建立连接前配置IP地址。点对点协议(PPP)是一种本质上与SLIP相同的较新协议,然而,它的设计比SLIP更好更具有实用性更可接受。它在异步连接和面向位的同步连接系统中均可使用,并可动态配置与远程网络连接以及检测连接链。为了改进SLIP,人们制订了点对点PPP(Point-to-Point Protocol)。PPP位于Linux TCP/IP四层网络模型的接入网层(Host-to-Net Layer)。和SLIP相比,PPP支持许多服务,包括:同时支持多个协议、链路配置、错误检测、压缩、加密、网络信息、认证。TCP/IP模型各个层次的功能和协议见表-1。

    表-1 TCP/IP模型各个层次的功能和协议
构建基于PPTP技术Linux ×××网络 (上)_职场
表1

    PPP位于协议栈中的数据链路层上,和物理层和网络层接口。如图1。
 
构建基于PPTP技术Linux ×××网络 (上)_职场_02
图1具有PPP连接服务的TCP/IP栈

    PPP协议的三大成就:
    1. 明确地划分出一帧的尾部和下一帧的头部的成帧方式。这种帧格式也处理错误检测工作。
    2. 当线路不再需要时,挑出这些线路,测试它们,商议选择,并仔细地再次释放链路控制协议。这个协议被称为链路控制协议LCP(link control protocol)。
    3. 用独立于所使用的网络层协议的方法来商议使用网络层的哪些选项。对于每个所支持的网络层来说,所选择的方法有不同的网络控制协议NCP(network control protocol)。
PPP帧不仅能通过拨号电话线发送出去,而且还能通过SONET或真正面向位的HDLC线路(即路由器与路由器相连)发送出去。
 PPP协议组成
    PPP协议有三个组成部分:

    1. 一个将IP数据报封到串行链路的方法。PPP既支持异步链路(无奇偶校验的8比特数据),也支持面向比特的同步链路。
    2. 一个用来建立、配置和测试数据链路的链路控制协议LCP(Link Control Protocol)。通信的双方可协商一些选项。在[RFC 1661]中定义了11种类型的LCP分组。
一套网络控制协议NCP(Network Control Protocol),支持不同的网络层协议,如IP、OSI的网络层、DECnet、AppleTalk等。
 安全性

    加密问题既没有在RFC1171也没有在RFC1172中提到过。这意味着PPP和PAP不对数据或报头使用任何加密算法。为了弥补这个缺点,开发了一个新的验证协议,并在1996年8月的RFC1994中发布。标题为“PPP质询握手验证协议(CHAP)”的RFC1994没有重新定义PPP协议。事实上,它依赖于PPP来进行像建立链路和封装数据报这样的内务处理。RFC1994所定义的是在使用PPP时进行验证的方法。CHAP使用该RFC称为3-way信号交换的过程定期验证同位体的一致性。根据该RFC,验证过程在初始链路建立时运行并在需要时重复。此过程如下:

    1)在链路建立步骤完成后,验证器发送一个质询消息到该同位体。
    2)同位体使用one-way散列函数对值进行计算。
    3)验证器检查对所期望的散列值进行计算的应答。如果值是匹配的,则该过程继续。如
果不匹配,则不建立任何连接。
    4)验证器以随机的时间间隔发送一个新的质询到同位体中,并且该过程跳转到步骤2。

    此时,验证方法取决于一个秘密,该秘密只有验证器和特定的同位体知道。我们将看到
这个秘密以令人惊奇的方式进行实现。同样。由于CHAP可用于验证许多不同的系统,因此将使用名字字段作为索引对大型秘密表中适当的秘密进行定位。我们还将看到这是如何用于另一个协议的。最后,尽管该RFC没有专门说明应使用哪种散列算法,但它确实提到了MD5。
 
2. PPTP协议简介
    PPTP:点对点隧道协议 ( Point to Point Tunneling Protocol)
    点对点隧道协议(PPTP)是一种支持多协议虚拟专用网络的网络技术。通过该协议,远程用户能够通过 Microsoft Windows NT /2000/xp工作站、Windows 95 和 Windows 98/me 操作系统以及其它装有点对点协议的系统安全访问公司网络,并能拨号连入本地 ISP,通过 Internet 安全链接到公司网络。
    PPTP 可以用于在 IP 网络上建立 PPP 会话隧道。在这种配置下,PPTP 隧道和 PPP 会话运行在两个相同的机器上,呼叫方充当 PNS。PPTP 使用客户机-服务器结构来分离当前网络访问服务器具备的一些功能并支持虚拟专用网络。PPTP 作为一个呼叫控制和管理协议,它允许服务器控制来自 PSTN 或 ISDN 的拨入电路交换呼叫访问并初始化外部电路交换连接。PPTP 只能通过 PAC 和 PNS 来实施,其它系统没有必要知道 PPTP。拨号网络可与 PAC 相连接而无需知道 PPTP。标准的 PPP 客户机软件可继续在隧道 PPP 链接上操作。点对点隧道协议实现起来容易,而且并不昂贵。许多单位组织都希望以这样的方式,安全、协议独立、无争议、有效而且无需改变已有的网络地址,进行拨号连接来访问公共主干网。而支持点对点隧道协议的虚拟广域网(WAN)就是完成这项工作的一个很有效的方法。
    PPTP 使用 GRE 的扩展版本来传输用户 PPP 包。这些增强允许为在 PAC 和 PNS 之间传输用户数据的隧道提供低层拥塞控制和流控制。这种机制允许高效使用隧道可用带宽并且避免了不必要的重发和缓冲区溢出。PPTP 没有规定特定的算法用于低层控制,但它确实定义了一些通信参数来支持这样的算法工作。整个PPP 封包透过GRE(Generic Routing Encapsulation)封装 (如图2),PPTP 目前为工业的标准,定义于RFC 2637 (相关链接:[url]http://www.javvin.com/protocol/rfc2637.pdf[/url])中。
 
构建基于PPTP技术Linux ×××网络 (上)_职场_03
图2 PPTP 封包格式

3.Linux下PPTP实现软件Poptop
    用点对点隧道协议(PPTP)实现一个×××的配置。这使得用户可以从任何Internet连接对一个公司内部网络的文件或服务进行访问。PPTP相对其他远程“拨入”型×××的不凡之处在于微软Windows(98/Me/NT/2000/XP/2003/Vista)拥有一个内置的PPTP客户端,这意味着管理员不必涉及任何额外的客户端软件以及那些通常伴随出现的问题。Poptop ,官方网站上的定义是The PPTP Server for Linux,就是利用PPTP(Point to Point Tunneling Protocol,点到点隧道协议)通过Internet访问×××(Virtual Private Network,虚拟局域网),它允许远程用户安全、花费低廉地从Internet上的任何地方访问公司内部网络。 开源PPTP服务器产品Poptop([url]http://www.poptop.org/[/url] )特性为:

 微软兼容的认证和加密(MSCHAPv2,MPPE40-128位RC4加密) 。
 支持多个客户端连接 。
 使用RADIUS插件无缝集成到一个微软网络环境中 。

 在Poptop出现以前,并没有使用PPTP客户端连接Linux主机的方法存在。使用Poptop,Linux主机可以立即在一个PPTP ×××环境下进行工作。最新版本支持Windows 95/98/Me/NT/2000/XP PPTP客户端和Linux PPTP客户端。 

    Poptop遵守GNU GPL许可证。可使用是完全免费。

    PPTPD(Point-to-Point Tunneling Protocol Daemon)是×××(Virtual Private Network)服务器,PPTP(Point-to-Point Tunneling Protocol)是×××客户端。PPTPD和PPTP都是通过PPP(Point to Point Protocol)来实现×××功能的。PPTPD、PPTP和MPPE Module一起统称Poptop,相关网站为:[url]http://www.poptop.org[/url]
    总结:

   
到此为止我们介绍了PPP协议以及PPTP协议简介,下篇文章笔者将在一个真实的环境中介绍基于PPTP技术的Linux ×××服务器和客户端连接。