如何部署一个站点到站点的vpn通道(site to site vpn)

Life is short , play more!
本文来自lihao's Blog,转载请注明。

openvpn
openvpn 是一个开源的ssl vpn 客户端/服务端软件,可以用来搭建自己的数据加密vpn。
vpn 是一个非常棒的安全共享和访问资源的一种网络访问方法,而不需要考虑您的网络地理位置。
您只需要的拥有一个互联网服务商提供的入口。(例如你家的adsl,小区宽带入口)。
openvpn 是2007年bossie award 的获胜者,是一个很棒的应用。我们就主要来介绍下openvpn 这个软件。
一个vpn(virtual private network) 其实就是一个连接2个节点的加密通道,基于一个不安全的连接。 因为vpn都是通
过互联网,城域网,并不是专线。 vpn在不安全的链路上,实现了安全的通道。
我们先来看一下网络拓扑图。

vpn

如图经常,我们会有好几个办公网络(跨国公司,公司地址不在一块)。为了实现这些,我们可以使用openvpn两种模式。
一种是routed or bridged (路由和桥接)。 桥接模式, 就像他名字的意思一样,就是简单的将网络扩展(通过openvpn
服务器)。 这样操作起来非常容易和快捷, 但是当网络设备(机器)扩展时,有一定的局限性。

桥接模式:

由于客户端分配的ip和服务器网络在同样的子网内,所以会导致广播数据会通过vpn tunnle广播出去。 如果你需要使用
SMB(windows file-sharing) 或者 IPX协议,桥接模式看起来非常适合。 但是对于一个广播严重的环境, 这些额外的广
播通过加密的tunnel(隧道)会使网络性能下降严重。

路由:

需要有权限访问client和server端的路由器。 但是可以很好的扩展客户端和server端的网络。如果你想在多个subnets之间进行windows文件共享,那么你额外需要一个wins server用来路由windows文件共享。

在拓扑图1, 将远程办公式作为openvpn 的客户端连入方。所以我们称之为客户端网络。 同样的,我们把主要办公室叫做服务端网络。

我们显然会将linux作为我们的目标os, 本文将对openvpn系统对linux的安装和配置进行阐述。 当然,openvpn对windows有着很好的支持。 实际上, 配置搭建一个 routed 模式的vpn隧道 在任何系统都是一致,配置项没有太大的区别。
下面是我们的硬件需求:

#####################################################
Hardware

server side Router: D-link DGL-4300
Client side router: Linksys WRT4G
Server side openvpn machine : os: slack ware 10.2
Client side openvpn machine: os: slackwar 12
#####################################################

当然我们可以将路由器和Openvpn 整合到同一台物理机上machine上。
在路由器模式的设置中, 每一个客户端网络必须有一个单独子网不同于服务端网络的网络地址,以防止冲突。
请看下图。
(我用 cidr 注释了下面的网络掩码, 不熟悉cidr的, 其实 10.1.1.0/24 就是网络地址 10.1.1.0 , 子网掩码是 255.255.255.0)

http://www.smallnetbuilder.com/images/stories/security/howto_openvpn/network_addresses.png

安装 Openvpn

首先,我们要获得该软件. 获得最新的稳定版本http://openvpn.net/index.php/downloads.html, 然后在客户端和服务端编译它.
下载,解压,configure,编译,并且安装. 具体步骤如下.

~ $ wget http://openvpn.net/release/openvpn-2.0.9.tar.gz
~ $ tar xvzf openvpn-2.0.9.tar.gz
~ $ cd openvpn-2.0.9
~/openvpn-2.0.9 $ ./configure
~/openvpn-2.0.9 $ make
~/openvpn-2.0.9 $ su -c 'make install'

注意:
– Openvpn 需要openssl 库支持, openssl在大多数linux发行办中都会有.如果你没有那么你就先安装吧.
http://www.openssl.org/

– Openvpn 需要TUN内核模块. 这个模块通常已经被内核编译成module. 如果您安装的linux内核已经编译有该模块,该模块会自动进行加载.
如果您想手动加载,请运行modprobe tun, 没有提示错误,即该模块存在并已经加载成功.

– 这里我使用最稳定的版本2.0.9

公钥架构

就像WPA-Enterprise,OpenVPN 依赖公钥架构体系. openvpn的easy-rsa 脚本替我们设置了pki. 这个过程在在Openvpn的文档中作了很清楚的阐述.
cd到easy-rsa的目录,然后编辑vars 文件, 通常我将keysize 改道2048bit(40行)

export KEY_SIZE=2048

然后修改key的一些选项参数在45-49行.

export KEY_COUNTRY=US
export KEY_PROVINCE=NY
export KEY_CITY="New York"
export KEY_ORG="SmallNetBuilder"
export KEY_EMAIL="[email protected]"

接下来,初始化vars文件.

~/openvpn-2.0.9/easy-rsa $ . ./vars

最后,我们初始化工作环境并创建证书认证 (CA,Certificate Authority).

~/openvpn-2.0.9/easy-rsa $ ./clean-all
~/openvpn-2.0.9/easy-rsa $ ./build-ca

Openssl将会提示让你定义一些参数.根据提示,输入您想要定义的内容。

Common Name (eg, your name or your server's hostname) []:CA

接下来,创建vpn server的密钥(下面的命令,创建的server 将会是key文件的名字)。
~/openvpn-2.0.9/easy-rsa $ ./build-key-server server

然后我们创建客户端网络的(远程办公网)的证书,并写入到vpn的证书数据库。
~/openvpn-2.0.9/easy-rsa $ ./build-key remote_office

安装完后,接下来我们就来配置openvpn server,并启动他。

http://www.smallnetbuilder.com/security/security-howto/30353-how-to-set-up-a-site-to-site-vpn-with-openvpn?start=1


Comments are closed.