如何在nwdiag中强制调整网络位置,使两个RED网络置于顶部?
nwdiag双WAN网络置顶布局调整方案
问题描述
当前nwdiag生成的拓扑中,RED1/WAN1、RED2/WAN2两个网络布局不符合预期,希望将它们都显示在顶部(类似删除RED1中Firewall条目时的效果),但删除该条目会丢失Firewall与RED1的连接,需要保留连接的同时实现双WAN置顶。
解决方案
通过nwdiag的layout规则强制顶部节点同层级,并调整Firewall的定义位置,修正布局逻辑:
修改后的完整代码
@startuml !include <office/Concepts/firewall> !include <office/Devices/modem> !include <office/Devices/router> !include <office/Devices/workstation> !include <office/Devices/workstation_pc> !include <office/Servers/application_server> !include <office/Servers/database_server> !include <office/Servers/virtual_web_server> !include <office/Servers/virtual_server> !include <office/Servers/file_server> !include <office/Servers/physical_host_solid_blue> nwdiag { # 强制顶部节点处于同一水平层级,确保双WAN网络置顶 layout { rank = same; ISP_A; ISP_B; routerA; routerB; } ISP_A [ shape = cloud]; ISP_A -- routerA; ISP_B [ shape = cloud]; ISP_B -- routerB; network RED1 { description ="RED1/WAN1" address = "192.168.1.0/24" color = red routerA [address = "192.168.1.1", description = "<$modem>\nFast Fiber\nDynamic IP"]; # 在RED1网络内首次定义Firewall,引导布局引擎优先处理顶部连接 Firewall [address = "192.168.1.254", description = "<$firewall>\nOPNsense"]; } network RED2 { description ="RED2/WAN2" address = "192.168.2.0/24" color = red routerB [address = "192.168.2.1", description = "<$modem>\nSlow DSL\nFixed IP"]; Firewall; # 复用已定义的Firewall节点 } network ORANGE { description ="ORANGE/DMZ" address = "192.168.9.0/24" color = orange Firewall [address = "192.168.9.254"]; WebServer [address = "192.168.9.8", description = "<$virtual_web_server>\nwebserver"]; OtherServer [address = "192.168.9.7", description = "<$virtual_server>\nuserver"]; } network GREEN { description ="GREEN/LAN" address = "192.168.7.0/24" color = palegreen Firewall [address = "192.168.7.254"]; cinderella [address = "192.168.7.12", description = "<$workstation>\ncinderella"]; controller [address = "192.168.7.x", description = "<$workstation_pc>\ncontroller"]; workstation [address = "192.168.7.90", description = "<$file_server>\nSynology"]; } group { color = "SkyBlue"; description = "<$physical_host_solid_blue>\nLXD Server"; Firewall; WebServer; OtherServer; } } @enduml
关键修改点
- 强制顶部节点同层级:添加
layout { rank = same; ISP_A; ISP_B; routerA; routerB; },让两个ISP和对应的路由器处于同一水平位置,确保双WAN网络区域置顶。 - 调整Firewall定义位置:将Firewall的首次定义移至RED1网络内部,引导布局引擎优先处理Firewall与RED1的顶部连接,避免RED2的连接向下偏移。
- 修复语法错误:修正原代码中ORANGE、GREEN网络
address属性缺失的结尾双引号,避免解析异常。
内容的提问来源于stack exchange,提问作者ZioByte
相关产品推荐
相关产品推荐

