pptp VPN原理与安装配置

来源:互联网 发布:我的淘宝账号怎么查看 编辑:程序博客网 时间:2024/06/06 09:32
在介绍pptp VPN之前我们先来了解一下隧道技术。
隧道技术的基本过程是在源局域网与公网的接口处将数据(可以是ISO 七层模型中的数据链路层或网络层数据)作为负载封装在一种可以在公网上传输的数据格式中,在目的局域网与公网的接口处将数据解封装,取出负载。被封装的数据包在互联网上传递时所经过的逻辑路径被称为“隧道”。
目前VPN隧道协议有4种:点到点隧道协议PPTP、第二层隧道协议L2TP、网络层隧道协议IPSec以及SOCKS v5,我们这里只介绍点到点隧道协议PPTP。
 
一、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访问国外网站,便有了以下安装实例。
二、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.
下载地址:
http://poptop.sourceforge.net/yum/beta/rhel5/i386/dkms-2.0.17.5-1.noarch.rpm
http://poptop.sourceforge.net/yum/beta/rhel5/x86_64/ppp-2.4.4-14.1.rhel5.x86_64.rpm
http://poptop.sourceforge.net/yum/beta/rhel5/x86_64/pptpd-1.3.4-2.rhel5.x86_64.rpm
http://poptop.sourceforge.net/yum/beta/rhel5/i386/pptp-release-4-6.rhel5.noarch.rpm
  我们这里是64位系统,如果是32位系统请下载相应的软件包。
 三、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加载成功
       
 四、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.XXVPN服务器外网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
 
  .测试
 1.在window 客户端建立一个VPN连接.
      IP地址为VPN服务器地址,输入用户和密码后连接。(具体操作略过)
 2.查看连接
  在命令行运行ipconfig/all命令后,会多出一个PPP连接来,这样就连接到VPN 服务器了
3. 在VPN服务器端,运行ifconfig后,也会多出一个PPP连接。
4. 为了方便排除连接故障,可以在/etc/pptpd.conf 主配置文件里开启debug和logwtmp选项,这两个选项会把客户端连接情况记录在/var/log/message里面。
 
  六、其它命令和技巧
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
 
 七、安装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,就可以连接到VPN Server了。
0 0