跳至主要內容

openvpn

chanchaw大约 42 分钟linuxvpn

证书到期

服务端

2024年10月15日 出现所有 openvpn 客户端一起掉线的情况,之前不知道原来 openvpnssl 证书是有效期的,部署在织造云数据服务器上的 openvpn 服务端的证书有效期两年,可以到服务端上重新生成服务端的证书,部署后客户端会自动连接上,不需要重新生成客户端证书,前提是要知道服务端CA证书的密钥,是自己常用的最简单数字+英文的密码,按照下面步骤重新生成服务端证书

# 生成新的服务端私钥和证书请求文件,执行下面命令
/opt/easy-rsa/easyrsa gen-req server nopass

# 执行上面命令后会提示即将生成的新文件会覆盖之前的老的证书
# 并且要求填写DN(commonName),本次填写的是:xdfznh
# 生成下面两个文件
/opt/easy-rsa/pki/private/server.key
/opt/easy-rsa/pki/reqs/server.req

# 使用现有的CA证书和CA私钥来签署新的服务端证书
./easyrsa sign-req server server
# 执行上面命令后会有一个步骤要求输入CA的私钥:
# 最常用的最简单的数字+英文密码
# 生成的文件是:/opt/easy-rsa/pki/issued/server.crt

# 成功后会生成新的服务端证书:
easy-rsa/pki/issued/server.crt
# 复制新生成的两个证书文件到 openvpn 的运行目录
cp /opt/easy-rsa/pki/issued/server.crt /etc/openvpn/
cp /opt/easy-rsa/pki/private/server.key /etc/openvpn/

# 检查服务端配置文件中设置的证书文件名 /etc/openvpn/server.conf
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key

# 重启 openvpn 服务
systemctl start openvpn@server.service

如果服务端安装在 windows 系统,则使用下面方法查看证书有效期

cd "C:\Program Files\OpenVPN\easy-rsa\pki\issued"
certutil -dump server.crt

# 下面方法可批量查看指定目录下的所有证书的有效期
cd "C:\Program Files\OpenVPN\easy-rsa\pki\issued"
for %f in (*.crt) do certutil -dump %f | findstr "NotBefore NotAfter""

windows更新服务端证书


下面是 2025年7月7日 为乐达三电信天翼云中的 openvpn 更新服务端证书的步骤

# 切换路径到 C:\Program Files\OpenVPN\easy-rsa
# 通过右键菜单的管理员运行批处理文件 EasyRSA-Start.bat
# 执行下面命令
easyrsa gen-req server nopass

# 执行上面命令后会提示即将生成的新文件会覆盖之前的老的证书
# 并且要求填写DN(commonName),乐达3电信天翼云中的 openvpn 服务端证书名称是 server
# 生成下面两个文件,过程中要求输入 yes 覆盖原文件
/opt/easy-rsa/pki/private/server.key
/opt/easy-rsa/pki/reqs/server.req

# 使用现有的CA证书和CA私钥来签署新的服务端证书
easyrsa sign-req server server

# 执行上面命令后会有一个步骤要求输入CA的私钥,
# 乐达3电信天翼云中的 openvpn 没有设置密码
# 过程中只需要输入 yes 覆盖原文件即可
# 生成的文件是:C:/Program Files/OpenVPN/easy-rsa/pki/issued/server.crt

# 成功后会生成新的服务端证书:
easy-rsa/pki/issued/server.crt

# 复制新生成的两个证书文件到 openvpn 的运行目录
# 拷贝上面步骤中先后生成的两个文件 server.key,server.crt 应用到服务端的配置文件目录下,重新连接即可。

客户端

检查证书有效期并重新制作看下面的视频

下面是配套视频的文字资料:

# 切换到 openssl 的目录下
cd /opt/easy-rsa/pki

# 执行下面命令查看证书有效期,tianzhiran 是客户名称(天之然)
openssl x509 -in issued/tianzhiran.crt -noout -dates

# 返回下面两个日期,其中 notAfter 表示有效期截止期
notBefore=Jul 23 02:53:48 2022 GMT
notAfter=Oct 25 02:53:48 2024 GMT

# 为过期的证书重新生成新的证书
# 切换到证书生成器的目录
cd /opt/easy-rsa

# 生成证书 - 执行下面命令后输入:yes
./easyrsa gen-req tianzhiran nopass
# 给证书签名 - 后面的 tianzhiran 是客户名称
./easyrsa sign client tianzhiran
# 执行后要求输入的 commonName 仍然填写 tianzhiran
# 又要求输入:yes
# 最后要求输入密码:7758chanchaw

# 最后拷贝下面两个文件到客户端电脑上 oepnvpn的安装的配置目录下
# 客户端的 openvpn 重新连接
/opt/easy-rsa/pki/issued/tianzhiran.crt
/opt/easy-rsa/pki/private/tianzhiran.key
# 前期要参照目录 /opt/easy-rsa/pki/issued/ 下的证书文件名称
# 新生成的证书保证和这些证书名称一致,因为还有个配置是按照客户名称设置静态IP地址的

客户端也会有证书到期的情况,拨号时有如下提示则表示证书到期

Wed Oct 16 15:40:50 2024 --cipher is not set. Previous OpenVPN version defaulted to BF-CBC as fallback when cipher negotiation failed in this case. If you need this fallback please add '--data-ciphers-fallback BF-CBC' to your configuration and/or add BF-CBC to --data-ciphers.
Wed Oct 16 15:40:50 2024 OpenVPN 2.5.7 Windows-MSVC [SSL (OpenSSL)] [LZO] [LZ4] [PKCS11] [AEAD] built on May 27 2022
Wed Oct 16 15:40:50 2024 Windows version 10.0 (Windows 10 or greater) 64bit
Wed Oct 16 15:40:50 2024 library versions: OpenSSL 1.1.1o  3 May 2022, LZO 2.10
Wed Oct 16 15:40:50 2024 MANAGEMENT: TCP Socket listening on [AF_INET]127.0.0.1:25340
Wed Oct 16 15:40:50 2024 Need hold release from management interface, waiting...
Wed Oct 16 15:40:50 2024 MANAGEMENT: Client connected from [AF_INET]127.0.0.1:25340
Wed Oct 16 15:40:50 2024 MANAGEMENT: CMD 'state on'
Wed Oct 16 15:40:50 2024 MANAGEMENT: CMD 'log all on'
Wed Oct 16 15:40:51 2024 MANAGEMENT: CMD 'echo all on'
Wed Oct 16 15:40:51 2024 MANAGEMENT: CMD 'bytecount 5'
Wed Oct 16 15:40:51 2024 MANAGEMENT: CMD 'hold off'
Wed Oct 16 15:40:51 2024 MANAGEMENT: CMD 'hold release'
Wed Oct 16 15:40:51 2024 WARNING: Your certificate has expired!
Wed Oct 16 15:40:51 2024 TCP/UDP: Preserving recently used remote address: [AF_INET]101.34.89.88:1194
Wed Oct 16 15:40:51 2024 Socket Buffers: R=[131072->131072] S=[131072->131072]
Wed Oct 16 15:40:51 2024 UDP link local: (not bound)
Wed Oct 16 15:40:51 2024 UDP link remote: [AF_INET]101.34.89.88:1194
Wed Oct 16 15:40:51 2024 MANAGEMENT: >STATE:1729064451,WAIT,,,,,,
Wed Oct 16 15:40:51 2024 MANAGEMENT: >STATE:1729064451,AUTH,,,,,,
Wed Oct 16 15:40:51 2024 TLS: Initial packet from [AF_INET]101.34.89.88:1194, sid=259f1669 3d1fcc84
Wed Oct 16 15:40:51 2024 VERIFY OK: depth=1, CN=Easy-RSA CA
Wed Oct 16 15:40:51 2024 VERIFY KU OK
Wed Oct 16 15:40:51 2024 Validating certificate extended key usage
Wed Oct 16 15:40:51 2024 ++ Certificate has EKU (str) TLS Web Server Authentication, expects TLS Web Server Authentication
Wed Oct 16 15:40:51 2024 VERIFY EKU OK
Wed Oct 16 15:40:51 2024 VERIFY OK: depth=0, CN=xdfznh

可通过方法 [创建客户证书](openvpn | 天尘的知识库open in new window) 的方法重新制作客户端证书文件,注意制作过程中的 common name 要填写客户的名称,这里和服务端证书的 common name 不同。

路由器中配置

2026年3月13日给天天虹买的锐易路由器中的推荐配置,Grok 提供

检查带宽占用

# 通过下面命令查看系统中哪个进程占用了大带宽
iftop -P

