OpenVPN是一个用于创建虚拟专用网络(Virtual Private Network)加密通道的免费开源软件。使用OpenVPN可以方便的在家庭、办公场所、住宿酒店等不同网络访问场所之间搭建类似于局域网的专用网络通道。OpenVPN使用方便,运行性能优秀,支持Solaris、Linux 、OpenBSD、FreeBSD、NetBSD、Mac OS X、Android和Windows 等操作系统,并且采用了高强度的数据加密,再加上其开源免费的特性,使得OpenVPN成为中小型企业及个人的VPN首选产品。
本文主要讲述如何在CentOS7上安装OpenVPN及如何配置其路由转发,以实现跳板机功能。
一、实验环境
二、安装OpenVPN
在CentOS7中,OpenVPN包含在EPEL源中,我们可以通过yum来安装它。
yum -y install epel-release //安装epel源
yum -y install openvpn easy-rsa //安装OpenVPN及证书工具
三、简单配置
OpenVPN安装完成后,我们需要对其进行简单配置以满足我们的需要,配置如下:
1、从模板复制配置文件
cp /usr/share/doc/openvpn-/sample/sample-config-files/server.conf /etc/openvpn
2、修改配置文件
vim /etc/openvpn/server.conf
修改以下内容
#我们稍后将会生成key文件,Easy RSA默认的Diffie-Hellman加密长度为2048字节,所以我们需要更改dh文件为dh2048.pem
dh dh2048.pem
#我们需要取消该行的注释,它会告知客户端将所有流量转发至OpenVPN Server,如果不需要这么做,保持这一行的注释
push "redirect-gateway def1 bypass-dhcp"
#这一项配置针对Windows用户生效,它将为客户端配置DNS服务器,修改服务器地址为相应的IP,这里使用GoogleDNS
push "dhcp-option DNS 8.8.8.8"
#出于安全着想,我们不希望OpenVPN以任何权限启动,所以我们需要取消这些行的注释
user nobody
group nobody
以上为基本修改内容,保存并退出编辑器。
四、生成证书文件
OpenVPN采用证书认证的方式进行登录认证,因此为了配置OpenVPN认证,我们需要制作证书文件。
我们先前安装了Easy RSA,它提供了一系列证书制作工具可以方便的制作证书。Easy RSA依赖于openssl,请确保系统中的openssl已经升级到最新稳定版。
1、我们先创建一个目录,用户存放证书文件
mkdir -p /etc/openvpn/easy-rsa/keys
2、将证书制作用的脚本复制到该目录下,方便我们修改和使用
cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa
3、为了稍后操作方便,推荐先修改vars文件,该文件包含了生成证书需要的一些变量,我们可以预先填入而不用每次手动输入他们
vim /etc/openvpn/easy-rsa/vars
4、我们需要修改(填写)以下信息:
. . .
# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
#证书国家代码
export KEY_COUNTRY="CN"
#证书省份
export KEY_PROVINCE="BeiJing"
#城市
export KEY_CITY="BeiJing"
#组织
export KEY_ORG="Home"
#管理员电子邮箱
export KEY_EMAIL="sammy@example.com"
#组织机构,如“XX公司XX部门”
export KEY_OU="HomeLab"
# X509 Subject Field
#key的名称
export KEY_NAME="server"
. . .
#证书的common anme,一般填写服务器的域名
export KEY_CN=dev.test.local
. . .
5、由于我们没有配置OPENSSL版本变量,并希望EasyRAS不要根据版本选择配置文件,所以我们复制需要的配置文件并移除版本号
cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf
6、进入easy-ras目录,并应用变量
cd /etc/openvpn/easy-rsa
source ./vars
7、运行清理脚本,清楚所有keys文件夹下的文件,
注意!!!该脚本会清空keys文件夹,请慎重使用!!!
./clean-all
8、创建服务器证书
#创建证书颁发机构
./build-ca
#创建服务器证书
./build-key-server server
#创建Diffie-Hellman密钥交换文件
./build-dh
#创建ta.key
openvpn --genkey --secret /etc/openvpn/easy-rsa/keys/ta.key
9、将证书复制到指定位置
cd /etc/openvpn/easy-rsa/keys
cp dh2048.pem ca.crt server.crt server.key ta.key /etc/openvpn
10、创建客户端证书
cd /etc/openvpn/easy-rsa
./build-key client
五、路由配置
为了实现跳板机功能,我们需要OpenVPN的客户端在连接服务端后,能直接访问到服务端后端的私有网络,既通过10.8.0.x网段访问到192.168.90.x网端口,因此我们需要在OpenVPN服务端的服务器上配置ip地址转发功能。并添加相应的路由表
1、开启IP地址转发
vim /etc/sysctl.d/ipforward.conf
#在该文件中加入一行
net.ipv4.ip_forward = 1
#使新设置生效
sysctl -p
#重启网络服务
systemctl restart network.service
2、修改OpenVPN配置文件/etc/openvpn/server.conf
,添加VPN私有网络路由表
push "route 10.8.0.0 255.255.255.0"
3、在服务端后端的私有网络的网关上,添加指向VPN私有网络的路由表
该路由表用来通知服务端后的私有网络中,数据包如何返回VPN服务器,目标地址为VPN设置的网络,网关填写VPN服务器在该网络中的IP地址。
4、启动OpenVPN服务
#配置OpenVPN开机自动启动
systemctl enable openvpn@server.service
#启动OpenVPN Server
systemctl start openvpn@server.service
六、客户端配置
这里我们使用Windows客户端进行演示,其他客户端配置方式类似。
1、安装Windows客户端
保持默认即可,可选安装EasyRSA密钥工具。
2、修改客户端配置
复制OpenVPN安装目录下sample-config目录下的client.ovpn到上级目录下的config目录中,并在config目录下建立keys目录,修改配置文件如下:
#VPN服务器的IP地址或域名以及端口号
remote X.X.X.X xxxx
#证书路径,注意使用双斜杠,如路径中有空格,需要加双引号
ca "C:\\Program Files\\OpenVPN\\config\\keys\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\keys\\peixiang.crt"
key "C:\\Program Files\\OpenVPN\\config\\keys\\peixiang.key"
#ta,key路径
tls-auth "C:\\Program Files\\OpenVPN\\config\\keys\\ta.key" 1
3、将上述四个文件复制到keys目录
4、启动客户端,右键任务栏图标,点击“connect”连接服务器。
七、结果测试
在本测试环境,从客户端连接192.168.90.8,追踪路由如下图:
此时客户端的路由表如下图: