OpenVPN部署

描述

Linux 安装:openvpn-2.4.9.tar.gz     # GitHub地址:https://github.com/OpenVPN/openvpn
Linux 安装:easy-rsa-3.0.7.tar.gz    # GitHub地址:https://github.com/OpenVPN/easy-rsa
widows安装:openvpn-install-2.4.9-I601-Win10.exe   # OpenVPN官网
如果widows安装软件在官方访问失败,那么可以从如下地址下载:
2.5.9 是msi软件,2.4.9是exe

安装openvpn

1.开启路由转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

2.安装依赖包
yum -y install lz4-devel lzo-devel pam-devel openssl-devel systemd-devel sqlite-devel autoconf automake libtool libtool-ltdl

3.下载openvpn源码包
wget https://github.com/OpenVPN/openvpn/archive/v2.4.9.tar.gz

4.开始安装
tar xf openvpn-2.4.9.tar.gz 
cd openvpn-2.4.9/
autoreconf -i -v -f
# autoreconf命令可以重复编译指定目录下的系统文件或configure-ac指定的目录树。默认情况下,它只编译比以前编译文件更新的文件

./configure --prefix=/usr/local/openvpn --enable-lzo --enable-lz4 --enable-crypto --enable-server --enable-plugins --enable-port-share --enable-iproute2 --enable-pf --enable-plugin-auth-pam --enable-pam-dlopen --enable-systemd
make && make install

5.建立软连接
ln -s /usr/local/openvpn/sbin/openvpn /usr/local/sbin/openvpn

6.修改配置文件
vim /usr/local/openvpn/lib/systemd/system/openvpn-server@.service
### 找到 ExecStart 这行,改为如下
ExecStart=/usr/local/openvpn/sbin/openvpn --config server.conf
//根据配置文件,WorkingDirectory在/etc/openvpn/server下面需要有server.conf配置文件

7.配置系统服务,并开机自启
cp -a /usr/local/openvpn/lib/systemd/system/openvpn-server@.service /usr/lib/systemd/system/openvpn.service
systemctl enable openvpn.service

安装easy-rsa

1.下载源码包并解压
wget https://github.com/OpenVPN/easy-rsa/archive/v3.0.7.tar.gz 
mv v3.0.7.tar.gz easy-rsa-3.0.7.tar.gz

2.安装
tar xf easy-rsa-3.0.7.tar.gz

3.根据easy-rsa-3.0.7/easyrsa3/vars.example文件生成全局配置文件vars
cd easy-rsa-3.0.7/easyrsa3
cp -a vars.example vars

4.修改vars文件,根据需要去掉注释,并修改对应值;或者直接在文件末尾追加如下信息:
# 国家
set_var EASYRSA_REQ_COUNTRY     "CN"
# 省
set_var EASYRSA_REQ_PROVINCE    "BJ"
# 城市
set_var EASYRSA_REQ_CITY        "BeiJing"
# 组织
set_var EASYRSA_REQ_ORG         "Ren"
# 邮箱
set_var EASYRSA_REQ_EMAIL       "rencr@test.com"
# 拥有者
set_var EASYRSA_REQ_OU          "rcr"
# 长度
set_var EASYRSA_KEY_SIZE        2048
# 算法
set_var EASYRSA_ALGO            rsa
# CA证书过期时间,单位天
set_var EASYRSA_CA_EXPIRE      36500
# 签发证书的有效期是多少天,单位天
set_var EASYRSA_CERT_EXPIRE    36500

5.生成服务端和客户端证书
5.1初始化与创建CA根证书
./easyrsa init-pki
初始化,会在当前目录创建PKI目录,用于存储一些中间变量及最终生成的证书
./easyrsa build-ca
在这部分需要输入PEM密码 PEM pass phrase,输入两次,此密码必须记住,不然以后不能为证书签名。
还需要输入common name 通用名,如:openvpen,这个你自己随便设置个独一无二的。

5.2生成服务端证书
./easyrsa build-server-full server nopass
为服务端生成证书对并在本地签名。nopass参数生成一个无密码的证书;在此过程中会让你确认ca密码
./easyrsa gen-dh
创建Diffie-Hellman,确保key穿越不安全网络的命令,时间会有点长,耐心等待

5.3生成客户端证书
生成多个客户端
./easyrsa build-client-full client nopass    # 无密码,实际不推荐,客户端有密码可提高安全性
./easyrsa build-client-full zhangsan    # 让你输入密码,后续VPN连接时会使用
为客户端生成证书对并在本地签名。nopass参数生成一个无密码的证书;在此过程中都会让你确认ca密码

5.4提高安全性,生成ta.key
$ openvpn --genkey --secret ta.key
加强认证方式,防攻击。如果配置文件中启用此项(默认是启用的),就需要执行上述命令,并把ta.key放到/etc/openvpn/server目录。配置文件中服务端第二个参数为0,同时客户端也要有此文件,且client.conf中此指令的第二个参数需要为1。【服务端有该配置,那么客户端也必须要有】

5.5整理服务端证书
mkdir -p /etc/openvpn/server/
cp -a pki/ca.crt /etc/openvpn/server/
cp -a pki/private/server.key /etc/openvpn/server/
cp -a pki/issued/server.crt /etc/openvpn/server/
cp -a pki/dh.pem /etc/openvpn/server/
cp -a ta.key /etc/openvpn/server/

5.6创建服务端配置文件
参照openvpn-2.4.9/sample/sample-config-files/server.conf文件
$ cat /etc/openvpn/server/server.conf   # 配置文件内容/说明
local 0.0.0.0
port 1194
proto tcp
dev tun
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/server/dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 172.16.10.0 255.255.255.0"
;client-to-client
;duplicate-cn
keepalive 10 120
tls-auth /etc/openvpn/server/ta.key 0
cipher AES-256-CBC
compress lz4-v2
push "compress lz4-v2"
;comp-lzo
max-clients 1000
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
log  /var/log/openvpn.log
verb 3
;explicit-exit-notify 1

6.启动openvpn
$ systemctl start openvpn  端口:1194
Enter Private Key Password:rencrui@4512

server.conf配置文件详解

配置文件说明:
local 0.0.0.0
表示openvpn服务端的监听地址
port 1194
监听的端口,默认是1194
proto tcp
使用的协议,有udp和tcp。建议选择tcp
dev tun
使用三层路由IP隧道(tun)还是二层以太网隧道(tap)。一般都使用tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
ca证书、服务端证书、服务端密钥和密钥交换文件。如果它们和server.conf在同一个目录下则可以不写绝对路径,否则需要写绝对路径调用
server 10.8.0.0 255.255.255.0
vpn服务端为自己和客户端分配IP的地址池。
服务端自己获取网段的第一个地址(此处为10.8.0.1),后为客户端分配其他的可用地址。以后客户端就可以和10.8.0.1进行通信。
注意:该网段地址池不要和已有网段冲突或重复。其实一般来说是不用改的。除非当前内网使用了10.8.0.0/24的网段。
ifconfig-pool-persist ipp.txt
使用一个文件记录已分配虚拟IP的客户端和虚拟IP的对应关系,
以后openvpn重启时,将可以按照此文件继续为对应的客户端分配此前相同的IP。也就是自动续借IP的意思。
server-bridge XXXXXX
使用tap模式的时候考虑此选项。
push "route 10.0.10.0 255.255.255.0"
push "route 192.168.10.0 255.255.255.0"
vpn服务端向客户端推送vpn服务端内网网段的路由配置,以便让客户端能够找到服务端内网。多条路由就写多个Push指令
client-to-client
让vpn客户端之间可以互相看见对方,即能互相通信。默认情况客户端只能看到服务端一个人;
默认是注释的,不能客户端之间相互看见
duplicate-cn
允许多个客户端使用同一个VPN帐号连接服务端
默认是注释的,不支持多个客户登录一个账号
keepalive 10 120
每10秒ping一次,120秒后没收到ping就说明对方挂了
tls-auth ta.key 0
加强认证方式,防攻击。如果配置文件中启用此项(默认是启用的)
需要执行openvpn --genkey --secret ta.key,并把ta.key放到/etc/openvpn/server目录
服务端第二个参数为0;同时客户端也要有此文件,且client.conf中此指令的第二个参数需要为1。
cipher AES-256-CBC
# 选择一个密码。如果在服务器上使用了cipher选项,那么您也必须在这里指定它。注意,v2.4客户端/服务器将在TLS模式下自动协商AES-256-GCM。
compress lz4-v2
push "compress lz4-v2"
openvpn 2.4版本的vpn才能设置此选项。表示服务端启用lz4的压缩功能,传输数据给客户端时会压缩数据包。
Push后在客户端也配置启用lz4的压缩功能,向服务端发数据时也会压缩。如果是2.4版本以下的老版本,则使用用comp-lzo指令
comp-lzo
启用lzo数据压缩格式。此指令用于低于2.4版本的老版本。且如果服务端配置了该指令,客户端也必须要配置
max-clients 100
并发客户端的连接数
persist-key
persist-tun
通过ping得知超时时,当重启vpn后将使用同一个密钥文件以及保持tun连接状态
status openvpn-status.log
在文件中输出当前的连接信息,每分钟截断并重写一次该文件
;log openvpn.log
;log-append openvpn.log
默认vpn的日志会记录到rsyslog中,使用这两个选项可以改变。
log指令表示每次启动vpn时覆盖式记录到指定日志文件中,
log-append则表示每次启动vpn时追加式的记录到指定日志中。
但两者只能选其一,或者不选时记录到rsyslog中
verb 3
日志记录的详细级别。
;mute 20
沉默的重复信息。最多20条相同消息类别的连续消息将输出到日志。
explicit-exit-notify 1
当服务器重新启动时,通知客户端,以便它可以自动重新连接。仅在UDP协议是可用

