Reduza a interface de rede se a conectividade física for perdida

2

Eu tenho um servidor Debian sem cabeçalho com duas placas de rede:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 01:02:1d:54:7c:01 brd ff:ff:ff:ff:ff:ff
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 01:02:1d:54:7e:01 brd ff:ff:ff:ff:ff:ff

Se eu desconectar o cabo conectado a eth1 , a porta será desativada, mas administrativamente permanecerá ativa:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 01:02:1d:54:7c:01 brd ff:ff:ff:ff:ff:ff
2: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT qlen 1000
    link/ether 01:02:1d:54:7e:01 brd ff:ff:ff:ff:ff:ff

Isso significa que as rotas associadas a eth1 ainda estão presentes na tabela de roteamento. Existe uma maneira de forçar o eth1 administrativamente a baixar uma vez fisicamente desconectado?

    
por Martin 29.10.2014 / 16:19

1 resposta

4

Uma solução rápida e suja seria usar ip monitor e um script que "ifupdowns" a interface.

O script seria:

#!/bin/sh

ip monitor link | while IFS=':' read num name status; do
    read extraline # iproute2 outputs physical address on a separate line.
    newstate=$(echo "$status"|awk -F' ' '{print $NF}')
    if [ "$newstate" = "UP" ]; then
        ifup "$name"
    elif [ "$newstate" = "DOWN" ]; then
        ifdown "$name"
    fi
done

O script não verifica o status da interface de rede antes de tentar alterá-lo, mas isso não deve ser um problema.

Para usá-lo, basta colocá-lo em /opt/bin/linkmonitor.sh , torná-lo executável com chmod +x /opt/bin/linkmonitor.sh e adicioná-lo a /etc/rc.local com um "e" comercial no final:

/opt/bin/linkmonitor.sh &

Se você precisar de uma solução mais robusta, talvez esteja interessado em uma solução de rota de failover .

    
por 29.10.2014 / 17:17

Tags