资讯动态

企业网络拓扑图怎么画才不过期?一套分层规范 + 自动发现脚本

发布时间:2026/10/28 1:31:50 来源:尧图企业网站定制
网络拓扑图这东西几乎每个甲方安全岗都被要求过但真正能用的极少。常见情况是机房里翻出一张 2019 年画的 Visio图上还是那台早下线的旧防火墙新上的两台超融合、一条专线、一个云上 VPC 都没画出了故障运维拿着图对不上现实最后还是靠 SSH 一台台查。拓扑图的价值不在有在准和能自动更新。这篇讲三件事一张拓扑图该画什么、用什么工具画、怎么让它自己跟着网络变化走——最后给一段能直接跑的设备邻居自动发现脚本把手工画图变成生成图。一、先想清楚这张图要给谁看三种拓扑别混成一张最常见的失败是把物理位置、逻辑连接、数据流向全塞进一张图结果谁都看不懂。企业里实际需要的是三张分离的图图类型回答什么问题使用场景粒度物理拓扑设备在哪、怎么连、走哪条线机房施工、故障定位、链路割接到设备端口和链路逻辑拓扑业务怎么走、安全域怎么划安全评估、等保测评、应急响应到安全域和关键节点数据流图数据从哪来、经过谁、到哪去数据安全、隐私合规、出境评估到系统和数据流向三张图各有各的读者物理拓扑给运维和施工方逻辑拓扑给安全团队和测评机构数据流图给合规和审计。试图一张图讲完三件事是拓扑图项目最常见的死法。给安全岗的建议是先把逻辑拓扑做扎实。因为等保测评要它网络架构、边界防护、区域划分都靠它取证、应急响应要它判断攻击者横向移动路径、风险评估要它找单点、找旁路。物理拓扑可以由运维侧提供数据流图在数据分类分级项目里单独做。二、逻辑拓扑图必须画出来的七样东西一张合格的逻辑拓扑缺任何一样都会在实战里失效互联网出口与运营商线路——几条线、什么带宽、是否双线、BGP 还是静态。边界安全设备及其串接关系——防火墙、IPS、WAF、抗 DDoS、上网行为管理谁在谁前面。这个顺序在应急时决定你能不能封、封在哪。安全域划分——互联网区、DMZ、办公区、生产区、运维管理区、测试区。区域之间的隔离设备必须画出来只画区域不画隔离等于没画。核心层设备与冗余关系——核心交换机是不是堆叠、上联是不是双链路。这是判断单点的唯一依据。远程接入路径——VPN、堡垒机、零信任网关从哪个入口进、进到哪个区。云上部分——VPC、子网、安全组、专线/VPN 打通方式。云上不画等于把一半资产排除在外。管理面——堡垒机放在哪、日志往哪送、监控从哪采集。这一块最常被漏但它是出事之后能不能查的关键。对应的原则是三条分级分层核心/汇聚/接入、区域闭合每个区有明确边界、标注连接属性链路带宽、是否加密、是否跨区。三、工具怎么选先分类再选型拓扑图工具分四类用途完全不同别指望一个工具全包类别代表工具适合做什么短板手绘Visio、draw.io、亿图汇报用图、示意图、方案配图手动维护必然过期文档型 CMDBNetBox、iTop设备/机柜/IP 台账导出拓扑需要录入无自动发现自动发现LibreNMS、Zabbix、Observium基于 SNMP/LLDP 自动发现和监控出图样式固定不适合汇报代码化出图Graphviz、D2、Mermaid用文本描述拓扑版本可管理需要写 DSL不适合精细排版实际项目里最好用的是组合NetBox 存资产与连接关系唯一真源LibreNMS 做自动发现补充Graphviz 从台账生成图draw.io 手工美化后用于汇报。如果预算为零最小可用组合是draw.io 画正式图 一段脚本自动发现邻居关系做校验。脚本不需要多高级能回答图上画的和实际连的不一样就够了。一个容易忽略的点图要进版本管理。把 draw.io 的.drawio本质是 XML或 Graphviz 的.dot放进 Git每次变更留一次提交就能回答3 月份那次割接到底改了哪条线。这个能力在做事故复盘时非常值钱。四、画图规范命名、图例、连线的硬规则图混乱的根源不是工具是缺少约定。建议直接定死这几条命名规则举例按自己环境调整对象类型规则示例防火墙FW-位置-序号FW-DMZ-01核心交换机CSW-机房-序号CSW-A-01接入交换机ASW-楼层-序号ASW-3F-02服务器业务-角色-序号ERP-APP-01云上资源云-VPC-类型-序号ALI-PROD-VPC-01安全域域-名称ZONE-DMZ图例要固定至少区分这几种安全设备实心方框红边、网络设备方框蓝边、服务器矩形、云资源虚线框、外部单位灰色、加密链路虚线、跨区链路粗线、单点风险红色三角标记。连线必须带属性至少标带宽和用途。图上写1000M 上联-办公比只画一条线有用十倍——故障时第一句问的就是这条线多大、走什么业务。别在图上画超过 80 个节点。超过就该拆成总览图 分区详图总览只画区域和设备组详图按区画。一张图上挤 300 个节点谁也看不清。五、自动发现让网络拓扑图由机器生成手工画图必然过期唯一解是让设备自己告诉你它连了谁。原理很简单开启 LLDP读邻居表把邻居关系拼成图。思科/华为/H3C 都支持show lldp neighbors detailLinux 服务器侧可以用lldpctl。思路是登录每台设备抓邻居关系输出成边的列表再渲染成图。# -*- coding: utf-8 -*- 从网络设备采集 LLDP 邻居生成 Graphviz DOT 拓扑图。 依赖: pip install netmiko 用法: 把设备清单填进 DEVICES运行后得到 topo.dot 再执行 dot -Tpng topo.dot -o topo.png from netmiko import ConnectHandler DEVICES [ {device_type: huawei, host: 10.0.0.1, username: ro, password: ***}, {device_type: huawei, host: 10.0.0.2, username: ro, password: ***}, {device_type: cisco_ios, host: 10.0.0.3, username: ro, password: ***}, ] # 按设备类型选 LLDP 命令 LLDP_CMD { huawei: display lldp neighbor brief, cisco_ios: show lldp neighbors, } def fetch_neighbors(dev): 返回 [(本端设备, 本端口, 对端设备, 对端端口)] cmd LLDP_CMD.get(dev[device_type]) if not cmd: return [] edges [] with ConnectHandler(**dev) as conn: out conn.send_command(cmd, read_timeout30) for line in out.splitlines(): # 常见输出形如: GE0/0/1 SW-CORE-01 GE0/0/1 120 parts line.split() if len(parts) 3: continue local, remote parts[0], parts[1] if not local or local.lower().startswith((interface, port, ---)): continue remote_port parts[2] if len(parts) 2 else edges.append((dev[host], local, remote, remote_port)) return edges def to_dot(edges, pathtopo.dot): nodes, lines {}, [] for src, sport, dst, dport in edges: # 双向去重A-B 与 B-A 只保留一条 key tuple(sorted([src : sport, dst : dport])) if key in nodes: continue nodes[key] True lines.append( %s -- %s; % (key[0], key[1])) dot [graph topology {, graph [overlapfalse, splinestrue];, node [shapebox, stylerounded, fontnameMicrosoft YaHei];] dot lines dot.append(}) with open(path, w, encodingutf-8) as f: f.write(\n.join(dot)) return path if __name__ __main__: all_edges [] for d in DEVICES: try: all_edges fetch_neighbors(d) except Exception as e: print(skip %s: %s % (d[host], e)) print(edges:, len(all_edges)) print(dot -, to_dot(all_edges))跑完得到topo.dot用 Graphviz 渲染成 PNG就能看到设备之间的实际连接关系。这套东西的好处是图是现场生成的不存在过期。它不如手工图好看但能用来校验手工图——两边对不上说明图错了或者有设备没纳管两种情况都值得追。自动化落地要过三道坎提前知道能省很多时间权限需要一个只读账号能执行display lldp neighbor和show lldp neighbors不要用管理员账号。LLDP 没开很多环境默认关闭或者只在一个方向开。先在核心和汇聚上开接入交换机视情况。跨厂商命名不一致华为输出的对端名字可能是系统名sysname思科是 hostname云上设备干脆没有。要在脚本里做名称归一化否则图上会出现同一个设备两个名字。还有一个实际问题图应该存在哪、谁能改。建议放在团队共享的知识库里Confluence、语雀、内部 Wiki设两个人有编辑权、全员可读。不要只存在某个人电脑上——那个人一休假图就没人能更新三个月后就变成历史文件。同一个目录里放三个东西就够了图源文件.drawio/.dot、导出的 PNG、一份 CHANGELOG 记录每次改了什么。六、维护机制让图不烂掉的三个动作图画好那天是最准的一天之后就开始腐烂。要有机制对抗这件事变更触发——把更新拓扑图写进变更流程的检查项。割接、上新设备、换防火墙、开新专线变更单里必须包含拓扑图已更新这一条否则不予关闭。季度核对——每季度用自动发现脚本跑一遍和图上对 diff。差异分两类图漏画的补图、设备没纳管的补台账。应急反查——每次应急结束后回看图检查这次为什么没在图上快速定位。如果是因为图不准就把这条写进复盘作为改进项。配套一个很小但很有用的动作给图加版本号和日期在标题下标明v2026.10 / 更新人 / 数据来源NetBox 导出 LLDP 核验。这样任何人拿到图都知道它有多新。七、混合云环境怎么画把 VPC 当成一个安全域现在几乎没有纯本地的网络了拓扑图不画云上部分等于把一半资产藏起来。云上部分的画法有一个简化技巧把每个 VPC 当成一个安全域来画不画到具体实例。一张 VPC 内部图需要标清楚的只有六样要素画什么为什么重要VPC 与网段VPC 名称 CIDR判断和其他 VPC/IDC 是否地址冲突子网划分公有子网 / 私有子网决定谁能直接暴露在互联网安全组与 ACL关键规则摘要放通哪些端口给谁90% 的云上事故出在这里出网方式NAT 网关 / EIP / 代理决定能不能被外联也决定出事后怎么封与本地打通专线 / VPN / SD-WAN 对端网段这是横向移动的主通道云上安全能力云防火墙、WAF、日志审计、态势感知决定取证数据从哪拿画的时候最容易犯两个错。一是把 VPC 画成一个整体、不标子网结果这个系统在公有子网还是私有子网这个问题永远答不上来——而这个判断直接决定它是不是暴露面。二是不画安全组的放通规则摘要图上只写安全组已配置出事时还得登控制台一条条翻。还有一个更隐蔽的问题云上资源的命名和本地不一致。本地叫FW-DMZ-01云上叫sg-wz9xxxx、vpc-bp1yyyy图上一半中文一半随机串看起来像两张不相干的图。解决办法是给云上资源建一层业务别名映射表图上只写别名随机 ID 放在备注或台账里。如果你同时有多个云和自建机房建议在最高层画一张云与 IDC 关系图左边画自建机房右边画各个云中间用粗线标出专线/VPN 及带宽线上标注哪些业务走这条。这张图不需要多细但它能回答一个高层问题一次专线中断会影响哪些系统。这个问题在被领导和业务追问时几乎每次都会出现。八、几个具体场景怎么用这张图拓扑图不是挂在墙上的装饰它应该在具体场景里被翻出来应急响应判断攻击者从哪个区进来、能不能横向到生产区、封哪个边界设备最有效。这时候图上区域之间的隔离设备那一层就是决策依据。相关处置顺序见应急响应复盘。漏洞整改一个高危漏洞出现在边界防火墙上判断影响面要看图——它串在谁前面、后面有几个区。方法在漏洞整改推动。等保测评网络架构、边界防护、区域划分这三项全部靠图取证。对应条款的写法见等保2.0定级备案与差距分析。变更评审新增一条专线、打通两个区图上看一眼就知道会不会绕开边界设备形成旁路。九、写在最后拓扑图这件事判断标准只有一条出了问题能不能在五分钟内靠它定位到设备或链路。能的图就是好图画得再漂亮但对不上现实的等于没有。所以优先级是先保证准自动发现 变更触发再保证全三张图分清楚最后才是好看。很多人顺序做反了花两周做了一张漂亮的汇报图三个月后彻底过期。配套的工具清单LLDP 采集 Graphviz 出图的脚本在上面的第五节资产台账可以复用安全基线那套分层思路做设备分级数据侧的资产梳理看数据分类分级落地。你们环境里拓扑图是哪个部门维护的如果是运维维护、安全用中间这道交接最容易出问题评论区说说你们怎么分工的。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