Ubuntu OpenVPN服务器搭建测试(一)

发布于:2024-12-18 ⋅ 阅读:(55) ⋅ 点赞:(0)

1.OpenVPN简介

OpenVPN是一种用于创建安全的虚拟专用网络(VPN)的开源软件解决方案。它能够通过公共互联网创建加密的点对点或站点对站点连接,从而保证数据传输的机密性、完整性和真实性。以下是一些关于OpenVPN的关键信息:

1.1 主要特点

1. 安全性:
   - OpenVPN使用OpenSSL加密库来支持各种加密算法(例如AES、Blowfish),确保数据在传输过程中受到保护。
   - 支持基于SSL/TLS的身份验证,可以使用证书、私钥和证书颁发机构(CA)来建立和验证安全连接。
2. 灵活性:
   - OpenVPN具有很高的灵活性,能够在多种操作系统(如Linux、Windows、macOS、iOS、Android等)上运行。
   - 支持通过不同网络协议进行传输,包括TCP和UDP。
   - 可以穿越防火墙和网络地址转换(NAT)设备。
3. 易于配置:
   - OpenVPN配置文件使用简单且易于阅读的文本格式,可以轻松进行定制和更改。
   - 配置选项丰富,可以满足从简单到复杂的各种部署需求。

4. 可靠性:
   - 支持自动重新连接和故障恢复,确保VPN连接的持久性。

1.2 工作原理

OpenVPN基于客户端-服务器架构(C/S架构)工作。服务器端负责集中管理和维护各种连接,而客户端则连接到服务器并通过安全通道传输数据。

1.3 典型应用场景

1. 远程访问:
   - 允许远程用户安全地访问公司内部网络资源。
2. 站点到站点连接:
   - 在不同地理位置的办公地点之间建立安全连接,实现网络资源的共享。
3. 访问受限制内容:
   - 通过VPN连接访问受地理或网络限制的内容和服务。
4. 增强Wi-Fi安全:
   - 在公共Wi-Fi网络上使用VPN保护数据传输,防止中间人攻击。

1.4 总结

OpenVPN是一个功能强大且灵活的VPN解决方案,适用于多种场景,可以显著提高网络通信的安全性和隐私性。

2.安装软件

sudo apt update
# 制作证书用 
sudo apt-get install easy-rsa
# openvpn以及openvpn依赖的组件
sudo apt-get -y install openvpn libssl-dev openssl

3.制作证书

使用easy-rsa制作证书,首先把easy-rsa目录拷贝到/etc/openvpn/目录下,方便证书管理

#把/usr/share/easy-rsa/目录下的所有文件全部复制到/etc/openvpn/easy-rsa/下
sudo cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/

[图片]
有兴趣的话可以看看vars.example文件内容(证书参数相关)

3.1 初始化证书参数

在/etc/openvpn/easy-rsa/目录下创建vars文件,写入内容如下

export EASYRSA_REQ_COUNTRY="CN"
export EASYRSA_REQ_PROVINCE="SX"
export EASYRSA_REQ_CITY="XIAN"
export EASYRSA_REQ_ORG="AXK"
export EASYRSA_REQ_EMAIL="axktest@.com"
export EASYRSA_REQ_OU="AXK"
export KEY_NAME="axk"

在这里插入图片描述

3.2 加载变量并初始化pki

source vars
# 执行./easyrsa init-pki命令会在当前目录创建一个pki目录,用于存储一些中间变量及最终生成的证书。
./easyrsa init-pki

在这里插入图片描述

3.3 生成CA证书

#CA 证书在 OpenVPN等安全通信中起着重要作用,它包含了证书颁发机构的信息,用于对其他证书(如服务器证书、客户端证书等)进行签名和验证,以确保证书的真实性和可靠性。
./easyrsa build-ca nopass

在这里插入图片描述

3.4 生成dh证书

 #./easyrsa gen-dh 命令用于生成 Diffie-Hellman(DH)参数。在使用 Easy-RSA 进行证书相关操作时,生成DH 参数是一个重要的步骤。DH 参数通常仅由 TLS 服务器使用,它用于确保密钥可以穿越不安全网络。虽然 CA 的 PKI也可以生成这个,但在服务器本身上执行生成更有意义,以避免生成后将文件发送到另一个系统。 执行该命令后,会在相应的目录(例如 Easy-RSA初始化时创建的 pki 目录)中生成 dh.pem 文件,该文件即包含了生成的 DH 参数。
 ./easyrsa gen-dh   

在这里插入图片描述

3.5 生成服务端证书

#./easyrsa build-server-full vpn-server nopass 命令用于生成 OpenVPN服务端的相关证书和密钥。 easyrsa:是一个用于管理证书颁发机构(CA)和生成证书的工具。build-server-full:表示构建完整的服务器证书。 vpn-server:是为生成的服务器证书指定的名称,这里将其命名为vpn-server。 nopass:表示不使用密码保护生成的私钥。 执行该命令后,会在相应的目录(通常是 Easy-RSA 初始化时创建的pki 目录)中生成服务端的证书和私钥文件。

#证书有效天数3650天
easyrsa_cert_expire=3650 ./easyrsa build-server-full server nopass 
执行之后需要输入yes,否则不会输出证书

