一、×××介绍

        ×××(Virtual Private Network),虚拟专用网络,主要是在公用网络上建立专用网络,进行加密通讯。在企业网络中得到广泛应用。×××网关通过对数据包的加密和数据包目标地址的转换实现远程访问。×××有多种分类方式,主要是按照协议进行分类。

        ×××协议主要分为ppp协议、pptp协议、l2tp协议等。

    (1)、PPP协议

        ppp协议支持多种网络协议,可以把IP、IPX、AppleTalk或NetBEUI的数据包封装在PPP包中,将整个报文封装在PPTP(Point-to-Point Tunneling Protocol)隧道协议包中,再嵌入IP报文或帧中继或ATM中进行传输。

    (2)、PPTP协议

        PPTP(Point to Point Tunneling Protocol),即点对点隧道协议。该协议是在PPP协议的基础上开发的一种新的增强型安全协议,支持多协议虚拟专用网,可以通过密码验证协议,可扩展认证协议等方法增强安全性。远程用户可以通过ISP、直接连接Internet 或者其他网络安全地访问企业网;

        PPTP能够将PPP(点到点协议)帧封装成IP数据包,以便能够在基于IP的互联网上进程传输。PPTP使用TCP是实现隧道的创建、维护与终止,并使用GRE(通用路由封装)将PPP帧封装成隧道数据。被封装后的PPP帧的有效载荷可以被加密或压缩;

        PPTP通信过程中需要建立两种连接,一种是控制连接,一种是数据连接。控制连接用来协议通信过程中的参数和进行数据连接的维护。而真正的数据通信由数据连接完成。

        ×××工作原理图:

        Centos7.5 系统使用pptpd搭建服务器_PPTPD

二、PPTP控制连接建立流程

        PPTP控制连接建立过程分为以下几步:

        (1)建立TCP连接;(2)PPTP控制连接和GRE隧道建立;(3)PPTP协议的LCP协商;(4)PPP协议的身份验证;(5)PPP协议的NCP协商;(6)PPP协议的CCP协商

        以下分析使用的抓包方式,使用的IP地址为:client IP :192.168.163.56    server IP :192.168.163.196     (此地址 只用来演示PPTP工作流程使用,无具体配置)

    1、建立TCP连接

        PPTP控制层协议是建立在TCP协议的基础上,所以建立的第一步就是常用的TCP三次握手

        Centos7.5 系统使用pptpd搭建服务器_服务器_02

        Centos7.5 系统使用pptpd搭建服务器_PPTPD_03

    2、PPTP控制连接和隧道的建立

        在此过程,完成PPTP控制层连接和GRE隧道建立的工作

        Centos7.5 系统使用pptpd搭建服务器_服务器_04

        Centos7.5 系统使用pptpd搭建服务器_Centos7_05


        Centos7.5 系统使用pptpd搭建服务器_服务器_06

    3、PPP协议的LCP协商

        LCP是PPP协议的链路控制协议,负责建立、拆除和监控数据链路,如认证方法,压缩方法,是否回叫等。

        Centos7.5 系统使用pptpd搭建服务器_PPTPD_07

        Centos7.5 系统使用pptpd搭建服务器_PPTPD_08

        Centos7.5 系统使用pptpd搭建服务器_Centos7_09

    4、PPP协议的身份认证

        LCP协商完成后,PPP协议的Server端会对Client端进行身份验证,在LCP协商中已经协商好身份验证协议

        Centos7.5 系统使用pptpd搭建服务器_服务器_10

        Centos7.5 系统使用pptpd搭建服务器_Centos7_11

    5、PPP协议的NCP协商

        NCP协议是PPP协议的网络控制协议,主要用来协商双方网络层接口参数,分配IP,DNS等信息。下图中的IPCP是NCP基于TCP/IP 的接口协商协议。Server和Client都要把自己的Miniport信息发送给对方。

        Centos7.5 系统使用pptpd搭建服务器_PPTPD_12

        Centos7.5 系统使用pptpd搭建服务器_Centos7_13

        Centos7.5 系统使用pptpd搭建服务器_PPTPD_14

    6、PPP协议的CCP协商

        CCP协议协商PPP通讯中数据加密的协议。

        Centos7.5 系统使用pptpd搭建服务器_PPTPD_15

        Centos7.5 系统使用pptpd搭建服务器_Centos7_16

