AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 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

Sincronize estados de interfaces de ponte

  • 772

Temos links de fibra 10G redundantes para nosso provedor de internet upstream em uma configuração ativa/failover. Entre nosso roteador e o roteador upstream, temos um par de firewalls executando o Vyos em modo transparente. Usamos BGP para anúncio de rota e não podemos alterar a maioria dos parâmetros.

Desenho:desenho de layout de rede

Se o link para um dos roteadores cair (por exemplo, aquele com o xno desenho - esse é o nosso tipo mais comum de falha), toda a rede fica inacessível até o tempo limite do BGP (até 150 segundos). Eu já sei que se forçarmos o link do outro lado da ponte para baixo, nossos roteadores começarão imediatamente a encaminhar o tráfego pelo outro link.

Existe alguma maneira de derrubar automaticamente um lado da ponte no firewall se o outro lado cair?

Existem armadilhas ocultas para essa solução?

bridge
  • 2 2 respostas
  • 127 Views

2 respostas

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

    Eu executaria um script nas máquinas VyOS que verifica o estado da conexão upstream e depois faz ifdown/ ifupno outro lado conforme necessário.

    A maneira mais simples de fazer isso é colocando scripts /etc/network/if-down.d(verifique se a interface que caiu é o lado atualizado e derrube o outro lado) e /etc/network/if-up.d(verifique se a interface que subiu é o lado atualizado e abra o outro lado dele é).
    Alternativamente, você pode executar um script de monitoramento uma vez por minuto com cron (ou Systemd Timers, ou qualquer agendador semelhante), ou você pode escrevê-lo como um loop infinito que dorme por alguns segundos para obter uma verificação de subminutos.

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

    Eu escrevi um script que verifica as interfaces /syspara determinar se elas são membros da ponte e, em seguida, devolve a ponte. O VyOS usa netplugdpara monitorar interfaces e, por algum motivo, meu script o confunde (provavelmente escreverei uma pergunta separada para isso), mas acho que é uma boa solução geral.

    #!/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

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

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

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve