当前位置:首页>微思动态 > >详情
全国热线电话 400-881-4699

在线留言

【干货】PPTP VPN原理与安装配置

发布作者:微思网络   发布时间:2018-01-25   浏览量:0

  在介绍pptp VPN之前我们先来了解一下隧道技术

  隧道技术的基本过程是在源局域网与公网的接口处将数据(可以是ISO 七层模型中的数据链路层或网络层数据)作为负载封装在一种可以在公网上传输的数据格式中,在目的局域网与公网的接口处将数据解封装,取出负载。被封装的数据包在互联网上传递时所经过的逻辑路径被称为“隧道”。

目前VPN隧道协议有4种:点到点隧道协议PPTP、第二层隧道协议L2TP、网络层隧道协议IPSec以及SOCKS v5,我们这里只介绍点到点隧道协议PPTP。

 

01

PPTP协议原理


PPTP使用一个TCP连接对隧道进行维护,使用通用路由封装(GRE)技术把数据封装成PPP数据桢通过隧道传送。可以对封装PPP桢中的负载数据进行加密或压缩。

下边简单描述PPTP 过程中涉及的封装和解封步骤。


1.数据封装于IP(或IPX和NetBEUI)封包中。

2.该IP(或IPX和NetBEUI)封包封装在PPP帧中。

3.该PPP 帧封装在GRE 帧中(并加密)。

4.该GRE 帧封装在IP 封包中。


解封

1.移除IP 包头。

2.移除GRE 包头(解密过程)。GRE负载中是一个PPP帧。

3.移除PPP 包头。

4.将该IP(或IPX和NetBEUI)封包路由到其最终的目的地。

MPPE将通过由MS-CHAP、MS-CHAP v2或EAP-TLS身份验证过程所生成的加密密钥对PPP帧进行加密。为对PPP帧中所包含的有效数据进行加密,虚拟专用网络客户端必须使用MS-CHAP、MS-CHAP v2或EAP-TLS身份验证协议。PPTP将利用底层PPP加密功能并直接对原先经过加密的PPP帧进行封装。

PPTP协议将控制包与数据包分开,控制包采用TCP控制,客户端连接到VPN服务器TCP1723端口,用于控制和管理VPN隧道的功能。;数据包部分先封装在PPP协议中,然后封装到GRE V2协议中,最后封装到IP协议中传送。

 

  因业务需要,公司员工需要通过VPN访问国外网站,便有了以下安装实例。


02

PPTP VPN安装前的准备


    环境:CentOS release 5.4 (Final) x86_64

 协议:GRE PPTP

    端口:PPTP /TCP/1723(服务端), GRE/TCP/47

    加密:MPPE(微软)

    认证:MS-CHAP v2

    服务:pptpd


软件包:

(1)        ppp-2.4.4-14.1.rhel5.x86_64.rpm

 PPTP需要PPP的支持,一般情况下linux系统都已安装有PPP软件包,最好安装较新的ppp软件包,用Uvh这个参数来更新系统的PPP组件。也可以用yum –y instll ppp命令安装。

(2)        pptpd-1.3.4-2.rhel5.x86_64.rpm (pptpd服务软件)

(3)        dkms-2.0.17.5-1.noarch.rpm  CentOS5x/RHEL5x(内核支持mppe)不用安装

   DKMS全称是 Dynamic Kernel Module Support,它可以帮我们维护内核外的这些驱动程序,在内核版本变动之后可以自动重新生成新的模块。

(4)        kernel_ppp_mppe-1.0.2-3dkms.noarch(MPPE的内核补丁),CentOS5x/RHEL5x(内核支持mppe)不用安装

(5)        pptp-release-4-6.rhel5.noarch.rpm pptpd yum仓库包,安装后可用yum –y install pptpd命令来安装pptpd.


  我们这里是64位系统,如果是32位系统请下载相应的软件包。


03

 pptp VPN 安装


      1.下载把所需的软件包,我们这里把软件下载到/vpnsoft目录

      2.安装软件包

              rpm -Uvh ppp-2.4.4-14.1.rhel5.x86_64.rpm

    rpm -ivh pptpd-1.3.4-2.rhel5.x86_64.rpm

    rpm -ivh dkms-2.0.17.5-1.noarch.rpm (可以不安装)

    3.查看内核是否加载 mppe模块 .

        (1)lsmod |grep ppp 默认情况下不会自动加载,所以命令执行后没有返回结果。

        (2)modprobe ppp-compress-18 手动加载mppe模块

   (3)再次查看mppe模块是否加载

          lsmod |grep ppp

               ppp_mppe           39881 0

  ppp_generic        62689 1 ppp_mppe

 slhc               39745 1 ppp_generic

       出现上面情况说明已ppp模块和mppe加载成功

       

04

PPTP服务配置


1. 修改主配置文件/etc/pptpd.conf

               vim /etc/pptpd.conf

               ppp /usr/sbin/pppd

