在 Linode VPS 下搭建 pptp 服务器

2012年6月30日 | 分类: Linode | 标签: ,

一.准备工作

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

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

 

二. 安装和配置 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. 编辑/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 *

三. 修改内核设置

编辑 /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

四. 添加 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

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

五. 配置 pptpd 服务

1. 重启 pptpd 服务

/etc/init.d/pptpd restart

2. 配置 pptpd 随系统启动

chkconfig pptpd on

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

六. 附录

在重启 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  ]

 七. 后记

相对于 pptp 来说 OpenVPN 加密型更强,而且穿透性更强。OpenVPN 有很多优点,比如其可以开在任意端口上,并且和 PPTP / L2TP 等并不冲突,可以实现并存。

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

本例是在centos6 32位系统下,如为64位pptpd请下载64位的。

  1. ryan
    2012年6月30日22:39

    这是截止目前网上最全,经勘正无误的安装向导了。
    在linode vps centos 6.2上测试正确无误。

  2. ryan
    2012年7月1日17:38

    PPTP VPN服务器接入常见问题总结:

    1、VPN客户端拨入时出现721错误:

    这种情况大数多原因为客户系统,如果为WINXP并且安装了SP2,则可能会出现这种情况,解决方法为:修改注册表HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlClass{4D36E972-E325-11CE-BFC1-08002bE10318},其中其中 是 WAN 微型端口 (PPTP) 驱动程序的网络适配器,在此项中新建一个DWORD 值ValidateAddress,然后设置为0即可。
    服务器端PPP协议配置不正确也会导致此类错误。

    2、VPN客户端拨入时出现800错误:

    这种情况大数多原因为客户系统连接服务器时使用域名,因临时DNS无法解析而出现这种错误,可更换DNS试一下,如果还是出错此类错误,则可能是无法连接到VPN服务器,可能是VPN服务器关闭或出现故障,也可能是客户电脑上的防火墙阻止了VPN连接请求,可关闭防火墙试一下。
    有些使用中转服务器连接到VPN服务器的客户端,也可能出现此类错误,原因为中转服务器中转功能出现故障。

    3、VPN客户端拨入时出现619错误:

    这种情况大数多原因为客户机连接Internet的网关(如家庭宽带路由或公司上网网关路由或防火墙)NAT-T功能关闭或对VPN支持性不好,主要是对GRE及PPTP协议的NAT-T不支持。可打开网关路由的NAT-T功能,如果还是出现错误,则需要更换网关设备,现在市面上大多数设备已经支持。

    4、VPN客户端拨入时出现691错误:

    这种情况大数多原因为客户机连接VPN服务器异常中断,因多数服务器限制一个帐户同时只有一个人使用,所以一旦异常断开,则需等待3分钟左右。有些VPN服务器没有设置异常断线检查功能也可能导致用户一旦异常断开后很长时间不能连接。所以解决办法为在服务器上设置异常断线检查程序或功能。

    5、VPN客户端拨入时出现733错误:

    这种情况大数多原因为客户机拨入VPN服务器后无法获取IP地址,可修复DHCP服务器或设置静态IP地址或地址池。

    6、VPN客户端拨入时出现734 ppp链接控制协议终止:

    这种情况多数为VPN服务器配置有问题,如果是PPP配置有问题,不支持MPPE加密或支持度不好。请重新编译PPP及MPPE相关程序。对于用于游戏代理的用户,可不使用加密(需在服务器端不要求加密)。

    7、VPN客户端拨入时出现718错误:

    拨入时用户名和密码出错误,有时也因为服务器端认证服务出现故障。

  3. ryan
    2014年8月17日14:26
  4. ryan
    2014年8月17日14:38
  5. ryan
    2014年8月19日19:44

    & 为 &