2

У меня есть "безголовый" * хост NIX - назовем его "foo", который должен быть доступен через SSH и VNC-tunneled-over-SSH в произвольной частной локальной сети 192.168.xy /24. Иногда я хочу физически переместить 'foo' из одной локальной сети в другую, так что 'x' зависит от локальной сети, и я хочу, чтобы 'y' был постоянным, с упорядоченным списком альтернатив для обработки конфликта распределения.

Поэтому, хотя мне нужен статический адрес (для цели с SSH), мне также нужно, чтобы он был динамическим (чтобы соответствовать подсети локальной сети, к которой он был подключен).

Да, некоторые маршрутизаторы допускают "особый соус", такой как резервирование DHCP или дополнительную конфигурацию маршрутизации, но допустим, что у меня нет доступа к маршрутизатору, но я могу ожидать, что он предоставит DHCP.

Итак, если бы я делал это вручную, я бы настроил 'foo' на использование DHCP при загрузке, и как только я получу оболочку, я могу посмотреть на адрес шлюза, чтобы выяснить мою подсеть, 192.168.x.0, где «х» - это то, что меняется от одной локальной сети к другой; затем я отредактировал бы /etc /network /interfaces (или эквивалентный), чтобы переключиться с DHCP на статический, синтезируя адрес из 'x' и константу 'y' (сначала пингуя 192.168.xy, чтобы проверить, занят ли он, и если так выбрав следующий «y» из списка предопределенных вариантов, поэтому в менее оптимальных ситуациях мне может понадобиться попробовать несколько адресов при запуске SSH), а затем перезапустить сетевой сервис.

Более хитрым вариантом будет локальная сеть без DHCP; в этом случае подсеть, вероятно, можно было бы определить путем выборки трафика локальной сети.

Если такая настройка может быть автоматизирована, то 'foo' может быть просто подключен к произвольной локальной сети и загружен, и будет хороший шанс найти его IP-адрес с первой попытки.

Есть ли какие-нибудь умные способы сделать то, что я после?

Помните, что вся конфигурация должна выполняться на хосте 'foo', и единственное предположение, которое можно сделать относительно целевой ЛВС, к которой он подключен, заключается в том, что он использует частную подсеть 192.168.xy /24.

1 ответ1

1

Возможно, некоторые ошибки, но их должно быть достаточно, чтобы сделать то, что нужно.

запустить от имени пользователя 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .