Press "Enter" to skip to content

MikroTik 防火墙移除无效的链接

背景

我用MikroTik搭建了一个VPN服务器,然后使用了2台软路由做跳转。相当于我用VPN连到A软路由,A软路由再路由到B软路由,然后我再访问B软路由下面的服务器。

最近在巡检软路由的时候发现一个很奇怪的流量,明明我的VPN客户端没有连接到路由器A,然后发现B下面的服务器还在疯狂发送数据包到B路由器,B路由器又把数据包丢给A路由器,由于A路由器找不到这个VPN客户端,A路由器显然是丢弃数据包了。但是好像服务器并没有感知到这个问题,可能没有收到ACK的原因,还在疯狂的发包。

分析

这种无意义的数据包肯定是要修复的,分析下来猜测可能服务器在等待某个ack,或者明确知道客户端挂了,否则某种重传机器一直在发数据包。

解决

应该是有更好的办法来解决这个问题,但是我对网络底层知识储备不够也没更多精力去探索,目前就简单暴力的在软路由上写脚本,定时的去检查firewall里面的链接,如果发现有IP无法ping通的情况,就把这个链接杀掉。

:foreach i in=[/ip firewall connection find protocol=tcp] do={

    :log info $i
    :log info [/ip firewall connection get $i src-address]



    :local hostport ([/ip firewall connection get $i src-address])

    :local host [:pick $hostport 0 [:find $hostport ":"]]

    :log info $host

    :if ([/ping $host interval=1 count=5] = 0) do={
        :log error "HOST $host is not responding to ping request, remove conn  $i ..."
        /ip firewall connection remove $i;
    
    } else {
        :log warning "HOST $host ping is ok, no need to take any action ...";
    }

}

脚本大概这样,如果正式部署脚本,里面一些日志可以去掉,脚本大概一个小时跑一次就行了。

参考资料:

https://forum.mikrotik.com/viewtopic.php?t=42318

https://forum.mikrotik.com/viewtopic.php?t=126328

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注