VPN(Virtual Private Network)虚拟专用网络,是在公用网络上建立连接到内部/专用网络的一种技术。本文将对VPN技术做简单介绍,并介绍在VPS上搭建VPN服务器的方法。
1. VPN技术介绍
1.1 什么是VPN
VPN是一种远程访问技术,它是利用公用网络架设专用网络。在企业网络中有广泛应用。VPN网关通过对数据包的加密和数据包目标地址的转换实现对目标网络(一般内网或不可访问的网络)远程访问。
例如,企业会对比较机密资源放到内网服务器,而这些服务器资源并不能在Internet上访问。当公司员工出差或进行移动办公时,需要访问企业内网的服务器资源,这时就要对内网资源进行远程访问。 在传统的企业网络配置中,要进行远程访问,传统的方法是租用DDN(数字数据网)专线或帧中继,这样的通讯方案必然导致高昂的网络通讯和维护费用。对于移动用户(移动办公人员)与远端个人用户而言,
VPN是架设在内网(或不可访问网络)的一台服务器,它具有对私有资源的访问权限。当外地员工需要访问内部资源时,就通过Internet连接到VPN服务器,然后VPN服务器连接至私有网络。
VPN具有数据安全机制,可以将服务器和客户端之间的通讯数据进行了加密。有了数据加密,就可以认为数据是在一条专用的数据链接上进行安全传输,就像架设了一个专用网络,但实际使用提公用网络链接,这就是VPN(虚拟专用网络)技术。
VPN实质上是利用加密技术在公网上封装出一个数据通讯隧道,有了VPN技术,用户就能通过互联网安全的访问内网资源,当然也可以访问Google等外网资源,应用十分广泛。
1.2 VPN分类及实现
分类
VPN应用十分广泛,按不同的标准期分类也有所不同。
按协议类型:
VPN使用的遂道协议主要PPTP、L2TP和IPSec,而PPTP和L2TP工作在OSI七层模型的第二层,IPSec工作在第三层。因此,我们可以将VPN分为二层隧道协议、三层隧道协议。
按应用范围分类:
根据VPN应用范围的不同,我们可以将其分为以下三类:
Intranet VPN-内联网VPN,主要用于通过公用网络访问内网资源Access VPN-远程接入VPN,主要用于使用公网作为传输链路在设备之间传输数据Extranet VPN-外联网VPN,主要用于与合作企业网构建外部网络,用于组织之间的通信
除以上两种分类方式外,还可以按所使用的设备类型、实现原理等进行分类,不再详述。
实现
VPN有很多种实现方式,无论哪种方式使用,其原理都首先连接到一个具有访问权限的目标,再通过这个目标网络进行连接和数据的转发。主要实现方式有:VPN服务器、VPN软件、VPN专用硬件或VPN集成硬件。
2. VPN服务器的搭建
接下来我们将演示一个基于VPS+CentOS+PPTP的VPN服务器搭建过程。搭建VPN服务器包括以下操作过程:
2.1 搭建准备
搭建VPN服务器首先需要满足以下条件:
服务器,服务器应俱有独立IP,且应该有对指定资源的访问权限,如:用于内网资源访问服务器就应该具有内网资源访问权限、用于访问Google等外网资源服务器就应该具有对外网资源的访问权限。本例中,我们使用了一台在host1plus上采购的VPS虚拟主机操作系统,服务器应该已经安装好操作系统,根据笔者习惯,在本例中使用了CentOS 6系统VPN软件,VPN软件用于服务端遂道协议的解析,本例中使用基于PPTP遂道协议的pptpd构建
2.2 系统环境检查
使用ssh命令远程登录VPS服务器,然后使用su root命令切换到root用户。
系统环境检查包括以下三项:
- 验证系统是否支持
MPPE协议 - 验证系统是否支持
TUN/TAP驱动 - 验证系统是否支持
PPP协议
验证系统是否支持MPPE协议
MPPE(Microsoft Point-to-Point Encryption,微软点对点加密技术),Windows自带的VPN使用这种协议:
modprobe ppp-compress-18 && echo MPPE is ok
看到类似如下输出,则说明支持:
MPPE is ok
如果不支持,请首先安装kernel-devel:
yum install kernel-devel
说明:2005年10月28日发布的Linux V2.6.14版本的内核已经完整支持PPTP及MPPE协议。
验证系统是否支持TUN/TAP驱动
TUN/TAP驱动程序实现了虚拟网卡的功能,TUN表示虚拟的是点对点设备,tap表示虚拟的是以太网设备,这两种设备针对网络包实施不同的封装。执行以下命令进行检查:
cat /dev/net/tun
如果出现类型以下输出,则表示验证通过:
cat: /dev/net/tun: File descriptor in bad state
说明:Linux V2.4+版本的内核已经将TUN/TAP预编译进了内核中。
验证系统是否支持PPP协议
PPP(Point-to-Point Protocol,点对点协议),它是OSI七层模型中数据链路层的协议,通常用在两节点间创建直接的连接,并可以提供连接认证、传输加密(使用ECP,RFC 1968)以及压缩。PPTP使用PPP协议对用户数据进行封装,然后将PPP数据帧封装在IP数据报里,经由IP网络传播,因此需要对此协议的支持。执行以下命令进行检查:
cat /dev/ppp
如果看到类似以下输出,则表示支持:
cat: /dev/ppp: No such device or address
如果不支持,则需要安装这个模块:
yum install ppp
2.3 安装pptpd
检查完系统环境后,就可以安装了pptpd了。首先点击这里,找到适合于自己系统的pptpd软件。
如,我使用的CentOS 6 32位系统,就可以通过以下链接下载:
wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.4.0-1.el6.i686.rpm
下载后,执行以下命令安装:
rpm -ivh pptpd-1.4.0-1.el6.i686.rpm
可者,可以直接通过rpm -ivh URL安装:
rpm -ivh http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.4.0-1.el6.i686.rpm
提示:如果出现类似以下错误:
error: Failed dependencies: /usr/bin/perl is needed by pptpd-1.4.0-1.el6.i686 perl(strict) is needed by pptpd-1.4.0-1.el6.i686 ppp = 2.4.5 is needed by pptpd-1.4.0-1.el6.i686
请执行以下命令升级或安装相关模块:
yum install ppp perl
2.4 配置
安装完成后,开始VPN服务器的相关配置。
配置包括以下几项:
- 配置
PPTP配置文件 - 配置
PPP配置文件 - 启用系统
IP转发 - 配置
iptables防火墙
配置PPTP配置文件
vi /etc/pptpd.conf
编辑配置文件/etc/pptpd.conf文件,在文件末尾找到如下几行:
#localip 192.168.0.1 #remoteip 192.168.0.234-238,192.168.0.245 # or #localip 192.168.0.234-238,192.168.0.245 #remoteip 192.168.1.234-238,192.168.1.245
将任意一组localip和remoteip前面的#号去掉,或按自己需要添加:
localip 192.168.0.1 remoteip 192.168.0.10-100
保存退出文件。
说明:localip表示服务器VPN虚拟接口将分配的IP地址,可以使用与VPN服务器内网地址相同网段的IP,也可以设置为另一网段的IP;remoteip表示VPN客户端连接成功后将分配的IP地址段,同样可以使用与VPN服务器内网地址相同网段的IP地址段,也可以使用不同地址段,只要与localip互不冲突即可。
配置PPP配置文件
PPP有两个文件需要配置:一个是options.pptpd选项文件,另一个是chap-secrets帐号文件。
配置选项文件:
vi /etc/ppp/options.pptpd
确认以下行已启用,且已使用指定值:
name pptpd refuse-pap refuse-chap refuse-mschap require-mschap-v2 require-mppe-128 ms-dns 8.8.8.8 ms-dns 8.8.4.4 proxyarp lock nobsdcomp novj novjccomp nologfd
说明:在以上配置中,其中name 后面的pptpd是服务名称,可按自己需要修改。refuse表示拒绝的加密码方式,而require表示启用的回密方式,这里使用了mschap-v2、mppe-128两咱加密方式。ms-dns是配置VPM的DNS服务器,这里使用了两个Google的DNS服务器地址。
接下来配置VPN帐号文件:
vi /etc/ppp/chap-secrets
这个文件以明文方式保存了使用VPN用户的用户名、服务名、密码、IP地址范围,每一个行表示一个用户。
其格式如下:
<username> pptpd <password> *
你可以像如下这样添加几个用户:
username1 pptpd passwd1 * username2 pptpd passwd2 *
启用系统IP转发
要使VPN服务器具有网络请求的中转代理功能,使VPN客户端通过VPN服务器访问互联网,就需要启用系统IP转发功能。
编辑以下文件:
vi /etc/sysctl.conf
找到以下行:
net.ipv4.ip_forward = 0
将其修改为:
net.ipv4.ip_forward = 1
执行以下命令,使配置生效:
sysctl -p
注意如果执行上面命令出现类型如下错误:
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key error: "net.bridge.bridge-nf-call-iptables" is an unknown key error: "net.bridge.bridge-nf-call-arptables" is an unknown key
请执行以下命令修复:
rm -f /sbin/modprobe ln -s /bin/true /sbin/modprobe rm -f /sbin/sysctl ln -s /bin/true /sbin/sysctl
配置iptables防火墙
为了使PPTP客户端可以通过防火墙,还需要配置iptables。
依次执行以下命令:
iptables -A FORWARD -p tcp --syn -s 192.168.0.0/24 -j TCPMSS --set-mss 1356 iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 23.23.23.23
192.168.0.0/24-请修改为自己前面/etc/pptp.conf配置中使用的IP23.23.23.23-是服务器的实际网址,请修改服务器的实际外网IP
保存规则:
service iptables save
应用规则:
service iptables restart
iptables添加开机启动项:
chkconfig iptables on
2.5 启动
pptpd安装包已经自动启动其添加为service服务,执行以下命令启动服务:
service pptpd start
为了让pptpd能开机自动启动,还需要执行以下命令将其配置开机启动项:
chkconfig pptpd on
在使用过程中,如果你修改了配置(添加用户无需重启),请执行以下命令重启服务:
service pptpd restart
VPN服务器配置完成,现在你可以在自己电脑上建立VPN连接,输入服务器外网IP、上面配置的用户名、密码连接测试自己的VPN服务器。
wget www.hi-vps.com/shell/vpn_centos6.sh
chmod +x vpn_centos6.sh
./vpn_centos6.sh
which do you want to?input the number. 1. install VPN service 2. repaire VPN service 3. add VPN user
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 1723 -j ACCEPT
