运行 vpn 服务器时出现 tun0 错误?

运行 vpn 服务器时出现 tun0 错误?

我正在使用以下软件运行一个简单的 vpn 服务器:

  • OpenVPN
  • 影子袜子
  • MTProto 代理

我的服务器配置是:

  • Ubuntu 18.04 x64
  • 512Ram,1vCPU
  • UFW 防火墙
  • Netdata监控
  • Nginx

我开始运行服务器才几天。问题是 Netdata 每隔几个小时就会向我发送这 3 种类型的错误。

  • “服务器需要注意,ipv4.udperrors (udp),1m ipv4 udp 接收缓冲区错误 = 12 个错误”
  • “服务器需要注意,net_drops.tun0(tun0),丢弃的出站数据包 = 34 个数据包”
  • “服务器需要注意,net_packets.tun0 (tun0),出站数据包丢失率 = 0.33%”

我认为这没什么大不了的所以我就忽略了他们。

我不确定这是防火墙问题、系统瓶颈,还是提到的 3 个 vpn 软件之一性能不佳。

我查看了几乎每个日志文件,/var/log但在服务器无法访问之前,我找不到任何错误或问题。我不确定服务器是否冻结或崩溃。因为在某个时间点之后没有日志。直到我们强制重启。

答案1

我找到了问题所在。它与 openvpn 有关。我查看了一下,/var/log/syslog发现 openvpn 在与客户端进行 TLS 握手时出现了问题。它一直记录这些错误:

TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
TLS handshake failed

原因在于该reneg-sec参数的默认值为 3600。以下是来自 openvpn 官方文档的一段引文:

–reneg-sec n

n 秒后重新协商数据通道密钥(默认值 = 3600)。使用双因素身份验证时,请注意此默认值可能会导致最终用户每小时需要重新授权一次。

另外,请记住,此选项可在客户端和服务器上使用,使用较低值的一方将触发重新协商。一个常见的错误是在客户端或服务器上将 –reneg-sec 设置为较高的值,而连接的另一端仍使用默认值 3600 秒,这意味着重新协商仍将每 3600 秒发生一次。解决方案是在客户端和服务器上增加 –reneg-sec,或在连接的一侧将其设置为 0(以禁用),在另一侧将其设置为您选择的值。

此参数确保客户端每小时必须重新协商其密钥。

因此,如果您长时间保持 openvpn 处于(客户端)状态,并且由于某种原因,其中一次握手失败,则会导致无数次失败的协商。我猜这导致了丢包等问题。

更不用说“tun0”接口首先是由openvpn制作的,我对此并不知情。

无论如何解决方案是将 更改reneg-sec为更高的值,或者只是将其设置为零并禁用它。我决定使用禁用选项并输入reneg-sec 0客户server.conf.opvn配置文件。

另外,如果您碰巧使用 UFW,您必须编辑/etc/default/ufw并更改 DEFAULT_FORWARD_POLICY才能接受。

如果您仍然不断收到 udp 错误,您可能还需要调整网络设置。

相关内容