侧边栏壁纸
博主头像
MIAONE's Blog Official 博主等级

「白昼之光,岂知夜色之深」

  • 累计撰写 8 篇文章
  • 累计创建 7 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

[原创] MikroTik RouterOS下 利用VRRP协议 做到旁路与主路网关之间几乎无感切换

MIAONE
2024-03-29 / 1 评论 / 8 点赞 / 279 阅读 / 0 字
温馨提示:
本文最后更新于2025-08-01,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

[原创] MikroTik RouterOS下 利用VRRP协议 做到旁路与主路网关之间几乎无感切换

  • 众所周知,传统旁路的实现方式需要将网关修改为旁路由的地址,这就导致了一个弊端:

    • 当旁路需要升级系统或者宕机等各种原因不工作后,所有需要旁路功能等终端都会断网,手动修改网关又非常繁琐。

为了解决这个问题需要用到一个协议 VRRP

什么是VRRP?

虚拟路由冗余协议VRRP(Virtual Router Redundancy Protocol)是一种用于提高网络可靠性的容错协议。通过VRRP,可以在主机的下一跳设备出现故障时,及时将业务切换到备份设备,从而保障网络通信的连续性和可靠性。


简述下VRRP是如何工作的,以下图为例:

VRRP 原理图.png

  1. HostA :

    • IP Address : 10.1.1.100/24

    • Gateway : 10.1.1.111/24

  2. 两台三层设备都运行 VRRP 协议,使用相同的 VRID 以及 Virtual IP Address并且他们之间会以 Priority 来选出 Master Backup 设备

  3. 当HostA要访问一个地址,但是本地没有路由时就需要网关了,首先ARP请求网关的IP(10.1.1.111)所对应的MAC地址:

    1. VRRP的MAC地址格式为:00:00:5E:00:01:VRID

  4. 得到MAC地址后就把数据包发送给VRRP虚拟出来的网关(10.1.1.111),根据两台VRRP设备的选举结果来选择到底往哪里走。

详细原理可以阅读各个厂商的手册

实操环节

实验环境概述

Requirements :

  • 两台能运行VRRP的设备

我的实验设备 :

  1. MikroTik CCR2004-16G-2S+ (路由器)

  • IP Address : 10.0.0.1/24

  1. MikroTik CRS317-1G-16S+ (交换机)

  • IP Address : 10.0.0.254/24

  • Gateway :

    • CCR2004

    • Mac mini m2

  1. Mac mini m2 (旁路由)

  • IP Address : 10.0.0.2/24

  • Gateway :

    • CCR2004

接线方式 :

CCR2004 (Bridge) <------> CRS317(Bridge) <------> Mac mini m2

路由器与交换机之间的Bridge两两之间用SFP+相连接,然后再把Mac mini m2 以光转电模块插到交换机上

配置阶段

规划设备角色 :

  • 由于我们要把旁路由作为网关,所以连接了旁路由的交换机(CRS317)为 Master

  • 那么当旁路由宕机后,我们要切换为主路由设备(CCR2004),所以主路由为 Backup


路由器配置 :

  • 首先我们配置 VRRP

    interface/vrrp/add name="vrrp1" interface="bridge1(LAN)" vrid=1 priority=90 preemption-mode=no

  • Interface: 选择Bridge

  • VRID: VRID需要两台运行VRRP协议的设备设置相同的数值,我这里设置为 1

  • Priority: 取值范围0-255。这里建议按照我的配置来,配置为 90

    • 0表示设备停止参与VRRP备份组,用来使备份设备尽快成为Master设备,而不必等到计时器超时

    • 255则保留给IP地址拥有者。(也就是说如果当Bridge的IP与VRRP的 Virtual IP Address相同时,优先级就为255,直接成为Master设备)

  • Interval: Master设备定时(Advertisement_Interval)向组内的Backup设备发送VRRP通告报文,通告自己工作正常。如果Backup设备在Master_Down_Interval定时器超时后仍未收到VRRP通告报文,则重新选举Master。这里建议默认为 1

    • Master_Down_Interval定时器取值为:3×Advertisement_Interval+Skew_time,单位为秒。

    • Skew time,计算方式为:(256-Backup设备的优先级)/256,单位为秒。

  • Preemption Mode: 关闭

    • 作为Master设备的交换机当从故障恢复后,需要从Backup切换为Master。而路由作为Backup不需要抢占。

      • 抢占模式:在抢占模式下,如果Backup设备的优先级比当前Master设备的优先级高,则主动将自己切换成Master。

      • 非抢占模式:在非抢占模式下,只要Master设备没有出现故障,Backup设备即使随后被配置了更高的优先级也不会成为Master设备。


  • 接下来我们要给VRRP配置一个Virtual IP Address:

    • 这里不推荐配置为Bridge相同的IP来加快Master的选举,因为这样会影响winbox的三层连接。

