ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

ipmitool带内配置BMC网络全流程:从原理到实战

ipmitool带内配置BMC网络全流程:从原理到实战 接到一个远程排查的活儿机房在几百公里外服务器BMC的管理网段规划错了现场没有接显示器、没有键盘业务系统又不好随便动。这种时候一条ipmitool带内命令就能改完的配置愣是有人会拉着设备、搬着显示器进机房折腾小半天。其实BMC网络配置这事儿真没那么玄乎在X86服务器上用ipmitool走带内操作合理情况下几分钟就能收工关键是你得知道命令怎么敲、参数怎么填、报错怎么查。这篇文章我会完整讲一遍ipmitool配置BMC网络的全流程从概念原理到实操命令再到常见错误排查记录。不管你是刚入行的运维新手还是被BMC搞到头秃的老油条这篇都能给你省点时间。内容围绕Linux环境下的X86服务器带内方式操作不需要额外接网线、不用去IDC现场只要你机器的操作系统还能起来、IPMI驱动没被禁掉基本上就能远程搞定。1. 为什么要在X86服务器上通过带内方式配置BMC网络先说清楚一个概念BMCBaseboard Management Controller是服务器主板上独立于CPU和操作系统的一套管理控制器它有自己的处理器、内存、网卡和固件即使服务器关机、操作系统崩溃只要通电它就能工作。服务器上的远程管理口IPMI网口就归它管远程开关机、查看硬件状态、挂载虚拟介质全靠这个口。BMC的管理网口要能访问第一关就是得有一个正确的IP地址。现实中很多麻烦都出在这新机器默认DHCP拿到的地址不知道在哪、机房规划网段变了导致BMC失联、换过板卡后网络配置丢失。这些问题一旦发生常规思路是接显示器、接键盘进BIOS界面改或者开着电脑连专用管理口。但在远程场景下这两条路都走不通。带内操作的意义就在这里通过操作系统里的ipmitool工具直接对BMC下发配置命令既不需要进BIOS也不需要登录BMC的Web界面物理层面不增设备、不断业务。这里要区分两个词带内In-Band和带外Out-of-Band。带外指的是你通过独立的BMC管理口访问BMC比如打开它的网页或SSH走的是专用的管理通道不受业务操作系统影响。带内则是指从操作系统内部通过驱动和工具去和BMC通信本质上还是和业务共用一台主机但通信路径走的是IPMI消息通道底层是/dev/ipmi0这类设备节点不占用网口带宽。带内操作的最大价值就是应急两个字已经失联的BMC不需要你有物理接触只要OS还活着就能救回来。ipmitool是Intel主导的开源工具几乎覆盖了IPMI规范里所有核心功能包括传感器读取、FRU信息查看、电源控制、SOL串口重定向和网络配置。我们在X86服务器上配BMC网络用的就是它的lan和user命令组。这些命令背后走的是IPMI协议的消息交互所以和厂商关系不大Supermicro、Dell PowerEdge、HPE、浪潮、华为、联想这些主流X86服务器都能通用最多就是某些特殊参数有细微差异。2. 动手前准备工具安装、驱动确认与环境检查2.1 Linux发行版下快速安装ipmitool大多数主流Linux发行版的软件源里都自带了ipmitool不需要去官网找包。CentOS/RHEL系用yum或者dnfUbuntu/Debian系用aptopenEuler、麒麟这类国产系统也有对应命令。我实际用过的安装命令如下# CentOS 7 / Rocky Linux / openEuler 等 RPM 系 yum install -y ipmitool # Ubuntu 20.04 / 22.04 / Debian 等 DEB 系 apt-get install -y ipmitool有些精简安装的环境可能装的是ipmitool的依赖包不全装完之后可以执行ipmitool mc info验证一下能正常工作基本就说明安装没问题。如果碰到版本太老导致命令不支持某些参数可以考虑从源码编译但不建议在生产环境折腾官方源里的版本足够稳。2.2 内核模块和设备节点检查带内通信依赖Linux内核的IPMI驱动主要是三个模块ipmi_msghandler、ipmi_devintf和ipmi_si。前两个负责消息协议处理和设备接口第三个负责和底层硬件比如KCS控制器通信。在多数标准服务器上系统初始化时就会自动加载这些模块但有些精简内核或者定制化系统可能没有加载。可以先执行lsmod | grep ipmi看看# 检查驱动模块是否加载 lsmod | grep ipmi如果输出为空需要手动加载modprobe ipmi_msghandler modprobe ipmi_devintf modprobe ipmi_si # 保险起见再确认一下 ls /dev/ipmi*正常情况下你会看到/dev/ipmi0设备节点有的系统是/dev/ipmi/0或者/dev/ipmidev/0。如果设备节点存在但执行命令仍然报Can not open device最常见的原因就是权限不够ipmitool默认需要root权限来访问该设备。像类似的报错先用root身份执行或者sudo ipmitool试试能省掉很多无谓排查时间。2.3 操作权限与安全注意事项带内操作虽然方便但也是把双刃剑。ipmitool可以改BMC的IP、可以重置BMC、甚至可以关掉用户操作错了可能导致BMC彻底失联只能物理现场解决。所以我在执行这类操作前一定会先做三件事第一记录当前BMC的原始配置比如原IP、掩码、网关、用户列表万一改完连不上还能还原。第二确认自己的操作是不是在生产变更窗口内改BMC IP会导致正在通过该IP建立的连接中断。第三尽可能保留一个备用通道比如机房带外管理系统还能登录或者有同事在现场避免自己把自己锁在外面。提示在配置BMC网络前无论多急都先执行一遍ipmitool lan print 1把输出存下来。这个习惯在故障处理时能救命。3. 5分钟核心操作流程从查看现状到修改地址、网关与校验3.1 先摸底查看当前BMC网络状态不要上来就直接改先看看BMC当前是什么状态。因为不同厂商的固件实现有差异有的机器BMC管理网口的编号是1有的是2甚至3如果对着错误的通道设置后面的操作全白费。查看当前网络配置的命令如下# 查看BMC网络通道信息通常通道号是1也有2或3的情况 ipmitool lan print 1执行后会输出一串信息重点看几个字段IP Address Source这个值是Static Address还是DHCP Address决定了BMC当前是静态IP还是动态获取。IP Address当前BMC的IP地址。Subnet Mask当前子网掩码。Default Gateway IP默认网关。MAC AddressBMC网口的MAC地址这个后面排查故障时很有用。VLAN ID如果Enable说明BMC网络是在某个VLAN里配置时要特别小心。顺手再执行下ipmitool mc info确认BMC本身是活着的固件版本、厂商信息都能看到。如果连mc info都超时说明IPMI驱动或者BMC控制器有问题后面步骤就要先解决这个。# 确认BMC基本状态 ipmitool mc info3.2 切换到静态IP模式并写入地址、掩码、网关确认通道号之后配置过程本质就是四步设置地址来源为静态、设置IP、设置掩码、设置网关。这里的顺序有讲究我建议先设置地址来源再设置其他参数避免中间状态下出现动态和静态配置互相覆盖。# 第一步将IP获取方式改为静态 ipmitool lan set 1 ipsrc static # 第二步设置静态IP地址比如规划的管理地址是192.168.10.25 ipmitool lan set 1 ipaddr 192.168.10.25 # 第三步设置子网掩码比如是标准C类网段 ipmitool lan set 1 netmask 255.255.255.0 # 第四步设置默认网关 ipmitool lan set 1 defgw ipaddr 192.168.10.1这里有个容易犯的错有的朋友会先设置IP地址再设置静态模式结果发现BMC过一会儿又变回了DHCP获取的值。原因就是ipsrc static这条命令在某些固件上会把网络参数重置一遍所以最稳妥的方式是把ipsrc static放最前面改完其他值后再执行一遍ipmitool lan print 1检查写入是否成功。有的环境还涉及VLAN配置。如果服务器的网络规划要求BMC网口在特定VLAN里需要执行# 启用VLAN并设置ID假设是100 ipmitool lan set 1 vlan id 100 ipmitool lan set 1 vlan enable但这里我要多说一句不要随便开VLAN。很多次现场联不通最后发现就是有人把VLAN开了但交换机端口配的是access口两边不匹配直接不通。如果原本没有VLAN需求保持vlan disable就好。3.3 清理旧配置与确认变更生效配置写入之后BMC不会马上应用新地址有些固件需要等几秒有些需要重启网络或者BMC才会生效。不要慌着去ping可以先用带内方式重新读取配置确认参数已经写进BMC的非易失存储# 确认网络参数已落盘 ipmitool lan print 1看到输出的IP地址、掩码、网关都变成你设置的新值说明写入已经成功。这个时候BMC可能还在旧IP上响应也可能已经切到新IP。我的习惯是等一下再测一般等个10到20秒然后从另一台机器ping一下新地址# 从任意一台同网段机器上测试连通性 ping -c 4 192.168.10.25如果ping通了基本就算配置成功。这个环境里BMC的Web服务或者SSH一般是基于这个新IP的你可以顺手用浏览器或者SSH试一下确认远程管理口整体可用。3.4 特殊情况需要改为DHCP获取地址怎么办不是所有场景都要配静态IP。有些小型环境没有维护IP地址表或者现场网络本身有DHCP希望BMC自动获取地址。这时候可以执行# 将IP获取方式改为DHCP ipmitool lan set 1 ipsrc dhcp之后等十几秒再用ipmitool lan print 1去查IP地址会变成DHCP服务器分配的值。这里有个实际工作中很常见的问题BMC自己的日志或Console里确实显示了它通过DHCP拿到了一个地址但你不知道是多少。解决办法有两个一是去DHCP服务器上看租约记录二是用ipmitool lan print 1打印出来看但前提是BMC本身没有失联。所以对远程运维场景静态IP还是优先选择。3.5 顺手配置BMC用户和权限如果是新交付的服务器BMC默认的管理员用户名和密码大概率是弱口令比如admin/admin这类拿过来改网络的同时最好把密码也改掉。ipmitool操作BMC用户的命令如下# 查看当前用户列表 ipmitool user list 1 # 修改某个已有用户的密码 ipmitool user set password 2 MyNewPass2024 # 新建用户并设置权限权限4表示管理员 ipmitool user set name 3 opsadmin ipmitool user set password 3 OpsAdmin2024 ipmitool user priv 3 4 ipmitool user enable 3注意用户ID不能随便指定要看user list 1返回的可用ID号。权限等级里4才是Administrator1是Callback2是User3是Operator很多朋友配完用户发现登录后只能看不能操作多半是权限没给到4。4. 常见报错、排查思路与避坑实录4.1 报错速查与对应处理我把实际工作中遇到比较高频的报错整理了下用表格会比较直观。报错信息/现象可能原因处理办法Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directoryIPMI内核模块未加载执行modprobe ipmi_msghandler、ipmi_devintf、ipmi_si再确认/dev/ipmi0出现Unable to establish IPMI session / No route to host带外通信时网络不通或BMC IP不可达检查IP地址、网关、防火墙带内操作时先检查设备节点和模块Unable to send RAW command (channel0x0 netfn0x6 lun0x0 cmd0x1 rsp0xcc)带内IPMI通信层异常或驱动被固件禁用重启相关内核模块检查BIOS里IPMI功能是否开启必要时冷重启BMCInsufficient privilege / Requested level exceeds channel limit当前带内会话权限不足使用root或sudo执行ipmitool或检查BMC用户权限等级lan set command failed某个参数不受当前固件支持检查通道号是否正确换一个通道试试确认BMC固件版本是否过老Set Complete / Invalid data field in request写入的参数不合法检查IP地址格式、掩码、网关是否处于合法范围有些固件会限制网关必须和IP同网段这些报错里最常见也最让人头疼的是设备节点不存在和通信层失败。我实际踩过的坑是某国产X86服务器装的是精简内核IPMI驱动默认没编译进去手动modprobe还报依赖缺失最后用的是apt-get install -y linux-modules-extra-$(uname -r)装全内核模块包才解决。所以在新环境里先花一分钟检查模块和设备节点真的能省下后面半小时的排查时间。4.2 改完IP之后BMC连不上怎么定位这是另一个高频场景明明lan print 1里显示地址已经改成了目标值结果从管理机死活ping不通新IP。先别急着重启BMC按下面这个顺序排查。第一看一下BMC网口的工作状态。很多服务器的BMC管理口是共享网口模式Shared也就是说BMC和业务系统共用同一个物理网口靠IP的不同来区分管理流量和业务流量。这个模式下如果业务网卡的链路没有起来BMC的IP也通不了。换个说法物理链路层不通IP配置再正确也没用。第二确认自己是不是站在正确网段去ping的。改完IP之后网关和掩码要配套比如BMC地址改成了192.168.20.25掩码还是255.255.255.0而你管理机在192.168.10.0/24网段那你就得先解决三层路由问题而不是怀疑BMC配置失败。第三检查一下VLAN设置。如果BMC网络里开启了VLAN而交换机端口没做对应配置那这个链路就是静默失败的。我建议排查这类问题时把VLAN先关掉简单粗暴。第四执行一次ipmitool mc reset cold让BMC冷重启。这个命令会重启BMC但不影响操作系统平时改完网络后做个保险。不过要注意BMC重启需要一两分钟时间期间所有通过BMC的管理操作都会中断如果还有别人连着这台服务器的BMC先打声招呼再说。# 冷重置BMC恢复网络相关初始化 ipmitool mc reset cold4.3 不同厂商X86服务器之间的细微差异ipmitool在设计上基于标准IPMI规范所以大部分命令是通用的但不同OEM厂商在BMC固件实现里的细节并不完全一致。这里列几个我实际遇到的差异点通道号多数服务器BMC网络通道是1但有些型号会在LAN over USB等场景下额外暴露通道7、8改网络前必须lan print看一下哪些通道有实际网口。默认网关设置个别厂商固件要求先设置VLAN ID再设置网关否则网关写不进去还有的要求网关和IP网段严格一致跨网段会报错。DHCP hostname部分服务器BMC DHCP请求里带的hostname是固定的比如BMC或IPMI在DHCP租约日志里找的时候可以按这个关键词过滤。共享/专用模式切换部分服务器可以通过ipmitool的lan set 1 access相关参数控制管理口模式比如Dell的lan set 1 access auto、Supermicro某些固件在ipmitool lan set 1 access shared之类如果不支持该参数命令会报错不要强行尝试。碰到这些差异正确的做法是执行ipmitool lan print 1查看输出中有哪些字段支持然后针对这项设置进行修改。不同固件支持的参数都不完全一样与其猜不如先打印再填写。4.4 带内操作的安全建议最后聊几点带内配置BMC网络的操作纪律。这条经验是我自己拿教训换来的有一次在客户现场做批量巡检为了省事写了个脚本循环跑ipmitool lan set 1 ipsrc static和ipmitool lan set 1 ipaddr结果因为通道号写死把一台正常运行的机器BMC网关给搞出问题人还在千里之外差点没法收场。从那以后我给自己定了几个规则。任何批量脚本前先manually执行一遍单机流程确认参数无误再放开循环。始终将BMC的原始配置保存下来最好直接输出到文本文件里留档。修改BMC IP这类操作尽量选择业务低峰期并且和机房同事打好招呼避免相互干扰。不要在业务环境的操作系统里随便升级ipmitool版本或编译安装以防软件包冲突影响业务依赖。这些规则看起来没什么技术含量但在故障现场价值极高。远程运维本身就是高风险操作能少一点不确定性就少一点。5. 一个实战案例从BMC失联到恢复的全过程前面讲了很多理论这里分享一个我最近处理的真实案例也顺带把整套流程串一遍。一台机龄较长的X86服务器因为机房内部网段调整BMC原来的IP段被取消等于BMC直接失联了。服务器上是CentOS 7系统业务正常跑着但我没法进BIOS也没法访问BMC的Web页面。刚开始我先SSH登录到这台机器的操作系统确认系统起来没问题之后第一件事就是lsmod | grep ipmi结果内核模块都在/dev/ipmi0也在说明带内通道是通的。然后执行ipmitool mc info发现BMC固件活得好好的只是网络参数还是更新前那个网段我自然ping不通。接下来我执行ipmitool lan print 1看了一下详细状态。输出显示IP Address Source是DHCP Address但拿到的IP是一个根本不在规划里的地址明显是上一个网段的旧租约。知道这个情况后我直接按新规划配置了静态地址ipaddr设成新网段的地址netmask按新段设置defgw设成新段的网关。执行完那三条命令后我先lan print 1确认写入成功再等了十几秒然后从跳板机ping了一下新地址第一个包超时第二个包就通了。之后打开BMC的Web端用原来的账号密码登录网络配置这一关就算过了。这个案例里最关键的其实不是命令而是确认带内通道可用。如果内核模块加载失败或者BMC被人在BIOS里禁掉了IPMI over LAN那带内操作也救不回来只能想别的办法。所以在做BMC网络配置这类事情时我的习惯永远是先摸清楚手上有什么牌驱动在不在、设备节点在不在、BMC能不能响应、当前通道是几号。每一步确认完再往下走整个过程其实不止5分钟但思路清楚后大部分时间都花在连接和等待上真正的命令执行时间确实只需要几分钟。根据我个人经验配置BMC网络最忌讳的就是上来就敲命令尤其是对着一台不熟悉的服务器。每次操作前多花两分钟把当前配置打印出来、把驱动状态确认一遍、把变更命令在脑子里过一遍表面上多花了一点时间实际上反而帮你避开了大坑。这套流程适合所有X86服务器无论你是管理十几台的初创公司运维还是维护几千节点的数据中心团队把这套命令和排查思路吃透绝对能让你的远程运维轻松不少。
返回列表