个人博客

CentOS6.4上安装pptpd提供vpn服务

在主要参考了如下文章:
http://www.ksharpdabu.info/centos6-4-structures-pptp-vpn.html
http://blog.chinaunix.net/uid-23026336-id-2570023.html
后终于在美国VPS上把pptpd装好了,可以通过这个VPN翻墙看faceBook,YouTube。记录下安装过程:

VPS是windows server 2012 hyper-V里装32位的CentOS6.4,

第一步:检测是否符合pptp的搭建环境的要求执行指令:
#modprobe ppp-compress-18 && echo ok 这条执行执行后,显示“ok”则表明通过。不过接下来还需要做另一个检查,输入指令:
#cat /dev/net/tun 如果这条指令显示结果为下面的文本,则表明通过:
#cat: /dev/net/tun: File descriptor in bad state 上述两条均通过.

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
#yum install -y perl ppp iptables       //centos默认安装了iptables和ppp
2.安装pptpd 打开这个网址(在国内可能打不开,需要翻墙):http://poptop.sourceforge.net/yum/stable/packages/ 在这面找到适合你的rpm包并下载来安装,比如我后面用这个才可以:pptpd-1.3.4-2.el6.i686.rpm
下载完转到下载目录
#rpm -ivh pptpd-1.3.4-2.el6.i686.rpm

第三步:修改配置文件
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服务器。

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       *   //四项分别为客户端用户名,vpn服务器名(一般不改动),登陆密码,IP分配址(*为自动),中间用空格或Tab键隔开。可加入多个用户,分行录入

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:”,一直卡着不动的问题,无法启动服务,切记呀!(相关文档可以查看:Starting pptpd: 运行不下去的原因)

4.配置文件/etc/sysctl.conf
#vi /etc/sysctl.conf          //修改内核设置,使其支持转发
将net.ipv4.ip_forward = 0   改成   net.ipv4.ip_forward = 1
保存修改后的文件
#/sbin/sysctl -p

第四步:启动pptp vpn服务和iptables
#/sbin/service pptpd start    或者   #service pptpd start

经过前面步骤,我们的VPN已经可以拨号登录了,但是还不能访问任何网页。最后一步就是添加iptables转发规则了,输入下面的指令: 启动iptables和nat转发功能,很关键的呀: #/sbin/service iptables  start   //启动iptables

#/sbin/iptables -F FORWARD
#/sbin/iptables -A FORWARD -p udp -s 192.168.9.0/24 –dport 53 -j ACCEPT
开放VPN服务所用的端口1723
#/sbin/iptables -A FORWARD -p tcp -s 192.168.9.0/24 –dport 1723 -j ACCEPT
#/sbin/iptables -A FORWARD -p gre -s 192.168.9.0/24 -j ACCEPT
#/sbin/iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT

#/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地址,因为这里我写的是我的 ◾需要注意的是,这个指令中的“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
注意:防火墙一定要开启,否则无法通过vpn服务器访问外网

最后一步:重启pptp vpn
#/sbin/service pptpd retart    或者   #service pptpd restart
如果出现问题,重启 pptpd服务前,先用下面的命令断开当前存在的连接:
#service pptpd restart-kill,然后再#service pptpd start

客户端的我就不写了,很简单,不用改默认即可。

多余的步骤:设置pptp vpn 开机启动 有的人懒的重启后手动开启服务,所以下面我再补上开机自动启动pptp vpn 和 iptables的命令
#chkconfig pptpd on      //开机启动pptp vpn服务
#chkconfig iptables on    //开机启动iptables

百度文库有:从简单到复杂,详解pptpd的搭建
http://wenku.baidu.com/view/e97385a5284ac850ad0242bd.html

Posted in linux


发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>