OpenVPN TLS 失败并不断断开我的连接

OpenVPN TLS 失败并不断断开我的连接

昨天我在家里的服务器上安装了 Debian 9 和 OpenVPN,一切都运行正常(我遵循了本指南)。然而,今天早上,OpenVPN 正在运行(客户端),突然什么都加载不了了。我尝试重新连接到 VPN,它工作了 5 到 10 分钟,然后就什么都没有了。

我做了一些研究,并使用命令检查了 OpenVPN 服务器的状态systemctl status openvpn@server,看到了以下消息:

TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
TLS Error: TLS handshake failed
SIGUSR1[soft,tls-error] received, client-instance restarting

我再次在互联网上查找此错误,但问题并未得到解决。同时,还出现了另外 2 个错误:

TLS Error: local/remote TLS keys are out of sync

Authenticate/Decrypt packet error: cipher final failed

显然,这与 TLS 有关,对吧?我在服务器上和客户端 (windows) 上的配置文件夹中都ta.key生成了文件。openvpn --genkey --secret ta.key/etc/openvpn/


我尝试禁用 ufw,但问题没有解决,所以我怀疑是防火墙的问题。以下是ufw status无论如何的结果:

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
1194/udp                   ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
1194/udp (v6)              ALLOW       Anywhere (v6)

以下是我添加的内容/etc/ufw/before.rules

*nat
:POSTROUTING ACCEPT [0.0]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
COMMIT

(server.conf无评论):

port 1194
proto udp4
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 82.196.9.45"
push "dhcp-option DNS 89.46.223.237"

keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
max-clients 10
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
explicit-exit-notify 1

最后client.ovpn(没有评论和证书):

client
dev tun
proto udp4
remote [server-ip] 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
verb 3

<ca>
-----BEGIN CERTIFICATE-----
(...)
-----END CERTIFICATE-----
</ca>

<cert>
Certificate:
    (...)
-----BEGIN CERTIFICATE-----
(...)
-----END CERTIFICATE-----
</cert>

<key>
-----BEGIN PRIVATE KEY-----
(...)
-----END PRIVATE KEY-----
</key>

欢迎任何建议,谢谢!

答案1

TLS 授权密钥在 OpenVPN 中预共享密钥

必须产生密钥并将该密钥复制到服务器和客户端。
除非我理解正确,否则您已经在服务器和客户端上生成了该密钥(这意味着它们是两个不同的密钥)。因此,生成一个密钥并将其复制到两个系统,然后就不会出现本地/远程密钥不同步的错误。

继续,这似乎是不是就您而言,问题是我误解了您以错误的方式使用了它。

OpenVPN 邮件列表存档(重点是我的):

在运行 OpenVPN 时会出现此消息UDP模式,因为 UDP 不是面向连接的,因此连接的一端无法轻易知道另一端已关闭或重新启动。此错误将在 TCP 模式下运行时几乎不会发生,因为 TCP 强制执行固定的客户端/服务器语义,并且在连接的任一侧断开时重置连接。

注:以下是没有具体参考/数据支持的声明:

考虑到那句引言,以及你已经配置的事实UDP4作为 OpenVPN 所运行的协议,我认为它是一个坏的使用的想法TLS随着UDP。TLS 是一种安全协议,因此它需要可靠的连接,而 UDP 无法保证。

RFC 5246 - TLS

在最低层,位于某些可靠传输协议(例如 TCP [TCP])之上的是 TLS 记录协议。

因此 TLS需要可靠的连接,因此不应使用 UDP。
您还可以在安全 SE 中的这个答案

只需切换:

proto udp4

到:

proto tcp

在您的 OpenVPN 配置中。

参考文献(详细阅读):
OpenVPN - 使用 tls-auth
OpenVPN 邮件列表
OpenVPN 操作指南 - 配置
安全 SE - 为什么 TLS 需要 TCP?
RFC 5246 - TLS 协议
维基百科-UDP

答案2

我重新安装了服务器现在一切都运行正常

我猜是因为我没有添加key-direction配置文件(0在服务器和1客户端上),因为这几乎是配置中唯一改变的东西

相关内容