Na inicialização, como posso mudar para um IP estático com base em um IP de gateway fornecido pelo DHCP?

2

Eu tenho um host NIX "headless" * - vamos chamá-lo de 'foo' - que deve ser acessível via SSH e VNC-tunneled-over-SSH em uma rede privada 192.168.x.y / 24 privada. Às vezes, eu quero mover fisicamente 'foo' de uma LAN para outra, então 'x' depende da LAN, e quero que 'y' seja constante, com uma lista ordenada de alternativas para lidar com a contenção de alocação.

Portanto, embora eu queira um endereço estático (para segmentar com SSH), também preciso que ele seja dinâmico (para corresponder à sub-rede da LAN à qual ele está anexado).

Sim, alguns roteadores permitem "molho especial", como reserva de DHCP ou configuração de roteamento adicional, mas digamos que eu não tenha acesso ao roteador, mas posso esperar que ele ofereça DHCP.

Então, se eu fizesse isso manualmente, eu definiria 'foo' para usar o DHCP na inicialização, e assim que eu obtivesse um shell, eu poderia ver o endereço do gateway para descobrir minha sub-rede, 192.168.x. 0, onde 'x' é o que varia de uma LAN para outra; então eu editaria '/ etc / network / interfaces' (ou equivalente) para mudar de DHCP para estático, sintetizando o endereço de 'x' e a constante 'y' (primeiro pingando 192.168.xy para verificar se ele está ocupado e em caso afirmativo , escolhendo o próximo 'y' em uma lista de opções predefinidas, portanto, em situações menos ideais, talvez eu tenha que tentar vários endereços ao executar o SSH) e, em seguida, reiniciar o serviço de rede.

Uma variação mais complicada seria uma LAN sem DHCP; Nesse caso, a subrede provavelmente poderia ser adivinhada por amostragem de algum tráfego de LAN.

Se tal configuração pudesse ser automatizada, então 'foo' poderia simplesmente ser anexado a uma LAN arbitrária e inicializado, e haveria uma boa chance de encontrar seu endereço IP primeiro.

Existe alguma maneira inteligente de fazer o que eu quero depois?

Lembre-se, toda a configuração deve ser feita no host 'foo', e a única suposição que pode ser feita sobre a LAN de destino à qual ela está conectada é que ela usa uma sub-rede privada 192.168.x.y / 24.

    
por bernz 09.04.2015 / 20:32

1 resposta

1

Alguns bugs provavelmente, mas devem ser suficientes para fazer o que for necessário.

executado como root.

#!/bin/bash

ARPCOUNT=10
LOCALNET='route | grep default | awk '{print $2}' | cut -f1-3 -d'.''
NETMASK='route | grep default | awk '{print $3}''
DEVICE='route | grep default | awk '{print $8}''

for ((xval=100; xval<254; xval++ )) ; do

    CURIP=$LOCALNET.$xval

    arping -c $ARPCOUNT $CURIP > /dev/null
    ARPRESULT=$?

    if ! [ $ARPRESULT ] ; then
    echo "No IP found at $CURIP."

    else
    route
    ifconfig $DEVICE down
    ifconfig $DEVICE $LOCALNET.$xval netmask $NETMASK
    ifconfig $DEVICE up
    route
    echo "Changed to IP $CURIP."
    exit
    fi

done
    
por 10.04.2015 / 06:57