Duas NICs com DHCP, use uma como alternativa

3

O cenário é o seguinte: Linux box, executando o Debian, tendo duas NICs (uma conexão de banda larga e uma conexão Wifi), ambas com DHCP e sem informações sobre as redes conhecidas antecipadamente e sujeitas a alterações ao longo do tempo. Queremos usar a conexão Wi-Fi como padrão, mas automaticamente recorrer à conexão de banda larga se a conexão wifi falhar por qualquer motivo. Além disso, quando a conexão Wi-Fi começar a funcionar novamente, queremos voltar automaticamente para a conexão Wi-Fi.

Alguma ideia de como configurar isso? Estou imaginando para fazer isso através de rotas ip, mas a sondagem da conexão wifi deve ser bastante geral como um ping para um servidor específico (a razão pela qual a verificação deve ser algo como um ping é que a conexão wifi ainda pode estar presente, mas o próprio wifi não está mais conectado à internet).

    
por Dr. Oliver Friedmann 06.12.2016 / 07:04

1 resposta

1

Eu resolvi o problema com o seguinte script de plano de fundo:

#!/bin/sh
PRIMARY=wlan0
SECONDARY=eth1
SLEEP=60
PING=8.8.8.8
CONDITION="100% packet loss"


while :
do
    echo Init
    ifmetric $PRIMARY 100
    ifmetric $SECONDARY 200
    if [ "'ip route | grep default | grep $PRIMARY'" = "" ];
    then
        ip route add default via 'ip route show | grep $PRIMARY | grep "scope link" | sed 's/\(.*\)0\/.*//''1 dev $PRIMARY
    fi
    if [ "'ip route | grep default | grep $SECONDARY'" = "" ];
    then
        ip route add default via 'ip route show | grep $SECONDARY | grep "scope link" | sed 's/\(.*\)0\/.*//''1 dev $SECONDARY
    fi
    ifmetric $PRIMARY 100
    ifmetric $SECONDARY 200
    echo Primary
    while [ "'ping -I $PRIMARY -c 10 -w 20 $PING | grep \"$CONDITION\"'" = "" ];
    do
        sleep $SLEEP
    done
    echo Secondary
    ifmetric $SECONDARY 50
    while [ -n "'ping -I $PRIMARY -c 10 -w 20 $PING | grep \"$CONDITION\"'" ];
    do
        ifdown $PRIMARY
        sleep $SLEEP
        ifup $PRIMARY
        sleep $SLEEP
    done
done
    
por 06.12.2016 / 20:28