
刚入行那会儿我最怕的就是华为设备配置与命令。VRP系统的命令看着多几百条上千条但真正天天用到的其实就那么几十条。这篇文章我不打算给你背命令大全而是围绕“华为设备配置与命令”这条主线从视图体系、接口配置、Telnet远程登录一直讲到用Python 3.9写脚本自动登录eNSP里的设备最后再整理一份我踩过无数次坑的问题排查实录。适合刚接触华为交换机和路由器的朋友也适合准备HCIA考试、需要搭建实验环境的同学。你只要有台电脑装上eNSP照着文中的步骤走一遍这套东西就能变成你自己的。1. 华为设备配置的核心思路与最小知识体系1.1 先搞懂视图体系所有命令都活在“房间”里华为设备的命令看起来杂乱实际上全部活在几个固定的“房间”里专业点叫视图。你不进对房间命令输进去就是报错这是新手最容易卡住的第一关。用户视图设备登录后默认待的地方提示符是尖括号比如Huawei。这里只能看基础信息比如display version改不了配置。系统视图从用户视图输入system-view进入提示符变成方括号[Huawei]。大部分全局配置都在这层比如改设备名、配置SSH、配路由协议。接口视图在系统视图输入interface GigabitEthernet0/0/1进入某个接口提示符带接口名比如[Huawei-GigabitEthernet0/0/1]。所有跟接口相关的命令包括IP地址、封装VLAN、开启端口都在这配。其他视图还有VTY视图、AAA视图、ACL视图等本质上就是把配置范围缩小到某一类功能上。你只要记住一条原则命令能输进去说明你所在的视图管得着这件事。我见过不少同事在用户视图里敲system-view没反应或者把interface命令当成全局命令硬敲原因就是没理解视图。实际排查的时候你也得靠提示符判断当前在哪比如[Huawei-GigabitEthernet0/0/1]说明你正在配接口这时候想去配路由协议必须先用quit退回系统视图。1.2 配置落地的三个要素接口、协议、验证华为设备配置不是把命令敲完就结束了一条配置能不能真正生效我总结下来必须过三道关。第一道关是接口。物理接口默认可能处于shutdown状态你得先undo shutdown接口要工作必须配上IP地址。这里有个容易忽略的点华为设备接口视图下配置IP地址的命令是ip address 192.168.1.1 24注意掩码写法可以是24也可以是255.255.255.0两种都认。不少从思科转过来的朋友习惯写成ip address 192.168.1.1 255.255.255.0在华为设备上也没问题但我更推荐24这种长度写法手速快还少打一串。第二道关是协议或链路。比如你配置了VLAN但接口还处于Access模式那带VLAN Tag的帧就进不来比如你配了Telnet但VTY接口没放行远程还是登不上。每种业务都需要对应的协议或链路配置兜底这一层最容易出现“配置了但没生效”的假象。第三道关是验证。配置完之后不是看一眼就完事得用display系列命令确认。比如display ip interface brief看一眼接口IP有没有配上去display current-configuration看一眼设备里的完整配置。我自己有个坏习惯被老工程师纠正过敲完配置直接退出没验证第二天才发现端口没起来。从那以后我每配完一步必用display确认这个习惯帮我省了太多返工成本。2. 高频华为设备命令拆解查看、配置、保存三板斧2.1 查看类命令display是你最该依赖的工具华为设备里所有查看命令都以display开头这是一个极其统一的设计。你不需要死记硬背几百条只需要记住display后面能跟哪些关键词。命令作用使用场景display version查看版本和启动时间开局确认设备型号、版本是否匹配display current-configuration查看当前生效配置最常用的排障命令简称display curdisplay ip interface brief查看接口IP和状态确认接口有没有UPIP配没配对display vlan查看VLAN列表确认VLAN是否创建display port vlan查看接口VLAN模式排查Access/Trunk/Hybrid配置display mac-address查看MAC地址表排查二层通信问题display arp查看ARP表排查三层通信问题display current-configuration是我最推荐的入门命令。它把设备上所有生效的配置全部列出来你不太确定某个配置当时怎么写的直接display current-configuration | include vlan加上管道符过滤就能精准命中。华为的管道过滤是个宝藏功能| include相当于“我只想看含这个关键字的行”| exclude是反选。比如查日志里除了某个接口以外的信息用display logbuffer | exclude GigabitEthernet0/0/1比一页一页翻日志高效得多。还有display this这条命令很多老手反而不常提。它用在接口视图或协议视图下能显示当前视图下生效的配置。比如你进到GigabitEthernet0/0/1接口视图敲display this立刻能看到这个接口下所有配置不用切到全局视图再过滤。我现场调试时几乎离不开它。2.2 接口配置类命令Access、Trunk、Hybrid到底怎么选接口配置是华为设备配置里最基础也最关键的环节。你要把接口配成中继模式也就是让这个接口放通多个VLAN的流量用的是port link-type trunk。举个例子现在交换机上有VLAN 10和VLAN 20两个业务网段需要通过一条链路传给上层交换机配置步骤是system-view vlan batch 10 20 interface GigabitEthernet0/0/1 port link-type trunk port trunk allow-pass vlan 10 20vlan batch 10 20是一次性创建多个VLAN的写法比一条条vlan 10、vlan 20快很多。port link-type trunk把接口模式改为Trunk然后port trunk allow-pass vlan 10 20放行指定VLAN。注意华为设备里Trunk接口默认只放行VLAN 1你没allow-pass的VLAN流量是过不去的这一点和思科的默认行为不一样新手最容易栽在这里。Access接口就简单多了它一个接口只属于一个VLAN配置命令是interface GigabitEthernet0/0/2 port link-type access port default vlan 10port default vlan 10是把这个接口默认VLAN设为10收到不带Tag的帧就打上VLAN 10的Tag发出去时剥掉Tag。这个“收发时要不要剥Tag”的细节直接决定了Access和Trunk到底该用在哪儿。接电脑、打印机这种终端设备用Access交换机与交换机之间、交换机与路由器之间要跑多个VLAN用Trunk。华为还有第三种模式叫Hybrid它可以同时放通多个VLAN而且能控制哪些VLAN的帧在出接口时剥Tag哪些不剥。实际项目中Hybrid用得不少比如部分场景下连接路由器子接口但新手上手阶段我建议先把Access和Trunk吃透Hybrid等碰到具体需求再回来查。接口配置还有一个高频动作开启接口。华为设备新接口默认是启用的但有时候你从老设备上把配置搬过来或者手动执行过shutdown接口就处于down状态怎么Ping都不通。这时候要用undo shutdown把接口拉起来再用display ip interface brief看接口状态是不是变成了up。2.3 保存与重启不save配置就是一阵风华为设备有个跟思科不太一样的地方也跟新版VRP版本有关。在部分版本上你改完配置后配置是“实时生效”的但设备一旦重启没保存的配置就全没了。这里的基本操作是save Y系统会提示是否保存配置输入Y再输入配置文件名直接回车用默认的vrpcfg.zip就好。保存完之后用display saved-configuration能看到已经保存在存储介质里的配置用display current-configuration看的是当前运行配置。这两份配置不一致时以当前运行配置为准但重启后就是保存配置的天下了。我接手过不少别人的设备最头疼的事情就是“配了一堆东西但没保存”。有一次给客户加VLAN敲完配置测试也通了结果第二天客户说网络又不行了我远程登上去一看配置全没了原来是设备在凌晨自动重启过而之前那个人根本没save。从那以后我每次操作完第一件事就是save而且会特意在HCI文档里写一句“配置完毕已保存”也算给自己留个凭证。重启设备用的是reboot系统会提示确认也会提示你当前配置未保存是否继续这时候如果你不想丢配置就输入N回退保存。这条命令在升级版本、排查异常时常用但平时别乱敲尤其是远程登录状态下一重启可能就再也连不上了。3. 用eNSP搭建实验环境从零到Telnet登录成功3.1 eNSP基础拓扑搭建三分钟起一台设备华为eNSP是官方免费的模拟器非常适合练习华为设备配置与命令。你可能在真实设备上不敢瞎敲但在eNSP里可以随便折腾起不来就重启配错了就重置。我建议你用eNSP搭建一个最简拓扑一台AR路由器、一台交换机、一台PC再用Cloud把模拟器和电脑的虚拟网卡对接起来这样PC设备能和模拟器互通也能让真实电脑Telnet到模拟器里的设备。具体步骤不复杂打开eNSP左侧拖一台AR3260到画布再拖一台交换机选合适的接口连线。AR设备启动后会自动进入用户视图双击设备图标就能打开命令行窗口。初次启动AR如果报错大概率是VirtualBox版本不匹配去eNSP设置里重新指定一下VirtualBox路径就能解决。这个问题我在第五节还会细说因为它真的是高频故障。3.2 华为设备Telnet登录配置AAA认证和VTY一个都不能少很多朋友问“华为eNSP可以依据设备端口号登录telnet吗”其实eNSP里的设备默认开启了Telnet服务关键是你要把登录认证和权限配好。如果不配默认连上去是什么都干不了的甚至直接拒绝连接。下面给出一套最常用的Telnet配置基于AAA本地认证system-view telnet server enable aaa local-user admin password cipher Admin123 local-user admin service-type telnet local-user admin privilege level 15 quit user-interface vty 0 4 authentication-mode aaa protocol inbound telnet quit这段配置干了四件事第一全局开启Telnet服务telnet server enable第二在AAA视图里创建一个本地用户admin密码是Admin123服务类型是Telnet权限级别是15最高权限第三进入VTY接口视图把认证模式从默认的password改成aaa第四指定VTY只允许Telnet协议接入。需要特别注意的是user-interface vty 0 4中的0 4表示同时放通5个虚拟终端线路也就是支持5个并发Telnet会话。你可以只开一个写成user-interface vty 0但实际项目中建议留几个余量不然同事连不上会打电话找你。privilege level 15这条也容易漏。忘了配的话用户登录上来会是低权限system-view都进不去。我当时第一次配Telnet忘了给用户提权登录成功是成功了但连display current-configuration都看不全折腾了半天才发现是用户权限等级问题。3.3 从真机到虚拟设备连通性排查思路拓扑上设备都启动了怎么从真实电脑的CMD窗口Telnet到eNSP里的AR呢核心步骤是把一个Cloud组件接入拓扑并绑定电脑上的虚拟网卡。实际操作是拖一个Cloud到画布双击配置在“绑定信息”里选择你电脑上的VirtualBox Host-Only Network网卡一般类似VirtualBox Host-Only Ethernet Adapter再添加一个UDP端口映射端口号随便比如3000。然后把Cloud和AR的某个接口连起来给AR那个接口配上IP地址比如192.168.56.1/24。再给电脑的VirtualBox Host-Only网卡配一个同网段IP比如192.168.56.100/24。到这里真实电脑和模拟器里的AR就处在同一个网段了。在CMD里ping 192.168.56.1通了之后执行telnet 192.168.56.1输入用户名和密码就能进入AR的命令行。如果你发现Ping不通或者Telnet连接超时按顺序排查三层第一AR接口有没有配IP、有没有undo shutdown第二Cloud绑定网卡有没有选对电脑网卡IP和AR接口IP是不是同一个网段第三Windows防火墙有没有拦掉ICMP和Telnet端口本地实验建议直接临时关掉防火墙策略或者放行端口。我自己折腾这个环境时最后发现就是防火墙拦了Telnet的23端口放行以后秒通。4. 用Python 3.9写一个Telnet登录脚本自动化从此起步4.1 为什么用Python标准库telnetlib既然你已经能Telnet到华为设备下一步很自然就是“能不能用脚本自动登录、自动敲命令”。Python 3.9内置了telnetlib库不需要额外安装第三方包直接就能写。还有更现代的方案是用Paramiko走SSH因为SSH比Telnet安全生产环境我也更推荐SSH。但eNSP里的Telnet实验更适合新手理解“远端登录”的本质而且telnetlib的写法足够直观用来学习网络自动化绰绰有余。先用Telnet把交互逻辑跑通后面迁移到SSH只是换几个函数的事。4.2 写一个能自动登录并抓取配置的脚本下面这段代码是我在eNSP环境里实测可用的版本Python 3.9直接运行作用是自动连接AR设备登录后执行display current-configuration然后把输出保存到本地文件。import telnetlib import time HOST 192.168.56.1 USERNAME admin PASSWORD Admin123 tn telnetlib.Telnet(HOST, 23, timeout10) tn.read_until(bUsername:, timeout5) tn.write(USERNAME.encode(ascii) b\n) tn.read_until(bPassword:, timeout5) tn.write(PASSWORD.encode(ascii) b\n) time.sleep(1) tn.write(bdisplay current-configuration\n) time.sleep(2) tn.write(bquit\n) output tn.read_all().decode(utf-8, errorsignore) with open(router_config.txt, w, encodingutf-8) as f: f.write(output) print(配置已保存到 router_config.txt) tn.close()这段代码的原理不复杂telnetlib.Telnet先建立连接read_until等待设备返回特定的提示字符串比如Username:write把我们输入的用户名、密码、命令发过去。注意用户名和密码都要编码成bytes因为网络协议层只认字节不认字符串。我这里用了time.sleep来等待设备响应属于最简单粗暴的方法。生产环境更推荐用tn.read_until(b, timeout5)这种带条件的等待但eNSP模拟器偶尔响应慢睡眠等待反而更稳定。你可以根据自己的设备情况调整等待时长。脚本跑完之后当前目录下会生成一个router_config.txt里面就是设备的完整配置。哪怕你以后管理几十台设备只要把IP和账号密码维护在一个列表里循环调用这个逻辑就能批量备份所有设备的配置。这一步对于做网络运维的朋友来说是效率提升的大杀器。4.3 继续扩展批量登录和多设备备份有了单台设备的脚本扩展到批量场景只是循环和数据结构的事。比如你有一个设备清单文件devices.txt每行格式是IP 用户名 密码就可以这样写import telnetlib import time def get_config(ip, username, password): tn telnetlib.Telnet(ip, 23, timeout10) tn.read_until(bUsername:, timeout5) tn.write(username.encode(ascii) b\n) tn.read_until(bPassword:, timeout5) tn.write(password.encode(ascii) b\n) time.sleep(1) tn.write(bdisplay current-configuration\n) time.sleep(2) tn.write(bquit\n) data tn.read_all().decode(utf-8, errorsignore) tn.close() return data with open(devices.txt, r, encodingutf-8) as f: for line in f: line line.strip() if not line: continue ip, username, password line.split() print(f正在备份 {ip} ...) output get_config(ip, username, password) with open(fbackup_{ip}.txt, w, encodingutf-8) as out: out.write(output)这段代码做的事情很简单打开设备清单循环读取每一行调用刚才的登录函数把配置保存成以IP命名的文件。实际运维时设备数量一多手动一台台登录备份的工作量会非常可怕而脚本化之后唯一要注意的就是并发量别太大不然设备可能扛不住。你可以在循环里加一句time.sleep(0.5)控制节奏。这里还有一个细节值得提Telnet传输是明文的在实验环境无所谓但生产设备如果支持SSH我强烈建议你用SSH替代。Paramiko库支持SSH登录接口和telnetlib的写法很像等你熟悉Telnet脚本后再把SSH的登录函数替换上去即可。5. 华为设备配置与命令常见问题排查实录5.1 登录失败、密码错误先查认证顺序和用户权限Telnet登录失败是我见过最多的问题。你按照网上教程配了半天提示还是Authentication failed这时候不要急着怀疑设备坏了按我的排查顺序来。第一看VTY视图的认证模式。如果你配了AAA用户但VTY里写的是authentication-mode password设备会要求输入全局密码你输的本地用户名密码永远不对。反过来如果VTY配了AAA但AAA里根本没有这个用户或者服务类型不是Telnet也会登录失败。第二看用户名里有没有加域名后缀有些场景配了local-user admintest登录时就要带全。第三看我前面强调的privilege level如果用户权限级别太低设备会提示权限不足甚至直接断开。还有一个容易被忽略的点设备上的telnet server enable没有执行。在部分VRP版本上即使VTY配置都正确只要全局没开Telnet服务TCP 23端口就不会监听客户端会报“连接被拒绝”。配完以后可以用display tcp status查看23端口是否处于监听状态这是我实测最有效的判断方法。5.2 配置了但不起作用八成是接口模式和保存问题很多人在eNSP里配VLAN、配Trunk测试的时候PC之间还是不通。我排查这种问题时常用一个“三段检查法”。第一段查物理链路。用display interface brief看接口状态是不是UP如果显示DOWN检查是不是执行过shutdown或者网线连错了端口。第二段查VLAN模式。用display port vlan看接口是Access、Trunk还是HybridTrunk接口要确认allow-pass vlan有没有把业务VLAN放通。第三段查设备上的配置是否保存。eNSP模拟器里设备重启后所有未保存配置都会丢失你前一次测试还是通的重启以后全没了这是模拟器实验最容易踩的坑。另外有个细节一定要记着在Trunk接口上port trunk allow-pass vlan 10和port trunk allow-pass vlan 10 20的行为不太一样后者会覆盖前者只保留当前命令里的VLAN列表。如果你先写了一条只放行VLAN 10又补了一条放行VLAN 20最终生效的只有VLAN 20。正确的做法是把所有要放行的VLAN写在同一行或者用port trunk allow-pass vlan all临时放行所有VLAN用于测试。5.3 eNSP启动失败、AR无法开启的经典解法eNSP的AR设备启动需要VirtualBox而VirtualBox版本和eNSP不匹配是启动失败的经典原因。我遇到过无数次AR设备卡在启动界面或者启动以后命令行窗口一片空白。解决办法是先关闭eNSP打开VirtualBox检查虚拟机的状态如果虚拟机显示“异常退出”或“未启动”右键选择“丢弃”或“重置”再重新启动。如果重启不行去eNSP菜单“工具”里找到“注册设备”重新注册AR设备。还有一个大招在eNSP安装目录下找vbox相关的配置把VirtualBox路径重新指定到新版本。实在不行卸载VirtualBox再装回对应的旧版本eNSP和VirtualBox的版本匹配关系比较苛刻不能随便升级。Cloud组件连不通的排查思路我在3.3节已经讲过这里补充一个重要技巧eNSP里的Cloud绑定网卡后不要把真实网卡的IP和AR接口IP配成同网段否则可能造成真实网络路由干扰建议用VirtualBox Host-Only网卡并把它的网段设定在一个独立地址段比如192.168.56.0/24。5.4 实用命令速查表贴键盘边上的那几张最后一个部分分享几张我整理给自己团队用的命令速查表都是高频中的高频适合贴在工位上。场景命令备注进入系统视图system-view从用户视图执行创建VLANvlan batch 10 20 30批量创建配置接口为Trunkport link-type trunk必须在接口视图Trunk放行VLANport trunk allow-pass vlan 10 20多VLAN写同一行配置接口为Accessport link-type access终端接口常用Access指定VLANport default vlan 10在Access模式下使用查看接口IP状态display ip interface brief排障第一步查看当前配置display current-configuration可用 保存配置save重启前必做开启Telnet服务telnet server enable全局视图执行查看Telnet端口状态display tcp status检查23端口是否监听这些命令不是背出来的是用出来的。你只要在eNSP里把第3节、第4节的实验完整做一遍这些命令会自然变成肌肉记忆。最后再分享一个我自己的小习惯每次配置完华为设备我一定按这个顺序收尾——先display this确认当前视图下的配置再display current-configuration看全局确认没有遗漏后用save保存最后从另一台设备Telnet上来验证一遍。这套动作看起来多花两分钟实际上能帮你避免“设备一重启配置全没了”的惨剧。做网络这一行稳比快重要得多。