RouterOS+OpenWRT通过VRRP实现网关冗余分流
在家用环境中常常使用OpenWRT路由器做为旁路由实现数据分流,一般的做法是在DHCP服务器中将网关和DNS指定为OpenWRT的IP地址,由OpenWRT进行数据分流;而OpenWRT路由器的网关为主路由器,OpenWRT处理完成之后交给主路由器进行互联网访问。这种方式有一个潜在的问题:当OpenWRT路由器出现故障或者下线时,整个内部网络都将不能访问互联网。
VRRP (Virtual Router Redundancy Protocol, 虚拟路由冗余协议) 是一种容错网络协议,它将局域网中多台路由器组成一个“虚拟路由器”,共享一个虚拟 IP 地址作为默认网关,当主(Master)路由器故障时,备份(Backup)路由器能自动接管,实现网关的快速切换,保证了网络通信的连续性和高可用性。通过VRRP可以将OpenWRT和RouterOS主路由器组成一个虚拟网关,OpenWRT做为主网关,RouterOS主路由器做为备用网关,正常时候OpenWRT做为主网关先进行分流处理,然后交给RouterOS主路由器出口到互联网;当OpenWRT路由器发送故障时,RouterOS接管网关,此时虽然没有自动分流,但是仍然可以正常访问互联网。
首先在RouterOS创建一个VRRP设备。打开Interfaces页面,在VRRP页面点击”+”创建VRRP设备。在弹出窗口的General页面填写一个自定义的设备名称;在VRRP页面中Interface选择内网网桥设备,选择一个VRID,此例中为51;缺省的优先级为100,优先级数字越大优先级越高;Authentication位置选择simple,设置一个不超过8个字母的paassword,版本选择2,Protocol选择IPv4。


点击OK创建VRRP设备后会提示设备缺少一个IP地址。打开 IP => Addresses 页面点击”+”为VRRP设备设置一个IP地址。此例中设置为192.168.0.253/24(/24表示24位子网掩码),Interface选择刚刚创建的VRRP设备名称。此IP地址将做为虚拟网关的IP地址。

为了让所有的内网设备使用虚拟网关做为其缺省网关,还需要在DHCP服务器设置中将派发的网关和DNS IP地址指定为虚拟网关的IP地址。打开 IP => DHCP Server 页面,在Network标签页编辑网关和DNS地址,修改为上面VRRP的IP地址。

至此为止RouterOS的设置基本完成,下一步要进行OpenWRT路由器的设置。
OpenWRT要支持VRRP功能需要安装keepalived软件包,可搜索并安装luci-i18n-keepalived-zh-cn软件包,keepalived将做为依赖包一起安装。安装完成之后刷新页面将在”服务”菜单下面出现”VRRP”菜单。点击VRRP进入VRRP设置。
首先在”IP地址”标签页下面的IP地址位置点击”添加”创建一个IP地址,指定一个名称,IP地址填写与RouterOS VRRP设备相同的IP地址,此例中为192.168.0.253

然后切换到”实例”标签页,选择”添加”创建一个VRRP实例。设置一个名称,状态为Master,接口选择网桥设备,虚拟路由器ID选择与RouterOS设置相同,此例中为51。由于要让OpenWRT具有较高的优先级,因此优先级设置必须比RouterOS设置的优先级(100)大,此例中设置为110;虚拟IP地址选择刚刚添加的IP地址名称。

切换到对端标签页,HA身份验证类型选择简单密码,密码与RouterOS VRRP设置的密码一致。

至此OpenWRT VRRP设置完成。OpenWRT完成处理之后需要将数据发送给RouterOS主路由,因此OpenWRT网桥的网关地址必须是RouterOS路由器的地址。如下图所示为OpenWRT网桥的IP地址和网关设置(192.168.0.1为RouterOS网桥的IP地址)

设置好虚拟路由器之后可在RouterOS上查看虚拟网关的状态,当OpenWRT主网关在线时,VRRP设备的状态为B,表示备用(Backup)。

当OpenWRT主网关下线时,VRRP设备的状态变为RM,R表示正在运行(Running),M表示主设备(Master)。
切换的速度非常快,基本上在1秒内完成切换,对内网用户来说完全感觉不到对上网的影响。
