Я давно слышал про IPMI, но использовать его на практике раньше не
приходилось - поддержка IPMI есть только на серверных мамках (а
бюджетные сервера часто работают на десктопных), и то на многих модуль
IPMI не распаян на плате, а подключается в виде отдельного модуля
(который продается за отдельные деньги).
Среди прочих полезных (и не очень) функций IPMI позволяет:
* удаленно выключить/включить сервер, даже если ОС "зависла"
* Использовать Serial-over-LAN - позволяет по сети подключиться к
серверу и работать с ОС через serial console, например что то
сделать в single mode. С точки зрения ОС на управляемого сервера
это выглядит как подключение к обычному COM-порту (и настраивать
нужно так же)
Но недавно совершенно случайно выяснилось, что в нашей конторе есть
сервера с Intel-овским матерями, где есть встроенная поддержка IPMI (я
увидел в tcpdump странные gratious arp и решил выяснить откуда они
берутся - оказалось их отправляет IPMI-контроллер).
И я решил посмотреть как это работает:
загружаем драйвер (в GENERIC его нету):
# kldload ipmi
# dmesg | tail
ipmi0: on isa0
ipmi0: KCS mode found at io 0xca2 alignment 0x1 on isa
ipmi0: IPMI device rev. 1, firmware rev. 0.2, version 2.0
ipmi0: Number of channels 2
ipmi0: Attached watchdog
Если в dmesg ничего нет, то значит на данной мамке нет модуля IPMI и
дальше можно не продолжать.
Для настройки локального контроллера и работы по сети с удаленным
контроллером можно использовать [16]ipmitool:
# portinstall ipmitool
Для проверки того, что ipmitool работает с данным контроллером, можно
посмотреть, например
# ipmitool chassis status
System Power : on
Power Overload : false
Power Interlock : inactive
Main Power Fault : false
Power Control Fault : false
Power Restore Policy : always-on
Last Power Event : command
...
Для настройки сетевого управления надо выяснить каким каналом является
сетевой интерфейс, для этого по очереди запускаются команды вида
ipmitool channel info 0, ipmitool channel info 1, ipmitool channel info
2 и т. д. В моем случае сетевой интерфейс оказался 1-м каналом:
# ipmitool channel info 1
Channel 0x1 info:
Channel Medium Type : 802.3 LAN
Channel Protocol Type : IPMB-1.0
Session Support : multi-session
Active Session Count : 4
Protocol Vendor ID : 7154
Volatile(active) Settings
Alerting : enabled
Per-message Auth : enabled
User Level Auth : enabled
Access Mode : always available
Non-Volatile Settings
Alerting : enabled
Per-message Auth : enabled
User Level Auth : enabled
Access Mode : always available
Собственно настройка:
# ipmitool sol set force-encryption true
# ipmitool sol set force-authentication true
# ipmitool lan set 1 snmp some_random_string
# ipmitool lan set 1 ipaddr 192.168.223.6
# ipmitool lan set 1 netmask 255.255.255.0
# ipmitool lan set 1 password remember_the_string
Если доступ нужен не только из данной подсети, то надо задать шлюз по
умолчанию.
На удаленной машине пароль можно сохранить в файле:
cat > ipmi_passfile
remember_the_string
Ctrl+d
И можно удаленно смотреть разную информацию о состоянии сервера:
ipmitool -f ipmi_passfile -I lanplus -H 192.168.223.6 power status
BB +1.8V SM | 1.79 Volts | ok
BB +3.3V | 3.30 Volts | ok
BB +3.3V STBY | 3.24 Volts | ok
BB +5.0V | 5.01 Volts | ok
Processor Vcc | 1.21 Volts | ok
BB Ambient Temp | 35 degrees C | ok
CPU Fan | 0 RPM | ok
System Fan 3 | 3726 RPM | ok
P1 Therm Margin | no reading | ns
Power Unit | 0x00 | ok
IPMI Watchdog | 0x00 | ok
Processor Status | 0x00 | ok
Или перезагрузить сервер - power soft, далее смотреть power status.
Если сам не выключится можно сделать power off. После этого включить
его обратно - power on.
Для того, чтобы можно было подключиться к сервере через Serial-over-LAN
его нужно настроить так же как и при подключении консоли в COM-порт:
В /boot.config нужно написать
-PD
В /etc/ttys найти строчку с ttyd0 и заменить off на on и сделать kill -HUP 1
После этого на удаленном сервере можно запустить
ipmitool -f ipmi_passfile -I lanplus -H 192.168.223.6 sol activate
и увидеть консоль управляемого сервера.
Т. е. в целом IPMI очень полезный инструмент. Жаль что в большинстве
наших серверов используются материнки, в которые IPMI нужно втыкать в
виде отдельной платы.
Из того, что мне в IPMI не понравилось хочется отметить:
* запутанная система авторизации (кроме возможности установить пароль
по умолчанию, как в примере выше, можно создавать разных
пользователей с разными правами и задавать кучу других параметров).
Это приводит к тому, что иногда [17]сложно настроить так, чтобы по
сети нельзя было выполнять команды без пароля
* в лог не пишется факт удаленного выполнения команды и ip с которого
это был сделано (может я плохо искал?)