![OpenVPN TLS 失败并不断断开我的连接](https://linux22.com/image/1570491/OpenVPN%20TLS%20%E5%A4%B1%E8%B4%A5%E5%B9%B6%E4%B8%8D%E6%96%AD%E6%96%AD%E5%BC%80%E6%88%91%E7%9A%84%E8%BF%9E%E6%8E%A5.png)
昨天我在家里的服务器上安装了 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 无法保证。
在最低层,位于某些可靠传输协议(例如 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
客户端上),因为这几乎是配置中唯一改变的东西