一、×××介绍
×××(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通信过程中需要建立两种连接,一种是控制连接,一种是数据连接。控制连接用来协议通信过程中的参数和进行数据连接的维护。而真正的数据通信由数据连接完成。
×××工作原理图:
二、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三次握手
2、PPTP控制连接和隧道的建立
在此过程,完成PPTP控制层连接和GRE隧道建立的工作
3、PPP协议的LCP协商
LCP是PPP协议的链路控制协议,负责建立、拆除和监控数据链路,如认证方法,压缩方法,是否回叫等。
4、PPP协议的身份认证
LCP协商完成后,PPP协议的Server端会对Client端进行身份验证,在LCP协商中已经协商好身份验证协议
5、PPP协议的NCP协商
NCP协议是PPP协议的网络控制协议,主要用来协商双方网络层接口参数,分配IP,DNS等信息。下图中的IPCP是NCP基于TCP/IP 的接口协商协议。Server和Client都要把自己的Miniport信息发送给对方。
6、PPP协议的CCP协商
CCP协议协商PPP通讯中数据加密的协议。
三、数据连接的流程
PPTP数据隧道化过程采用多层封装的方式。
1、PPTP数据包封装过程
封装过程:
2、PPTP数据包解析过程
解析过程:
四、环境准备
1、服务器:
操作系统:CentOS Linux release 7.5.1804 (Core)
IP地址:172.28.1.191
2、客户端:
windows 7操作系统
windows10 操作系统
五、PPTP服务端安装
1、检查服务器端系统版本:
cat /etc/redhat-release
2、检查服务端IP地址信息:
ip addr
3、检查ppp是否开启
cat /dev/ppp
modprobe ppp-compress-18 && echo ok
4、安装PPP
yum install -y ppp
5、安装PPTPD
在安装PPTPD服务之前,需要先更新一下yum源
(1)安装wget
yum install -y wget
(2)添加EPEL源:
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
(3)安装epel源:
rpm -ivh epel-release-latest-7.noarch.rpm
(4)检查是否添加到源列表中:
yum repolist
(5)更新源列表
yum -y update
(6)安装PPTPD:
yum install -y pptpd
6、设置×××内网IP段
vi /etc/pptpd.conf
将以下两行前面的#号删掉,配置×××内网的IP段,也可自行设置
localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245
7、配置opptions.pptpd
vi /etc/ppp/options.pptpd
(1)修改DNS:
修改dns服务的两行:
ms-dns 8.8.8.8
ms-dns 8.8.4.4
(2)修改日志记录:
添加日志存放位置:
nologfd
logfile /var/log/pptpd.log #日志存放位置
8、设置×××账号密码:
编辑/etc/ppp/chap-secrets ,创建×××账号密码,
vim /etc/ppp/chap-secrets
备注:添加用户名密码的格式
用户名 pptpd 密码 * #每个字段之间用tab键隔开 *表示用任意IP连接×××都可以
在此建立两个账号
9、修改内核参数
编辑/etc/sysctl.conf 修改内核参数,支持内核转发
vim /etc/sysctl.conf , 在最下面添加:net.ipv4.ip_forward=1
输入命令生效:sysctl -p
10、修改防火墙设置:
(1)创建规则文件:
touch /usr/lib/firewalld/services/pptpd.xml
(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>
(3)重启防火墙
systemctl start firewalld.service
(4)添加服务
firewall-cmd --permanent --zone=public --add-service=pptpd
(5)允许防火墙伪装IP:
firewall-cmd --add-masquerade
(6)开启 47和1723端口
firewall-cmd --permanent --zone=public --add-port=47/tcp
firewall-cmd --permanent --zone=public --add-port=1723/tcp
(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
(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
(9)设置转发规则,从源地址发出的所有包进行伪装,改变地址,由eth0发出
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -I POSTROUTING -o eth0 -j MASQUERADE -s 192.168.0.0/24
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
12、编辑rc.local文件,添加转发规则
(1)给rc.local执行权限
chmod +x /etc/rc.d/rc.local
(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
13、重启服务
systemctl restart pptpd
friewall-cmd --reload
14、查看pptpd服务
ps -aux | grep pptpd
15、设置开机启动
systemctl enable pptpd
六、客户端验证:
1、windows10操作系统客户端验证
(1)点击windows10的“设置”-然后点击“网络和Internet”
(2)在“×××”选项中,点击“添加×××连接”
(3)弹出“添加×××连接”界面后,需要输入×××账号信息
(4)返回“×××”界面,选择刚刚创建的×××连接
(5)输入×××的账号 密码
(6)测试×××是否连接成功:
ping×××服务器本机地址。172.28.1.188
2、windows7 客户端连接×××
(1)右键点击右下角的网络图标,然后打开“网络和共享中心”
(2)点击设置新的连接或网络进行×××拨号方式的创建
(3)在弹出的设置连接或网络的选项卡里选择“连接到工作区”
(4)选择“使用我的Internet连接(×××)”然后点击进入:
(5)填写×××服务器的IP地址信息,然后输入新建×××的名称,可自定义:
(6)输入×××账号密码
(7)默认情况下系统会对×××的服务一个一个的进行尝试连接
(8)测试连接是否成功
ping 172.28.1.188
转载于:https://blog.51cto.com/5001660/2177407