2024年1月22日发(作者:)

利用Webmin架设OpenVPN服务器

企业规模随着发展,越来越多人员需要在出差与不在公司的时候进行远程办公,而传统VPN设备以其价格与平台依赖,无法很好的满足包括Windows、Linux、MAC OSX甚至Andriod等最新智能手机系统的VPN使用需求。当前流行的SSL VPN中,免费、开源并广泛使用的一个VPN项目便是OpenVPN,本文将介绍如何使用Webmin架设一个基本的VPN服务器,用于中小企业远程远程接入使用(Remote Access)。

OpenVPN是一个用于创建虚拟专用网络加密通道的软件包,最早由James Yonan编写。OpenVPN允许参与建立VPN的单点使用共享金钥,电子证书,或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库中的SSLv3/TLSv1协议函式库。目前OpenVPN能在Solaris、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与生俱来便具备了许多安全特性:它在用户空间运行,无须对内核及网络协议栈作修改;初始完毕后以chroot方式运行,放弃root权限;使用mlockall以防止敏感数据交换到磁盘。OpenVPN通过PKCS#11支持硬件加密标识,如智能卡。

Webmin是个基于web的unix、linux管理台,可以通过其丰富组件来实现对系统的可视化管理。在VPN环境的架设中,我们使用到OpenVPN组件,实现快捷准确的VPN架设及管理。

网络结构

示意图

LAN:

局域网一共分为三个网段

10.2.100.*/24 为VPN服务器所在网段

10.2.200.*/24 为核心交换机与防火墙网关连接网段

10.2.300.*/24 为服务器所在网段

WAN:

假设218.139.*.*为联通线路,59.57.*.*为电信线路

VPN:

10.2.400.*/24 为VPN加密后分配的IP段

系统设置

硬件环境

Server

OS

IP

MEM

Disk Space

1.安装系统

通过Vsphere client分配虚拟机资源并安装系统,系统安装方法就不在此详细说明了。待系统安装后通过命令升级补丁并关闭SELinux,待更新完毕后重启服务器:

root@vpnbox#yum update

root@vpnbox#vim /etc/sysconfig/selinux 确保SELIUNUX=disabled

root@vpnbox#reboot

VMware Esxi 4 中虚拟机

Centos 5.4 x86

10.2.100.100

256M

8G

2.安装EPEL

由于OpenVPN默认没有包含在Centos的软件仓库中,需要安装EPEL仓库扩展,才可以通过yum工具安装OpenVPN,具体方式如下:

root@vpnbox#wget

/pub/epel/5/i386/

root@vpnbox#rpm -ivh

root@vpnbox#yum update

root@vpnbox#yum install OpenVPN

root@vpnbox#chkconfig OpenVPN on

3.安装Webmin核心软件包

通过Webmin的官方网站下载最新的软件包保本,然后通过第三方库,搜索关键字“OpenVPN”,可以获得一个OpenVPN+CA的扩展组件,点击安装确认。安装完成后,可以看到如下图示:

4.清空防火墙规则并开启IP转发

 通过Webmin,点击Networking->Linux Firewall,删除所有防火墙配置,记得点击Apply Configuration应用配置。此点仅适用于测试环境,实际生产用请根据自身应用需求调整VPN的防火墙权限。

 访问控制iptables策略范例:

#Access policy for client_username

-A FORWARD -i tun0 -p udp -m udp -s 10.2.400.41 -d dns_server_ip --dport 53 -j ACCEPT

-A FORWARD -i tun0 -p tcp -m tcp -s 10.2.400.41 -d www_server_ip --dport 80 -j ACCEPT

 点击Networking->Network Configuration->Routing and Gateways,将“Act as

router”选项至为Yes,点击Save保存设置。

 重启服务器

5.配置网关端口映射与内部静态路由

 将网关上的固定IP端口映射至OpenVPN服务器的端口,具体映射设置方法根据不同型号的网关而定,就不在此说明了,关键点为将两路的IP端口都映射至LAN内VPN的IP地址,以10.2.100.100为例,协议与端口分别为UDP与1194。

配置核心交路由条目,将发往10.2.400.0/24网段的包转发给10.2.100.100,注意上文的IP分配

至此,前期准备已经完成,接着便开始进行OpenVPN的详细配置。

架设OPENVPN

1. 建立CA

企业使用,需要建立一个证书颁发机构,用于生成VPN服务器与客户端密钥。建立CA的方法很简单:

点击Webmin->Servers->OpenVPN+CA

填写内容:

CA名称 自定义

openssl配置文件

CA密钥有效期

国家

组织

邮箱

默认不变

自定义

自定义

自定义

自定义

自定义

自定义

示意图

点击Save进行保存,系统会自动生成CA密钥。

注意:

二、生成VPN服务端密钥

1. 点击Certification Authority List,点击之前建立的CA,点击右边的keys list,查看该CA下的密钥文件,一开始应该是空的,然后开始生成Server端密钥,需要填写以下内容:

密钥名称

密钥密码

密钥类型

密钥有效期

国家

组织

组织单元

自定义

服务器端不要填写

服务器

自定义

自定义

自定义

自定义

自定义

自定义

Key size如果采用2048,生成时间会比较长,可以改成1024,提高速度

CA配置文件生成后,在Certification Authority List中可以查看,不要随意删除CA密钥配置

CA密钥为VPN所配置的授权中心,server及client的密钥都基于该key生成

邮箱

自定义

示意图

三、配置VPN服务端

各配置项比较复杂,就不在此一一叙述,大部分情况保持默认选项,需要关注几点,可以根据自己的需求查阅OpenVPN的官方文档:

 推送路由:

push "route 10.2.0.0 255.255.0.0"

 推送DNS、WINS、域信息:

push "dhcp-option DNS dns_server_ip"

push "dhcp-option WINS wins_server_ip"

push "dhcp-option DOMAIN "

示意图

完成了VPN服务器端密钥生成与VPN服务器配置后,整个VPN服务器就可以通过Webmin启动了,点击页面中的启动按钮即可启动OpenVPN服务进程。

四、创建客户端密钥

新建密钥

1.点击Webmin->OpenVPN+CA->Certification Authority List->创建的VPN CA中->Keys List

2.填写New key to Certification Authority内的vpn_ca相关选项:

Key name:建议以client_username的方式命名(前缀为client_,后面根据账户的命名规则来填写),便于区分server key与client key,并避免Key name少于四个字符不予创建账户的限制

 Key password:建议利用其他密码生成器随机生成六位长度的密码作为用户初始密码

 Key Server:设置为client

Generate exportable PKCS#12 key:默认为no

Password for exporting PKCS#12 (min 4 chars):目前暂无用处,可以留空

Key expiration time (days):设置授权过期时间,默认365天

State,Province,City:根据实际填写

Organization:根据实际填写

 Organization Unit:根据用户所属不同部门自行调整即可,与域控制器的OU无关,不影响实际使用,有利于VPN登陆日志查询使用

Email:用户的Email账户,不影响实际使用

点击Export导出密钥及配置文件的压缩包,之后通过一定途径交给用户

示意图

配置VPN Client

点击VPN List

点击vpn_server对应的Client List

点击 VPN Client,若第一步已新建了一个client key,则系统默认会将key name作为该client的名称

remote (Remote IP)设置为59.57.*.*,公司网关的电信出口IP(需要做双线路支持,只需将交给客户的密钥压缩包中的配置文件复制一份,将其中IP地址变更为联通线路IP)

分配VPN用户连接后获取到的IP,在client配置->ccd file content添加配置选项:ifconfig-push 10.2.400.41 10.2.400.42

其中41为客户端IP,42为服务端产生用于与客户端互联的IP

可用的IP对如下:

[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18]

[ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]

[ 41, 42][ 45, 46][ 49, 50][ 53, 54] [ 57, 58]

[ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]

[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]

[ 101, 102] [ 105, 106] [ 109, 110] [ 113, 114] [ 117, 118]

[ 121, 122] [ 125, 126] [ 129, 130] [ 133, 134] [ 137, 138]

[ 141, 142] [ 145, 146] [ 149, 150] [ 153, 154] [ 157, 158]

[ 161, 162] [ 165, 166] [ 169, 170] [ 173, 174] [ 177, 178]

[ 181, 182] [ 185, 186] [ 189, 190] [ 193, 194] [ 197, 198]

[ 201, 202] [ 205, 206] [ 209, 210] [ 213, 214] [ 217, 218]

[ 221, 222] [ 225, 226] [ 229, 230] [ 233, 234] [ 237, 238]

[ 241, 242] [ 245, 246] [ 249, 250] [ 253, 254]

配置VPN用户网关重定向

在client配置->Additional Configurations中增加redirect-gateway def1。此功能用于某些特殊情况,有网络管理知识的技术人员们需要了解,我就不在此介绍了,默认

使用中不必添加此内容。

 点击Save保存配置

五、安装客户端

Windows客户端

1. 安装OpenVPN客户端,下载地址位于。

2. 将管理员提供的密钥文件释放至OpenVPN的配置目录中。例如:将client_释放至C:Program FilesOpenVPNconfig目录下。

3. 运行桌面图标OpenVPN GUI。

4. 右键右下角图标,点击 connect之后会提示输入密码(用户初始密码为000000,建议用户通过右键Change Passwd进行密码的修改),输入密码后客户端即开始进行VPN连接,并且分配IP,当右下角VPN连接成为绿色,说明VPN连接已经建立,可以访问内网资源。

Mac OSX客户端

1.安装 tunnelblick。最新版本下载地址:/p/tunnelblick/。

2.原版安装指南见:/p/tunnelblick/wiki/FAQ

3.下载最新版本镜像,解压后,将拖拽到应用程序的文件夹下或者硬盘内的任意位置。

4.删除tunnelblick

直接将 的图标拖动至垃圾箱。其余OpenVPN的配置文件将保留在/users/currentuser/Library/OpenVPN目录下,若不需要,可以删去。具体细节见tunnelblick使用指南

5.为何tunnelblick需要root权限

OpenVPN需要root权限修改例如配置新网络设备,修改路由,添加与删除DNS服务器等操作。

6.配置密钥文件.将管理员提供的密钥文件解压至当前用户的Library/OpenVPN目录下。

7.运行 tunnelblick。双击图标后,右上角显示栏处将出现OpenVPN的连接选项,选择连接,会提示输入密码,验证通过后即可建立VPN连接。

删除VPN配置

VPN List->vpn_server对应的Client List

点击remove删除不再使用的VPN client

删除VPN Key

点击Certification Authority List->vpn_ca所对应的Keys list

点击remove删除不再使用的VPN Client Key

Linux下使用OpenVPN

1. 安装OpenVPN连接管理器,安装方法都很相似,主要介绍当前流行的两款Linux系统:

Ubuntu用户:sudo apt-get install network-manager-OpenVPN

Fedora用户:yum install network-manager-OpenVPN

2. 配置

 将管理员提供的密钥解压至本地硬盘的某个位置左键点击网络标示VPN

Connections->Configure VPN

 点击Import,选择/home/username/vpn_key/client_

点击 Ipv4 Settings->Routes,勾选Use this connection only for resources on

左键网络图标,选择需要连接的VPN,输入提示验证密码之后,即可实现VPN连接

its network,以实现隧道分离

使用时应注意的问题:

1. windows vista与windows 7建立连接

首先判断是否用户拥有管理员权限,若没有管理员权限,将无法注入路由和DNS解析,若是管理员权限,在windows vista与windows 7下需要右键桌面的OpenVPN GUI图标,选择"以管理员权限运行"。若依旧存在问题,可以考虑关闭UAC之后再进行连接。

2. OpenVPN 客户端安装失败

最近遇到多例用户反馈,说无法安装OpenVPN客户端,并提供了用户的笔记本设备作为调试方法,经过排查后发现,有一些安全保护软件(360杀毒、腾讯安全医生等)可能会阻止用户安装OpenVPN所需的TAP虚拟网卡驱动,导致VPN无法建立连接,抛出报错提示“XXX TAP

Interface is already in use”等,遇到此类情况,建议先推出或临时禁用安全软件,VPN安装成功后重新开启。

3. Fedora用户导入VPN配置文件后,启动VPN连接时SELinux会报错

最好将配置文件放置于自己的家目录下,如果在其他分区,SELinux会处于安全考虑而VPN连接,如果将配置文件放置于自己的家目录,则可以正常使用。