option /etc/ppp/options.pptpd

   第一句指pppd服务在哪里,第二句是指pptpd的参数配置文件的位置。

   在文件最后行添加以下两行:

             localip 100.100.100.1

             remoteip 192.168.100.100-254

      Localip指本地的地址,就是客户端要连接的VPN服务器的地址,可以是虚拟地址,可以与remoteip地址同段或异段。

remoteip要给客户端分配地址的范围(如果地址不连续,可以用逗号隔开)。

2.修改/etc/ppp/options.pptpd参数配置文件

vim /etc/ppp/options.pptpd

             name vpnserver

   开启Authentication,默认是注释掉的,是指是否开启身份认证,必须的。

name 后面是VPN服务器的名称,默认是pptpd,

    

            ms-dns 8.8.8.8

  ms-dns 8.8.4.4

添加DNS地址,我们用的是google的DNS.

 

    refuse-pap     拒绝pap身份验证

refuse-chap   拒绝chap身份验证

refuse-mschap   拒绝mschap身份验证

require-mschap-v2 使用mschap-v2身份验证

require-mppe-128  使用 128-bit MPPE 加密

 

 3.修改/etc/ppp/chap-secrets用户账号文件 

          vim /etc/ppp/chap-secrets

              # client        server secret                  IP addresses

"test001"       vpnserver "test"   *

    Client 栏位指的是用户名,server指VPN服务器名称,要与/etc/ppp/options.pptpd文件里name 后面的VPN服务器名称一样。Secret是指密码,IP addresses 是指客户端用哪个IP访问,*号表示随机分配。

  4.网络和iptable设置

        因为要通过VPN服务器上网,所以要开启ip_forward转发功能和伪装IP以及开启相关协议端口. 如果要访问VPN服务器的内部局域网的话,要用route add命令添加路由。

(1)    开启转发功能

echo " net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

(2)    让转发功能立即生效

sysctl –p

(3)    伪装IP

iptables -t nat -A POSTROUTING –p tcp –s 192.168.100.0/24 -j SNAT –to-source XX.XX.XX.XX

     XX.XX.XX.XX为VPN服务器外网IP.

(4)    开启相关协议端口

iptables -A INPUT -p udp --dport 53 -j ACCEPT

    iptables -A INPUT -p tcp --dport 53 -j ACCEPT

iptables -A INPUT -p tcp --dport 1723 -j ACCEP

iptables -A INPUT -p tcp --dport 80 -j ACCEP

iptables -A INPUT -p gre -j ACCEPT 

     service iptables save

                 service iptables restart

       

5. 启动pptpd服务

   service pptpd start 启动

   service pptpd stop 停止,所有的会话连接都会丢失。

   service pptpd restart 重启服务,现在会话连接不会丢失。

 6. 查看pptpd服务是否启动

           netstat –an |grep 1723

 

05

  测试


 1.在window 客户端建立一个VPN连接.

      IP地址为VPN服务器地址,输入用户和密码后连接。(具体操作略过)

 2.查看连接

  在命令行运行ipconfig/all命令后,会多出一个PPP连接来,这样就连接到VPN 服务器了

3. 在VPN服务器端,运行ifconfig后,也会多出一个PPP连接。

4. 为了方便排除连接故障,可以在/etc/pptpd.conf 主配置文件里开启debug和logwtmp选项,这两个选项会把客户端连接情况记录在/var/log/message里面。

 

06

 其它命令和技巧


1. 连接(linux下有效)

      pppd call  tunnelname  

     tunnelname为用ifconfig查看到的PPP连接名称。

2.断开所有PPP连接

  killall pppd

 3.断开指定ppp连接

ps –ef |grep pptpd

这样会查出很多进程来,根据客户端外网IP地址找到对应的进程号,然后kill掉 就行了。

4.添加VPN用户账号

   vpnuser add  vpnuser  vpnpasswd

5.删除VPN用户账号

vpnuser  del  vpnuser

 

07

安装linux VPN客户端


           环境:CentOS release 5.4 (Final) i686 i686 i386

 软件包: ppp-2.4.4-2.el5(默认已安装), libpcap-0.9.4-14.el5(默认已安装) pptp-1.7.2-3.rhel5.i386.rpm(下载地址http://pptpclient.sourceforge.net/)

1.安装软件包

   rpm –ivh pptp-1.7.2-3.rhel5.i386.rpm

2.建立VPN连接通道

 #pptpsetup --create vpntunnel --server 100.100.100.1 --username test001 --password test --encrypt –start

   vpntunnel 通道名称

 --server 100.100.100.1 指定VPN服务器地址

 --username test001    指定用户名

 --password test       指定密码

 --encrypt            启用加密

 刚才建立的连接用户和密码信息会自动添加到/etc/ppp/chap-secrets文件中,并且在/etc/ppp/peers目录下产生一个vpntunnel文件,文件内容如下:

  cat /etc/ppp/peers/vpntunnel

 # written by pptpsetup

pty "pptp 100.100.100.1 --nolaunchpppd"

lock

noauth

nobsdcomp

nodeflate

name vpn1

remotename vpntunnel

ipparam vpntunnel

require-mppe-128

执行命令pppd call vpntunnel,就可以连接到名为厦门linux培训多少钱的VPN Server了。


返回顶部