在OpenWrt上部署Keepalived实现双机热备是个提升网络可靠性的好办法。利用PuTTY和WinSCP,我们可以通过命令行和直接编辑配置文件来完成。下面是一份详细的部署指南。
1. 安装Keepalived
首先,通过PuTTY登录到你的两台OpenWrt路由器(主路由 Openwrt-Master
和后备路由 Openwrt-Backup
),分别执行以下命令安装Keepalived:
opkg update
opkg install keepalived
💡 注意:如果安装过程中提示内核版本不匹配或依赖问题(例如缺少 libmagic
或 libnfnetlink0
),你需要手动安装依赖或下载特定版本的IPK包
opkg install libmagic
opkg install libnfnetlink0
# 如果仍失败,可尝试从OpenWrt仓库下载对应版本的keepalived IPK包,使用opkg install命令本地安装
2. 配置系统参数
为了使Keepalived和VIP正常工作,需要修改两台路由器的内核参数。使用WinSCP登录路由器,编辑 /etc/sysctl.conf
文件,确保包含以下行:
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
保存文件后,在PuTTY中执行 sysctl -p
使配置生效。
3. 准备Keepalived配置文件
Keepalived的主要配置文件是 /etc/keepalived/keepalived.conf
。使用WinSCP创建并编辑此文件。
主路由 (Openwrt-Master, 192.168.50.1) 配置:
global_defs {
router_id Openwrt_Master
}
vrrp_instance VI_1 {
state MASTER
interface br-lan
virtual_router_id 50
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.50.3/24
}
}
后备路由 (Openwrt-Backup, 192.168.50.2) 配置:
global_defs {
router_id Openwrt_Backup
}
vrrp_instance VI_1 {
state BACKUP
interface br-lan
virtual_router_id 50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.50.3/24
}
}
📝 重要参数说明:
interface
: 设置为br-lan
(OpenWrt中常见的桥接接口)。你可以通过PuTTY执行ip a
命令确认实际的接口名称。virtual_router_id
: 必须相同,取值范围0-255,且在同一局域网内与其他VRRP实例不冲突。priority
: 主路由的优先级应高于后备路由(例如150 > 100)。authentication
: 主备路由的认证类型和密码必须一致。virtual_ipaddress
: 这里配置你计划使用的虚拟IP (192.168.50.3),并指定正确的子网掩码。
4. 处理OpenWrt的特殊配置
OpenWrt的Keepalived init脚本可能会使用自己的配置文件生成机制。为了确保使用我们自定义的配置文件,需要通过WinSCP编辑 /etc/config/keepalived
文件,内容如下:
config globals 'globals'
option alt_config_file '/etc/keepalived/keepalived.conf'
此配置指示Keepalived服务从指定文件读取配置,而不是默认的临时文件。
5. 启动Keepalived服务
通过PuTTY在两台路由器上执行以下命令来启动Keepalived并设置开机自启:
service keepalived start
service keepalived enable
6. 验证与测试
检查虚拟IP:在两台路由器上执行
ip a show br-lan
,你应该能看到虚拟IP192.168.50.3
最初出现在优先级更高的主路由 (Openwrt-Proxy
) 上。测试故障切换:
手动重启主路由的Keepalived服务:
service keepalived restart
或者直接断开主路由的网络连接。
观察虚拟IP是否在几秒内自动漂移到后备路由 (
Openwrt-Direct
)。同样使用ip a
命令验证。当主路由恢复后,虚拟IP应该会自动漂回(因为默认配置了抢占模式)。
查看日志:如果需要排查问题,可以在PuTTY中使用
logread
命令查看系统日志,过滤Keepalived相关的条目。
💡 注意事项
防火墙规则:确保防火墙允许VRRP协议通信(IP协议号112,或组播地址224.0.0.18)。如果虚拟IP无法切换,可能是防火墙阻止了VRRP通告。
脑裂问题:如果两台路由器同时声称拥有虚拟IP,检查
virtual_router_id
和认证配置是否一致,以及网络是否允许VRRP报文正常传输。服务依赖:在某些情况下,可能需要调整Keepalived服务的启动顺序,确保在网络接口就绪后再启动Keepalived。