AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 899110
Accepted
yakatz
yakatz
Asked: 2018-02-28 05:21:05 +0800 CST2018-02-28 05:21:05 +0800 CST 2018-02-28 05:21:05 +0800 CST

同步网桥接口的状态

  • 772

我们有冗余的 10G 光纤链接到我们的上游互联网提供商,处于活动/故障转移配置中。在我们的路由器和上游路由器之间,我们有一对以透明模式运行 Vyos 的防火墙。我们使用 BGP 进行路由通告,我们无法更改大部分参数。

绘画:网络布局图

如果到其中一台路由器的链路出现故障(例如,x图中带有 的路由器 - 这恰好是我们最常见的故障类型),整个网络将无法访问,直到 BGP 超时(最长 150 秒)。我已经知道,如果我们强制桥另一侧的链路关闭,我们的路由器将立即开始通过另一条链路转发流量。

如果另一侧发生故障,是否有某种方法可以自动关闭防火墙上桥的一侧?

该解决方案是否有任何隐藏的陷阱?

bridge
  • 2 2 个回答
  • 127 Views

2 个回答

  • Voted
  1. Moshe Katz
    2018-02-28T05:50:04+08:002018-02-28T05:50:04+08:00

    我会在 VyOS 机器上运行一个脚本来检查上游连接的状态,然后根据需要在另一端执行ifdown/ 。ifup

    执行此操作的最简单方法是将脚本放入/etc/network/if-down.d(检查出现故障的界面是否是更新的一侧并关闭另一侧)和/etc/network/if-up.d(检查出现的界面是否是更新的一侧并打开另一侧它的一面是)。
    或者,您可以使用 cron(或 Systemd Timers,或任何类似的调度程序)每分钟运行一次监控脚本,或者您可以将其编写为无限循环,休眠几秒钟以进行亚分钟检查。

    • 1
  2. Best Answer
    yakatz
    2018-03-19T11:24:47+08:002018-03-19T11:24:47+08:00

    我编写了一个脚本来检查接口/sys以确定它们是否是桥成员,然后反弹桥。VyOS 用于netplugd监控接口,出于某种原因,我的脚本混淆了它(我可能会为此写一个单独的问题),但我认为这是一个很好的通用解决方案。

    #!/bin/bash
    
    ## This script will bounce a br interface if a member interface goes down.
    ## This will cause router BGP timers to reset, making outages last only seconds instead of minutes.
    ##
    ## This script is called by netplug on Vyos:
    ## /etc/netplug/linkdown.d/my-brdown
    ##
    ## Version History
    ## 1.0 - Initial version
    ##
    
    LOCKDIR=/var/run/my-bridge-ctl
    
    # Since we only have one br, not going to implement this right now.
    #IGNORE_BRIDGES=()
    
    IFACE=$1
    
    #Remove the lock directory
    function cleanup {
        if rmdir $LOCKDIR; then
            logger -is -t "my-bridge-ctl" -p "kern.info" "Finished"
        else
            logger -is -t "my-bridge-ctl" -p "kern.error" "Failed to remove lock directory '$LOCKDIR'"
            exit 1
        fi
    }
    
    if mkdir $LOCKDIR; then
        #Ensure that if we "grabbed a lock", we release it
        #Works for SIGTERM and SIGINT(Ctrl-C)
        trap "cleanup" EXIT
    
        logger -is -t "my-bridge-ctl" -p "kern.info" "Acquired lock, running"
    
        # Processing starts here
    
        IFACE_DESC=$(<"/sys/class/net/${IFACE}/ifalias")
        IFACE_BR_DIR="/sys/class/net/${IFACE}/brport"
    
        if [ ! -d "$IFACE_BR_DIR" ]; then
            logger -is -t "my-bridge-ctl" -p "kern.warning" "Interface ${IFACE} (${IFACE_DESC-no desc}) went down. Not a member of a bridge. Skipping."
        else
            IFACE_BR_LINK=$(realpath "/sys/class/net/${IFACE}/master")
            IFACE_BR_NAME=$(basename $IFACE_BR_LINK)
            IFACE_BR_DESC=$(<"${IFACE_BR_LINK}/ifalias")
            logger -is -t "my-bridge-ctl" -p "kern.warning" "Interface ${IFACE} (${IFACE_DESC:-no desc}) went down. Member of bridge ${IFACE_BR_NAME} (${IFACE_BR_DESC:-no desc})."
    
            # TODO: Insert IGNORE_BRIDGE check here
    
            find "${IFACE_BR_LINK}/brif" -type l -print0 | while IFS= read -r -d $'\0' IFACE_BR_MEMBER_LINK; do
                IFACE_BR_MEMBER_NAME=$(basename $IFACE_BR_MEMBER_LINK)
                logger -is -t "my-bridge-ctl" -p "kern.info" "Handling ${IFACE_BR_NAME} member interface ${IFACE_BR_MEMBER_NAME} (${IFACE_BR_MEMBER_LINK})."
    
                # Actually do the bounce
                ip link set dev ${IFACE_BR_MEMBER_NAME} down && sleep 2 && ip link set dev ${IFACE_BR_MEMBER_NAME} up
    
                logger -is -t "my-bridge-ctl" -p "kern.info" "Interface ${IFACE_BR_MEMBER_NAME} bounced."
            done
        fi
    
        sleep 5
    else
        logger -is -t "my-bridge-ctl" -p "kern.info" "Could not create lock directory '$LOCKDIR'"
        exit 1
    fi
    
    • 1

相关问题

  • Lenny 网桥上的 Xen 3.2 损坏

  • 什么是bridge_fd?

  • Ubuntu 中的 KVM 桥接故障(服务器 9.04)

  • 在多台服务器之间拆分您的 DHCP 范围?

  • 复杂的 xen 网络设置不断改变下载速率,为什么?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve