Debian 11系统基于网络连接自动切换默认网关的可行性问询
Debian 11系统基于网络连接自动切换默认网关的可行性问询
当然可以实现!这种自动故障切换的需求在Debian 11里完全能搞定,我给你分享两种实用的配置方案,你可以根据自己的网络管理习惯来选:
方案一:用ifmetric+定时监控脚本(通用型)
这个方案不管你用传统的/etc/network/interfaces还是NetworkManager管理网络都适用,核心是通过调整路由优先级+定期检测网络状态来实现自动切换。
- 先安装
ifmetric工具(用来调整路由优先级)
sudo apt update && sudo apt install ifmetric
注意:metric数值越小,对应的路由优先级越高,默认我们让eth0优先级高于eth1
- 配置初始路由优先级
- 如果用传统网络配置(
/etc/network/interfaces):
编辑配置文件sudo nano /etc/network/interfaces,添加/修改以下内容:
之后重启网络服务:auto eth0 iface eth0 inet dhcp metric 10 auto eth1 iface eth1 inet dhcp metric 20sudo systemctl restart networking - 如果用NetworkManager:
执行以下命令设置优先级:sudo nmcli connection modify eth0 ipv4.route-metric 10 sudo nmcli connection modify eth1 ipv4.route-metric 20 sudo systemctl restart NetworkManager
- 编写监控脚本并定时执行
创建一个脚本文件sudo nano /usr/local/bin/gateway_switch.sh,内容如下:
#!/bin/bash # 监控eth0连通性并自动切换网关 CHECK_IP="8.8.8.8" # 用一个稳定的公网IP作为检测目标 ETH0="eth0" ETH1="eth1" # 尝试ping 3次,每次超时2秒 ping -c 3 -W 2 $CHECK_IP > /dev/null 2>&1 if [ $? -ne 0 ]; then # eth0网络不通,切换到eth1 sudo ifmetric $ETH0 30 sudo ifmetric $ETH1 10 echo "$(date): eth0 网络中断,已切换至eth1作为默认网关" >> /var/log/gateway_switch.log else # eth0网络恢复,切回eth0 CURRENT_METRIC_ETH0=$(ifmetric $ETH0 | awk '{print $2}') if [ $CURRENT_METRIC_ETH0 -ne 10 ]; then sudo ifmetric $ETH0 10 sudo ifmetric $ETH1 20 echo "$(date): eth0 网络恢复,已切回eth0作为默认网关" >> /var/log/gateway_switch.log fi fi
给脚本添加执行权限:
sudo chmod +x /usr/local/bin/gateway_switch.sh
然后设置定时任务,让脚本每分钟执行一次:
sudo crontab -e
在打开的编辑器里添加一行:
*/1 * * * * /usr/local/bin/gateway_switch.sh
方案二:用NetworkManager调度脚本(实时触发型)
如果你用NetworkManager管理网络,这个方案更高效——它会在网卡状态变化时自动触发切换,不需要定时轮询。
- 创建NetworkManager调度脚本
sudo nano /etc/NetworkManager/dispatcher.d/99-gateway-switch
写入以下内容:
#!/bin/bash INTERFACE="$1" STATUS="$2" CHECK_IP="8.8.8.8" if [ "$INTERFACE" = "eth0" ]; then if [ "$STATUS" = "down" ]; then # eth0断开,将eth1设置为高优先级 nmcli connection modify eth1 ipv4.route-metric 10 nmcli connection up eth1 # 确保eth1处于激活状态 echo "$(date): eth0 断开连接,已设置eth1为默认网关" >> /var/log/gateway_switch.log elif [ "$STATUS" = "up" ]; then # eth0恢复,切回eth0作为默认网关 nmcli connection modify eth0 ipv4.route-metric 10 nmcli connection modify eth1 ipv4.route-metric 20 echo "$(date): eth0 连接恢复,已切回eth0作为默认网关" >> /var/log/gateway_switch.log fi fi
- 配置权限并重启NetworkManager
sudo chmod +x /etc/NetworkManager/dispatcher.d/99-gateway-switch sudo systemctl restart NetworkManager
你可以根据自己的实际情况选择方案,测试的时候可以手动断开eth0的网线或者禁用网卡,看看是否自动切换;恢复eth0后再确认是否切回默认网关,操作日志会保存在/var/log/gateway_switch.log里,方便排查问题。
备注:内容来源于stack exchange,提问作者Lucas Sanchez
相关产品推荐
相关产品推荐

