在 Linode VPS 下搭建 pptp vpn服务器[转]

By | 2015/02/26

http://www.chenjunlu.com/2012/04/how-to-setup-a-pptp-vpn-server-under-linode-vps/comment-page-1/

购买了 Linode VPS,不搭建一个 VPN 服务器实在有点可惜了,在网上搜索了一下具体搭建的方法,发现实现起来还是很容易的,网上有很多可操作的方法,比较流行的服务器类型有三种,pptp,L2TP/IPSec 和 OpenVPN,其中 pptp 的配置过程相对简单,所以我先尝试了配置 pptp,具体的配置过程如下:

1.准备工作

1. 因为 pptpd 需要 MPPE 的支持,所以首先检测系统是否符已经编译了 MPPE。如果没有,那请您别往下看了。
下面介绍两种检测方法,只要符合其中的一条就可以:

[root@chenjunlu ~]# zgrep MPPE /proc/config.gz
CONFIG_PPP_MPPE=y

或者

[root@chenjunlu ~]# cat /dev/net/tun
cat: /dev/net/tun: File descriptor in bad state

恭喜您,可以安装了!

2. 由于 pptpd 需要 iptables 支持,所以需要安装 iptables。如果您的服务器上已经安装了 iptables,那么可以只安装 pptp。

yum install -y ppp iptables

注意:这里先安装的是 ppp 而不是 pptpd,不要打错了。另:ppp 是一种数据链路层协议类似我们熟知的 pppoe。

2. 安装和配置 pptpd

1. 安装 pptpd

//[root@chenjunlu ~]# wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.el6.i686.rpm
//[root@chenjunlu ~]# rpm -ivh pptpd-1.3.4-2.el6.i686.rpm

改:

———————————

2.安装pptpd

刚才用了yum安装了ppp,但是这里有个问题,几乎大部分的人都会在这里遇到ppp和pptpd不兼容的错误。因为yum安装ppp,总是安装最新版本的ppp,而由于安装的ppp的版本不同,那么就需要安装对应版本的pptpd才行。(参考我的文章《ppp = 2.4.4 is needed by pptpd-1.3.4-2.rhel5.x86_64的解决办法及原因|大步’s blog》)

我们要先查看已经安装的ppp的版本,在去找对应的pptpd版本。我手头刚好有两个vps,一个是前年装的pptp vpn,一个是一年后装的pptp vpn,所以,装的yum install ppp的版本不同。

使用下面的命令查看ppp的版本,前提你是yum安装的ppp。

旧的vps上的ppp版本显示:

#yum list installed ppp

显示:

ppp.i386 2.4.4-2.el5 installed

新的vps上的ppp版本显示;

#yum list installed ppp

显示:

ppp.i686 2.4.5-5.el6 @base

所以,要对根据ppp版本选择对应的pptpd版本。这里我主要列出常用的。

ppp 2.4.4——————>pptpd 1.3.4

ppp 2.4.5——————>pptpd 1.4.0

贴个ppp和pptpd各个版本的下载地址;http://poptop.sourceforge.net/yum/stable/packages/

大家下载的时候注意,分清楚你系统的版本是64位的还是32位的。我个人建议ppp用yum安装,pptpd用rpm的安装,因为如果全都rpm或者源码安装,依赖关系很是烦人。文件名含有数字64的就是64位版本,没有的就是32位版本。可以用下面的命令查看自己的系统是32位还是64位的。

#getconf LONG_BIT

下面假设我这里的ppp是2.4.4版本,然后安装pptpd

第一种安装pptpd的方法是直接用yum安装,让电脑自动选择对应的版本:

加入yum源

#rpm -Uvh http://poptop.sourceforge.net/yum/stable/rhel6/pptp-release-current.noarch.rpm

然后用yum安装pptpd:

#yum install pptpd

这是最省时间和力气的。余下的和手动安装没什么区别了。

———————————-

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

#localip 192.168.0.1
#remoteip 192.168.0.234-238,192.168.0.245

修改成

localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245

注意:此处的  remoteip 指定的 IP 范围是用来给远程连接使用的。如果您远程访问 pptp 服务器,pptp 服务器就会在 remoteip 范围内分配一个 IP 地址给你。localip 的值直接影响到后面要说的 iptables 转发规则的编写,所以建议不要随意改动。

3. 编辑 /etc/ppp/options.pptpd

#ms-dns 10.0.0.1
#ms-dns 10.0.0.2

改成

ms-dns 8.8.8.8
ms-dns 8.8.4.4

这里使用的是 Google 发布的 Public DNS,您也可以修改为 OpenDNS 的 IP,即

ms-dns 208.67.222.222
ms-dns 208.67.220.220

4. 设置使用 pptpd 的用户名和密码

vi /etc/ppp/chap-secrets

打开后只有两行,而且一个账号都没有

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses

根据您的需要添加账号,每行一个。
按照:“用户名 pptpd 密码 ip地址”的格式输入,每一项之间用空格分开,例如:

vpnuser pptpd 123456 *

3. 修改内核设置

编辑 /etc/sysctl.conf 文件:

net.ipv4.ip_forward=0

改成

net.ipv4.ip_forward=1

net.ipv4.tcp_syncookies = 1

改成

#net.ipv4.tcp_syncookies = 1

执行以下命令使修改后的内核生效

sysctl -p

4. 添加 iptables 转发规则

VPS 的 hypervisor 的架构不同,iptables 的转发规则配置方法也不同。

适合于 OpenVZ 架构的配置方法如下:

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT –to-source VPS 的公网 IP

适合于 Xen 架构的配置方法如下:

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

Linode 采用的是 Xen 架构,所以输入

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

添加好转发规则后保存一下并重启 iptables

/etc/init.d/iptables save
/etc/init.d/iptables restart

注意:这里我遇到了一个错误,具体见附录

5. 配置 pptpd 服务

1. 重启 pptpd 服务

/etc/init.d/pptpd restart
2. 配置 pptpd 随系统启动
chkconfig pptpd on

至此 pptp 服务端安装全部结束

6. 附录

在重启 iptables 时,我遇到如下报错:

/etc/init.d/iptables restart

Setting chains to policy ACCEPT: security raw nat mangle fi[FAILED]

出现这个错误的原因是 Linode VPS 安装 CentOS 5.5 以后内核版本造成的,解决方法如下:

编辑 /etc/init.d/iptables 找到:

echo -n $”${IPTABLES}: Setting chains to policy $policy: ”
ret=0
for i in $tables; do
echo -n “$i ”
case “$i” in
+    security)
+    $IPTABLES -t filter -P INPUT $policy \
+        && $IPTABLES -t filter -P OUTPUT $policy \
+        && $IPTABLES -t filter -P FORWARD $policy \
+        || let ret+=1
+    ;;
raw)
$IPTABLES -t raw -P PREROUTING $policy \
&& $IPTABLES -t raw -P OUTPUT $policy \
|| let ret+=1
;;
filter)
$IPTABLES -t filter -P INPUT $policy \
&& $IPTABLES -t filter -P OUTPUT $policy \
&& $IPTABLES -t filter -P FORWARD $policy \
|| let ret+=1
;;

前面有+号的为添加的

然后保存退出

重启 iptables 服务:

[root@chenjunlu ~]# service iptables restart
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: security raw nat[  OK  ]filter
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]

 7. 后记

相对于 pptp 来说 OpenVPN 加密型更强,而且穿透性更强。OpenVPN 有很多优点,比如其可以开在任意端口上,并且和 PPTP / L2TP 等并不冲突,可以实现并存,所以我会以后尝试配置一个 OpenVPN Server,以备不时之需。如果您对配置 OpenVPN 服务感兴趣的话,请继续关注我的博客。(#^_^#)

Update:
配置 pptp 会遇到挺多问题的,像中国移动的 cmnet 就用不了 pptp,出现 619 错误。可以打开 /etc/ppp/pptpd-options 中的 debug 和 dump 选项,然后在 /var/log/debug 和 /var/log/messages 中查看出错信息。

4 thoughts on “在 Linode VPS 下搭建 pptp vpn服务器[转]

Comments are closed.