夏清然

夏清然的博客

他的个人主页  他的博客

网络连接加密之OpenVPN篇

夏清然  2009年08月03日 星期一 14:45 | 4218次浏览 | 4条评论

使用OpenVPN建立网络连接加密隧道

简介:

OpenVPN是一个用于创建虚拟专用网络(VPN)加密通道的软件包,最早由James Yonan编写,目前的授权为GPLv2。

OpenVPN允许参与建立VPN的单点使用共享金钥,电子证书,或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库中的SSLv3/TLSv1协议函式库。目前OpenVPN能在Solaris、GNU/Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X与Windows 2000/XP/Vista上运行,并包含了许多安全性的功能。它并不是一个基于Web的VPN软件,也不与IPsec及其他VPN软件包兼容。

OpenVPN使用OpenSSL库加密数据与控制信息:它使用了OpenSSL的加密以及验证功能,意味着,它能够使用任何OpenSSL支持的算法。它提供了可选的数据包HMAC功能以提高连接的安全性。此外,OpenSSL的硬件加速也能提高它的性能。

OpenVPN提供了多种身份验证方式,用以确认参与连接双方的身份,包括:预享私钥,第三方证书以及用户名/密码组合。预享密钥最为简单,但同时它只能用于建立点对点的VPN;基于PKI的第三方证书提供了最完善的功能,但是需要额外的精力去维护一个PKI证书体系。OpenVPN2.0后引入了用户名 /口令组合的身份验证方式,它可以省略客户端证书,但是仍有一份服务器证书需要被用作加密。

OpenVPN所有的通信都基于一个单一的IP端口,默认且推荐使用UDP协议通讯,同时TCP也被支持。OpenVPN连接能通过大多数的代理服务器,并且能够在NAT的环境中很好地工作。服务端具有向客户端“推送”某些网络配置信息的功能,这些信息包括:IP地址、网关设置、路由设置等。OpenVPN提供了两种虚拟网络接口:通用Tun/Tap驱动,通过它们,可以建立三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网络数据。传送的数据可通过LZO算法压缩。IANA(Internet Assigned Numbers Authority)指定给OpenVPN的官方端口为1194。OpenVPN 2.0以后版本每个进程可以同时管理数个并发的隧道。

OpenVPN使用通用网络协议(TCP与UDP)的特点使它成为IPsec等协议的理想替代,尤其是在ISP(Internet service provider)过滤某些特定VPN协议的情况下。
安全:在选择协议时候,需要注意2个加密隧道之间的网络状况,如有高延迟或者丢包较多的情况下,请选择TCP协议作为底层协议,UDP协议由于存在无连接和重传机制,导致要隧道上层的协议进行重传,效率非常低下。

OpenVPN 是一个具备完全特征的SSL VPN解决方案,能够进行大范围的配置操作,包括远程访问、站点-站点间VPN、WiFi安全及企业级远程访问解决方案,支持负载均衡,错误恢复及细粒度的访问控制。


安装:
下面的安装是在两台FreeBSD(> 6.0)下安装openvpn建立实现两机之间的加密隧道(GNU/Linux下类似)。

# cd /usr/ports/security/openvpn && make install
# cd /usr/local/share/doc/openvpn/easy-rsa/2.0/keys

编辑./vars加入一些组织的信息
# source ./vars
# chmod +x *
# ./clean-all


创建证书
# ./build-ca
# ./build-key-server vpn-host
# ./build-key vpn-client0
# openssl dhparam -out dh1024.pem 1042
# mkdir /usr/local/etc/openvpn
# mkdir /usr/local/etc/openvpn/certs
# mkdir /usr/local/etc/openvpn/keys

# cp /usr/local/share/doc/openvpn/easy-rsa/2.0/keys/vpn-host.crt /usr/local/etc/openvpn/certs/
# cp /usr/local/share/doc/openvpn/easy-rsa/2.0/keys/ca.crt /usr/local/etc/openvpn/certs/
# cp /usr/local/share/doc/openvpn/easy-rsa/2.0/keys/vpn-host.key /usr/local/etc/openvpn/keys/
# cp /usr/local/share/doc/openvpn/easy-rsa/2.0/dh1024.pem /usr/local/etc/openvpn/



配置服务器端的openvpn.conf

local <ip-address>
port 1194
proto tcp
dev tun
ca /usr/local/etc/openvpn/certs/ca.crt
cert /usr/local/etc/openvpn/certs/vpn-host.crt
key /usr/local/etc/openvpn/keys/vpn-host.key  # This file should be kept secret
dh dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 10.8.0.0 255.255.255.0"
client-to-client
keepalive 10 120
cipher BF-CBC        # Blowfish (default)
comp-lzo
max-clients 5
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3



配置客户端的openvpn.conf

client
dev tun
proto tcp
remote <vpn host IP> 1194
resolv-retry 0
nobind
user nobody
group nobody
persist-key
persist-tun
ca /usr/local/etc/openvpn/certs/ca.crt
cert /usr/local/etc/openvpn/certs/smtp.zeuux.com.crt
key /usr/local/etc/openvpn/keys/smtp.zeuux.com.key
cipher BF-CBC
comp-lzo
verb 3


在服务器和客户端/etc/rc.conf.local均加入以下信息:
openvpn_enable="YES"


启动openvpn:
/usr/local/etc/rc.d/openvpn start


如果配置过程中有错误,可以查看/var/log/messages里的报错信息。

关于OpenVPN的更多配置可以查看其文档:

http://openvpn.net/index.php/open-source/documentation.html

评论

我的评论:

发表评论

请 登录 后发表评论。还没有在Zeuux哲思注册吗?现在 注册 !
Zane

回复 Zane  2009年08月10日 星期一 09:55

thx a lot~
能翻墙不?

0条回复

李登

回复 李登  2009年08月09日 星期日 23:28

学习学习 现在外面用openSSL多吗

2条回复

  • 夏清然

    回复 夏清然  2009年08月09日 星期日 23:51

    OpenSSL用的非常广泛,已经算是SSL加密的事实上的标准组件。

    1条回复

      • 李登

        回复 李登  2009年08月18日 星期二 06:54

        呵呵 谢谢你哈 最近一段时间忙着开学 也不能上网 才看到回复 不好意思哈 以后多多指教.

        0条回复

暂时没有评论

Zeuux © 2024

京ICP备05028076号