在这里插入图片描述

3.6 生成客户端证书

#为axk_user生成完整的客户端证书。 ./easyrsa build-client-full 表示构建完整的客户端证书,nopass 表示私钥不设置密码。 执行这些命令后,会在相应的目录(通常是Easy-RSA 初始化时创建的 pki 目录)中为每个用户生成对应的证书和私钥文件。这些生成的证书和私钥在配置客户端与服务端的连接时会被使用,以确保客户端与服务端之间通信的安全性和身份验证。
#证书有效天数3650天
easyrsa_cert_expire=3650 ./easyrsa build-client-full axk_user nopass
执行之后需要输入yes,否则不会输出证书

在这里插入图片描述

3.7 生成ta.key

#openvpn --genkey --secret pki/ta.key 这条命令用于生成 OpenVPN 的静态密钥文件 ta.key并将其保存到 pki 目录下。这个静态密钥通常用于在 OpenVPN 服务器和客户端之间建立隧道时进行额外的加密和认证。 例如,在配置OpenVPN 服务器和客户端时,需要在相应的配置文件中指定这个静态密钥的路径,以启用相关的加密和认证功能,增强通信的安全性。

openvpn --genkey --secret pki/ta.key

在这里插入图片描述

3.8 拷贝证书

将服务端需要的证书都转移到etc/openvpn目录下面

cp pki/ca.crt /etc/openvpn/ca.crt 
cp pki/dh.pem /etc/openvpn/dh.pem 
cp pki/issued/server.crt /etc/openvpn/server.crt 
cp pki/private/server.key /etc/openvpn/server.key 
cp pki/ta.key /etc/openvpn/ta.key 

客户端需要的证书也拷贝出来,我拷到/home/leslie/client_ca/目录,这个目录随意,需要拿到客户端使用

cp pki/ca.crt /home/leslie/client_ca/ca.crt 
cp pki/issued/axk_user.crt /home/leslie/client_ca/client.crt 
cp pki/private/axk_user.key /home/leslie/client_ca/client.key 
cp pki/ta.key /home/leslie/client_ca/ta.key 

4.配置启动OpenVPN服务器

4.1配置文件

创建一个配置文件

vim /etc/openvpn/server.conf

写入下列配置,下面的配置示例为 TLS+证书方式校验

#base config
dev tun
proto udp
port 1194
keepalive 10 120
max-clients 10

# Certs
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh.pem
tls-auth /etc/openvpn/ta.key 0

# Ciphers and Hardening
tls-version-min 1.2
cipher AES-256-CBC
auth SHA512
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
# Drop Privs

# IP pool
server 10.16.1.0 255.255.255.0
topology subnet
ifconfig-pool-persist ipp.txt
#client-config-dir client
# Misc
persist-key
persist-tun
# DHCP Push options force all traffic through VPN and sets DNS servers
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
# Logging
log-append /var/log/openvpn.log
verb 4

4.2 启动服务器

#后台运行程序
/usr/sbin/openvpn --config /etc/openvpn/server.conf &
# 查看服务侧log
tail -f /var/log/openvpn.log

启动成功之后,服务端ifconfig查看,会启动一个tun0的网卡,ip为10.16.1.1
在这里插入图片描述

5.客户端配置

客户端可以是windows,也可以在linux上测试
windows 应用下载链接:https://obs.cstcloud.cn/s/cstcloud/OpenVPN-2.6.12-I001-amd64.msi
Linux 需要安装openvpn和openssl libssl-dev
windows和linux的客户端配置文件可以复用

5.1 windows客户端

按照默认路径安装,完成之后拷贝客户端证书到C:\Program Files\OpenVPN\config
在这里插入图片描述

在C:\Program Files\OpenVPN\config\创建client.ovpn文件,内容如下:

# Secure OpenVPN Client Config
#viscosity dns full
#viscosity usepeerdns true
#viscosity dhcp true
tls-client
pull
client
dev tun
proto udp
remote 192.168.184.14 1194
redirect-gateway def1
nobind
persist-key
persist-tun
verb 3
ca ca.crt
cert client.crt
key client.key
tls-auth ta.key 1
remote-cert-tls server
ns-cert-type server
key-direction 1
cipher AES-256-CBC
tls-version-min 1.2
auth SHA512
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256

运行OpenVPN GUI,点击连接,结果如下,显示分配到的IP为10.16.1.4
在这里插入图片描述

5.2 linux客户端

同样是导入4个证书文件,使用同样的client.ovpn配置文件

openvpn --config ./client.ovpn

执行完成后客户端log
在这里插入图片描述

可以看到创建了tun0网卡,并分配到10.16.1.4地址,尝试ping 10.16.1.1可以看到通路建立成功
在这里插入图片描述
至此,只是测试OpenVPN功能的话,已经完成了。后面的章节会介绍一些OpenVPN的高阶配置。

注意事项:
测试OpenVPN时最好关闭服务器和客户端的防火墙,或者放行对应的端口

参考文章:

https://blog.csdn.net/weixin_46965089/article/details/140533346


网站公告

今日签到

点亮在社区的每一天
去签到