这里我配置的地址为 10.0.0.253/24

 ip/address/add address=10.0.0.253/24 interface=vrrp1


  • 解决旁路的某些软件需要手动给终端配置FakeDNS,但是VRRP又无法给DNS做冗余问题:

  • RouterOS 7.14 版本出来了一个新接口 lo(loopback)

  • 当我们给loopback口配置上FakeDNS后。如果旁路由故障,我们就会去请求FakeDNS时,此时终端本地没有路由,就会走三层默认路由,转发给主路由的RouterOS,RouterOS发现自己本地有loopback,那么就会把请求给loopback,从而得到DNS的解析结果

    ip/address/add address=198.18.0.2/24 interface=lo

  • 然后我们需要配置一条防火墙去允许局域网设备进入主路由去请求DNS,src-address改为自己的局域网地址

    ip/firewall/filter/add chain=input action=accept src-address=10.0.0.0/24 dst-address=198.18.0.2 log=no log-prefix=""

如果你的代理工具会创建虚拟网卡,那么按照下面方法为检测代理工具是否存活做准备

以我用的Surge为例, 虚拟网卡的地址为: 198.18.0.1

添加一条静态路由:

  • 目标地址为: 198.18.0.1

  • 下一跳为: 旁路由的IP地址

    ip/route/add dst-address=198.18.0.1/32 gateway=10.0.0.2
    
    # 如果CRS317为Master时有默认路由走旁路可以直接去往虚拟网卡, 但是当Master变成CCR2004时就没有去往虚拟网卡的路由, 导致Netwatch一直是Down
    # 关于Netwatch的配置在下面会说

交换机配置 :

  • 首先我们配置VRRP

  • 为了选举为Master设备, 所以我们设置的priority要比Backup大,可以和我一样配置为100

  • 当自己变成Backup后, 为了使自己主动切换回Master模式, 所以要开启抢占模式 preemption-mode=yes

    interface/vrrp/add name="vrrp1" interface="bridge" vrid=1 priority=100 preemption-mode=yes
  • Virtual IP Address配置和上面一样, 不演示了


上面的操作仅仅是对 旁路由自身 和 去往旁路由的链路 的检测并且冗余, 当代理软件挂掉后并无法感知,还是会导致网络故障

解决方案有两个:

  1. 旁路由系统直接开启IP报文转发(网上直接查教程)

  2. 直接检测代理软件的虚拟网卡可达性

操作方法:

Host

  1. 图形界面进入 Tools - Netwatch

  2. 添加一个新的Netwatch Host, 名字任意

  3. Host: 198.18.0.1 (虚拟网卡地址)

  4. Intervel: 3 (不建议设置过快, 如果网络波动会导致频繁切换主备)

UP

interface/vrrp/set numbers=0 priority=100
# 当代理软件的虚拟网卡可以ping通后说明代理软件故障恢复, 那么我们就改大VRRP的优先级, 让旁路由变成Master

Down

interface/vrrp/set numbers=0 priority=80
# 当代理软件的虚拟网卡无法ping通就说明代理软件故障, 我们需要走备用线路, 那么我们就改小VRRP的优先级, 让旁路由变成Backup

配置路由:

  • 当网络走Master设备时, 应当所有的数据交由旁路由处理, 所以我们添加一条默认路由, 下一跳为旁路由, 开销为 1, 开启ping检测网关.并且需要添加comment, 后面需要用

  • 当旁路由故障后虽然下联设备都通过VRRP切换了, 但是交换机无法切换(此时会影响更新等操作). 所以我们要再添加一条默认路由, 指向主路由(CCR2004), 开销为 2(相同的目的地址, 优先走开销小的), 旁路由正常的情况下, 这条路由不会被优选使用, 当旁路由挂了后, 开销为 1的检测网关失败, 自动disable, 此时这条开销为 2的路由就会生效. 三层从主路由出去.

    ip/route/add dst-address=0.0.0.0/0 gateway=10.0.0.2 check-gateway=ping distance=1 comment='Surge'
    ip/route/add dst-address=0.0.0.0/0 gateway=10.0.0.1 check-gateway=ping distance=2
  • 当代理软件故障后虽然通过Netwatch切换了VRRP的优先级, 此时终端上网无影响. 但是 CCR2004本身的默认路由还是没有变化, 还是默认走旁路由, 所以我们要在Netwatch中添加语句, 来Disable去往旁路由的默认. 让CCR2004可以三层可达.

UP

interface/vrrp/set numbers=0 priority=100
:foreach route in=[/ip route find comment="Surge"] do={  
    /ip route enable $route
}

Down

interface/vrrp/set numbers=0 priority=80
:foreach route in=[/ip route find comment="Surge"] do={  
    /ip route disable $route
}

以上就是教程全部内容了, 如有帮助请留言点赞~🥳

8

评论区