从RouterOS v7.4beta 4开始的新版Netwatch, 增加了 http/tcp-conn/icmp 三种检测方式.
虽然到了7.6rc2依然存在一些Bug, 比如 ICMP模式下 RTT.MAX 无论你设置多少ms, 状态永远是Down.
不过基本上可以用了, 官方还出了个教学视频, 主要讲解http模式的用法 :
https://www.youtube.com/watch?v=qK0aUo4B5Tc
既然他讲解完了http模式, 我就来讲解一下"更贴近生活"的ICMP模式吧 ~
由于国情特殊, 国际出口会随机出现拥堵, 很多小伙伴都准备了多条海外线路. 梦想着有一种路由器能用非常简单的方式, 根据ping和丢包率全自动化的切换路由.
传统的方式有两种 :
1 OSPF + BFD - 只能在丢包产生时切换路由, 并不能探测延迟.新手非常不友好.
2 Babel - 欢迎加入DN42大家庭, 开始你的奇幻路由之旅...
不过以上两种方式比较正规, 采用动态路由协议属于企业级方案. 用Netwatch+Script只能算野路子, 好在这个方法人人都能学会.
接下来根据两个场景我们分别来学习一下RouterOS被人遗忘的好功能Netwatch和ssh-exec ~
Scenario 1
Rosv7上有两条Wireguard隧道一条到日本一条到韩国. 日本的线路偶尔会爆炸, 韩国的非常稳定但是流量费很贵, 意思就是非必要不走韩国.
这个场景针对新手用户, 提供了从创建路由表分流到配置脚本的全过程.
准备工作 :
RouterOS v7 下 /routing table 相当于 RouterOS v6下 /ip route 中的Routing Mark .
先创建2个table , 务必选上FIB
创建2条Route , 选择对应table, gateway写interface名
创建mangle规则mark-routing,记得写一个comment, 比如japanip 用于find命令.
创建脚本 :
创建2个脚本, 分别用于把路由切到韩国, 切回日本.
/ip firewall mangle set [find comment=japanip] new-routing-mark=wgkorea
/ip firewall mangle set [find comment=japanip] new-routing-mark=wgjapan
脚本名就暂定为tokorea 和 tojapan 接下来 Netwatch里要用到 .
设置Netwatch :
Netwatch 选用日本隧道的公网IP作为监测点, 假定IP是 45.32.66.1, Thr.Avg 设定到60ms.
新版Netwatch默认每10秒间隔, 连ping10次目标IP, 每次ping间隔0.2秒.
当然你还能再添加一些条件比如 Thr. Loss Percent .
切记这些条件之间的关系是"or"不是"and", 满足一项即触发"Down"状态.
在这10次当中, 如果平均ping值超过了之前设定的60ms 即判定为Down.
接下来设置在down&up的时候要运行的脚本
这样在到日本线路延迟超过60ms的之后自动切换路由到韩国. 等到延迟低于60ms后自动切换回日本.
Scenario 2
RouterOS 需要根据延迟对远端Linux服务器进行一定的操作.
从RouterOS 6.45开始新增指令"ssh-exec", 也就是发送ssh指令到指定ip, 例如:
/system ssh-exec address=xxx.xxx.xxx.xxx user=root command="wg-quick down wg1"
出于安全原因, RouterOS是不允许直接在命令行里写明文密码的.
使用这个功能之前, 必须把服务器对端的privatekey导入到RouterOS中.
导入Key的官方教程 :
https://wiki.mikrotik.com/wiki/Use_SSH_to_execute_commands_(public/private_key_login)
使用winbox会更简单一点, 直接将key上传到winbox.
user保持默认的admin, 如果被控端有多台Linux, 请使用同样的钥匙对.
做好配对工作之后我们可以先在RouterOS cli里做一下测试, 确认能正常登录:
一切正常cli会如图所示返回结果.
之后将指令写在Script或者Scheduler中与Netwatch的UP和Down相结合...那真是有无限的可能无限的组合, 你可以充分发挥自己的想象力...
Bakacai
v1.1
2024/09/07