amazon aws 搭建pptp VPN服务器
根据我的测试,亚马逊日本机房在国内的速度是最快的,我是深圳电信最慢的时候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.能拨号成功,无法上网
无法上网有如下几个地方要检查:
- ms-dns配置
- net.ipv4.ip_forward 是否打开
- 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/