- 01
- 10月
本文介绍如何在 CentOS 6.x 系统下架设基于 pptpd 的 VPN 服务器。
1 1、准备环境
注解
本环境是 centos 6.4 64bit 系统
PPTPD要求Linux内核支持mppe,一般来说CentOS安装时已经包含了;
还是先检查下PPP和TUN有没有启用吧:
cat /dev/ppp
cat /dev/net/tun
显示结果为:
- cat: /dev/ppp: No such device or address
- cat: /dev/net/tun: File descriptor in bad state
表明通过,上述两条只要有一个没通过都不行。
通过以后,下面安装 ppp :
yum install ppp
2 2、安装 PPTPD
由于 6.4 版本 ppp 版本过高,网上找的大部分 pptpd 都无法安装。现提供一个可用的新版本:
下载地址:
- http://soft.7dot.com/soft/pptpd-1.3.4-2.el6.i686.rpm 32位
- http://soft.7dot.com/soft/pptpd-1.3.4-2.el6.x86_64.rpm 64位
安装:
rpm -ivh pptpd-1.3.4-2.el6.x86_64.rpm
或者:
wget http://soft.7dot.com/soft/pptpd-1.3.4-2.el6.x86_64.rpm
yum install pptpd-1.3.4-2.el6.x86_64.rpm
3 3、配置
编辑 PPTP 配置文件 /etc/ppp/options.pptpd 如内容下:
ms-dns 8.8.8.8 ms-dns 8.8.4.4
去掉 ms-dns 前面的 # 即将 dns 设置为谷歌公用的 dns 服务器
编辑配置文件 /etc/pptpd.conf ,内容如下:
localip 192.168.1.1 remoteip 192.168.0.100-110
将这两行前的 # 删掉, localip 为 vpn 服务器公网 ip , remoteip 为地址段,用来分配给客户端的 ip 范围
对用户认证文件 /etc/ppp/chap-secrets 进行配置,内容如下:
# client server secret IP addresses test pptpd test *
client 对应客户端登录用户名, secret 为密码, ip 下的 * 为随机分配刚才 remoteip 池中的地址, pptpd 则为服务名
4 4、设置 linux 内核,支持 ip 转发
配置 /etc/sysctl.conf 文件:
net.ipv4.ip_forward = 1 # 将值改为1,即为启用 net.ipv4.tcp_syncookies = 1 # 将此行[注释]掉 #
保存退出,执行 /sbin/sysctl -p 使之生效
5 5、设置防火墙,启用 nat 转发
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source *.*.*.* (*.*.*.*为vpn服务器的公网IP地址)
保存 iptables 转发规则:
/etc/init.d/iptables save
重启 iptables :
/etc/init.d/iptables restart
重启 pptp 服务:
/etc/init.d/pptpd restart
设置开机自动运行 pptp 服务:
chkconfig pptpd on
设置开机自动运行 iptables 服务:
chkconfig iptables on
至此, centos 架设 VPN 完成。
6 6、iptables 说明
若防火墙开启,需要开启 47(GRE), 53(DNS), 1723(PPTPD) 这 3 个端口:
iptables -A INPUT -p tcp --dport 47 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -p gre -j ACCEPT
若 FORWARD chain 被 DROP ,则需要增加下面两个规则:
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT
iptables -A FORWARD -d 192.168.0.0/24 -j ACCEPT
之前因为 iptables 模板的问题,把所有 INPUT 和 FORWARD 都 DROP 了,再者加入新规则的时候,位置不对,规则没有生效,导致调试很久都没有发现问题。
注解
- 客户端设置为 pptp 连接模式;
- 由于我的服务器在亚马逊的 EC2 上,所以还得在 Security Group 里放行 tcp 1723 端口