Linux-vpn 配置方法

来源:互联网 发布:画路线图的软件 编辑:程序博客网 时间:2024/05/10 17:54

壬辰年,丐帮交困,污衣、净衣操戈,倭寇窥琉球。仲秋,众长老废西山居士、引刁民游街,局势稍缓,安帮大会遂得开。时人谓之“斯巴达”——帝都宵禁,金盾锁国,屁民道路以目,有识之士遂举VPN,然绿坝护航甚于厂卫,大中华局域网终以成。

    虚拟私用网(virtual private network,VPN)是对各种利用公共网络来传输信息的私用的加密网络的统称。在向其用户提供所需要的安全性和网络资源的同时,因为不需要使用专用的网络通信线路,所以VPN网络的建设成本相对要低廉得多。因为VPN在成本方面有着其他解决方案难以比拟的优势,当需要向自己的远程用户或各地分支机构提供一种能够让它们安全地彼此通信的手段的时候,绝大多数公司都会把基于因特网的VPN网当作自己的首选。

    VPN可以建立在任何一种类型的网络连接(如租用专线)上,但它们的标准用途却是在那些公共网络上建立各种私用的网络。VPN需要周密细致的配置和计划,在具体实现时更是要小心谨慎。绝大多数大中型组织都会采用一种专用的VPN解决方案,并有专门经过培训的网络人员负责对之进行管理和维护。
一、Linux下的主要VPN技术
1、 IPSec(Internet Protocol Security)
    IPSec是IETF(Internet Engineer Task Force)正在完善的安全标准,它把几种安全技术结合在一起形成一个较为完整的体系,受到了众多厂商的关注和支持。通过对数据加密、认证、完整性检查来保证数据传输的可靠性、私有性和保密性。
    优点:它定义了一套用于认证、保护私有性和完整性的标准协议。 IPSec支持一系列加密算法如DES、三重DES、IDEA。它检查传输的数据包的完整性,以确保数据没有被修改。IPSec用来在多个防火墙和服务器之间提供安全性。IPSec可确保运行在TCP/IP协议上的VPNs之间的互操作性。
    缺点:IPSec在客户机/服务器模式下实现有一些问题,在实际应用中,需要公钥来完成。IPSec需要已知范围的IP地址或固定范围的IP地址,因此在动态分配IP地址时不太适合于IPSec。除了TCP/IP协议外,IPSec不支持其他协议。另外配置比较复杂。
    Linux实现使用IPSec的软件是:Free S/WAN http://www.freeswan.org/ 。FreeS/WAN不支持NAT(Network Address Translation,网络地址翻译)和IP地址伪装用于加密通道通信。
