You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:21:07