红联Linux门户
Linux帮助

CentOS 6.4安装配置PPTP VPN

发布时间:2015-04-03 09:53:45来源:linux网站作者:linux人

CentOS 6.4 搭建 PPTP VPN的大致步骤:

1.先检查vps是否满足配置pptp vpn的环境。

2.接着是安装配置pptp vpn的相关软件,安装ppp。

3.配置安装好后的pptp软件,这个不像windows那样,安装的过程就是配置的过程。linux的要安装完之后,修改配置文件,才算是完成配置。

4.启动pptp vpn 服务。

5.开启内核和iptables的转发功能。


第一步:检测是否符合pptp的搭建环境的要求

服务器版本:CentOS 6.4

如果检查结果没有这些支持的话,是不能安装pptp的。执行指令:

#modprobe ppp-compress-18 && echo ok

这条执行执行后,显示“ok”则表明通过。不过接下来还需要做另一个检查,输入指令:

#cat /dev/net/tun

如果这条指令显示结果为下面的文本,则表明通过:

cat: /dev/net/tun: File descriptor in bad state

上述两条均通过,才能安装pptp。否则就只能考虑openvpn,或者请你的服务商来解决这个问题。

注意:如果你显示的不是这个文本,而是别的,可能显示的就不一样,这是版本问题,(如你安装的简体中文可能就会出现error之类的一句话。)

CentOS 6.4内核版本在2.6.15以上,都默认集成了MPPE和PPP,因此下面检查可以忽略:

#rpm -q  ppp      //查询当前系统的ppp是否默认集成了,以及ppp的版本

检查PPP是否支持MPPE

用以下命令检查PPP是否支持MPPE:

#strings ‘/usr/sbin/pppd’ |grep -i mppe | wc –lines

如果以上命令输出为“0”则表示不支持;输出为“30”或更大的数字就表示支持,MPPE(Microsoft Point to Point Encryption,微软点对点加密)。


第二步:

1.安装ppp和iptables

PPTPD要求Linux内核支持mppe,一般来说CentOS安装时已经包含了

#yum install  -y perl ppp iptables          //centos默认安装了iptables和ppp

2.安装pptpd

对于32位CentOS,执行

wget http://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.i386.rpm

rpm -ivh pptpd-1.3.4-1.rhel5.1.i386.rpm

对于64位CentOS,执行

wget http://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.x86_64.rpm

rpm -ivh pptpd-1.3.4-1.rhel5.1.x86_64.rpm

64位安装的时候如果出现:

warning: pptpd-1.3.4-2.rhel5.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 862acc42: NOKEY
error: Failed dependencies:
ppp = 2.4.4 is needed by pptpd-1.3.4-2.rhel5.x86_64

原因是pptpd与PPP不兼容,下载pptpd-1.3.4-2.el6.x86_64.rpm安装即可。

32位安装的时候也会提示上面的信息,自己去下载对应的版本

看到有人建议用–nodeps –force 这个参数,我个人不建议,这个参数可能以后会出现奇怪的问题

注意,我用的是64位,我先用的是32位做过一遍,但就是不成功配置文件都快叫我改烂了,还是不行,但我用64位做的时候,一下就成功了,我不知道是不是我配置有问题。


第三步:修改配置文件

1.配置文件/etc/ppp/options.pptpd

#mv /etc/ppp/options.pptpd /etc/ppp/options.pptpd.bak
#vi /etc/ppp/options.pptpd

options.pptpd内容如下:

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

解析:ms-dns 8.8.8.8, ms-dns 8.8.4.4是使用google的dns服务器。

注意:如果虚拟机内核不支持MPPE的话,无法使用加密,用WINDOWS默认VPN连接会显示“证书信任错误”。
解决方法:修改/etc/ppp/options.pptpd注释掉require-mppe-128这行,然后windows的vpn拨号的属性改为可选加密,再次连接就成功了。

2.配置文件/etc/ppp/chap-secrets

#mv /etc/ppp/chap-secrets /etc/ppp/chap-secrets.bak
#vi /etc/ppp/chap-secrets

chap-secrets内容如下:

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
myusername    pptpd      mypassword      *                                  //myusername是你的vpn帐号,mypassword是你的vpn的密码,*表示对任何ip,记得不要丢了这个星号。我这里根据这个格式,假设我的vpn的帐号是ksharpdabu,密码是  sky。那么,应该如下:

ksharpdabu  pptpd    sky      *    

3.配置文件/etc/pptpd.conf

#mv /etc/pptpd.conf /etc/pptpd.conf.bak
#vi /etc/pptpd.conf

pptpd.conf内容如下:

option /etc/ppp/options.pptpd
logwtmp
localip 192.168.9.1
remoteip 192.168.9.11-30                              //表示vpn客户端获得ip的范围