# 如果是 openvpn 占用大量带宽,则要查看日志
# 上面的命令同时会显示占用大带宽的公网IP地址
cd /etc/openvpn
vim openvpn-status.log

# 在日志文件中查找拿到的公网IP,能够看到是哪个
# 虚拟地址使用了大量带宽
# 查找IP地址:180.106.137.42

单配置文件

常规可以使用 *.ovpn 配置文件中指定外置证书和密钥文件,也可以将这些外置的文件集成到配置文件中,如下

含证书 ovpn
client    #指定当前VPN是客户端
dev tun   #使用tun隧道传输协议
proto udp #使用udp协议传输数据
remote 云服务器IP地址 默认端口号1194    #openvpn服务器IP地址端口号
resolv-retry infinite       #断线自动重新连接,在网络不稳定的情况下非常有用
nobind                      #不绑定本地特定的端口号

# 将证书和密钥集成到本配置文件中,则注释下面三行
# ca ca.crt 		    #指定CA证书的文件路径
# cert xindongfang201.crt     #指定当前客户端的证书文件路径
# key xindongfang201.key      #指定当前客户端的私钥文件路径

verb 3 			    #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
persist-key                #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-tun 	#检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
route-delay 5
route-method exe
remote-cert-tls server

# 如果使用外置证书和密钥文件则取消下面的嵌入证书,使用上面注释的三行指定使用外置证书
<ca>
-----BEGIN CERTIFICATE-----
MIIDNTCCAh2gAwIBAgIJAPLxGJ9NnVMoMA0GCSqGSIb3DQEBCwUAMBYxFDASBgNV
BAMMC0Vhc3ktUlNBIENBMB4XDTIyMDcxMzA0MDEzNFoXDTMyMDcxMDA0MDEzNFow
FjEUMBIGA1UEAwwLRWFzeS1SU0EgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
ggEKAoIBAQCmoP1vQrKUpuHZLYRGMla5VMyWVPrwbe7pwEi1O/J5AZozP6k96iF2
jJ8emwm7VwCiVrxJHV7omMNfgumEP4H+6ytE8f3NdOTvrsS835Nkoy976Mt6KO/U
zpKv4158+AILXgeyZOWqAGdAJLyryfob/6NEjVRvsucDSggAFubn0Og2k8cGPG1E
jCenXsBT0MPJplZX3ZUg+aS7oD4EV70KGKyFWEiCdHfNJt8RXi9KpFjxUGbYLYuz
AqFGfTBoIROwouGaph4foRatVJrwer3m6y2tiUrY9MPSiGTeyfpQstGUmqLa+Jef
OAEDQXfHEyu+Ius+D0QjcAg/IjO8HL3nAgMBAAGjgYUwgYIwHQYDVR0OBBYEFDR4
0VSxaFmCRt+JTsVGm5PD+jPwMEYGA1UdIwQ/MD2AFDR40VSxaFmCRt+JTsVGm5PD
+jPwoRqkGDAWMRQwEgYDVQQDDAtFYXN5LVJTQSBDQYIJAPLxGJ9NnVMoMAwGA1Ud
EwQFMAMBAf8wCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBCwUAA4IBAQA497CKaq+x
IDuWPBqDHHmtiwUTT4VpYU8gAaAvpURHmO3p1ucKPD2cyR7BfHle7NYbnRv10RrL
gH6U85gAb3mjDrtmsiBcRTPQQe97T0FdqcMr72qpjsc1SfLa7H7fUdzmIzcZYFgc
Wa/uPvqVXS5yeFrpQ4Z+iovhFdAv4jXQWcn4b+xvjvE68F8t+7qAh+CHBwDYZuoq
24o0pEXjQhVlBjpaukULs19HwCCyFTTM6g1SRZM0Ny1QbQbaWAzm1ErofbGRAkKl
KStm5PDhsIzjoRE2Zl6YJgU6mzveShx1j/tPQiq0FzWJNVT7ipgJVEFuF5TRGfEL
hIDsFnsXXOR2
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
MIIDljCCAn6gAwIBAgIRAJgtvGkQ5Z5L+G38PZeCKzUwDQYJKoZIhvcNAQELBQAw
FjEUMBIGA1UEAwwLRWFzeS1SU0EgQ0EwHhcNMjQxMDIwMDE0NjQzWhcNMjcwMTIz
MDE0NjQzWjATMREwDwYDVQQDDAhjY0NvbXBQQzCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBALi1AvfjqI/9kIYNC5AYC5P8XnfXYb4+3Gib9oWD5S0jCn4f
ZtDyHALeRfTdrTC3rlGjHwVr+kfTKxHL4Cr3XQUz4z/PYgmb4knv0QjleATDS+6H
7KwFKmqsXYsP4Ih9hxoBUM96AJ3ptB/yygQ9dNkiRWZepCf6E3QMlw4aR5RMfkw4
6/p/x0uXXwvrqpDciCs15jTBG4BDb2NdVyvlI1Ek/nU7bi1zQLzmjIMR98vE8kGy
LVXnMsERM4wLkP8WwrkX6gq0mm+6G9O+NYXvft3mKtw6eshAUgnmLetJKrUPv+zZ
kY2CVR7C8ZmrB4u9pbK9iVGA7O5I1+Vgh3zyufUCAwEAAaOB4TCB3jAJBgNVHRME
AjAAMB0GA1UdDgQWBBSk4GGL/4YW0AeF04zPlTxSKBDLVTBGBgNVHSMEPzA9gBQ0
eNFUsWhZgkbfiU7FRpuTw/oz8KEapBgwFjEUMBIGA1UEAwwLRWFzeS1SU0EgQ0GC
CQDy8RifTZ1TKDATBgNVHSUEDDAKBggrBgEFBQcDAjALBgNVHQ8EBAMCB4AwNQYJ
YIZIAYb4QgENBCgWJkVhc3ktUlNBICgzLjAuOCkgR2VuZXJhdGVkIENlcnRpZmlj
YXRlMBEGCWCGSAGG+EIBAQQEAwIHgDANBgkqhkiG9w0BAQsFAAOCAQEAokPae6tn
hv6SXV38BT9adkodC7JuOjDshJk2xw8oufHXyP/qSFoEZsKNIRIlY7Cwg2ano+c+
+0ZaQ+9JWBhnK5RKR8iEKkqg3yH98f7iSo3U2v/auP5Us4SJmfSJnKiMsiVUv58L
/Ft4U3Wu9iQOqqGfkH0zPjFwKFLi2B3IKFONmuekV5/qNhre8FVOic6ikkb1Pi2U
ir6RV/zRlC+YY97s27syCE08iZXwstIetExmC9J+Oey0f22PlhW0vX19dQGzEMyf
SciRlGwGmC1DBv/BmazE8DyvK6Lyyj7WE2mrv9sRQ6oZwApPk6Ovi/8nY+wgYI7S
DYveL/mw055TTw==
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC4tQL346iP/ZCG
DQuQGAuT/F5312G+Ptxom/aFg+UtIwp+H2bQ8hwC3kX03a0wt65Rox8Fa/pH0ysR
y+Aq910FM+M/z2IJm+JJ79EI5XgEw0vuh+ysBSpqrF2LD+CIfYcaAVDPegCd6bQf
8soEPXTZIkVmXqQn+hN0DJcOGkeUTH5MOOv6f8dLl18L66qQ3IgrNeY0wRuAQ29j
XVcr5SNRJP51O24tc0C85oyDEffLxPJBsi1V5zLBETOMC5D/FsK5F+oKtJpvuhvT
vjWF737d5ircOnrIQFIJ5i3rSSq1D7/s2ZGNglUewvGZqweLvaWyvYlRgOzuSNfl
YId88rn1AgMBAAECggEAKDZgWw+ZVx/hIw4cAlb5zlIXTwf5I64T1kJ+PTsl3dnP
Iv47KCpNpuI1YMYSOpUCwos86bVEW/bBXbKBL1mDSuqtAutncKgbb/ViEQnEQ2Ux
VtEI2bqWLXsxMmFWhOCvVR4MNd9d2wNST9JP4PRwSAWKDmt0Wa+8JHvJNyzJgKN3
/DV0Pif+/vTQj+ZImR2BECiUyWCDREvQ/jyvIniktqktNHqoNFtYmLCkCSaBFPiT
98z2Al06w9L8HbW+a4B+e5M8Jx55QbXbhEL05WoiWufsbAXqL07zUILEvD84ENej
ol5qQczFiFiOt++gHWA2urn7XRI7PtjbpI7AKmr7gQKBgQDawzY2c4yDIQHpS+Bv
Fz7sD8j0AC3c7eMmJSqhf17DwlogRqaqCkgpg71WGGSfPerI0SbqnTy773vF1gEu
tG8nMqGk7fcNOIMdHjOHxIjOdP30wLD/OqyTkYyJo31zvOeI1lnQ8Nbj2q5SYwoK
aNEjIV5M51z/GDoUZ/Mo1ZxleQKBgQDYJczNbudCmzFZ0bhCKQ2aI7ilO99O2Uzi
pfIqK49b6PjfzY1KODRnURwQ2XFg9eMwG3sm4xhSfBNP/Hv976vOaIDli6Xu0XZY
T4N7JtP/VkcsfdGSI2kQ8T5Y3nCP/2k6tkq0MS1bNnqM+aeplFAfng/3LK1uySMs
Ua1NjTqFXQKBgFFhZX2EJrVxRgC/1VH+V84BYURD/Mu/Q00hbmZ9t4cjeduf7Mg8
4vNuqrSohmYm5nymMc/9hmZzhJvoLLBvNxph33g3fjxQ1ZWzcoADQNFs/DxconuQ
HDsZXiqlwzmXAJsLAoaT0Z0Z8Nd9OHL+4y4qb6Y0O4g6PwDwWqjKLlAhAoGBAMuX
fzsZdVb1mxyBP8+Bn8BKWUe6B3Lbl2H88QbrlNL7tEAJ+0WnfyS573enePXdZasQ
l4Vfbq9zEzXKGnhr4iY/pPmR+i/iuFgiPTQotJLTj6LGuDmwhOxib1mB3ACmkVWu
Ett7Xr+FpxVWqqg+fOHrHhqxyIKLjkfWfyiHGFI5AoGBALcbRUGWRYIaimQjTAmz
rnxNRqFDkbUFIb2kl0OcdPXt/TLmR7M0MFgD5MaPZSYgqQslrQ6p3XQwYx0qfVCg
eifDj4aBGnVN3h7/XMkFCgCxuntLKryQ4l8KWXR03on7vGOWS8tuIvrJl/whXRsW
Kf0PM/7HQZOBjq9MDWlVpZ/T
-----END PRIVATE KEY-----
</key>

