Linux PPTP 虚拟专用网络(VPN)的搭建

 2016年05月09日    494     声明


VPN(Virtual Private Network)虚拟专用网络,是在公用网络上建立连接到内部/专用网络的一种技术。本文将对VPN技术做简单介绍,并介绍在VPS上搭建VPN服务器的方法。


  1. 1. VPN技术介绍
  2. 2. VPN服务器的搭建

1. VPN技术介绍

1.1 什么是VPN

VPN是一种远程访问技术,它是利用公用网络架设专用网络。在企业网络中有广泛应用。VPN网关通过对数据包的加密和数据包目标地址的转换实现对目标网络(一般内网或不可访问的网络)远程访问。

例如,企业会对比较机密资源放到内网服务器,而这些服务器资源并不能在Internet上访问。当公司员工出差或进行移动办公时,需要访问企业内网的服务器资源,这时就要对内网资源进行远程访问。 在传统的企业网络配置中,要进行远程访问,传统的方法是租用DDN(数字数据网)专线或帧中继,这样的通讯方案必然导致高昂的网络通讯和维护费用。对于移动用户(移动办公人员)与远端个人用户而言,

VPN是架设在内网(或不可访问网络)的一台服务器,它具有对私有资源的访问权限。当外地员工需要访问内部资源时,就通过Internet连接到VPN服务器,然后VPN服务器连接至私有网络。

VPN具有数据安全机制,可以将服务器和客户端之间的通讯数据进行了加密。有了数据加密,就可以认为数据是在一条专用的数据链接上进行安全传输,就像架设了一个专用网络,但实际使用提公用网络链接,这就是VPN(虚拟专用网络)技术。

VPN实质上是利用加密技术在公网上封装出一个数据通讯隧道,有了VPN技术,用户就能通过互联网安全的访问内网资源,当然也可以访问Google等外网资源,应用十分广泛。

虚拟专用网络/VPN 原理


1.2 VPN分类及实现

分类

VPN应用十分广泛,按不同的标准期分类也有所不同。

按协议类型:

VPN使用的遂道协议主要PPTPL2TPIPSec,而PPTPL2TP工作在OSI七层模型的第二层,IPSec工作在第三层。因此,我们可以将VPN分为二层隧道协议、三层隧道协议。

按应用范围分类:

根据VPN应用范围的不同,我们可以将其分为以下三类:

  • Intranet VPN-内联网VPN,主要用于通过公用网络访问内网资源
  • Access VPN-远程接入VPN,主要用于使用公网作为传输链路在设备之间传输数据
  • Extranet VPN-外联网VPN,主要用于与合作企业网构建外部网络,用于组织之间的通信

除以上两种分类方式外,还可以按所使用的设备类型、实现原理等进行分类,不再详述。

实现

VPN有很多种实现方式,无论哪种方式使用,其原理都首先连接到一个具有访问权限的目标,再通过这个目标网络进行连接和数据的转发。主要实现方式有:VPN服务器、VPN软件、VPN专用硬件或VPN集成硬件。


2. VPN服务器的搭建

接下来我们将演示一个基于VPS+CentOS+PPTPVPN服务器搭建过程。搭建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版本的内核已经完整支持PPTPMPPE协议。


验证系统是否支持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

将任意一组localipremoteip前面的#号去掉,或按自己需要添加:

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-v2mppe-128两咱加密方式。ms-dns是配置VPMDNS服务器,这里使用了两个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配置中使用的IP
  • 23.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