三、数据连接的流程

        PPTP数据隧道化过程采用多层封装的方式。

       Centos7.5 系统使用pptpd搭建服务器_PPTPD_17

    1、PPTP数据包封装过程

        Centos7.5 系统使用pptpd搭建服务器_Centos7_18

        封装过程:

         Centos7.5 系统使用pptpd搭建服务器_PPTPD_19

    2、PPTP数据包解析过程

        Centos7.5 系统使用pptpd搭建服务器_PPTPD_20

        解析过程:

        Centos7.5 系统使用pptpd搭建服务器_服务器_21

四、环境准备

    1、服务器:

        操作系统:CentOS Linux release 7.5.1804 (Core) 

        IP地址:172.28.1.191

    2、客户端:

        windows 7操作系统

        windows10 操作系统

五、PPTP服务端安装

    1、检查服务器端系统版本:

        cat /etc/redhat-release 

        Centos7.5 系统使用pptpd搭建服务器_PPTPD_22

    2、检查服务端IP地址信息:

        ip addr

        Centos7.5 系统使用pptpd搭建服务器_Centos7_23

    3、检查ppp是否开启

        cat /dev/ppp  

        modprobe ppp-compress-18 && echo ok

        Centos7.5 系统使用pptpd搭建服务器_Centos7_24

    4、安装PPP

        yum install -y ppp

        Centos7.5 系统使用pptpd搭建服务器_Centos7_25

    5、安装PPTPD

        在安装PPTPD服务之前,需要先更新一下yum源

        (1)安装wget

        yum install -y wget

        Centos7.5 系统使用pptpd搭建服务器_Centos7_26

        (2)添加EPEL源:

        wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

        Centos7.5 系统使用pptpd搭建服务器_服务器_27

        (3)安装epel源:

        rpm -ivh epel-release-latest-7.noarch.rpm 

        Centos7.5 系统使用pptpd搭建服务器_Centos7_28

        (4)检查是否添加到源列表中:

        yum repolist

        Centos7.5 系统使用pptpd搭建服务器_PPTPD_29

        (5)更新源列表

        yum -y update        

        Centos7.5 系统使用pptpd搭建服务器_PPTPD_30

        (6)安装PPTPD:

        yum install -y pptpd

        Centos7.5 系统使用pptpd搭建服务器_服务器_31

    6、设置×××内网IP段

        vi /etc/pptpd.conf

        将以下两行前面的#号删掉,配置×××内网的IP段,也可自行设置

        localip 192.168.0.1

        remoteip 192.168.0.234-238,192.168.0.245

       Centos7.5 系统使用pptpd搭建服务器_服务器_32

    7、配置opptions.pptpd

        vi /etc/ppp/options.pptpd

        (1)修改DNS:

        修改dns服务的两行:

        ms-dns 8.8.8.8

        ms-dns 8.8.4.4

        Centos7.5 系统使用pptpd搭建服务器_Centos7_33

        (2)修改日志记录:

        添加日志存放位置:

        nologfd

        logfile /var/log/pptpd.log     #日志存放位置

        Centos7.5 系统使用pptpd搭建服务器_Centos7_34

    8、设置×××账号密码:

        编辑/etc/ppp/chap-secrets ,创建×××账号密码,

         vim /etc/ppp/chap-secrets 

        备注:添加用户名密码的格式

        用户名    pptpd    密码    *                #每个字段之间用tab键隔开   *表示用任意IP连接×××都可以

        在此建立两个账号

        Centos7.5 系统使用pptpd搭建服务器_PPTPD_35

    9、修改内核参数

        编辑/etc/sysctl.conf 修改内核参数,支持内核转发

        vim /etc/sysctl.conf , 在最下面添加:net.ipv4.ip_forward=1

        Centos7.5 系统使用pptpd搭建服务器_服务器_36

        输入命令生效:sysctl -p

        Centos7.5 系统使用pptpd搭建服务器_服务器_37

    10、修改防火墙设置:

        (1)创建规则文件:

        touch /usr/lib/firewalld/services/pptpd.xml

        Centos7.5 系统使用pptpd搭建服务器_Centos7_38

        (2)修改规则文件

        vim /usr/lib/firewalld/services/pptpd.xml

        <?xml version="1.0" encoding="utf-8"?>

        <service>


               <short>pptpd</short>


               <description>PPTP</description>


               <port protocol="tcp" port="1723"/>


        </service>

        Centos7.5 系统使用pptpd搭建服务器_服务器_39

        (3)重启防火墙

        systemctl  start firewalld.service

        Centos7.5 系统使用pptpd搭建服务器_服务器_40

        (4)添加服务

        firewall-cmd --permanent --zone=public --add-service=pptpd

        Centos7.5 系统使用pptpd搭建服务器_Centos7_41

        (5)允许防火墙伪装IP:

        firewall-cmd --add-masquerade

        Centos7.5 系统使用pptpd搭建服务器_Centos7_42

        (6)开启 47和1723端口

        firewall-cmd --permanent --zone=public --add-port=47/tcp

        firewall-cmd --permanent --zone=public --add-port=1723/tcp

        Centos7.5 系统使用pptpd搭建服务器_服务器_43

        (7)允许grep协议:

        firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p gre -j ACCEPT

        firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p gre -j ACCEPT

        Centos7.5 系统使用pptpd搭建服务器_服务器_44

        (8)设置规则允许数据包由eth0 和ppp+接口中进出

        firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i ppp+ -o eth0 -j ACCEPT

        firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i eth0 -o ppp+ -j ACCEPT

        Centos7.5 系统使用pptpd搭建服务器_服务器_45

        (9)设置转发规则,从源地址发出的所有包进行伪装,改变地址,由eth0发出

        firewall-cmd --permanent --direct --passthrough ipv4 -t nat -I POSTROUTING -o eth0 -j MASQUERADE -s 192.168.0.0/24

        Centos7.5 系统使用pptpd搭建服务器_服务器_46

    11、开启转发规则

        转发规则有两种:

        (1)XEN架构:

        iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

        (2)OpenVZ架构:

        iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source VPS公网IP    //VPS公网IP 要换成你服务器的IP 比如 115.138.148.X

        

        在此我使用的是XEN架构,在命令终端输入第一条命令:

        iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

        Centos7.5 系统使用pptpd搭建服务器_服务器_47

    12、编辑rc.local文件,添加转发规则

        (1)给rc.local执行权限

        chmod +x /etc/rc.d/rc.local

        Centos7.5 系统使用pptpd搭建服务器_Centos7_48

        (2)编辑rc.local文件

        在文件最下面添加代码

        使用XEN架构,添加代码:iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

        使用OpenVZ架构,添加代码:iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source VPS公网IP

        在此使用的XEN架构。

        vim /etc/rc.d/rc.local

        Centos7.5 系统使用pptpd搭建服务器_服务器_49

    13、重启服务

        systemctl restart pptpd

        friewall-cmd --reload

        Centos7.5 系统使用pptpd搭建服务器_服务器_50

        Centos7.5 系统使用pptpd搭建服务器_PPTPD_51

    14、查看pptpd服务

        ps -aux | grep pptpd

        Centos7.5 系统使用pptpd搭建服务器_服务器_52

    15、设置开机启动

        systemctl enable pptpd

        Centos7.5 系统使用pptpd搭建服务器_Centos7_53

        

