IT零起步-CentOS6.4部署PPTPVPN服务器
在介绍pptp VPN之前我们先来了解一下隧道技术。隧道技术的基本过程是在源局域网与公网的接口处将数据(可以是ISO 七层模型中的数据链路层或网络层数据)作为负载封装在一种可以在公网上传输的数据格式中,在目的局域网与公网的接口处将数据解封装,取出负载。被封装的数据包在互联网上传递时所经过的逻辑路径被称为“隧道”。
目前VPN隧道协议有4种:点到点隧道协议PPTP、第二层隧道协议L2TP、网络层隧道协议IPSec以及SOCKSv5,我们这里只介绍点到点隧道协议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 6.4 (Final) i386
协议:GRE,PPTP
端口:PPTP/TCP/1723(服务端), GRE/TCP/47
加密:MPPE(微软点对点加密协议,实现数据链路层的机密性保护)
认证:MS-CHAP v2
服务:pptpd
软件包:
(1). ppp-2.4.5-33.0.rhel6.i686.rpm
PPTP需要PPP的支持,一般情况下linux系统都已安装有PPP软件包,最好安装较新的ppp软件包,用Uvh这个参数来更新系统的PPP组件。也可以用#yum -y install ppp命令安装。
(2). pptpd-1.4.0-1.el6.i686.rpm (pptpd服务端软件)
(3). dkms-2.0.17.5-1.noarch.rpm CentOS6x/RHEL6x(内核支持mppe)不用安装
DKMS全称是Dynamic Kernel ModuleSupport,它可以帮我们维护内核外的这些驱动程序,在内核版本变动之后可以自动重新生成新的模块。
(4). kernel_ppp_mppe-1.0.2-3dkms.noarch(MPPE的内核补丁),CentOS6x/RHEL6x(内核支持mppe)不用安装
(5). pptp-release-4-7.rhel6.noarch.rpm (pptpd yum仓库包,安装后可用#yum -y install pptpd命令来安装pptpd)
下载地址:
http://poptop.sourceforge.net/yum/stable/rhel6Server/i386/dkms-2.0.17.5-1.noarch.rpm
http://poptop.sourceforge.net/yum/stable/rhel6Server/i386/pptpd-1.4.0-1.el6.i686.rpm
http://poptop.sourceforge.net/yum/stable/rhel6Server/i386/pptp-release-4-7.rhel6.noarch.rpm
http://poptop.sourceforge.net/yum/stable/rhel6Server/i386/ppp-2.4.5-33.0.rhel6.i686.rpm
http://poptop.sourceforge.net/yum/stable/rhel6Server/i386/ppp-devel-2.4.5-33.0.rhel6.i686.rpm
我们这里是32位系统,如果是64位系统请下载相应的软件包。
三、安装pptp VPN 服务器端
1. 下载把所需的软件包,我们这里把软件下载到/vpnsoft目录
2. 安装软件包
rpm -Uvh ppp-2.4.5-33.0.rhel6.i686.rpm
rpm -ivhppp-devel-2.4.5-33.0.rhel6.i686.rpm
rpm -ivh pptpd-1.4.0-1.el6.i686.rpm
rpm -ivh dkms-2.0.17.5-1.noarch.rpm (可以不安装)
3.查看内核是否加载 mppe模块 .
(1)# lsmod |grep ppp 默认情况下不会自动加载,所以命令执行后没有返回结果。
(2)# modprobeppp-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
# vi /etc/pptpd.conf
ppp/usr/sbin/pppd
option /etc/ppp/options.pptpd
debug
第一句指pppd服务在哪儿,第二句是指pptpd的参数配置文件的位置,第三句开启调试日志(保存在/var/log/messages)。
在文件最后行修改以下两行
localip 192.168.1.4
remoteip 192.168.10.234-254,192.168.10.256
Localip指本地的地址,就是客户端要连接的VPN服务器的地址,可以是虚拟地址,也可以与remoteip地址同段或异段。
remoteip要给客户端分配地址的范围(如果地址不连续,可以用逗号隔开)。
2.修改/etc/ppp/options.pptpd参数配置文件
# vi/etc/ppp/options.pptpd
name vpnserver
name后面是VPN服务器的名称,默认是pptpd,
开启Authentication,默认是注释掉的,是指是否开启身份认证,必须的。
debug
开启调试日志(保存在/var/log/messages)
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用户账号文件
# vi /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) 开启转发功能
# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
(2) 让转发功能立即生效
# sysctl -p
(3) 伪装IP
# iptables -tnat -I POSTROUTING -p tcp -s 192.168.10.0/24 -j SNAT–to-source XX.XX.XX.XX
or
# iptables -tnat -I POSTROUTING -o eth0 -s 192.168.10.0/24 -j SNAT --to-source 192.168.1.4
XX.XX.XX.XX为VPN服务器外网IP
PS:也可以使用下面这条规则使用伪装的形式达到同样的效果.
--------------------------------------------------------------------------
iptables -t nat-A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
--------------------------------------------------------------------------
(4) 开启相关协议端口
① 开放相应端口DNS/53 DHCP/68 PPTPD/1723
----------------------------------------------------------------------------
iptables -IINPUT -p udp --dport 53 -j ACCEPT
iptables -IINPUT -p tcp --dport 53 -j ACCEPT
iptables -IINPUT -p tcp --dport 68 -j ACCEPT
iptables -IINPUT -p tcp --dport 1723 -j ACCEPT
- ---------------------------------------------------------------------------
② 允许建立VPN隧道,否则无法验证用户名及密码.
----------------------------------------------------------------------------
iptables -IINPUT -p gre -j ACCEPT
----------------------------------------------------------------------------
③ 允许客户端的路由转发.
----------------------------------------------------------------------------
iptables -IFORWARD -s 192.168.10.0/24 -j ACCEPT
iptables -IFORWARD -d 192.168.10.0/24 -j ACCEPT
----------------------------------------------------------------------------
service iptablessave
service iptablesrestart
----------------------------------------------------------------------------
(5)启动pptpd服务
service pptpd start 启动
service pptpd stop 停止,所有的会话连接都会丢失。
service pptpdrestart 重启服务,现在会话连接不会丢失。
(6)查看pptpd服务是否启动
netstat –an |grep 1723
五、安装linux VPN客户端
环境:CentOS release 6.4 (Final) i386
软件: libpcap-1.4.0,ppp-2.4.5-33.0.rhel6.i686.rpm,pptp-1.7.2-3.rhel5.i386.rpm
yum -yinstall libcap
http://poptop.sourceforge.net/yum/stable/rhel6Server/i386/ppp-2.4.5-33.0.rhel6.i686.rpm
http://nchc.dl.sourceforge.net/project/pptpclient/pptp/pptp-1.7.2/pptp-1.7.2-3.rhel5.i386.rpm
1. 安装软件包
# rpm -ivh ppp-2.4.5-33.0.rhel6.i686.rpm
# rpm -ivh pptp-1.7.2-3.rhel5.i386.rpm
2. 建立VPN连接通道
#pptpsetup --create vpntunnel --server 192.168.1.4 --username test001 --passwordtest --encrypt -start
vpntunnel 通道名称
--server 192.168.1.4 指定VPN服务器地址
--usernametest001 指定用户名
--passwordtest 指定密码
--encrypt 启用加密
刚才建立的连接用户和密码信息会自动添加到/etc/ppp/chap-secrets文件中,并且在/etc/ppp/peers目录下产生一个vpntunnel文件,文件内容如下:
# vi /etc/ppp/peers/vpntunnel
# written by pptpsetup
pty "pptp 192.168.1.4--nolaunchpppd"
lock
noauth
nobsdcomp
nodeflate
name test001
remotename vpntunnel
ipparam vpntunnel
require-mppe-128
# vi /etc/ppp/chap-secrets
# added by pptpsetup forvpntunnel
test001 vpntunnel"test" *
执行命令# pppd call vpntunnel,就可以连接到VPN Server了。也可用如下命令关闭开启。
# /usr/share/doc/ppp-2.4.5/scripts/ponvpntunnel
# /usr/share/doc/ppp-2.4.5/scripts/poffvpntunnel
3.修改路由采用vpn联网
# ip route replace 192.168.1.4 via192.168.1.1 dev eth0 src 192.168.1.180
# ip route replace default dev 'ppp0'
vpntunnel 通道名称
--192.168.1.4 指定VPN服务器地址(vpn server)
--192.168.1.1 原网关地址
--eth0 原设备看连接
--192.168.1.180 原IP
--ppp0 vpn连接
Windows新建VPN以后默认使用VPN联网,而Linux却不是如果使用VPN连接网络必须为Linux指定VPN路由。
六、Windows新建VPN连接
1.在window客户端建立一个VPN连接
IP地址为VPN服务器地址,输入用户和密码后连接。(具体操作略过)
2.查看连接
在命令行运行ipconfig/all命令后,会多出一个PPP连接来,这样就连接到VPN 服务器了。
3.在VPN服务器端,运行ifconfig后,也会多出一个PPP连接。
4.为了方便排除连接故障,可以在/etc/pptpd.conf主配置文件里开启debug和logwtmp选项,这两个选项会把客户端连接情况记录在/var/log/message里面。
5. VPN Client2做FTP服务器,VPN Client2获取FTP数据时可用WireShark抓包,可以查看数据包是加密过的。
七、其它命令和技巧
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
八、参考资料
1.软件下载
http://poptop.sourceforge.net/
http://poptop.sourceforge.net/yum/stable/rhel6Server/i386/
http://sourceforge.net/projects/pptpclient/files/pptp/
2.配置文档
http://yuejun.blog.51cto.com/634963/666650
http://blog.163.com/qk_zhu/blog/static/195076154201162795311632/
http://hi.baidu.com/reyleon/item/c48e981857d51612e3f9866d
http://hi.baidu.com/baihebeijixing/item/0b42b787decd8b2d100ef3d4
- 11-131分钟学会U盘启动安装Linux系统
- 11-13克隆MAC地址来绕过强制门户
- 11-13Linux运维常见故障及处理的 32 个锦囊妙计
- 11-13如何快速以管理员权限运行Linux命令?
- 11-13超全面的Linux应急响应技巧
- 11-136 款面向 Linux 用户的开源绘图应用程序
- 01-11全球最受赞誉公司揭晓:苹果连续九年第一
- 12-09罗伯特·莫里斯:让黑客真正变黑
- 12-09谁闯入了中国网络?揭秘美国绝密黑客小组TA
- 12-09警示:iOS6 惊现“闪退”BUG
- 11-18LG新能源宣布与Bear Robotics达成合作,成为
- 11-18机构:三季度全球个人智能音频设备市场强势
- 11-18闲鱼:注册用户过6亿 AI技术已应用于闲置交
- 11-18美柚、宝宝树回应“涉黄短信骚扰”:未发现
- 11-01京东七鲜与前置仓完成融合