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

Netplan多网关配置及自动故障切换实现求助

Netplan多网关配置及自动故障切换实现求助

Hey there, let's work through this multi-gateway and failover issue with Netplan on your Ubuntu 22.04 server. I see where you're coming from, and your initial config is close but missing a few key pieces for proper failover. Let's break this down step by step.

一、为什么你的初始配置不生效

你的原配置使用了已被弃用的gateway4指令(Ubuntu 22.04搭配的Netplan版本已改用routes定义网关路由),更关键的是:直接定义两个默认网关却不设置优先级和故障切换逻辑,会导致路由表冲突——系统只会优先使用其中一个网关,且不会在主网关失效时自动切换到备用网关。

二、修正Netplan配置

我们将用现代Netplan语法,把gateway4替换为routes条目,通过metric(数值越小优先级越高)设置网关优先级,具体配置如下:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s1:
      addresses: [192.168.1.2/24]
      routes:
        - to: default
          via: 192.168.1.1
          metric: 100  # 主网关,优先级更高
          on-link: true
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]
    enp0s2:
      addresses: [192.168.2.2/24]
      routes:
        - to: default
          via: 192.168.2.1
          metric: 200  # 备用网关,优先级更低
          on-link: true
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]

应用配置并验证

执行以下命令加载新的Netplan设置:

sudo netplan generate
sudo netplan apply

然后查看路由表,确认两个默认路由已按metric优先级存在:

ip route show default

正常输出应类似:

default via 192.168.1.1 dev enp0s1 proto static metric 100
default via 192.168.2.1 dev enp0s2 proto static metric 200

三、添加自动故障切换逻辑

Netplan配置仅设置了路由优先级,系统不会自动检测网关是否失效。我们需要额外的监控机制来实现自动切换,以下是两种方案:

方案A:简易Shell脚本(快速上手)

创建一个监控脚本,定期ping主网关,若不可达则调整路由metric实现切换。

  1. 创建脚本文件:
sudo nano /usr/local/bin/gateway_failover.sh

粘贴以下内容:

#!/bin/bash
MAIN_GW="192.168.1.1"
MAIN_IF="enp0s1"
BACKUP_GW="192.168.2.1"
BACKUP_IF="enp0s2"
PING_COUNT=3
PING_TIMEOUT=2
LOG_FILE="/var/log/gateway_failover.log"

# 确保日志文件存在
touch $LOG_FILE

while true; do
    # 检测主网关连通性
    if ! ping -c $PING_COUNT -W $PING_TIMEOUT $MAIN_GW &>/dev/null; then
        # 主网关失效,切换到备用网关:抬高主路由metric,降低备用路由metric
        ip route change default via $MAIN_GW dev $MAIN_IF metric 300
        ip route change default via $BACKUP_GW dev $BACKUP_IF metric 100
        echo "$(date '+%Y-%m-%d %H:%M:%S'): 主网关$MAIN_GW不可用,已切换到备用网关$BACKUP_GW" >> $LOG_FILE
    else
        # 主网关恢复,切回原优先级
        CURRENT_MAIN_METRIC=$(ip route show default | grep $MAIN_GW | awk '{print $6}')
        if [ "$CURRENT_MAIN_METRIC" != "100" ]; then
            ip route change default via $MAIN_GW dev $MAIN_IF metric 100
            ip route change default via $BACKUP_GW dev $BACKUP_IF metric 200
            echo "$(date '+%Y-%m-%d %H:%M:%S'): 主网关$MAIN_GW已恢复,切回主网关" >> $LOG_FILE
        fi
    fi
    sleep 10  # 每10秒检测一次
done
  1. 赋予脚本执行权限:
sudo chmod +x /usr/local/bin/gateway_failover.sh
  1. 配置systemd服务实现开机自启:
sudo nano /etc/systemd/system/gateway_failover.service

粘贴以下内容:

[Unit]
Description=网关故障切换监控服务
After=network.target

[Service]
ExecStart=/usr/local/bin/gateway_failover.sh
Restart=always
User=root

[Install]
WantedBy=multi-user.target
  1. 启动并启用服务:
sudo systemctl daemon-reload
sudo systemctl start gateway_failover.service
sudo systemctl enable gateway_failover.service

可通过以下命令查看服务状态和日志:

sudo systemctl status gateway_failover.service
tail -f /var/log/gateway_failover.log

方案B:Keepalived(企业级可靠方案)

如果需要更健壮的故障切换,可使用Keepalived(基于VRRP协议的工具)来监控网关并自动管理切换。

  1. 安装Keepalived:
sudo apt update && sudo apt install keepalived
  1. 配置Keepalived:
sudo nano /etc/keepalived/keepalived.conf

粘贴基础配置(按需调整参数):

global_defs {
   router_id GW_MONITOR
}

# 定义检测主网关的脚本
vrrp_script check_main_gw {
    script "/usr/bin/ping -c 3 -W 2 192.168.1.1"
    interval 10  # 每10秒检测一次
    weight -20   # 检测失败时降低优先级20
}

vrrp_instance VI_1 {
    state MASTER
    interface enp0s1
    virtual_router_id 51
    priority 100  # 初始优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        check_main_gw
    }
}
  1. 启动并启用服务:
sudo systemctl start keepalived
sudo systemctl enable keepalived

Keepalived会自动检测主网关状态,当主网关不可达时,会降低其优先级,让备用网关自动接管流量。

四、测试故障切换

你可以通过断开主网络线缆或关闭主路由器来测试故障切换,正常情况下10-30秒内会自动切换到备用网关;当主网关恢复后,系统也会自动切回主路由。

如果配置过程中遇到任何问题,随时告诉我,我会帮你调整细节!

备注:内容来源于stack exchange,提问作者Wali Haider

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 12:28:05