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
改:
———————————
刚才用了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. 修改内核设置
将
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
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 中查看出错信息。
好文章,谢谢分享,值得收藏
写的不错,赞!
按照你说的 试试看
搞个VPN确实挺实用的,谢谢分享。