关于PPTP
点对点隧道协议(英语:Point to Point Tunneling Protocol,缩写为PPTP)是实现虚拟专用网(VPN)的方式之一。PPTP使用传输控制协议(TCP)创建控制通道来发送控制命令,以及利用通用路由封装(GRE)通道来封装点对点协议(PPP)数据包以发送数据。这个协议最早由微软等厂商主导开发。

PPTP的协议规范本身并未描述加密或身份验证的部分,它依靠点对点协议(PPP)来实现这些安全性功能。因为PPTP协议内置在微软视窗系统家族的各个产品中,在微软点对点协议(PPP)协议堆栈中,提供了各种标准的身份验证与加密机制来支持PPTP。 在微软视窗系统中,它可以搭配PAP、CHAP、MS-CHAP v1/v2或EAP-TLS来进行身份验证。通常也可以搭配微软点对点加密(MPPE)或IPSec的加密机制来提高安全性。

在Windows或Mac OS平台之外,Linux与FreeBSD等平台也提供开放源代码的版本。
PPTP以通用路由封装(GRE)协议向对方作一般的点对点传输。通过TCP1723端口来发起和管理GRE状态。因为PPTP需要2个网络状态,因此会对穿越防火墙造成困难。很多防火墙不能完整地传递连接,导致无法连接。 在Windows或Mac OS平台,通常PPTP可搭配MSCHAP-v2或EAP-TLS进行身份验证 ,也可配合微软点对点加密(MPPE)进行连接时的加密。

与PPTP相似的另一种常见的VPN协议是第二层隧道协议(L2TP)。

搭建步骤

1、检查服务器是否有必要的支持。如果检查结果没有这些支持的话,是不能安装pptp的。执行指令: 
 

复制代码
代码如下:

#modprobe ppp-compress-18 && echo ok

这条执行执行后,显示“ok”则表明通过。不过接下来还需要做另一个检查,输入指令:

复制代码
代码如下:

#cat /dev/net/tun

如果这条指令显示结果为下面的文本,则表明通过: 

复制代码
代码如下:

cat: /dev/net/tun: File descriptor in bad state
 
上述两条均通过,才能安装pptp。否则就只能考虑openvpn,或者请你的服务商来解决这个问题。 
2、安装ppp和iptables。默认情况下,完整的CentOS是带有这两个组件的,但是精简版的系统可能没有。我们输入下面的命令来确认,如果没有则进行安装,有的话系统不会做任何动作: 

复制代码
代码如下:
#yum install -y ppp iptables
 
3、安装pptp。这个软件在yum源里是没有的,我们需要手动下载。我们先切换到tmp目录: 

复制代码
代码如下:
#cd /tmp
 
然后执行下面的命令来下载pptp安装包:

复制代码
代码如下:

#wget http://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.i386.rpm
(32位系统使用) 

复制代码
代码如下:

#wget http://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.x86_64.rpm
(64位系统使用) 
如果你的CentOS是32位的,则执行32位的那条指令;如果是64位的CentOS,则执行64位的那条指令。注意不要搞错了。 
接下来安装pptp,同样分32位和64位系统:

复制代码
代码如下:

#rpm -ivh pptpd-1.3.4-1.rhel5.1.i386.rpm
(32位系统使用) 

复制代码
代码如下:

#rpm -ivh pptpd-1.3.4-1.rhel5.1.x86_64.rpm
(64位系统使用) 
4、配置pptp。首先我们要编辑/etc/pptpd.conf文件: 

复制代码
代码如下:

#vim /etc/pptpd.conf

找到“locapip”和“remoteip”这两个配置项,将前面的“;”注释符去掉,更改为你期望的IP段值。localip表示服务器的IP,remoteip表示分配给客户端的IP地址,可以设置为区间。这里我们使用pptp默认的配置: 

复制代码
代码如下:

localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245
 
注意,这里的IP段设置,将直接影响后面的iptables规则添加命令。请注意匹配的正确性,如果你嫌麻烦,建议就用本文的配置,就可以一直复制命令和文本使用了。 
 接下来我们再编辑/etc/ppp/options.pptpd文件,为VPN添加Google DNS: 

复制代码
代码如下:

#vim /etc/ppp/options.pptpd

在末尾添加下面两行:

复制代码
代码如下:

ms-dns 8.8.8.8
ms-dns 8.8.4.4

5、设置pptp VPN账号密码。我们需要编辑/etc/ppp/chap-secrets这个文件: 

复制代码
代码如下:

#vim /etc/ppp/chap-secrets

在这个文件里面,按照“用户名 pptpd 密码 *”的形式编写,一行一个账号和密码。比如添加用户名为test,密码为1234的用户,则编辑如下内容: 

复制代码
代码如下:

test pptpd 1234 *

6、修改内核设置,使其支持转发。编辑/etc/sysctl.conf文件: 

复制代码
代码如下:

#vim /etc/sysctl.conf

将“net.ipv4.ip_forward”改为1,变成下面的形式:

复制代码
代码如下:

net.ipv4.ip_forward=1

保存退出,并执行下面的命令来生效它:

复制代码
代码如下:

#sysctl -p

7、添加iptables转发规则。 

复制代码
代码如下:

iptables -t nat -A POSTROUTING -s 192.168.85.0/24 (PPTP客户端IP)-j SNAT --to 192.168.0.105(要转发出公网的IP)
 
然后我们输入下面的指令让iptables保存我们刚才的转发规则,以便重启系统后不需要再次添加: 

复制代码
代码如下:

#/etc/init.d/iptables save

然后我们重启iptables: 

复制代码
代码如下:

#/etc/init.d/iptables restart

8、重启pptp服务。输入下面的指令重启pptp:

复制代码
代码如下:

#/etc/init.d/pptpd restart

现在你已经可以连接自己的VPN并浏览网页了。不过我们还需要做最后的一步。 
9、设置开机自动运行服务。我们最后一步是将pptp和iptables设置为开机自动运行,这样就不需要每次重启服务器后手动启动服务了。当然你不需要自动启动服务的话可以忽略这一步。输入指令: 

复制代码
代码如下:

#chkconfig pptpd on
#chkconfig iptables on

这样就大功告成了