Linha de comando do Linux: maneira rápida de desativar a Internet (mantendo a LAN)?

6

Split question: this other one here is for Windows.

Linux: A maneira mais rápida de desativar a internet (mantendo a LAN) a partir da linha de comando?

Acho que a maneira mais fácil de desativar a Internet (não a LAN) no Linux é remover o gateway padrão, portanto, supondo que a LAN seja 10.0.2.0/24 e o gateway seja 10.0.2.1:

'sudo /sbin/route del default gw 10.0.2.1'

Para reativar a internet:

'sudo /sbin/route add default gw 10.0.2.1'

Mas, mesmo quando se trata de uma linha simples, é necessário descobrir primeiro o IP do gateway padrão:

'sudo /sbin/route'

Eu vou construir alguns shell scripts de uso geral que precisam ativar / desativar a internet (mas manter a LAN funcionando), então parece que vou precisar de algumas operações (¿ grep , talvez?) para filtrar e detectar o número exato do IP do gateway (pode ser 10.0.2.1, 127.0.0.1, 127.0.50.1, 192.168.0.1 ... etc), a menos que consiga encontrar uma linha de comando mais simples.
Alguma idéia, por favor?

    
por Sopalajo de Arrierez 03.02.2014 / 23:20

1 resposta

7

No * nix, para encontrar o gateway:

GW="$(sudo /sbin/route -n | awk '$1=="0.0.0.0" {print $2; exit}')"
sudo /sbin/route del default gw "$GW"
echo "$GW" >~/my_tmp_file

A última linha salva o valor em um arquivo para uso posterior quando você quiser reiniciar a rede:

sudo /sbin/route add default gw "$(cat ~/my_tmp_file)"

Nota : Se houver mais de um gateway padrão, será necessário que esse código seja executado novamente para cada um deles ou seja reescrito para suportar isso.

Como funciona: O comando awk acima é capaz de capturar o gateway porque route -n output se parece com:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.2.1        0.0.0.0         UG    0      0        0 eth0
10.0.2.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0

O gateway da internet é aquele que permite o destino em qualquer lugar ( 0.0.0.0 ). Assim, o script awk passa por este resultado linha por linha olhando para a primeira coluna (chamada $1 em awk notação). Quando a primeira coluna é destino em qualquer lugar, ela imprime a segunda coluna, que é o gateway. A saída do comando awk é então capturada na variável GW da shell. O shell pode então ser solicitado a substituir $GW em qualquer comando que precise dele.

    
por 03.02.2014 / 23:32