2、 PPP OVER SSH
    SSH一种基于安全会话目的的应用程序。SSH支持身份认证和数据加密,对所有传输的数据进行加密处理。同时,可以对传输数据进行压缩处理,以加快数据传输速度。SSH既可以代替Telnet作为安全的远程登录方式,又可以为FTP、POP等提供一个安全的“隧道”。OpenSSH是SSH的替代软件包,是免费的。用PPP端口在SSH上运行技术实现VPN的方法。优点:安装配置简单。缺点:运行时系统开销比较大。PPP OVER SSH具体应用软件有SSHVNC(http://3sp.com/products/sshtools/sshvnc/sshvnc.php)
3、 CIPE : Crypto IP Encapsulation
    CIPE (加密 IP 封装)是主要为 Linux 而开发的 VPN 实现。CIPE 使用加密的 IP 分组,这些分组被封装或“包围”在数据报(UDP)分组中。CIPE 分组被给以目标头信息,并使用默认的 CIPE 加密机制来加密。CIPE 使用标准的 Blowfish 或 IDEA 加密算法来支持加密。根据你所在国家的加密出口法规而定,你可以使用默认方法(Blowfish)来加密你的专用网上的所有 CIPE 交通。CIPE 配置可以通过文本文件、图形化的网络管理工具来完成。用CIPE技术实现VPN的方法,优点:安装配置简单,运行时系统开销比较小。缺点:CIPE不是一种标准VPN协议,不能支持所有平台。CIPE网址:http://sites.inka.de/~
4.SSL VPN
    IPSec VPN和SSL VPN是两种不同的VPN架构,IPSec VPN是工作在网络层的,提供所有在网络层上的数据保护和透明的安全通信,而SSL VPN是工作在应用层(基于HTTP协议)和TCP层之间的,从整体的安全等级来看,两者都能够提供安全的远程接入。但是,IPSec VPN技术是被设计用于连接和保护在信任网络中的数据流,因此更适合为不同的网络提供通信安全保障,而SSL VPN因为以下的技术特点则更适合应用于远程分散移动用户的安全接入。OpenVPN 是一个基于 OpenSSL 库的应用层 VPN 实现。详细信息可以参考 http://www.openvpn.net。
    OpenVPN优点: 支持多种常用应用系统。目前版本支持Linux, Windows 2000/XP and higher, OpenBSD, FreeBSD, NetBSD, Mac OS X, and Solaris 。
    支持多种客户端连接模式。可以通过GUI 便捷的操作OpenVPN 工作在OSI layer 2 或 3 使用标准的 SSL/TLS 协议, 可以通过certificates 或smart cards 认证。 加密强度较高,不易在传输通路上被人劫持破解信息资讯。
    OpenVPN缺点:使用SSL 应用层加密,传输效率要低于IPSEC 传输的VPN 软件
5.PPPTD
    点对点隧道协议(PPTP)是一种支持多协议虚拟专用网络的网络技术。PPTP 可以用于在 IP 网络上建立 PPP 会话隧道。在这种配置下,PPTP 隧道和 PPP 会话运行在两个相同的机器上,呼叫方充当 PNS。PPTP 使用客户机-服务器结构来分离当前网络访问服务器具备的一些功能并支持虚拟专用网络。PPTP 作为一个呼叫控制和管理协议,它允许服务器控制来自 PSTN 或 ISDN 的拨入电路交换呼叫访问并初始化外部电路交换连接。PPTP 只能通过 PAC 和 PNS 来实施,其它系统没有必要知道 PPTP。拨号网络可与 PAC 相连接而无需知道 PPTP。标准的 PPP 客户机软件可继续在隧道 PPP 链接上操作。PPTP 使用 GRE 的扩展版本来传输用户 PPP 包。这些增强允许为在 PAC 和 PNS 之间传输用户数据的隧道提供低层拥塞控制和流控制。这种机制允许高效使用隧道可用带宽并且避免了不必要的重发和缓冲区溢出。PPTP 没有规定特定的算法用于低层控制,但它确实定义了一些通信参数来支持这样的算法工作。 PPTP相对其他远程“拨入”型VPN的不凡之处在于微软Windows(95/98/Me/NT/2000/XP/Vista)拥有一个内置的PPTP客户端,这意味着管理员不必涉及任何额外的客户端软件以及那些通常伴随出现的问题。Linux PPTP服务器实现的软件是:poptop(http://www.poptop.org/ )开源PPTP服务器产品Poptop特性为:
微软兼容的认证和加密(MSCHAPv2,MPPE40-128位RC4加密) 。
支持多个客户端连接 。
使用RADIUS插件无缝集成到一个微软网络环境中 。
和Windows 95/98/Me/NT/2000/XP PPTP客户端共同工作 。
和Linux PPTP客户端共同工作 。
Poptop在GNU通用公共许可下是,并仍将是完全免费
Linux-vpn:
# rpm -e rp-ppoe 
删除冲突软件包
# rpm -e wvdial   
删除冲突软件包
# rpm -e ppp    
删除冲突软件包
安装包
# rpm -Uvh ppp-2.4.3-5.rhl9.i386 
# rpm -ivh pptpd-1.3.0-0.i386.rpm
# rpm -ivh dkms-2.0.2-1.noarch.rpm
# rpm –ivh kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm
加载相关的模块:
# lsmod | more
列出当前系统中加载的模块 
# modprobe ppp_mppe
# modprobe ppp_async
# modprobe ppp_generic
加载的模块
# strings ‘/usr/sbin/pppd’|grep -i mppe| wc --lines 
 用以下命令检查PPP是否支持MPPE: (如果以上命令输出为“0”则表示不支持;输出为“30”或更大的数字就表示支持)本例为“46”
☆ 编辑/etc/pptpd.conf pptp是:服务PPTPD运行时使用的配置文件
speed 115200                
接口速度
option /etc/ppp/options.pptpd   
PPP组件将使用的配置文件
stimeout 10                 
开始PPTP控制连接的超时时间,以秒计
debug                     
把所有debug信息记入系统日/var/log/messages
localip 192.168.1.254          
服务器VPN虚拟接口将分配的IP地址
remoteip 192.168.1.200        
客户端VPN连接成功后将分配的IP
remoteip 192.168.1.200-230
客户端VPN连接成功后将分配的IP范围地址
listen 1.1.1.1         
指定监听PPTP连接请求的IP,如果没有这一条listen选项,
将在所有接口进行监听,由于ADSL拨号公网IP不固定,
以不要使用listen选项
ppp /usr/sbin/pppd
服务器VPN启用进程
☆ 编辑/etc/ppp/options.pptpd 
auth                     
启用身份验证,为了安全,需要进行身份验证
name ncie               
相当于身份验证时的域,这里填上VPN服务器的名字
refuse-pap               
拒绝pap身份验证
refuse-chap              
拒绝chap身份验证
refuse-mschap           
拒绝mschap身份验证
refuse-eap               
拒绝eap身份验证,这种方式本身不错,但这里不使用
require-mschap-v2        
为了最高的安全性,使用mschap-v2身份验证方法
require-mppe-128     
要求128位MPPE加密,还可以是require-mppe
nomppe-stateful     
无状态,有状态有mppe-stateful
ms-dns 202.102.128.68        
VPN客户端连接成功后将被分配的DNS参数
proxyarp                
启用ARP代理,如果分配给客户端的IP与内网卡同一个子网
☆ 编辑/etc/ppp/chap-secrets文件
在这里配置能够连接到VPN服务器的用户和密码信息
# Secrets for authentication using CHAP
# client server secret IP addresses
   vpn         ncie    “12345”   192.168.1.200 或*
上面创建了一个用户,注意密码用引号括起,后面的IP地址栏你可以指定此用户登录后将分配的IP,如果不具体指定,请用*号代替。
启动服务
# service pptpd start /stop/restart 
启动、停止、重启PPTP服务 
# netstat –tln 
检查PPTPD是否启动成功,如果成功,将会看到TCP 1723端口处于监听状态。
配置路由:
VPN客户端连接成功之后我们需要添加一条到分支网络192.168.1.0/24的路由,把下面的命令加入到/etc/ppp/ip-up文件中
route add -net 192.168.1.0 netmask 255.255.255.0 dev ppp0
放火墙配置:
要让外部用户能连接PPTP VPN,还需要在防火墙中加入规则:
iptables –A INPUT –p tcp –i eth0 –s 0/0 --dport 1723 –j ACCEPT
iptables –A INPUT –p gre –i eth0 –s 0/0 –j ACCEPT