You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Debian 11系统基于网络连接自动切换默认网关的可行性问询

Debian 11系统基于网络连接自动切换默认网关的可行性问询

当然可以实现!这种自动故障切换的需求在Debian 11里完全能搞定,我给你分享两种实用的配置方案,你可以根据自己的网络管理习惯来选:

方案一:用ifmetric+定时监控脚本(通用型)

这个方案不管你用传统的/etc/network/interfaces还是NetworkManager管理网络都适用,核心是通过调整路由优先级+定期检测网络状态来实现自动切换。

  1. 先安装ifmetric工具(用来调整路由优先级)
sudo apt update && sudo apt install ifmetric

注意:metric数值越小,对应的路由优先级越高,默认我们让eth0优先级高于eth1

  1. 配置初始路由优先级
  • 如果用传统网络配置(/etc/network/interfaces):
    编辑配置文件sudo nano /etc/network/interfaces,添加/修改以下内容:
    auto eth0
    iface eth0 inet dhcp
        metric 10
    
    auto eth1
    iface eth1 inet dhcp
        metric 20
    
    之后重启网络服务:sudo 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
    
  1. 编写监控脚本并定时执行
    创建一个脚本文件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管理网络,这个方案更高效——它会在网卡状态变化时自动触发切换,不需要定时轮询。

  1. 创建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
  1. 配置权限并重启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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 11:09:35