关键点:pptpd.conf这个配置文件必须保证最后是以空行结尾才行,否则会导致启动pptpd服务时,出现“Starting pptpd:”,一直卡着不动的问题,无法启动服务,切记呀!

ppp = 2.4.4 is needed by pptpd-1.3.4-2.rhel5.x86_64

4.配置文件/etc/sysctl.conf

将“net.ipv4.ip_forward”改为1:
net.ipv4.ip_forward=1

同时在“net.ipv4.tcp_syncookies = 1”前面加# :
# net.ipv4.tcp_syncookies = 1

保存退出,并执行下面的命令来生效它:
sysctl -p


第四步:启动pptp vpn服务和iptables

#/sbin/service pptpd start 或者 #service pptpd start

经过前面步骤,我们的VPN已经可以拨号登录了,但是还不能访问任何网页。最后一步就是添加iptables转发规则了,输入下面的指令:

启动iptables和nat转发功能,很关键的呀:

#/sbin/service iptables start //启动iptables

#/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 192.168.9.0/24 -j MASQUERADE 或者使用下面的一种:

#iptables -t nat -A POSTROUTING -o eth0 -s 192.168.9.0/24 -j SNAT --to-source 207.210.83.140 //你需要将207.210.83.140替换成你的vps的公网ip地址,因为这里我写的是我的。还有就是有人说我这–to-source前只有一个横杠,其实是有两个横杠的。文章在编辑模式下显示是两个横杠,因为用的是英文输入法,所以,发表后就变成了一个横杆,而且在源码下复制粘贴也是一横,只有在编辑模式下才能看清楚是两横。但是可以明显看到to前面的那一横比source前的那横长一些,这些都是我操作记录下的命令,不会有错的。为了防止你们出错,我还是用不同的颜色标记吧。

这里我先前写的不是很详细,现在补上:

需要注意的是,这个指令中的“192.168.9.0/24”是根据之前的配置文件中的“localip”网段来改变的(网上有的教程是192.168.0.0/24 ),比如你设置的 “10.0.0.1”网段,则应该改为“10.0.0.0/24”。此外还有一点需要注意的是eth0,如果你的外网网卡不是eth0,而是eth1(比 如SoftLayer的服务器就是这样的情况),那么请记得将eth0也更改为对应的网卡编号,不然是上不了网的!

如果你的linux vps是ppp或者ADSL这种由DHCP动态分配获取ip的方式(当然vps的ip基本都是是固定的,也可能是dncp根据网卡mac绑定了。如果你是XEN的vps,那么这个转发规则其实也是适用的),那么就需要用-j MASQUERADE这种写法,就是ip伪装。当然如果使用iptables -t nat -A POSTROUTING -o eth0 -s 192.168.9.0/24 -j SNAT --to-source XXX.XXX.XXX.XXX这种转发规则其实也是可以的,不过更多的是对于OpenVZ的vps。

#/etc/init.d/iptables save //保存iptables的转发规则

#/sbin/service iptables restart //重新启动iptables

另外,也可以多写两条

在-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT前面添加如下, 这个是DNS的端口, 不设置的话, 用户即使能连上vpn, 也只能上qq, 不能访问网络.-A RH-Firewall-1-INPUT -p udp -m udp --dport 53 -j ACCEPT

#在-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT后面添加如下

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 1723 -j ACCEPT

通过加载ip_nat_pptp模块使iptables支持PPTP穿透

发现有人提到PPTP穿透需要在iptables中配置,就像一般的路由器一样。通过lsmod查询,发现确实没有pptp模块,于是就通过以下命令加载了一下该模块:
# modprobe ip_nat_pptp
加载之后,果然能够正常拨上VPN了。

为了能够让iptables在每次启动的时候都自动加载该模块,最好在/etc/sysconfig/iptables-config中加入该模块:
IPTABLES_MODULES="ip_conntrack_netbios_ns ip_conntrack_ftp ip_nat_pptp"

最后一步:重启pptp vpn

#/sbin/service pptpd retart 或者 #service pptpd restart

多余的步骤:设置pptp vpn 开机启动

有的人懒的重启后手动开启服务,所以下面我再补上开机自动启动pptp vpn 和 iptables的命令

#chkconfig pptpd on //开机启动pptp vpn服务

#chkconfig iptables on //开机启动iptables

连一下试试,正常连接并可以上网;
CentOS 6.4安装配置PPTP VPN

CentOS 6.4安装配置PPTP VPN

CentOS 6.4安装配置PPTP VPN

CentOS 6.4安装配置PPTP VPN

注:以上图片上传到红联Linux系统教程频道中。

如果不通可能会报807,800等一些错误,这可能是你的配置文件有问题,或者是设置一下客户端的属性。

注:这个不是自己原创的,而是照着这个模板,加了一些自己的需要而写的,但自我感觉还是蛮全的。