windows客户端配置

1、下载安装包进行安装
https://swupdate.openvpn.org/community/releases/openvpn-install-2.4.9-I601-Win10.exe

2、安装完后会网络连接会出现一个连接

3、客户端client用户配置文件
注:文件名 windows为client.ovpn Linux 为client.conf
证书和配置文件如下:
1.注意路径,在OpenVPN/config目录下建立了client目录
2.ca.crt、rencc.crt、rencc.key、ta.key都是之前创建好的,只有client.ovpn需要单独下载并修改
3.ca.crt、ta.key 在服务端/etc/openvpn/server/下
4.rencc.crt、rencc.key 在服务端easy-rsa-3.0.7/easyrsa3/pki/ 的 private 和 issued下

3.1 client.ovpn如下
参照openvpn-2.4.9/sample/sample-config-files/client.conf文件
文件名 windows为rencc.ovpn,Linux为client.conf
client
dev tun
proto tcp
remote 192.168.2.10 1194
resolv-retry infinite
nobind
;user nobody
;group nobody
persist-key
persist-tun
ca ca.crt
cert rencc.crt
key rencc.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
compress lz4-v2
verb 3
;mute 20

client.conf配置文件详解

配置文件参数说明
参考:openvpn-2.4.9/sample/sample-config-files/client.conf
# 文件名 windows为client.ovpn,Linux为client.conf
client
# 标识这是个客户端
dev tun
# 使用三层路由IP隧道(tun)还是二层以太网隧道(tap)。服务端是什么客户端就是什么
proto tcp
# 使用的协议,有udp和tcp。服务端是什么客户端就是什么
remote 10.0.0.190 1194
# 服务端的地址和端口
resolv-retry infinite
# 一直尝试解析OpenVPN服务器的主机名。
# 在机器上非常有用,不是永久连接到互联网,如笔记本电脑。
nobind
# 大多数客户机不需要绑定到特定的本地端口号。
;user nobody
;group nobody
# 初始化后的降级特权(仅非windows)
persist-key
persist-tun
# 尝试在重新启动时保留某些状态。
ca ca.crt
cert client.crt
key client.key
# ca证书、客户端证书、客户端密钥
# 如果它们和client.conf或client.ovpn在同一个目录下则可以不写绝对路径,否则需要写绝对路径调用
remote-cert-tls server
# 通过检查certicate是否具有正确的密钥使用设置来验证服务器证书。
tls-auth ta.key 1
# 加强认证方式,防攻击。服务端有配置,则客户端必须有
cipher AES-256-CBC
# 选择一个密码。如果在服务器上使用了cipher选项,那么您也必须在这里指定它。注意,v2.4客户端/服务器将在TLS模式下自动协商AES-256-GCM。
compress lz4-v2
# 服务端用的什么,客户端就用的什么
# 表示客户端启用lz4的压缩功能,传输数据给客户端时会压缩数据包。
verb 3
# 日志级别
;mute 20
# 沉默的重复信息。最多20条相同消息类别的连续消息将输出到日志。