设计思路

  • 两台 MikroTik 路由器,各自有 6 条 PPPoE 线路(pppoe-out1~6)。
  • 要求:只有当本端 6 条 PPPoE 全部断开时,本机才放弃 VRRP Master 角色;当线路恢复后,本机恢复优先级,但 不自动抢回 Master(避免网络波动)。
  • 实现方法:

    1. VRRP 设置为 preemption-mode=no(非抢占)。
    2. 通过脚本定期检测所有 6 条 PPPoE 接口的 running 状态。
    3. 如果全部断开 → 将本机 VRRP priority 设为 0(立即放弃 Master)。
    4. 如果至少一条恢复 → 将本机 VRRP priority 恢复为正常值(如 150 或 140),但不抢回 Master。

脚本配置

ROS1(正常优先级 150)

:local pppoeList {"pppoe-out1";"pppoe-out2";"pppoe-out3";"pppoe-out4";"pppoe-out5";"pppoe-out6"}
:local allDown true
:foreach i in=$pppoeList do={ :if ([/interface get $i running]) do={ :set allDown false } }
:if ($allDown) do={
    /interface vrrp set [find name="vrrp1"] priority=0
} else={
    :delay 10
    /interface vrrp set [find name="vrrp1"] priority=150
}

ROS2(正常优先级 140)

:local pppoeList {"pppoe-out1";"pppoe-out2";"pppoe-out3";"pppoe-out4";"pppoe-out5";"pppoe-out6"}
:local allDown true
:foreach i in=$pppoeList do={ :if ([/interface get $i running]) do={ :set allDown false } }
:if ($allDown) do={
    /interface vrrp set [find name="vrrp1"] priority=0
} else={
    :delay 10
    /interface vrrp set [find name="vrrp1"] priority=140
}

VRRP 基础配置

ROS1(正常优先级 150)

/interface vrrp add name=vrrp1 vrid=1 interface=bridge priority=150 preemption-mode=no

ROS2(正常优先级 140)

/interface vrrp add name=vrrp1 vrid=1 interface=bridge priority=140 preemption-mode=no

最终效果:任意一台检测到自己的 6 条 PPPoE 全断 → priority=0 → 立即让出 Master。恢复后 priority 回到正常值,但因 preemption-mode=no 不会抢回。

最后修改:2026 年 05 月 31 日
如果觉得我的文章对你有用,请随意赞赏