Назад | Перейти на главную страницу

Можно ли получить доступ по SSH к серверу с неправильно настроенной подсетью?

У нас есть сервер, на котором один из наших инженеров неправильно сконфигурировал подсеть, и теперь мы заблокированы для этого сервера, и единственный доступ, о котором я знаю, будет работать, это последовательная консоль от IDC (это означает, что мы попросим инженера IDC помочь нам с этим) .

Что было неправильно сконфигурировано:

address 192.168.1.9 # Original address there was
netmask 255.255.255.254 # Misconfigured, originally should've been .240

Из любопытства - есть ли способ избежать вызова IDC и каким-то образом подключиться к этому хосту по SSH (тогда мы можем исправить конфигурацию)?

Вам необходимо войти в систему на другом хосте в том же сегменте сети. Некоторые способы получить доступ к неправильно настроенному хосту требуют root на промежуточном хосте, но есть также один простой способ получить доступ без необходимости root на промежуточном хосте.

Простой способ доступа к хосту с помощью IPv6

ssh -o ProxyCommand='ssh -W [fe80::42:ff:fe:42%%eth0]:%p user@intermediate-host' root@target-server

Следующие примеры значений в приведенной выше команде необходимо заменить правильными значениями для вашего варианта использования: fe80::42:ff:fe:42, eth0, user, intermediate-host, и target-server.

Подробное объяснение того, как это работает

ProxyCommand - это функция ssh, которую можно использовать, когда вы не можете открыть TCP-соединение напрямую с целевым хостом. Аргумент к ProxyCommand - это команда, стандартный ввод / вывод которой следует использовать вместо TCP-соединения.

-W используется для открытия переадресации одного порта и подключения его к stdin / stdout. Это прекрасно сочетается с ProxyCommand.

fe80::42:ff:fe:42%%eth0 - это локальный адрес целевого хоста. Обратите внимание, что из-за ProxyCommand с помощью % в качестве escape-символа набранная команда ssh должна использовать %% в этом месте. Вы можете найти все локальные для ссылок адреса в сегменте, запустив ssh user@intermediate-host ping6 -nc2 ff02::1%eth0.

Использование для этой цели локальных адресов IPv6 обычно является самым простым способом, поскольку он включен по умолчанию во всех современных системах, а локальные адреса ссылок продолжают работать, даже если стеки IPv4 и IPv6 настроены неправильно.

Возвращение к IPv4

Если IPv6 полностью отключен на неправильно настроенном хосте (абсолютно не рекомендуется), возможно, вам придется прибегнуть к использованию IPv4. Поскольку IPv4 не имеет локальных адресов канала, как IPv6, тогда доступ к неправильно настроенному хосту с использованием IPv4 становится более сложным и требует корневого доступа на промежуточном хосте.

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

Если у вас есть логин на 192.168.1.8, вы можете просто использовать ssh оттуда на 192.168.1.9. Если 192.168.1.8 в настоящее время не назначен, вы можете временно назначить его любому хосту в сегменте, к которому у вас есть root-доступ.

kasperd опубликовал отличный ответ, достаточно подробный, чтобы я мог узнать, как я могу выйти из ситуации в вопросе. Этот ответ - точная пошаговая инструкция того, как я это сделал.

  1. SSH к серверу в той же физической сети
  2. С помощью arp -a или ip neighbor list так как root найдите MAC-адрес неправильно настроенного сервера.
  3. С помощью Конвертер MAC в локальный канал найти локальную ссылку для неправильно настроенного сервера
  4. Теперь можно подключиться к серверу по SSH как любой пользователь через ssh user@link-local%dev где:
    • user - имя пользователя, для которого нам разрешен SSH
    • link-local - самоназначенный IPv6-адрес, восстановленный на шаге 3
    • dev - это физический интерфейс, через который доступен этот сервер (например, eth0)

Вам нужно загрузить IP-адрес в пределах настроенная подсеть вашей цели, а не только в пределах того диапазона, который вам действительно нужен.

Если вы отправляете пакет на 10.0.0.2 с подсетью 255.255.255.248, например, из 10.0.0.220, 10.0.0.2 будет смотреть на свою маску подсети, чтобы выяснить, как ответить. Поскольку .220 - это WAAY из подсети 255.255.255.248, .2 должен вместо этого отправить ответ на шлюз по умолчанию.

Итак, если вы можете загрузить IP-адрес в той же подсети, что и .2, например. 10.0.0.3, то заработает.

В вашем конкретном случае для 10.0.0.9 подсеть 255.255.255.254 имеет только 1 дополнительный IP-адрес, а именно 10.0.0.8. Итак, если вы можете загрузить этот IP-адрес, вы сможете использовать SSH.