上周搞了个美国的vps,就迫不及待的尝试去搭建vpn服务,可是中间也是遇到诸多困难,真是一把辛酸泪啊。昨天终于把所有的问题解决掉,vpn顺利连接,速度soso的,上youtube看视频那叫一个快,赞一下!!!今天结合自己度娘和谷歌和实践写这篇文章,分享给大家。首先我的环境是:centos6.5。总的来说,搭建vpn主要分为5个大步骤:
- 1:检查自己的vps是不是支持vpn
2:安装所需的软件包
3:配置PPP和PPTP的配置文件
4:打开内核的IP转发功能
5:启动pptpd守护进程
6:配置iptables防火墙放行和转发规则
7:配置客户端连接其中大部分人会死到第一步,第二步和第六步。
第一步:检查自己的vps是不是支持vpn
cat /dev/pppcat /dev/net/tun
如果支持的话 显示结果为:cat: /dev/ppp: No such device or address和cat: /dev/net/tun: File descriptor in bad state。
第二步:安装所需的软件包
我们要注意,在安装ppp和pptpd的时候一定要注意版本对应。一般啊来说ppp 2.4.4——————>pptpd 1.3.4 ppp 2.4.5——————>pptpd 1.4.0
如果版本不对应就会提示错误:ppp = 2.4.4 is needed by pptpd-1.3.4-2.rhel5.x86_64”或者“ppp = 2.4.4 is needed by pptpd-1.3.4-2.rhel5.x86”
先来安装ppp,我们采用yum安装。
#yum install -y perl ppp iptables //centos默认安装了iptables和ppp
现在最新版的centos的yum源一般都是ppp2.4.5了,所以接下来你安装pptpd的版本就应该是1.4.0.
我们去RPM Search下载pptpd1.4.0版本。
wget ftp://ftp.sunet.se/pub/Linux/distributions/fedora/epel/6/i386/pptpd-1.4.0-3.el6.i686.rpm //32位版本的
wget ftp://ftp.sunet.se/pub/Linux/distributions/fedora/epel/6/x86_64/pptpd-1.4.0-3.el6.x86_64.rpm //64位版本的
rpm -ivh pptpd-1.4.0-3.el6.x86_64.rpm
如果出现 <a data-original-title="" href="http://rpm.pbone.net/index.php3/stat/4/idpl/18745124/dir/fedora_6/com/libpcap-0.9.4-8.1.i386.rpm.html" title="">libpcap-0.9.4</a>被需要之类的错误,请下载/<a data-original-title="" href="http://rpm.pbone.net/index.php3/stat/4/idpl/18745124/dir/fedora_6/com/libpcap-0.9.4-8.1.i386.rpm.html" title="">libpcap-0.9.4-8.1.i386.rpm</a>
第三步:配置PPP和PPTP的配置文件
1.配置文件/etc/ppp/options.pptpd
#cp /etc/ppp/options.pptpd /etc/ppp/options.pptpd.bak
#vi /etc/ppp/options.pptpd
将如下内容<最好填VPS的DNS>添加到到options.pptpd中:
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
#cp /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
#cp /etc/pptpd.conf /etc/pptpd.conf.bak
#vi /etc/pptpd.conf
添加下面两行:
localip 172.16.10.1 //此ip可以随意写
remoteip 172.16.10.8-254 //此ip应为上一个ip所在的一个ip段,客户端连接vpn后服务器会通过这个值给客户端一个ip
4.配置文件/etc/sysctl.conf
#vi /etc/sysctl.conf //修改内核设置,使其支持转发
将net.ipv4.ip_forward = 0 改成 net.ipv4.ip_forward = 1
保存修改后的文件
#/sbin/sysctl -p
5.我个人的安装脚本
可以参考一下<使用时注意修改相应参数
#!/bin/bash
function installVPN(){
echo “begin to install VPN services”;
#check wether vps suppot ppp and tun
yum remove -y pptpd ppp
iptables –flush POSTROUTING –table nat
iptables –flush FORWARD
rm -rf /etc/pptpd.conf
rm -rf /etc/ppp
arch=uname -m
wget http://www.hi-vps.com/downloads/kernel\_ppp\_mppe-1.0.2-3dkms.noarch.rpm
wget http://www.hi-vps.com/downloads/pptpd-1.3.4-2.el6.$arch.rpm
wget http://www.hi-vps.com/downloads/ppp-2.4.5-17.0.rhel6.$arch.rpm
yum -y install make libpcap iptables gcc-c++ logrotate tar cpio perl pam tcp_wrappers
rpm -ivh dkms-2.0.17.5-1.noarch.rpm
rpm -ivh kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm
rpm -qa kernel_ppp_mppe
rpm -Uvh ppp-2.4.5-17.0.rhel6.$arch.rpm
rpm -ivh pptpd-1.3.4-2.el6.$arch.rpm
mknod /dev/ppp c 108 0
echo 1 > /proc/sys/net/ipv4/ip_forward
echo “mknod /dev/ppp c 108 0” >> /etc/rc.local
echo “echo 1 > /proc/sys/net/ipv4/ip_forward” >> /etc/rc.local
echo “localip 172.16.10.1” >> /etc/pptpd.conf
echo “remoteip 172.16.10.8-254” >> /etc/pptpd.conf
echo “ms-dns 202.205.160.3” >> /etc/ppp/options.pptpd
echo “ms-dns 219.142.50.126” >> /etc/ppp/options.pptpd
pass=openssl rand 6 -base64
if [ “$1” != “” ]
then pass=$1
fi
echo “vpn pptpd $ *” >> /etc/ppp/chap-secrets
iptables -A FORWARD -p tcp –syn -s 172.16.10.0/24 -j TCPMSS –set-mss 1356
service iptables save
chkconfig iptables on
chkconfig pptpd on
service iptables start
service pptpd start
echo “VPN service is installed, your VPN username is vpn, VPN password is $”
}
function repaireVPN(){
echo “begin to repaire VPN”;
mknod /dev/ppp c 108 0
service iptables restart
service pptpd start
}
function addVPNuser(){
echo “input user name:”
read username
echo “input password:”
read userpassword
echo “$ pptpd $ *” >> /etc/ppp/chap-secrets
service iptables restart
service pptpd start
}
echo “which do you want to?input the number.”
echo “1. install VPN service”
echo “2. repaire VPN service”
echo “3. add VPN user”
read num
case “$num” in
[1] ) (installVPN);;
[2] ) (repaireVPN);;
[3] ) (addVPNuser);;
*) echo “nothing,exit”;;
esac
6:配置iptables防火墙放行和转发规则
[root@WinJay]# iptables -A INPUT -p gre -j ACCEPT
[root@WinJay]# iptables -A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
[root@WinJay]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@WinJay]# iptables -A FORWARD -s 172.16.10.0/24 -o eth0 -j ACCEPT
[root@WinJay]# iptables -A FORWARD -d 172.16.10.0/24 -i eth0 -j ACCEPT
[root@WinJay]# iptables -t nat -A POSTROUTING -s 172.16.10.0/24 -o eth0 -j MASQUERADE
还需要配置防火墙。这里配置防火墙有三个目的:
一是设置默认丢弃规则,保护服务器的安全;
二是放行我们允许的数据包,提供服务;
三是通过配置nat 表的POSTROUTING链,增加NAT使得VPN客户端可以通过服务器访问互联网。
总之我们的原则就是,只放行我们需要的服务,其他统统拒绝。
首先介绍跟PPTP VPN相关的几项:
允许GRE(Generic Route Encapsulation)协议,PPTP使用GRE协议封装PPP数据包,然后封装成IP报文
放行1723端口的PPTP服务
放行状态为RELATED,ESTABLISHED的入站数据包(正常提供服务的机器上防火墙应该都已经配置了这一项)
放行VPN虚拟网络设备所在的192.168.0.0/24网段与服务器网卡eth0之间的数据包转发
为从VPN网段10.191.0.0/24转往网卡eth0的出站数据包做NAT
第七步:重启pptpd,设置开机启动
#service pptpd restart
#chkconfig pptpd on //开机启动pptp vpn服务
#chkconfig iptables on //开机启动iptables
第八步:设置客户端
在这里比较简单,但是有一个问题值得注意:很多网上的教程都说要把“在远程网络上关闭远程网关”选项去掉,但是这样就会出现一个问题:你能连上vpn,但是iP显示的还是本地ip,不能翻墙。
所以建议保持默认即可,不要关闭此选项。另一个注意的问题就是如果连上不,请查看vpn服务器时候开启了1723端口。
参考链接:http://www.dabu.info/centos6-4-structures-pptp-vpn.html
http://www.cnblogs.com/sixiweb/archive/2012/11/20/2778732.html
评论区