移动端

iphone 下载 openvpn 客户端,先要在电脑端将文件三个证书文件 ca.crt,client.crt,client.key 的内容整合到 client.ovpn 中,将该文件通过邮件的形式发送到手机上,点击附件中的 client.ovpn 后使用 openvpn 客户端打开,即可连接。整合证书内容后的 client.ovpn 的完整内容如下

client
dev tun
proto udp
remote 81.xzy云服务器IP地址.13 14911
resolv-retry infinite
nobind
verb 3
persist-key
persist-tun
route-delay 5
route-method exe
ip-win32 netsh
<ca>
-----BEGIN CERTIFICATE-----
这里是CA证书的内容
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
这里是crt证书的内容,注意只需要这里 BEGIN 和 END 之间的内容即可,
在  【-----BEGIN CERTIFICATE----- 】之前的内容都忽略不计
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
这里是 key 文件的内容,从文件中连带 BEGIN 和 END 一起拷贝即可
注意需要有 <> 元素
-----END PRIVATE KEY-----
</key>

日志

windows 系统中在配置文件 xdf.ovpn 中没有配置日志文件,则默认在路径 C:\Users\Administrator\OpenVPN\log

资料

本案例来自 https://bbs.huaweicloud.com/blogs/307009open in new window

安装 epel

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum update
yum repolist

下载证书生成工具 easy-rsa

yum -y install easy-rsa

创建证书环境目录

