admin 发表于 7 天前

ip‑link 检测链路,故障自动切换出口

在 Linux 系统中,使用 ip-link(通常指 ip link 命令,属于 iproute2 工具包)结合其他工具可以实现网络链路检测和故障自动切换出口的功能。以下是实现这一目标的常见方法和步骤:



1. 链路状态检测
ip link 可以查看和配置网络接口状态,但本身不提供自动切换功能。需要结合以下工具:

[*]ethtool:检测物理链路状态(如网线是否插入、光模块是否正常)。
[*]ping 或 arping:检测对端设备的可达性(逻辑链路状态)。
[*]nmcli(NetworkManager) 或 networkd:动态管理网络配置。


示例:使用 ethtool 检测链路
# 检查 eth0 的物理链路状态
ethtool eth0 | grep "Link detected"
# 输出示例:Link detected: yes



2. 故障自动切换方案
方案 1:使用 ifupdown 或 NetworkManager 的故障转移

[*]多网关配置:在 /etc/network/interfaces 中配置多个网关,结合 route 或 ip route 设置优先级。
[*]NetworkManager:通过 nmcli 配置多连接,设置 failure-mode=redirect(或类似逻辑)。


方案 2:使用 keepalived(高可用性)

[*]部署 keepalived 实现 VRRP 协议,主备节点自动切换虚拟 IP。
[*]配置健康检查脚本(如检测 ping 或 HTTP 服务)。


方案 3:自定义脚本 + ip route
通过脚本定期检测链路状态,动态切换默认路由。

示例脚本:
#!/bin/bash
PRIMARY_INTERFACE="eth0"
BACKUP_INTERFACE="eth1"
PRIMARY_GATEWAY="192.168.1.1"
BACKUP_GATEWAY="10.0.0.1"

# 检测主链路是否存活
if ping -c 2 -I $PRIMARY_INTERFACE $PRIMARY_GATEWAY &> /dev/null; then
    # 主链路正常,确保默认路由指向主网关
    ip route replace default via $PRIMARY_GATEWAY dev $PRIMARY_INTERFACE
else
    # 主链路故障,切换到备份网关
    ip route replace default via $BACKUP_GATEWAY dev $BACKUP_INTERFACE
fi

[*]定时执行:通过 cron 或 systemd timer 定期运行脚本。




3. 高级工具

[*]conntrack 或 nftables:结合防火墙规则,实现更复杂的流量切换逻辑。
[*]Bonding 或 Teamd:将多个物理接口聚合为一个逻辑接口,提供冗余(需硬件/驱动支持)。

# 示例:创建 bonding 接口
modprobe bonding
ip link add bond0 type bond mode active-backup
ip link set eth0 master bond0
ip link set eth1 master bond0



4. 监控与告警

[*]Prometheus + Alertmanager:监控链路状态并触发告警。
[*]Zabbix/Nagios:企业级监控工具,支持自定义检测脚本。




注意事项

[*]权限问题:脚本需要 root 权限或 CAP_NET_ADMIN 能力。
[*]防抖动:避免频繁切换,可在脚本中加入状态持久化(如记录上次切换时间)。
[*]日志记录:记录切换事件以便排查问题。




总结

[*]简单场景:使用 ip route + 自定义脚本。
[*]高可用需求:keepalived 或 Bonding/Teamd。
[*]企业级部署:结合 NetworkManager、conntrack 或专业 SDN 方案。


根据实际需求选择合适的方案,并确保测试覆盖主备切换的所有场景。
页: [1]
查看完整版本: ip‑link 检测链路,故障自动切换出口