【RouterOS(ROS)】在 ROS、OpenWrt 上 设置 VRRP

本文基于 ROS 7.18.2、ImmortalWrt 24.10.1、keepalived 2.3.1-r1 编写

简单的记录一下 RouterOS 和 OpenWrt 上的 VRRP 设置

RouterOS 设置

VRRP 接口设置

左侧 Interfaces → VRRP,新建一个接口
接口设置

  • interface: bridge1 # 选择桥接接口名称,或网口名称
  • VRID: 51 # 填写一个数字,一会需要和 OpenWrt 上的保持一致,这里填写了 51
  • Priority: 100 # 权重,这里使用了默认

其余设置保持默认即可:

  • Authentication: 认证方式
  • Password: 密码
  • Preenption Mode:是否允许从低优先级设备中接管虚拟 IP
  • version: 如果这里使用了默认的版本3,在 OpenWrt 中需要保持一致

VRRP 地址设置

左侧 IP → Addresses,新建一个 IP 地址(下图 IP 显示红色是因为当前虚拟 IP 被 OpenWrt 接管)
IP 设置

  • Address:192.168.1.2/24 # 填入你想要使用的 IP
  • Network:192.168.1.0 # Address 填入掩码时会自动计算,不用管
  • Interface: vvrp1 # 选择刚刚新建的 VRRP 接口,因为刚刚没有修改,默认名称为 vvrp1

防火墙设置

如果虚拟 IP 可以 ping 通没有网络(如 nslookup 192.168.1.2 时无法响应、设置为网关时无法上网)
检查防火墙中是否设置了拒绝流量,如这里的 defconf: drop all not from LAN
防火墙设置

如果存在类似的规则,在其上方新增一条 input 规则,允许 vvrp1 接口的流量通过

OpenWrt 设置

安装 keepalived

  1. 命令行 opkg update 或者在软件包中更新列表后,安装 keepalived,这里不推荐安装 luci-app-keepalived,其实用配置文件更方便( 最主要的是查找教程方便
  2. 大部分的 OpenWrt 不会专门为了 VRRP 功能修改内核参数,使用前需要修改 /etc/sysctl.conf 文件,添加如下设置并重启,否则无法绑定虚拟 IP
1
2
3
4
5
6
7
8
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1
  1. 重启后修改 /etc/config/keepalived 文件为以下内容,作用为忽略 /etc/config/keepalived 文件内容,使用 keepalived.conf,因为使用标准的 .conf 文件更方便查找教程:
1
2
config globals 'globals'
option alt_config_file "/etc/keepalived/keepalived.conf"
  1. 修改 /etc/keepalived/keepalived.conf 文件,这是一份最简化并可用的配置内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
! Configuration File for keepalived

global_defs {
router_id VRRP_OPENWRT # 自定义标识(随便写)
}

vrrp_instance VI_1 {
state MASTER # 初始状态为 MASTER(VRRPv3 中实际由优先级决定)
interface br-lan # 监听的物理接口(OpenWrt 中通常为 br-lan)
virtual_router_id 51 # VRRP 组 ID(1-255,需与对端一致)
priority 150 # 优先级(0-254,值越大越优先)
advert_int 1 # 通告间隔(秒)
version 3 # 因为刚刚 RouterOS 的设置使用了默认值,这里需要注明 VRRPv3 协议
#authentication { # 因为我使用了无认证,所以这一段不需要,已注释
# auth_type PASS # 认证类型
# auth_pass 123456 # 密码
#}
virtual_ipaddress { # 虚拟IP配置
192.168.1.2/24
}
}
  1. 在系统 → 启动项 中重启 keepalived,或者使用命令 /etc/init.d/keepalived restart

现在可以观察 VRRP 的运行情况了,停止 keepalived 进程或重启 OpenWrt,观察虚拟 IP 是否成功飘动,如果未成功运行,尝试 logread | grep -i keepalived 查看日志输出