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

我很抱歉,如果这个问题已经被提出并回答了,但是我一直在寻找这个答案,而没有任何运气。

背景:我们有几台安装了RouterOS v6.39.2的Mikrotik路由器,它们遍布全城; 路由器在NAT后面并连接到我们用于pipe理和监视的OpenVPN服务器。 我们用于OpenVPN的协议是TCP,因为用于OpenVPN的UDP不被Mikrotik支持。

问题:我们不时观察到随机发生的响应延迟。 发生问题时没有特定的路由器或时间; 我们不断地监视CPU负载和stream量,并且在发生这种情况时图上没有任何exception,但是当我们同时使用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

穿过隧道

MikroTik上的OpenVPN实施已经瘫痪。 它几乎没有工作,其性能是可怕的(带宽或延迟),特别是在非x86路由器。
人们一直在要求UDP和LZO的支持,而MikroTik只是拒绝执行这些。
这里是Normis(MikroTik的工作人员)在这个问题上的答复:

OpenVPN是非常非常错误,很难实施。 我们的开发人员几乎都试图自杀。 这是一个很大的混乱,所以我们不能继续实施它100%

这个答复是从2010年开始的,他们还没有实现这些function。 所以你可以得出关于MikroTik的OpenVPN实现的自己的结论。
这是整个线程,如果你有兴趣https://forum.mikrotik.com/viewtopic.php?f=1&t=26499

如果你需要更好的稳定性/性能(和安全性),你应该考虑一些其他的解决scheme,比如GRE over IPsec或EoIP over IPsec。
我一直在使用这些协议多年,他们的工作完美无瑕。

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

无论如何,你的问题是在MikroTik方面的一个实现,所以你实际上不能修复它。 只有MikroTik可以。 您只能尝试其他协议,并更好地了解您的需求。

当然,总是有可能你的configuration不好(正如已经提到过的,如果你不知道你在做什么,FastTrack规则可能会搞乱MikroTIk中的很多东西)。