mkdir -p /opt/easy-rsa
cp -a /usr/share/easy-rsa/3.0.8/* /opt/easy-rsa/
cp -a /usr/share/doc/easy-rsa-3.0.8/vars.example /opt/easy-rsa/vars

准备 vars 文件

修改文件 /opt/easy-rsa/vars 中的配置 - 将对应选项的注释取消,后面的值根据自己情况填写 - 可以随便填写

set_var EASYRSA_DN      "cn_only"
set_var EASYRSA_REQ_COUNTRY     "CN"
set_var EASYRSA_REQ_PROVINCE    "Jiangsu"
set_var EASYRSA_REQ_CITY        "Suzhou"
set_var EASYRSA_REQ_ORG         "xdfsoft"
set_var EASYRSA_REQ_EMAIL       "409223171@qq.com"
set_var EASYRSA_NS_SUPPORT      "yes"

创建 pki 目录用于存储证书

[root@openvpn easy-rsa]# cd /opt/easy-rsa/
[root@openvpn easy-rsa]# /opt/easy-rsa/easyrsa init-pki

Note: using Easy-RSA configuration from: /opt/easy-rsa/vars

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /opt/easy-rsa/pki

创建根证书

根证书用于之后通过 ca 对 server 和 client 证书签名时使用 执行下面命令过程中用户要做的操作是:输入两次密码,直接回车

[root@openvpn easy-rsa]# /opt/easy-rsa/easyrsa build-ca

Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017

Enter New CA Key Passphrase: 
Re-Enter New CA Key Passphrase: 
Generating RSA private key, 2048 bit long modulus
.....+++
..........................................+++
e is 65537 (0x10001)
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/opt/easy-rsa/pki/ca.crt

创建 server 端证书和私钥文件

nopass表示不加密私钥文件,生成过程中直接回车默认

[root@openvpn easy-rsa]# /opt/easy-rsa/easyrsa gen-req server nopass

Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
Generating a 2048 bit RSA private key
...........................+++
........................................................................+++
writing new private key to '/opt/easy-rsa/pki/easy-rsa-1326.TIfM4D/tmp.rxSnIM'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [server]:

Keypair and certificate request completed. Your files are:
req: /opt/easy-rsa/pki/reqs/server.req
key: /opt/easy-rsa/pki/private/server.key

给 server 证书签名

执行过程中:输入 yes,输入密码

[root@openvpn easy-rsa]# /opt/easy-rsa/easyrsa sign server server

Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 825 days:

subject=
    commonName                = server
Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes
Using configuration from /opt/easy-rsa/pki/easy-rsa-1397.ds5qpo/tmp.lX0IFN
Enter pass phrase for /opt/easy-rsa/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'server'
Certificate is to be certified until Jun  3 14:02:46 2023 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /opt/easy-rsa/pki/issued/server.crt

创建Diffie-Hellman文件,秘钥交换时的Diffie-Hellman算法

/opt/easy-rsa/easyrsa gen-dh

创建 client 证书和私钥文件

nopass表示不加密私钥文件,生成过程中直接回车默认 nopass 之前的 client 是用户名称,如果之后要制作N多个用户的证书则这里输入每个用户的名称,即下面代码的第一行可以写作: /opt/easy-rsa/easyrsa gen-req chanchaw nopass

[root@openvpn easy-rsa]# /opt/easy-rsa/easyrsa gen-req client nopass

Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
Generating a 2048 bit RSA private key
..................................................................+++
...................................................................................................................+++
writing new private key to '/opt/easy-rsa/pki/easy-rsa-1761.HYs4Xv/tmp.z02JuI'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [client]:

Keypair and certificate request completed. Your files are:
req: /opt/easy-rsa/pki/reqs/client.req
key: /opt/easy-rsa/pki/private/client.key

给 client 证书签名

执行过程中有两次用户输入,分别是:输入 yes,输入密码 类似上面,下面第一行代码的第二个 client 是用户名称,如果是为 chanchaw 签名,则第一行是: /opt/easy-rsa/easyrsa sign client chanchaw

[root@openvpn easy-rsa]# /opt/easy-rsa/easyrsa sign client client

Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a client certificate for 825 days:

subject=
    commonName                = client
Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes
Using configuration from /opt/easy-rsa/pki/easy-rsa-1828.VwQHeF/tmp.eYqBSS
Enter pass phrase for /opt/easy-rsa/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'client'
Certificate is to be certified until Jun  3 14:09:37 2023 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /opt/easy-rsa/pki/issued/client.crt

windows OpenVpn 服务端

安装

openvpn服务端和客户端是同一个安装包,双击安装文件“OpenVPN-2.5.7-I602-amd64”,选择 customize
openvpn01.png 按照下图选择 service 和加密工具 openvpn02.png 成功后默认安装路径是:C:\Program Files\OpenVPN

服务端证书

生成 CA 证书

到目录 C:\Program Files\OpenVPN\easy-rsa 下右键管理员运行 “EasyRSA-Start.bat”,启动后执行命令:./easyrsa init-pki,成功后会在当前目录下生成文件夹 pki,继续执行命令 ./easyrsa build-ca nopass,会生成无密码 CA 证书,过程中要求输入证书名称,输入 openvpnld2 后回车(后来核实是乐达3的电信专线停掉,乐达2的保留),之后提示生成文件所在目录 openvpn03.png

生成服务端证书

继续在上面 cmd 窗口中执行 ./easyrsa build-server-full server nopass 生成无密码的服务端证书,生成的证书文件是 C:\Program Files\OpenVPN\easy-rsa\pki\issued\server.crt

生成客户端证书

继续在上面的 cmd 窗口中执行 ./easyrsa build-client-full client nopass 生成无密码的客户端证书,生成的文件是 C:\Program Files\OpenVPN\easy-rsa\pki\issued\client.crt

生成 DH 密钥交换协议

继续执行 ./easyrsa gen-dh 会生成文件 C:\Program Files\OpenVPN\easy-rsa\pki\dh.pem

证书 key 文件

目录 C:\Program Files\OpenVPN\easy-rsa\pki\private 下3个文件是证书 key openvpn04.png

服务端配置文件

服务端配置文件模板文件是 C:\Program Files\OpenVPN\sample-config\server.ovpn 默认端口号 1194,最好修改掉 dh dh2048.pem 修改为 dh dh.pem duplicate-cn 开启的话表示一个证书可以在多个设备上使用,一般注释该项 搜索 tls-auth ta.key 0 在前面使用井号注释掉,该项为请求加密功能 拷贝下面文件到 C:\Program Files\OpenVPN\config 下 C:\Program Files\OpenVPN\easy-rsa\pki\ca.crt C:\Program Files\OpenVPN\easy-rsa\pki\dh.pem C:\Program Files\OpenVPN\easy-rsa\pki\private\server.key C:\Program Files\OpenVPN\easy-rsa\pki\issued\server.crt 还有 server.ovpn 就可以启动服务端了 - 系统托盘处链接 - 跟客户端的链接操作一样

新用户制作证书

  1. 管理员运行 C:\Program Files\OpenVPN\easy-rsa\EasyRSA-Start.bat

  2. 执行命令 ./easyrsa build-client-full chanchaw nopass 中间的 chanchaw 是证书文件的文件名,在乐达3的vpn中应该命名为 ld354 或者 ld358

  3. 然后到 C:\Program Files\OpenVPN\easy-rsa\pki\private 下找对应名称 key 文件 在 C:\Program Files\OpenVPN\easy-rsa\pki\issued 下找对应名称的 crt 文件 结合 ca.crt 证书给客户机使用即可链接上 vpn

    固定IP

    在服务端配置文件中使用配置项 client-config-dir ../ccd 表示在 openvpn/ccd 中的文件为客户端的配置文件,要求文件名和客户端证书名(key文件名)一致,类似 centos 中指定固定IP地址,创建文件 chanchaw 其中的内容 ifconfig-push 10.8.0.2 10.8.0.1 表示证书 chanchaw 所在的设备使用IP地址 10.8.0.2 openvpn05.png

    CentOS OpenVpn 服务端

    概述

    在织造云数据服务器上安装了该服务端

    安装 openvpn 软件

    yum -y install openvpn 
    

    创建配置服务端配置文件

    在目录 /etc/openvpn 下创建文件 server.conf,其内容如下

    port 1194 #端口
    proto udp #协议
    dev tun #采用路由隧道模式tun
    ca ca.crt #ca证书文件位置
    cert server.crt #服务端公钥名称
    key server.key #服务端私钥名称
    dh dh.pem #交换证书
    server 10.8.0.0 255.255.255.0 #给客户端分配地址池,注意:不能和VPN服务器内网网段有相同
    push "route 10.8.0.0 255.255.255.0" #允许客户端访问内网10.8.0.0网段
    ifconfig-pool-persist ipp.txt #地址池记录文件位置
    keepalive 10 120 #存活时间,10秒ping一次,120 如未收到响应则视为断线
    max-clients 100 #最多允许100个客户端连接
    status openvpn-status.log #日志记录位置
    verb 3 #openvpn版本
    client-to-client #客户端与客户端之间支持通信
    log /var/log/openvpn.log #openvpn日志记录位置
    persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys。
    persist-tun #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
    duplicate-cn
    

    拷贝证书私钥文件到软件目录下

    cp -a /opt/easy-rsa/pki/ca.crt /etc/openvpn/
    cp -a /opt/easy-rsa/pki/issued/server.crt /etc/openvpn/
    cp -a /opt/easy-rsa/pki/private/server.key /etc/openvpn/
    cp -a /opt/easy-rsa/pki/dh.pem /etc/openvpn/
    

    启动服务端

    # 设置开机启动
    systemctl -f enable openvpn@server.service
    # 启动服务端
    systemctl start openvpn@server.service
    # 重启服务端
    systemctl restart openvpn@server.service
    # 关闭服务
    systemctl stop openvpn@server.service
    

    Ubuntu安装OpenVpn客户端

    sudo apt-get install openvpn
    

    CentOS OpenVpn客户端

下载

180的阿里云盘路径:安装程序与软件 -> 开发与实施 -> OpenVpn客户端 官网地址:https://openvpn.net/community-downloads/open in new window

拷贝证书

将服务端的下面3个文件拷贝到客户端安装的软件目录下的 config 目录下

/opt/easy-rsa/pki/ca.crt 
/opt/easy-rsa/pki/issued/client.crt
/opt/easy-rsa/pki/private/client.key

如果用户名是 chanchaw 则拷贝的文件是

/opt/easy-rsa/pki/ca.crt 
/opt/easy-rsa/pki/issued/chanchaw.crt
/opt/easy-rsa/pki/private/chanchaw.key

编写客户端配置文件

在软件安装目录下的 config 下创建文件 client.ovpn,内容如下

client #指定当前VPN是客户端
dev tun #使用tun隧道传输协议
proto udp #使用udp协议传输数据
remote 101.xx.xx.88 1194 # 这里填写 openvpn 服务器的公网IP地址和端口号
resolv-retry infinite #断线自动重新连接,在网络不稳定的情况下非常有用
nobind #不绑定本地特定的端口号
ca ca.crt #指定CA证书的文件路径
cert client.crt #指定当前客户端的证书文件路径,如果用户名是chanchaw则文件是chanchaw.crt
key client.key #指定当前客户端的私钥文件路径,如果用户名是chanchaw则文件是chanchaw.key
verb 3 #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-tun #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup

启动

操作系统右下角托盘处启动停止软件

CentOS安装客户端

安装客户端

  1. 执行命令安装客户端

    # CentOS默认没有安装 openvpn 的配置,所以要使用 epel 源
    yum -y install epel-release
    yum install -y openvpn
    
  2. 默认安装在 /etc/openvpn ,将客户端证书文件、配置文件都拷贝到该目录下

  3. 客户端配置文件内容如下

    client #指定当前VPN是客户端
    dev tun #使用tun隧道传输协议
    proto udp #使用udp协议传输数据
    remote 121.224.72.159 14911 #openvpn服务器IP地址端口号
    resolv-retry infinite #断线自动重新连接,在网络不稳定的情况下非常有用
    nobind #不绑定本地特定的端口号
    ca ca.crt #指定CA证书的文件路径
    cert esxiCentOS7.crt #指定当前客户端的证书文件路径
    key esxiCentOS7.key #指定当前客户端的私钥文件路径
    verb 3 #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
    persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
    persist-tun #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
    
  4. 制作守护进程

  5. 后台运行 sh 文件

    #!/bin/bash
    openvpn --config /etc/openvpn/client.ovpn
    
    ./openvpnclient.sh &
    

    制作守护进程 - 未成功

    在 openvpn 安装目录 /etc/openvpn 下制作保存名称为 backservice.sh,内容如下

    #!/bin/sh
    # start stop restart
    OPER_TYPE=$1 #操作类型编号
    #项目操作键值对  "1":停止服务 "2":启动服务
    declare -A OPER_TYPE_MAP=(
    ["start"]=" 1 2 "
    ["stop"]=" 1 "
    ["restart"]=" 1 2 "
    )
    #发布逻辑开始
    if [[ ! -n ${OPER_TYPE_MAP[${OPER_TYPE}]} ]] ; then
     echo -e "${GREEN}[ $OPER_TYPE ] 操作类型不存在${NC}"
     exit $rc
    fi
    OPER_TYPE_VALUE=${OPER_TYPE_MAP[${OPER_TYPE}]}
    #步骤"1"检查新版本文件是否存在
    if [[ ${OPER_TYPE_VALUE} == *" 1 "* ]]; then
     echo -e "${GREEN} 停止服务 ${NC}"
     PROCESS=`ps -ef|grep /usr/sbin/openvpn|grep -v grep|grep -v PPID|awk '{ print $2}'`
     if [ -n "$PROCESS" ]; then 
         echo "kill PID=$PROCESS"
         for i in $PROCESS
         do
             echo "Kill /usr/sbin/openvpn process [ $i ]"
             kill -9 $i
         done
     fi
    fi
    #步骤"2"启动服务
    nohup /usr/sbin/openvpn --config /etc/openvpn/client.ovpn > nohup.out 2>&1 &
    
系统类型守护进程目录 /usr/lib/systemd/system 下创建名称为openvpn.service 的文件,内容如下:
```bash
[Unit]
Description=openvpn-client service
After=network.target

[Service]
Type=forking
ExecStart=/etc/openvpn/backservice.sh start
ExecReload=/etc/openvpn/backservice.sh stop
ExecStop=/etc/openvpn/backservice.sh restart
PrivateTmp=true

[Install]
WantedBy=multi-user.target

赋予可执行权限 chmod +x openvpn.service 刷新守护进程 systemctl daemon-reload 设置开机启动 systemctl enable openvpn.service

制作守护进程

在目录 /usr/lib/systemd/system 下创建名称为 openvpn.service 的文件,内容如下:

[Unit]
Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I
After=network.target

[Service]
Type=notify
PrivateTmp=true
ExecStart=/usr/sbin/openvpn --cd /etc/openvpn/ --config client.ovpn

[Install]
WantedBy=multi-user.target

刷新守护进程 systemctl daemon-reload 开机启动 systemctl enable openvpn.service

客户端使用静态IP

在服务端配置文件 /etc/openvpn/server.conf 中添加下面的配置

client-config-dir /etc/openvpn/ccd # 客户端名称配置文件所在的目录

在目录 /etc/openvpn/ccd 下创建文件 chanchaw (客户端用户的名称 ,没有后缀名)并填写内容

ifconfig-push 10.8.0.2 10.8.0.1

表示使用了名称 chanchaw 的证书的客户端拨号时使用静态IP 10.8.0.2,后面的10.8.0.1 是子网掩码 同理,如果使用 10.8.0.6 作为IP,则子网掩码是 10.8.0.5,即子网掩码比IP地址小1 配置该静态文件后不需要重启服务端

为新用户创建证书

创建证书

云服务器是织造云数据服务器

# 切换目录
cd /opt/easy-rsa

# 创建证书,执行过程中要求用户输入,直接回车即可
./easyrsa gen-req xintai nopass

# 执行下面命令证书签名,要经历两个步骤:
# 1. 输入 yes
# 2. 输入密码:7759chanchaw
./easyrsa sign client xintai

# 为用户设置静态IP,注意要修改用户名和IP地址
cd /etc/openvpn/ccd
vim xintai
ifconfig-push 10.8.0.2 10.8.0.1

证书签名

通过下面命令给指定名称的证书签名。执行过程中两次输入:

  1. 输入 yes

  2. 输入安装 服务端时设置的密码 : 7758chanchaw

    ./easyrsa sign client xintai
    

拷贝证书文件

/opt/easy-rsa/pki/issued/showa.crt
/opt/easy-rsa/pki/private/showa.key

net30模式IP地址不够用

上面的安装部署方式使用了默认的net30模式,尽量大的兼容不同设备与系统。导致一个网段只有64个IP地址可以使用,要突破这个限制使多个网段间的不同设备可以互相访问,需要修改之前的子网掩码。在网址 https://ipjisuanqi.com/open in new window 中通过设置掩码可以查询到能可用的IP地址的数量,如下图: openvpn06.png 本案例中就采用了 20 的掩码,可以看到网段从0 到 15 都可以使用并能互相访问通。要修改服务器端配置文件 /etc/openvpn/server.conf,修改后的完整配置如下,即将之前的 255.255.255.0 修改为 255.255.240.0 在行号 8 和 9 都要修改

port 1194 #端口
proto udp #协议
dev tun #采用路由隧道模式tun
ca ca.crt #ca证书文件位置
cert server.crt #服务端公钥名称
key server.key #服务端私钥名称
dh dh.pem #交换证书
server 10.8.0.0 255.255.240.0 #给客户端分配地址池,注意:不能和VPN服务器内网网段有相同
push "route 10.8.0.0 255.255.240.0" #允许客户端访问内网192.168.31.1网段
ifconfig-pool-persist ipp.txt #地址池记录文件位置
keepalive 10 120 #存活时间,10秒ping一次,120 如未收到响应则视为断线
max-clients 2000 #最多允许100个客户端连接
status openvpn-status.log #日志记录位置
verb 3 #openvpn版本
client-to-client #客户端与客户端之间支持通信
log /var/log/openvpn.log #openvpn日志记录位置
persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys。
persist-tun #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
duplicate-cn
client-config-dir /etc/openvpn/ccd

然后到静态地址配置目录 /etc/openvpn/ccd 下创建新用户的配置文件 yinhaiyinhua,并设置内容为

ifconfig-push 10.8.1.2 10.8.1.1

新的网段第一个可用IP为2,类似 10.8.0.2。本次在银海印花测试通过,从0网段可以远程桌面到1网段的电脑上

制作守护进程

CentOS7开始通过 systemd 管理服务的所有守护进程,该进程是系统启动后的第一个进程,其PID=1,其他所有进程都是其子进程。 系统守护进程分两种,系统级的进程 - 不需要用户登录就自启动的进程 - 放在目录 /usr/lib/systemd/system/ 下 用户级守护进程放在 /usr/lib/systemd/user/ 下 用户批处理文件一般方法用户 home 下,使用命令:cd ~ 切换到该目录下

  1. 在目录 /etc/openvpn 下创建文件 openvpnclient.sh,其内容如下

    #!/bin/bash
    openvpn --config /etc/openvpn/client.ovpn
    
  2. 通过命令 ./openvpnclient.sh 测试执行,通过其他客户端能PING同表示本地 openvpn 客户端启动成功 记得使用命令 chmod +x openvpnclient.sh 设置为可执行文件

  3. 制作软连接 切换目录 cd /usr/sbin 制作软连接 ln -sf /etc/openvpn/openvpnclient.sh sysd-openvpnclient

  4. 制作守护进程 切换到守护进程目录 - 系统 ,下:cd /usr/lib/systemd/system 创建文件 openvpnclient.service,其内容如下

    [Unit]
    Description=openvpn client daemon
    Documentation=no
    After=network.target
    Wants=no
    

[Service] EnvironmentFile=no ExecStart=/usr/sbin/sysd-openvpnclient ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartSec=3s

[Install] WantedBy=multi-user.target

使用命令 chmod +x openvpnclient.service 使文件可被执行,通过命令 systemctl start openvpnclient.service 启动程序,systemctl enable openvpnclient.service 设置自启动
启动后查看状态:systemctl status openvpnclient.service 会提示没有找到客户端密钥文件,此时要修改 /etc/openvpn/client.ovpn 中的3个证书文件的路径 - 使用绝对路径,不要用相对路径,修改后完整的配置如下:
```bash
client #指定当前VPN是客户端
dev tun #使用tun隧道传输协议
proto udp #使用udp协议传输数据
remote 101.34.89.88 1194 #openvpn服务器IP地址端口号
resolv-retry infinite #断线自动重新连接,在网络不稳定的情况下非常有用
nobind #不绑定本地特定的端口号
ca ./etc/openvpn/ca.crt #指定CA证书的文件路径
cert ./etc/openvpn/centos182.crt #指定当前客户端的证书文件路径
key ./etc/openvpn/centos182.key #指定当前客户端的私钥文件路径
verb 3 #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-tun #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup

获取制作软连接时使用下面方法,则上面配置文件可以使用相对路径:- 本方法没有测试 ca ca.crt cert centos182.crt key centos182.key

/usr/sbin/openvpn --cd /etc/openvpn --config client.ovpn --log-append /etc/openvpn/openvpn.log

CentOS7又一种制作守护进程

通过源安装的 openvpn 会被安装在目录 /etc/openvpn 下,可执行文件在 /usr/sbin/openvpn下 记得将 openvpn 客户的3个文件 ca.crt、gangrong.crt、gangrong.key 拷贝到 /etc/openvpn 下,同时将下面代码形成的文件也放在目录 /etc/openvpn 下 并通过 chmod +x openvpn-client.sh 设置为可执行文件

#!/bin/sh
# start stop restart
OPER_TYPE=$1 #操作类型编号
#项目操作键值对  "1":停止服务 "2":启动服务
declare -A OPER_TYPE_MAP=(
["start"]=" 1 2 "
["stop"]=" 1 "
["restart"]=" 1 2 "
)
#发布逻辑开始
if [[ ! -n ${OPER_TYPE_MAP[${OPER_TYPE}]} ]] ; then
    echo -e "${GREEN}[ $OPER_TYPE ] 操作类型不存在${NC}"
    exit $rc
fi
OPER_TYPE_VALUE=${OPER_TYPE_MAP[${OPER_TYPE}]}
#步骤"1"检查新版本文件是否存在
if [[ ${OPER_TYPE_VALUE} == *" 1 "* ]]; then
    echo -e "${GREEN} 停止服务 ${NC}"
    PROCESS=`ps -ef|grep /usr/sbin/openvpn|grep -v grep|grep -v PPID|awk '{ print $2}'`
    if [ -n "$PROCESS" ]; then 
        echo "kill PID=$PROCESS"
        for i in $PROCESS
        do
            echo "Kill /usr/sbin/openvpn process [ $i ]"
            kill -9 $i
        done
    fi
fi
#步骤"2"启动服务
nohup /usr/sbin/openvpn --config /etc/openvpn/client.ovpn > nohup.out 2>&1 &

然后到目录 /usr/lib/systemd/system 中制作文件 openvpn.service

[Unit]
Description=openvpn-client service
After=network.target

[Service]
Type=forking
ExecStart=/etc/openvpn/openvpn-client.sh start
ExecReload=/etc/openvpn/openvpn-client.sh stop
ExecStop=/etc/openvpn/openvpn-client.sh restart
PrivateTmp=true

[Install]
WantedBy=multi-user.target

保存后要:

  1. chmod +x openvpn.service 设置为可执行文件
  2. systemctl daemon-reload - 刷新守护进程
  3. systemctl enable openvpn.service - 开机启动

windows系统开机自动连接

下面配置中倒数第二行被注释掉是为了避免拨号时候报错:netsh command failed: returned error code 1

20250707


  1. 创建 openvpn 服务(已经以 openvpn gui 方式安装过)
sc create OpenVPNService binPath= "\"C:\Program Files\OpenVPN\bin\openvpn.exe\" --service --config \"C:\Program Files\OpenVPN\config\client.ovpn\" --log \"C:\Program Files\OpenVPN\log\openvpn.log\"" DisplayName= "OpenVPN Client Service" start= auto
  1. 设置服务权限和自动启动
# 设置服务为自动启动
sc config OpenVPNService start= auto
# 允许服务在未登录时运行(关键)
sc config OpenVPNService obj= "LocalSystem"
# 设置服务崩溃后自动重启
sc failure OpenVPNService reset= 60 actions= restart/5000
  1. 确保服务账号 system 对于多个配置文件都有访问权限
# 设置证书文件权限(对config目录下的.key/.crt文件)
icacls "C:\Program Files\OpenVPN\config\client.key" /grant "SYSTEM:(R)"
icacls "C:\Program Files\OpenVPN\config\client.crt" /grant "SYSTEM:(R)"
icacls "C:\Program Files\OpenVPN\config\ca.crt" /grant "SYSTEM:(R)"
icacls "C:\Program Files\OpenVPN\config\client.ovpn" /grant "SYSTEM:(R)"

# 也可以通过下面命令递归设置目录 config 下的所有子目录和文件的权限
icacls "C:\Program Files\OpenVPN\config" /grant "SYSTEM:(R)" /T
  1. 测试服务
# 执行下面命令启动服务,也可以到windows服务中手动开启
net start OpenVPNService

# 检查日志(确认无错误)。保证有这个日志文件
type "C:\Program Files\OpenVPN\log\openvpn.log"
  1. 允许访问网络共享资源
sc config OpenVPNService type= interact type= own
  1. 禁用 OpenVPN GUI 自动启用。禁用 GUI 自动启动,避免冲突
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v "OpenVPN-GUI" /f
  1. 设置更长的初始化时间 - 在性能较低的服务器上允许使用更长时间自动连接
sc config OpenVPNService start= delayed-auto
sc failure OpenVPNService reset= 0 actions= restart/5000/restart/5000
  1. windows 系统兼容性,在 windows 服务器操作系统中可能出现兼容性问题,执行下面命令解决 - 意思是将其设置服务为 Win32 共享进程 类型
reg add "HKLM\SYSTEM\CurrentControlSet\Services\OpenVPNService" /v "Type" /t REG_DWORD /d 0x10 /f
  1. 手动测试启动服务并连接。如果重启服务器后没有正常启动服务 OpenVPNService ,也没有自动连接上,可通过上面的命令手动测试服务是否能正常连接,如果连接成功可通过 ctrl+c 终止连接并退出。
"C:\Program Files\OpenVPN\bin\openvpn.exe" --config "C:\Program Files\OpenVPN\config\client.ovpn" --verb 4
  1. 最后重启服务器测试

经过上面一系列努力后,终于测试失败。2025年9月2日 在公司 win7 电脑上尝试开机自动连接成功,步骤如下:

  1. 在目录 C:\Users\Administrator\OpenVPN\config\client 下设置配置文件 client.ovpn,注意配置文件名称必须是 client.ovpn,尝试过使用 xdf.ovpn 开机后不会自动连接(保证配置文件名称和其所在的目录名称一致?)
  2. 将几个证书文件放在目录 C:\Program Files\OpenVPN\config 下,并修改步骤1配置文件中证书文件的路径如下(下面是 ovpn 完整配置)
client #指定当前VPN是客户端
dev tun
proto udp #使用udp协议传输数据
remote 101.34.89.88 1194 #openvpn服务器IP地址端口号
resolv-retry infinite #断线自动重新连接,在网络不稳定的情况下非常有用
nobind #不绑定本地特定的端口号
ca "C:\\Program Files\\OpenVPN\\config\\ca.crt" #指定CA证书的文件路径
cert "C:\\Program Files\\OpenVPN\\config\\xindongfangwlz.crt" #指定当前客户端的证书文件路径
key "C:\\Program Files\\OpenVPN\\config\\xindongfangwlz.key" #指定当前客户端的私钥文件路径
verb 3 #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-tun #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
  1. 在此之前保证安装 openvpn 安装了后台服务 OpenVPN Interactive Service

  2. 由于 win7 系统没有设置密码,开机后自动登录到桌面,此时查看 openvpn 会自动连接

  3. 新增目录 C:\Users\Administrator\OpenVPN\config\xzy 并新增文件 xzy.ovpn 用于连接另外一个 openvpn 服务端,测试失败,开机后只有前面一个 openvpn 自动连接了,系统托盘中查看会多出来一个 xzy 的连接,但是没有连接成功

  4. 再次测试,删除目录 C:\Users\Administrator\OpenVPN\config\xzy ,并将文件 xzy.ovpn 迁移到 C:\Users\Administrator\OpenVPN\config\client 下后重启电脑,还是只有配置文件 client.ovpn 会自动连接,xzy.ovpn 不会自动连接。至此貌似只能保证一个服务端自动连接。

  5. 证书文件和 ovpn 的连接配置文件在同一个目录下,即: C:\Program Files\OpenVPN\config

  6. ovpn 连接配置文件中声明的证书路径采用绝对路径,注意 windows 系统中 Program Files 存在空格,这个绝对路径要使用引号包裹

  7. 如果出现异常到目录 C:\Users\Administrator\OpenVPN\log 下查看日志

  8. 注意在目录 C:\Users\Administrator\OpenVPN 下可能也存在文件夹 config,要检查其是否是自己设置的,是否还有效

autoWPM

自己使用 springboot 制作的定时检测并自动连接的后台服务中要求 openvpn 的配置文件如下

client #指定当前VPN是客户端
dev tun #使用tun隧道传输协议
proto udp #使用udp协议传输数据
remote 云服务器IP地址 #openvpn服务器IP地址端口号
resolv-retry infinite #断线自动重新连接,在网络不稳定的情况下非常有用
nobind #不绑定本地特定的端口号
ca "C:/Program Files/OpenVPN/config/ca.crt" #指定CA证书的文件路径
cert "C:/Program Files/OpenVPN/config/gangrong.crt" #指定当前客户端的证书文件路径
key "C:/Program Files/OpenVPN/config/gangrong.key" #指定当前客户端的私钥文件路径
verb 3 #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-tun #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup

route-delay 5
route-method exe
#ip-win32 netsh
remote-cert-tls server

同时后台服务的配置文件如下,注意使用反斜线:

server:
  port: 7001
  servlet:
    context-path: /autowpm
globalv:
  wpmname: leda3cloud
  account: gangrong
  password: "账号登录密码"
  testip: "17.71.0.1"
  fixedDelay: 10000
openwpm:
  exe: "C:/Program Files/OpenVPN/bin/openvpn.exe"
  servers: "C:/Program Files/OpenVPN/config/client.ovpn#10.8.0.1"

方法一

系统启动目录 :C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 创建快捷方式,其中黏贴字符串:"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --connect client.ovpn windows10系统中测试通过

方法二

创建用于自动链接的批处理文件,使用 cd 切换到可执行文件 openvpn.exe 所在目录,后面参数指向链接用的配置文件,源码如下:

@echo off
cd "C:\\Program Files\\OpenVPN\\bin"
start openvpn.exe --config "C:\\Program Files\\OpenVPN\\config\\client.ovpn"

然后创建 任务计划程序,在 开始 > 运行 中输入 taskschd.msc 打开 任务计划程序,创建后的配置如下
创建任务计划程序 服务器开机后不需要登录就会自动链接 openvpn

windows客户端配置文件

证书路径有空格则必须使用双引号括起来,路径字符不可使用 windows 格式的,即使双符号表示转义也不行,要使用 linux 路径间隔符号

ca "C:/Program Files/OpenVPN/config/xdf/ca.crt" #指定CA证书的文件路径
cert "C:/Program Files/OpenVPN/config/xdf/chanchaw.crt" #指定当前客户端的证书文件路径
key "C:/Program Files/OpenVPN/config/xdf/chanchaw.key" #指定当前客户端的私钥文件路径

windows连接多个openvpn

  1. cmd中切换路径到 C:\Program Files\OpenVPN\bin

  2. 执行下面命令进入 openvpn 控制台

    openvpn --show-adapters
    
  3. 执行命令 tapctl list 查看现有网卡

  4. 执行下面命令创建新网卡,新网卡的名称是 OpenVPN TAP-Windows6 xdf,不可使用中文

    tapctl.exe create --name "OpenVPN TAP-Windows6 xdf" --hwid root\tap0901
    
  5. 在配置文件 xdf.conf 中使用 dev tun 或者 dev tap 要根据服务端的设置,保证和服务端一致,否则拨号失败,下面的 dev-node 表示本配置文件使用的网卡

    dev tap
    dev-node "OpenVPN TAP-Windows6"
    
  6. 注意同时连接多个 openvpn 要保证使用不同的网段,例如 10.8.0.2,10.9.0.2

    错误与提示

    CreateFile failed on tap-windows6

完整的错误提示:CreateFile failed on tap-windows6 device: \.\Global{C9BF14CD-4146-472D-82B0-FC002E00196A}.tap 表示 openvpn 的网卡不可用,此时重启 openvpn 的后台服务以及在任务管理器关闭进程都没有效果,服务器重启也无法解决问题,要在开始菜单的 openvpn 中新建一个虚拟网卡才可以解决

安装新虚拟网卡后重新拨号即可。也可以检查之前的网卡中是否设置了静态IP地址,实际应该是通过 openvpn 服务器分配IP地址,而不是在客户端虚拟网卡中设置静态IP

可用IP问题

上面方法使用的是 net30 模式,分配给客户端的是4个一组,服务端占用 10.8.0.1,第一组从10.8.0.2开始,之后3个IP不可用,10.8.0.6 可用,之后3个又不可用,10.8.0.10可以用。

报 client 错误

连接时弹出 msg 显示 client 错误,是网卡驱动没有正确安装导致,在 windows server 2008R2 上直接安装 openvpn 客户端时没有正确安装驱动,找了一个单独的网卡驱动安装后正常。文件在 180 阿里网盘的 “安装程序与软件” -> “开发与实施” -> “OpenVpn客户端”-> “tap-windows-9.21.2 - 网卡驱动.exe”

客户端连接不上

默认日志文件在 C:\Users\Administrator\OpenVPN\log 连接不上时候查看,是如下内容

保存回修单时自动完工原始缸单
--- 下面是程序更新点:
1. 配置表新增数据
    INSERT INTO pademisaccount.g_config_oneint (B_GroupName, B_Value, B_Des) VALUES ('WEB应用_保存回修单自动完工原缸单', 1, '1表示保存回修缸单时自动完工其所属的原始缸单');

2. jar
3. 存储过程:
    新建 usp_getUnFinishedProcesses


车间生产完工表中的 “全部完工”的请求是:cjflowbill/saveAutoComplete
传入参数是缸号

GCjflowbilldetailprocessService = service


回修单新增保存的请求:planBill/repaired/save.do

List<CraftdetailPlan> getUnFinishedProcesses(String vatNo);



822050

华裔凯

13506238451
18862683988  - 港荣厂长 上柔脱水触摸屏  产量10倍

ClientHandler.java
ClientInitializer.java
HeartbeatClient.java



2022-07-23 15:02:59 --cipher is not set. Previous OpenVPN version defaulted to BF-CBC as fallback when cipher negotiation failed in this case. If you need this fallback please add '--data-ciphers-fallback BF-CBC' to your configuration and/or add BF-CBC to --data-ciphers.
2022-07-23 15:02:59 OpenVPN 2.5.7 Windows-MSVC [SSL (OpenSSL)] [LZO] [LZ4] [PKCS11] [AEAD] built on May 27 2022
2022-07-23 15:02:59 Windows version 10.0 (Windows 10 or greater) 64bit
2022-07-23 15:02:59 library versions: OpenSSL 1.1.1o  3 May 2022, LZO 2.10
2022-07-23 15:02:59 MANAGEMENT: TCP Socket listening on [AF_INET]127.0.0.1:25340
2022-07-23 15:02:59 Need hold release from management interface, waiting...
2022-07-23 15:02:59 MANAGEMENT: Client connected from [AF_INET]127.0.0.1:25340
2022-07-23 15:02:59 MANAGEMENT: CMD 'state on'
2022-07-23 15:02:59 MANAGEMENT: CMD 'log all on'
2022-07-23 15:02:59 MANAGEMENT: CMD 'echo all on'
2022-07-23 15:02:59 MANAGEMENT: CMD 'bytecount 5'
2022-07-23 15:02:59 MANAGEMENT: CMD 'hold off'
2022-07-23 15:02:59 MANAGEMENT: CMD 'hold release'
2022-07-23 15:02:59 WARNING: No server certificate verification method has been enabled.  See http://openvpn.net/howto.html#mitm for more info.
2022-07-23 15:02:59 TCP/UDP: Preserving recently used remote address: [AF_INET]101.34.89.88:1194
2022-07-23 15:02:59 Socket Buffers: R=[65536->65536] S=[65536->65536]
2022-07-23 15:02:59 UDP link local: (not bound)
2022-07-23 15:02:59 UDP link remote: [AF_INET]101.34.89.88:1194
2022-07-23 15:02:59 MANAGEMENT: >STATE:1658559779,WAIT,,,,,,
2022-07-23 15:02:59 MANAGEMENT: >STATE:1658559779,AUTH,,,,,,
2022-07-23 15:02:59 TLS: Initial packet from [AF_INET]101.34.89.88:1194, sid=14a5adc4 56c196ff
2022-07-23 15:02:59 VERIFY OK: depth=1, CN=Easy-RSA CA
2022-07-23 15:02:59 VERIFY OK: depth=0, CN=server
2022-07-23 15:02:59 Control Channel: TLSv1.2, cipher TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384, peer certificate: 2048 bit RSA, signature: RSA-SHA256
2022-07-23 15:02:59 [server] Peer Connection Initiated with [AF_INET]101.34.89.88:1194
2022-07-23 15:03:01 MANAGEMENT: >STATE:1658559781,GET_CONFIG,,,,,,
2022-07-23 15:03:01 SENT CONTROL [server]: 'PUSH_REQUEST' (status=1)
2022-07-23 15:03:01 PUSH: Received control message: 'PUSH_REPLY,route 10.8.0.0 255.255.240.0,route 10.8.0.0 255.255.240.0,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.34 10.8.0.33,peer-id 9,cipher AES-256-GCM'
2022-07-23 15:03:01 OPTIONS IMPORT: timers and/or timeouts modified
2022-07-23 15:03:01 OPTIONS IMPORT: --ifconfig/up options modified
2022-07-23 15:03:01 OPTIONS IMPORT: route options modified
2022-07-23 15:03:01 OPTIONS IMPORT: peer-id set
2022-07-23 15:03:01 OPTIONS IMPORT: adjusting link_mtu to 1624
2022-07-23 15:03:01 OPTIONS IMPORT: data channel crypto options modified
2022-07-23 15:03:01 Data Channel: using negotiated cipher 'AES-256-GCM'
2022-07-23 15:03:01 Outgoing Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
2022-07-23 15:03:01 Incoming Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
2022-07-23 15:03:01 interactive service msg_channel=572
2022-07-23 15:03:01 open_tun
2022-07-23 15:03:01 tap-windows6 device [以太网 2] opened
2022-07-23 15:03:01 TAP-Windows Driver Version 9.24 
2022-07-23 15:03:01 Notified TAP-Windows driver to set a DHCP IP/netmask of 10.8.0.34/255.255.255.252 on interface {DDE66CC1-EDDA-440A-BF9E-A7ABAA6FF184} [DHCP-serv: 10.8.0.33, lease-time: 31536000]
2022-07-23 15:03:01 Successful ARP Flush on interface [32] {DDE66CC1-EDDA-440A-BF9E-A7ABAA6FF184}
2022-07-23 15:03:01 MANAGEMENT: >STATE:1658559781,ASSIGN_IP,,10.8.0.34,,,,
2022-07-23 15:03:01 IPv4 MTU set to 1500 on interface 32 using service
2022-07-23 15:03:06 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:06 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:11 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:11 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:12 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:12 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:13 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:13 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:14 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:14 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:15 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:15 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:16 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:16 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:17 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:17 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:18 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:18 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:19 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:19 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:21 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:21 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:22 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:22 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:23 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:23 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:24 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:24 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:25 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:25 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:26 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:26 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:27 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:27 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:28 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:28 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:29 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:29 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:30 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:30 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:31 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:31 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:32 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:32 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:33 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:33 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:34 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:34 Route: Waiting for TUN/TAP interface to come up...
2022-07-23 15:03:36 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
2022-07-23 15:03:36 MANAGEMENT: >STATE:1658559816,ADD_ROUTES,,,,,,
2022-07-23 15:03:36 C:\Windows\system32\route.exe ADD 10.8.0.0 MASK 255.255.240.0 10.8.0.33
2022-07-23 15:03:36 Warning: route gateway is not reachable on any active network adapters: 10.8.0.33
2022-07-23 15:03:36 Route addition via service failed
2022-07-23 15:03:36 C:\Windows\system32\route.exe ADD 10.8.0.0 MASK 255.255.240.0 10.8.0.33
2022-07-23 15:03:36 Warning: route gateway is not reachable on any active network adapters: 10.8.0.33
2022-07-23 15:03:36 Route addition via service failed
2022-07-23 15:03:36 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
SYSTEM ROUTING TABLE
0.0.0.0 0.0.0.0 192.168.1.1 p=0 i=8 t=4 pr=3 a=4672670 h=0 m=291/0/0/0/0
127.0.0.0 255.0.0.0 127.0.0.1 p=0 i=1 t=3 pr=2 a=4672675 h=0 m=331/0/0/0/0
127.0.0.1 255.255.255.255 127.0.0.1 p=0 i=1 t=3 pr=2 a=4672675 h=0 m=331/0/0/0/0
127.255.255.255 255.255.255.255 127.0.0.1 p=0 i=1 t=3 pr=2 a=4672675 h=0 m=331/0/0/0/0
169.254.0.0 255.255.0.0 169.254.150.40 p=0 i=32 t=3 pr=2 a=110 h=0 m=281/0/0/0/0
169.254.95.0 255.255.255.0 169.254.95.120 p=0 i=15 t=3 pr=2 a=4672647 h=0 m=281/0/0/0/0
169.254.95.120 255.255.255.255 169.254.95.120 p=0 i=15 t=3 pr=2 a=4672647 h=0 m=281/0/0/0/0
169.254.95.255 255.255.255.255 169.254.95.120 p=0 i=15 t=3 pr=2 a=4672647 h=0 m=281/0/0/0/0
169.254.150.40 255.255.255.255 169.254.150.40 p=0 i=32 t=3 pr=2 a=110 h=0 m=281/0/0/0/0
169.254.255.255 255.255.255.255 169.254.150.40 p=0 i=32 t=3 pr=2 a=110 h=0 m=281/0/0/0/0
192.168.1.0 255.255.255.0 192.168.1.254 p=0 i=8 t=3 pr=2 a=4672665 h=0 m=291/0/0/0/0
192.168.1.254 255.255.255.255 192.168.1.254 p=0 i=8 t=3 pr=2 a=4672665 h=0 m=291/0/0/0/0
192.168.1.255 255.255.255.255 192.168.1.254 p=0 i=8 t=3 pr=2 a=4672665 h=0 m=291/0/0/0/0
224.0.0.0 240.0.0.0 127.0.0.1 p=0 i=1 t=3 pr=2 a=4672675 h=0 m=331/0/0/0/0
224.0.0.0 240.0.0.0 192.168.1.254 p=0 i=8 t=3 pr=2 a=4672670 h=0 m=291/0/0/0/0
224.0.0.0 240.0.0.0 169.254.95.120 p=0 i=15 t=3 pr=2 a=4672663 h=0 m=281/0/0/0/0
224.0.0.0 240.0.0.0 169.254.150.40 p=0 i=32 t=3 pr=2 a=124 h=0 m=281/0/0/0/0
255.255.255.255 255.255.255.255 127.0.0.1 p=0 i=1 t=3 pr=2 a=4672675 h=0 m=331/0/0/0/0
255.255.255.255 255.255.255.255 192.168.1.254 p=0 i=8 t=3 pr=2 a=4672670 h=0 m=291/0/0/0/0
255.255.255.255 255.255.255.255 169.254.95.120 p=0 i=15 t=3 pr=2 a=4672663 h=0 m=281/0/0/0/0
255.255.255.255 255.255.255.255 169.254.150.40 p=0 i=32 t=3 pr=2 a=124 h=0 m=281/0/0/0/0
SYSTEM ADAPTER LIST
IBM USB Remote NDIS Network Device
  Index = 15
  GUID = {DA746AD4-6C1D-4C03-B5BD-E55297CADFF9}
  IP = 169.254.95.120/255.255.255.0 
  MAC = 7e:8a:e1:c5:1b:63
  GATEWAY = 0.0.0.0/255.255.255.255 
  DHCP SERV = 169.254.95.118/255.255.255.255 
  DHCP LEASE OBTAINED = 2022-07-23 15:02:16
  DHCP LEASE EXPIRES  = 2022-07-23 15:12:16
  DNS SERV =  
Broadcom NetXtreme Gigabit Ethernet
  Index = 8
  GUID = {6532FF1D-8EA7-481A-B7EB-9951992EE99D}
  IP = 192.168.1.254/255.255.255.0 
  MAC = 7c:8a:e1:c5:1b:5e
  GATEWAY = 192.168.1.1/255.255.255.255 
  DNS SERV = 192.168.1.1/255.255.255.255 114.114.114.114/255.255.255.255 
Broadcom NetXtreme Gigabit Ethernet #2
  Index = 16
  GUID = {E0A51012-1E06-45C9-829B-D117AADBCC7A}
  IP = 0.0.0.0/0.0.0.0 
  MAC = 7c:8a:e1:c5:1b:5f
  GATEWAY = 192.168.0.1/255.255.255.255 
  DNS SERV =  
TAP-Windows Adapter V9
  Index = 32
  GUID = {DDE66CC1-EDDA-440A-BF9E-A7ABAA6FF184}
  IP = 169.254.150.40/255.255.0.0 
  MAC = 00:ff:dd:e6:6c:c1
  GATEWAY = 0.0.0.0/255.255.255.255 
  DHCP SERV =  
  DHCP LEASE OBTAINED = 2022-07-23 15:03:36
  DHCP LEASE EXPIRES  = 2022-07-23 15:03:36
  DNS SERV =  
Wintun Userspace Tunnel
  Index = 33
  GUID = {A9526F71-73E0-4A97-AFED-23F0577764A8}
  IP = 0.0.0.0/0.0.0.0 
  MAC = 
  GATEWAY = 0.0.0.0/255.255.255.255 
  DNS SERV =  
2022-07-23 15:03:36 Initialization Sequence Completed With Errors ( see http://openvpn.net/faq.html#dhcpclientserv )
2022-07-23 15:03:36 MANAGEMENT: >STATE:1658559816,CONNECTED,ERROR,10.8.0.34,101.34.89.88,1194,,
2022-07-23 15:03:49 Closing TUN/TAP interface
2022-07-23 15:03:49 NOTE: Release of DHCP-assigned IP address lease on TAP-Windows adapter failed: ϵͳÕÒ²»µ½Ö¸¶¨µÄÎļþ¡£   (code=2)
2022-07-23 15:03:49 SIGTERM[hard,] received, process exiting
2022-07-23 15:03:49 MANAGEMENT: >STATE:1658559829,EXITING,SIGTERM,,,,,

在客户端配置文件中最后添加下面代码

route-delay 5
route-method exe
ip-win32 netsh

然后重新连接即可。服务端给客户端指定静态IP也测试通过