Mikrotik 与 OpenVPN。仅在隧道中出现数据包丢失和延迟峰值

Mikrotik 与 OpenVPN。仅在隧道中出现数据包丢失和延迟峰值

如果这个问题已经被问过并得到回答,我很抱歉,但是我找了一段时间却没有任何答案。

背景:我们拥有多台 Mikrotik 路由器,这些路由器均安装了 RouterOS v6.39.2,分布在城市各处;这些路由器位于 NAT 后面,并连接到我们用于管理和监控的 OpenVPN 服务器。我们用于 OpenVPN 的协议是 TCP,因为 Mikrotik 不支持 OpenVPN 的 UDP。

问题:我们时不时会观察到随机发生的响应延迟。问题发生时没有特定的路由器或时间;我们不断监控 CPU 负载和流量,发生这种情况时图表上没有异常,但当我们使用 Mikrotik ping 实用程序通过公共和私有 IP 地址从 Mikrotik 同时 ping OpenVPN 服务器时,我们发现数据包仅在隧道内丢失。

这是 /etc/openvpn/server.conf

dev tun
port 1194
proto tcp
dh .key/dh1024.pem
keepalive 10 120
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log-append  openvpn.log
verb 3
username-as-common-name
client-config-dir /etc/openvpn/ccd
ifconfig-pool-persist ipp.txt
ca .key/ca.crt
cert .key/server.crt
key .key/server.key
server 10.48.0.0 255.255.128.0
plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so "login login USERNAME password PASSWORD"
client-cert-not-required
client-to-client
push "route 10.48.0.0 255.255.128.0"
push "route-gateway 10.48.0.1"

以下是 ping 结果:

Ping 到 OpenVPN 服务器的公共 IP

隧道通畅

答案1

MikroTik 上的 OpenVPN 实现很不完善。它几乎不能工作,而且性能很差(无论是带宽还是延迟),尤其是在非 x86 路由器上。
人们一直在要求 UDP 和 LZO 支持,但 MikroTik 根本拒绝实现这些支持。
以下是 Normis(MikroTik 员工)对此问题的回复:

OpenVPN 漏洞百出,难以实现。我们的开发人员几乎都自杀了,试图让它工作。这是一个大问题,所以我们无法继续 100% 地实现它

这个回复是 2010 年的,他们还没有实现这些功能。所以你可以自己对 MikroTik 的 OpenVPN 实现得出结论。
如果你感兴趣的话,这里有整个帖子https://forum.mikrotik.com/viewtopic.php?f=1&t=26499

如果您需要更好的稳定性/性能(和安全性),您应该研究其他解决方案,例如 IPsec 上的 GRE 或 IPsec 上的 EoIP。
我已经使用这些协议很多年了,它们运行完美。

但是,如果您无法让路由器在没有 NAT 的情况下工作,那么您可以尝试 SSTP,但由于这也是基于 TCP 的,因此性能和延迟不是最好的。还有 IPsec 上的 L2TP。

无论如何,您的问题都是 MikroTik 方面的实现问题,因此您无法真正解决它。只有 MikroTik 可以。您只能尝试其他协议,看看哪种协议更适合您的需求。

当然,您的配置总是有可能不好的(正如评论中已经提到的,如果您不知道自己在做什么,FastTrack 规则可能会弄乱 MikroTIk 中的很多东西)。

答案2

可以在 mikrotik 硬件上使用 UDP。您可以在 metarouter 中安装 WRT 实例。这是一个有缺陷的实现。但可以使用 meta 来获取 OpenVPN UDP。我之前曾在 iPECS 手机的“VPN”模式下使用过它。

当我查阅我的笔记时,我会对这个解决方案做进一步的补充,将来可能会对其他人有所帮助。

相关内容