根据我的测试,亚马逊日本机房在国内的速度是最快的,我是深圳电信最慢的时候ping值在190ms左右,快点时候在100ms以内,下面说下centos 6 32位/64位下搭建pptp VPN的过程,不仅适用aws,其他服务商也是通用的。

一、新建服务器

在日本区launch一个新服务器,由于使用不多,机型选micro instance系统选择 centos 6,32位或者64位都可以,最好不要使用amazon instance store的镜像,因为使用以后无法直接创建ebs ami镜像,如果有问题维护起来不那么方便。新建完成后记得在secruity groups打开1723端口。

二、安装

2.1需要的软件

检查内核是否包含mppe,基本上CentOS都有的,输入这个命令,如果是ok就可以:

modprobe ppp-compress-18 && echo ok

安装PPTP需要ppp和iptables这两个软件支持,这里用yum来安装,输入这个命令:

yum install -y ppp iptables

iptables centos系统都是自带的

2.2下载安装包

下载pptpd和ppp的rpm包并安装,要注意ppp和pptpd包的版本需要对应,也可以使用yum安装

方法1下载安装包安装,32位:

cd /tmp
wget http://poptop.sourceforge.net/yum/stable/rhel6/i386/dkms-2.0.17.5-1.noarch.rpm
wget http://poptop.sourceforge.net/yum/stable/rhel6/i386/ppp-2.4.5-23.0.rhel6.i686.rpm
wget http://poptop.sourceforge.net/yum/stable/rhel6/i386/pptpd-1.3.4-2.el6.i686.rpm
rpm -ivh dkms-2.0.17.5-1.noarch.rpm
rpm -ivh ppp-2.4.5-23.0.rhel6.i686.rpm
rpm -ivh pptpd-1.3.4-2.el6.i686.rpm

64位:

cd /tmp
wget http://poptop.sourceforge.net/yum/stable/rhel6/x86_64/dkms-2.0.17.5-1.noarch.rpm
wget http://poptop.sourceforge.net/yum/stable/rhel6/x86_64/ppp-2.4.5-23.0.rhel6.x86_64.rpm
wget http://poptop.sourceforge.net/yum/stable/rhel6/x86_64/pptpd-1.3.4-2.el6.x86_64.rpm
rpm -ivh dkms-2.0.17.5-1.noarch.rpm
rpm -ivh ppp-2.4.5-23.0.rhel6.x86_64.rpm
rpm -ivh pptpd-1.3.4-2.el6.x86_64.rpm

方法2使用yum安装:

rpm -i http://poptop.sourceforge.net/yum/stable/rhel6/pptp-release-current.noarch.rpm
yum -y install pptpd ppp

2.3配置

2.3.1 options.pptpd

编辑配置文件/etc/ppp/options.pptpd 内容如下(将原文件备份,新建一个文件输入下面内容):

name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
lock
nobsdcomp
novj
novjccomp
nologfd
ms-dns 8.8.8.8
ms-dns 8.8.4.4

options.pptpd文件只需要增加ms-dns的配置,其他默认即可。

2.3.2 pptpd.conf

编辑配置文件/etc/pptpd.conf 内容如下(将原文件备份,新建一个文件输入下面内容):

option /etc/ppp/options.pptpd
logwtmp
localip 172.16.36.0
remoteip 172.16.36.1-40
2.3.3 chap-secrets

编辑配置文件/etc/ppp/chap-secrets,配置用户名为52os,密码为52os.net,内容如下:

52os pptpd 52os.net *

格式为(用户 pptpd 密码 允许访问的ip)一行一个

2.3.4 /sysctl.conf

修改配置文件/etc/sysctl.conf,允许包转发:

net.ipv4.ip_forward = 1
sysctl -p
2.3.5 iptables

配置/etc/sysconfig/iptables,
允许GRE协议:

iptables -A INPUT -p gre -j ACCEPT
    iptables -A INPUT -p tcp --dport 1723 -j ACCEPT

如果没有允许GRE协议(第47号协议)和pptpd开启的1723端口,在一些情况下会导致VPN用户无法注册

转发vpn流量:

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

设置iptables和pptpd开机自动启动:

chkconfig pptpd on
chkconfig iptables on

三、测试

使用windows或者手机新建一个vpn连接,拨号测试是否成功

四、遇到的问题

1. 无法连接成功

日志中:

Dec  8 06:38:21 web pptpd[20551]: GRE: read(fd=6,buffer=6124a0,len=8196) from PTY failed: status = -1 error = Input/output error, usually caused by unexpected termination of pppd, check option syntax and pppd logs
Dec  8 06:38:21 web pptpd[20551]: CTRL: PTY read or GRE write failed (pty,gre)=(6,7)

解决方法:

iptables -A INPUT -p gre -j ACCEPT

2.日志中报错

Sep  9 13:01:27 digitalocean kernel: conntrack: generic helper won't handle protocol 47. Please consider loading the specific helper module.

解决方法:

修改/etc/pptpd.conf,去掉logwtmp这一行

3.日志中报错

Sep  9 13:10:38 digitalocean pppd[2137]: LCP: timeout sending Config-Requests

解决方法:

modprobe nf_nat_proto_gre
modprobe nf_conntrack_pptp

修改 /etc/ppp/options,加入将默认的lock改为 silent,如果还不行,尝试清空该文件

3.能拨号成功,无法上网

无法上网有如下几个地方要检查:

  1. ms-dns配置
  2. net.ipv4.ip_forward 是否打开
  3. iptables 规则是否正确或有冲突

在一些系统中,系统装好后默认会有下面两条规则,会和流量转发的规则冲突需注释掉:

-A INPUT -j REJECT --reject-with icmp-host-prohibited 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

参考文档

http://sqsa110.blog.163.com/blog/static/182616369201162105819194/
https://www.digitalocean.com/community/tutorials/how-to-setup-your-own-vpn-with-pptp
http://blog.solidshellsecurity.com/2013/01/11/ctrl-pty-read-gre-write-failed-ptygre67/