六、客户端验证:

    1、windows10操作系统客户端验证

        (1)点击windows10的“设置”-然后点击“网络和Internet”

        Centos7.5 系统使用pptpd搭建服务器_Centos7_54

         (2)在“×××”选项中,点击“添加×××连接”

          Centos7.5 系统使用pptpd搭建服务器_服务器_55

        (3)弹出“添加×××连接”界面后,需要输入×××账号信息

        Centos7.5 系统使用pptpd搭建服务器_服务器_56

        (4)返回“×××”界面,选择刚刚创建的×××连接

        Centos7.5 系统使用pptpd搭建服务器_服务器_57

        (5)输入×××的账号 密码

        Centos7.5 系统使用pptpd搭建服务器_Centos7_58

        (6)测试×××是否连接成功:

        ping×××服务器本机地址。172.28.1.188

        Centos7.5 系统使用pptpd搭建服务器_PPTPD_59


    2、windows7 客户端连接×××

        (1)右键点击右下角的网络图标,然后打开“网络和共享中心”

        Centos7.5 系统使用pptpd搭建服务器_Centos7_60

        (2)点击设置新的连接或网络进行×××拨号方式的创建

        Centos7.5 系统使用pptpd搭建服务器_PPTPD_61

        (3)在弹出的设置连接或网络的选项卡里选择“连接到工作区”

        Centos7.5 系统使用pptpd搭建服务器_服务器_62

        (4)选择“使用我的Internet连接(×××)”然后点击进入:

        Centos7.5 系统使用pptpd搭建服务器_Centos7_63

        (5)填写×××服务器的IP地址信息,然后输入新建×××的名称,可自定义:

        Centos7.5 系统使用pptpd搭建服务器_服务器_64

        (6)输入×××账号密码

        Centos7.5 系统使用pptpd搭建服务器_Centos7_65

        (7)默认情况下系统会对×××的服务一个一个的进行尝试连接

        Centos7.5 系统使用pptpd搭建服务器_PPTPD_66

        (8)测试连接是否成功

        ping 172.28.1.188

        Centos7.5 系统使用pptpd搭建服务器_Centos7_67