Это сервер SuperMicro с материнской платой X8DT3, которая содержит встроенный BMC IPMI. В этом случае BMC - это Winbond WPCM450). Я считаю, что многие серверы Dell используют эту аналогичную модель BMC.
Обычная практика с IPMI - изолировать его от частной немаршрутизируемой сети. В нашем случае все карты IPMI подключены к частной сети управления по адресу 192.168.1.0/24, у которой нет маршрута к внешнему миру. Если я подключу свой ноутбук к сети 192.168.1.0/24, я могу убедиться, что все функции IPMI работают должным образом, включая удаленную консоль.
Мне нужно получить доступ ко всем функциям IPMI из другой сети через какое-то зашифрованное соединение.
Я пробовал переадресацию порта SSH. Это отлично работает для нескольких серверов, однако у нас есть около 100 таких серверов, и поддерживать конфигурацию клиента SSH для переадресации 6 портов на 100 серверов нецелесообразно.
Поэтому я подумал, что попробую SOCKS прокси. Это работает, но похоже, что приложение Remote Console не подчиняется моим общесистемным настройкам прокси.
Я настраиваю прокси SOCKS. Подробное ведение журнала позволяет мне видеть сетевую активность и переадресацию портов.
ssh -v -D 3333 stefanl@gateway.example.org
Я настраиваю свою систему на использование прокси-сервера SOCKS. Я подтверждаю, что Java использует настройки прокси-сервера SOCKS.
Прокси-сервер SOCKS работает. Я подключаюсь к BMC в http://192.168.1.100/ используя мой веб-браузер. Я могу войти в систему, просмотреть состояние сервера, включить или выключить машину и т. Д. Поскольку подробное ведение журнала SSH включено, я могу видеть прогресс.
Вот где бывает сложно:
Я нажимаю кнопку «Запустить консоль», которая загружает файл с именем jviewer.jnlp
. Файлы JNLP открываются с помощью Java Web Start.
Откроется окно Java. В строке заголовка написано «Средство просмотра перенаправления» в строке заголовка. Есть меню для «Видео», «Клавиатура», «Мышь» и т. Д. Это подтверждает, что Java может загрузить приложение через прокси и запустить приложение.
Через 60 секунд приложение отключается и просто сообщает «Ошибка при открытии видеоразъема». Вот Скриншот. Если бы это сработало, я бы увидел окно в стиле VNC. Мои журналы SSH не показывают попыток подключения к портам 5900/5901. Это говорит о том, что приложение Java запустило приложение VNC, но приложение VNC игнорирует общесистемные настройки прокси-сервера и, таким образом, не может подключиться к удаленному хосту.
Кажется, что Java подчиняется моим системным настройкам прокси, но это приложение VNC игнорирует его.
Могу ли я заставить это приложение VNC использовать мои общесистемные настройки прокси?
Я понял, что для этого лучше не использовать прокси-сервер socks, а вместо этого перенаправить все порты, необходимые на IP-адрес localhost. Чтобы обойти любые существующие службы, я использую IP-адрес, отличный от 127.0.0.1. Предполагая, что вы выбрали 127.0.0.2, а ваш сервер за прокси - 192.168.1.1, это команда ssh, которую следует использовать:
ssh user @ proxy-server -L127.0.0.2: 443: 192.168.1.1: 443 -L127.0.0.2: 5900: 192.168.1.1: 5900 -L127.0.0.2: 5901: 192.168.1.1: 5901 -L127 .0.0.2: 5120: 192.168.1.1: 5120 -L127.0.0.2: 5123: 192.168.1.1: 5123 -C
Затем вы можете просмотреть https://127.0.0.2 и используйте KVM как обычно.
Перенаправленные порты TCP: 5900 и 5901 для управления и видео, 5120 для виртуального компакт-диска и 5123 для виртуальной дискеты (последние два я не тестировал). Добавлен -C для сжатия, хотя я не знаю, подходит ли что-нибудь для сжатия.
Другой, немного удобнее (и, теоретически, более эффективный) метод на Linux заключается в использовании шаттл, который прозрачно перенаправляет все TCP-соединения через ssh с использованием iptables и интерпретатора python на прокси-сервере.
sshuttle -r пользователь @ прокси-сервер 192.168.1.1
Подсказка: sshuttle упакован в Debian.
То, что я пока не мог переслать, - это UDP-порт 623, который можно использовать для ipmitool, соединения CLI для IPMI. Там являются несколько учебники по этому поводу, но ни один из них не помог мне. В любом случае, Java KVM достаточно хорошо.
Похоже, что вам лучше всего подойдет VPN. Создайте ACL на маршрутизаторе, чтобы единственный нелокальный трафик проходил через VPN, и все готово. Очень простой и безопасный, а также легкий в управлении.
Пытаться цоски, он должен позволить вам запускать любой процесс через прокси-сервер SOCKS, установив LD_PRELOAD, который должен работать во всех подпроцессах, см. этот например использование. Конечно, если вы используете ssh для создания прокси-сервера SOCKS, у вас все равно будет проблема с UDP, но это должно обойти проблему подпроцесса.