搭建 PPTP VPN 服务器

作者 huhamhire,暂无评论,2013年2月17日 14:38 折腾历程

说在前面

最近趁着假期在折腾自己的VPS,伦家第一次玩CentOS嘛,就带着一颗好奇的心开始各种尝试,各种折腾的结果就通过"VPS折腾记录"这个系列的文章来分享一下,以供各位读者吐槽。作为这个系列的第一篇,我就先来说下搭建VPN服务器的经历。这也是很多人玩VPS比较关心的问题,毕竟我们大多生活在天朝这片神奇的土地上。

首先说一下关于VPN的方案。主流的VPN有PPTP, L2TP, IPsec, OpenVPN等很多种方案,PPTP的VPN是所有方案里的兼容性最好的一种,可以在各种运行android, iOS的移动设备上直接使用,虽然这个方案的安全性是最差的(但也不是完全没有),不过就个人用户来说,又能有多大的通信安全需求呢,够用即好。PPTP还有一大优势是部署比较方便,相对于L2TP, IPsec等方案,PPTP的配置要简单不少,易于实际操作。结合这两点,我最终还是选择了PPTP的方案。

接下来说一下操作系统的问题,在这个问题上我也是反复推倒尝试了好多次才确定了最终的方案。因为咱目前用的VPS内存真心小了一点,加之之前从来都是玩的Debian系的Linux(据说Debain的系统可以省一些内存,不过我没怎么感觉),所以一开始我折腾的是Debian系统。不过在实际部署的时候发现Debian上面配置iptables的时候总有些问题一直没找到原因出在何处,一怒之下就推掉了Debian换成了CentOS。虽说是第一次用CentOS,但是玩起来一点也不觉得手生,反而感觉CentOS上面跑很多东西的速度要比Debian快一些,看来企业版系统的底子就是不一样啊。说CentOS略占内存这一点倒是有一些,但是WebServer是内存大户嘛,所以这回索性就宁可在WebServer上多做一些优化,也要玩CentOS了。

想发牢骚的内容都说得差不多了,下面再说下我的VPS配置然后就开始干正事儿。前面已经提到了一些,这边再详细做一下说明。VPS跑的系统是64位版CentOS 6,内核信息"2.6.18-308.8.2.el5.028stab101.1",保证内存128M,突发256M(好像也没听说过哪家的OpenVZ主机会超卖,一般就按突发内存大小来算好了)。要是您的系统跟我的差不多,可以参考后面的内容进行设置,即使有略微的区别,稍微变通一下问题也不大。假如您是Debian用户的话,这篇文章的后半部分就做个参考吧,但愿能对您有帮助,不过说是话我水平有限,没能够在Debian上把PPTP的服务器完美地做起来。又因为各个VPS的主机情况的确略有区别,那些自动部署脚本未必会适合所有的机器,这里也不推荐使用了,咱还是老老实实一步一个脚印地来做吧。

还有一点要说明的是,本人长期习惯于nano编辑器,vim党可以直接无视我这个喜好,只是因为后面的命令里面都用的是nano,特此说明一下。要是跟我有一样喜好的童鞋,可以在开始之前执行下面的命令来安装nano:


yum install nano

在进行安装之前可以先更新一下确保软件库是最新状态:


yum update

废话说得够多了,下面正式开始折腾VPN服务器的搭建。

安装配置PPTP VPN服务器

一、准备工作

由于不是所有的VPS都可以配置PPTP的VPN,特别是在OpenVZ的主机上。好在我用的这家VPSCheap是把PPP和TAP/TUN作为一大卖点拿出来卖的,不过为了放心起见,还是建议进行一下检查为妙。

  1. 检查VPS是否支持TUN/TAP

cat /dev/net/tun

若返回以下信息,则表明测试通过。


cat: /dev/net/tun: File descriptor in bad state
  1. 检查VPS是否支持PPP

cat /dev/ppp

同样的,若返回以下内容,则表明测试通过。


cat: /dev/ppp: No such device or address

PS: 要是您在返回信息中看到了"Permission denied",那么很不幸地告诉您,您的主机未通过测试。您可以尝试在主机控制面板中打开PPP和TUN/TAP的功能,或者联系主机商来开启相关功能。

以上两条测试必须全部通过才能通过PPTP方式架设VPN服务器。

老版本内核的系统还需要在之前做一步内核模块检查:


modprobe ppp-compress-18 && echo ok

这里不做详细说明,新版本系统可以忽视这条命令。

  1. 安装 policycoreutils

yum -y install policycoreutils

安装policycoreutils的目的是防止保存防火墙配置时报错

二、安装所需组件

  1. 安装PPP和iptables

yum install -y ppp iptables
  1. 安装pptpd

rpm -ivh http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.el6.x86_64.rpm

由于您未必会跟偶一样使用64位版的CentOS 6,所以这里要根据自己主机的实际情况找一下软件包。时间长了,rpm软件包更新以后老的链接也不一定永久有效,建议还是养成好的习惯自己去找一下。

三、配置PPTP

  1. 编辑/etc/pptpd.conf文件

nano /etc/pptpd.conf

在文件末尾加入:


localip 192.168.10.1
remoteip 192.168.10.2-23,192.168.10.31

这里的地址段可以人意,配置的时候,注意不要跟不要跟本地网络的地址段有冲突。

因为VPN工作的时候相当于是客户端和服务器要组成局域网,网内的DHCP设置还是必要的,不然没办法管理。

  1. 编辑/etc/ppp/options.pptpd文件

nano /etc/ppp/options.pptpd

找到ms-dns的定义位置,然后加入下面的条目:


ms-dns 8.8.8.8
ms-dns 8.8.4.4

ms-dns的作用是给Windows客户端设置DNS服务器。我用的是Google的公共DNS,您已可以换成类似于OpenDNS等您喜欢的服务器。当然电信的DNS也是可以的,不过真心不建议,毕竟VPS都在外面了,还用墙内的干嘛。

加完DNS设置后先别退出,建议再在文家中加入一句:


persist

这一条的作用是让VPN断开以后可以重新拨号,不加上这句的话部分服务器需要重启服务才能重新连接。

四、设置PPTP VPN的账号及密码

编辑/etc/ppp/chap-secrets文件


nano /etc/ppp/chap-secrets

按照以下格式加入允许连接的帐号密码:


username   pptpd   password   *

这一步没啥好说的,PPTP没有帐号密码播不了号嘛。这里您可以根据自己喜好,插入多条帐号密码配置。

五、修改内核设置,使其支持转发

这一步及下面一步操作的目的是为了让VPS能够给客户端共享Internet连接,不然在连上VPN之后只能访问服务器资源是件很尴尬的事情。

编辑/etc/sysctl.conf文件


nano /etc/sysctl.conf
  1. 将 "net.ipv4.ip_forward" 的值改为1:

net.ipv4.ip_forward = 1
  1. 注释掉"net.ipv4.tcp_syncookies = 1"这一句:

# net.ipv4.tcp_syncookies = 1

其实我也不是很清楚为嘛要注释掉SYN Cookie的功能,怀疑开了以后会导致服务器拒绝客户端握手,看见所有人都做了这个操作,我也就不再多折腾了。知道这个原因的朋友可以告诉我一下。

  1. 保存退出,并执行下面的命令来生效配置:

sysctl -p

六、添加iptables防火墙转发规则

光开启系统内核的转发功能我们的VPS是不可以发挥作用的,下面还要进行防火墙的设置。

  1. 在shell中输入以下命令设置规则:

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 00.00.00.00

这里给出的是OpenVZ主机的设置办法,XEN主机的设置略有不同,不要照搬。 子网划分192.168.10.0/24要和上面设置的IP段匹配。最后的00.00.00.00要替换成您的VPS的公网IP地址。

  1. 建议再加上一条设置以便让移动设备能够使用VPN:

iptables -A FORWARD -p tcp --syn -s 192.168.10.0/24 -j TCPMSS --set-mss 1356

虽然这一条是选做的,不过我个人推荐做这一步操作,毕竟能够完美兼容移动设备也是PPTP VPN的一大优势所在。

  1. 保存iptables转发规则:

/etc/init.d/iptables save
  1. 重启iptables应用规则:

/etc/init.d/iptables restart

七、完成配置

  1. 重启PPTP服务

/etc/init.d/pptpd restart

PS: 如果在重启操作过程中遇到了警告信息,可以尝试用下面的两条命令重新启动PPTP服务


service pptpd restart-kill
service pptpd start
  1. 设置开机自动运行有关服务

chkconfig pptpd on
chkconfig iptables on

至此,服务器架设基本完成。后面我们设置好客户端来做一下测试。

连接VPN服务器

首先做一个关于连接出错的说明。部分时候连接不成功可能是因为偶然因素造成的,可以多做几次尝试,未必在一次失败以后直接就去查原因。

一、Windows平台PPTP VPN连接设置

以下为在Windows 8 Pro x64进行设置的操作演示,其他Windows系统配置方法与此类似。

  1. 打开"网络和共享中心",在"更改网络设置"下选择"设置新的连接或网络"。然后在弹出的对话框选择"连接到工作区"后点击"下一步"。
win_vpn_01
  1. 询问"你想使用一个已有的连接吗?"时,选择"否,创建新连接"。
win_vpn_02
  1. 选择"使用我的Internet连接(VPN)"
win_vpn_03
  1. 输入VPS的IP或者域名,填一个自己喜欢的名字,其余设置保留默认即可。点击"创建"完成设置。
win_vpn_04
  1. 在连接服务器的时候填入自己设置的账号密码连接服务器。
win_vpn_05

如果出现错误619,可以尝试在服务器上执行下面的命令,随后重启pptpd服务再尝试连接。


rm -r /dev/ppp
mknod /dev/ppp c 108 0

二、iOS平台PPTP VPN连接设置

iOS设备的设置比较简单,只要注意把加密级别开到"最高"就好了。以下为iOS6.1上的具体配置操作:

打开"设置"->"通用"->"VPN"->"添加VPN配置",选择"PPTP",然后如图所示填入相关的信息,包括服务器、账户、密码,最后不要忘了将加密级别选为"最高"(说实话我也不是很清楚为嘛选自就连不上服务器,既然水果的设备有这个毛病就将就一下了)。

ios_vpn_01

设置完成以后,保存设置即可连接VPN。

参考文章:

http://www.piaoyi.org/network/OpenVZ-VPS-PPTP-VPN.html

http://www.ilovn.com/topic/centos-vps-install-vpn-tutorial-pptp-pro-test-can-be-used/

<<EOF

关键词:PPTP , VPN , 虚拟主机
登录后进行评论