RouterOS Central Controller

{{ error }}

{{ currentTitle }}

{{ devices.length }} 台授权设备 {{ devices.length }} 台设备,{{ registrations.length }} 个注册项
{{ error }}
{{ notice }}

公网变更同步 自动开启

设备心跳上报公网 IP 变更后,自动同步相关 GRE / IPIP 规划、串联复用接口,以及巡检中允许同步且确认配对的隧道公网地址,并检查隧道连通性。发现时间取决于设备心跳;暂时无法连接时会持续重试。

{{ dynamicEndpointSyncPendingCount }} 台设备等待完成 · {{ fmt(dynamicEndpointSyncLoadedAt) }} 刷新
{{ dynamicEndpointSyncNotice }}
正在读取公网变更记录…
暂无{{ dynamicEndpointSyncDeviceId ? '该设备的' : '' }}公网变更同步记录。自动同步保持开启,收到新的公网地址变更后会在此显示。
{{ item.device_name || item.device_id }} {{ dynamicEndpointSyncStatusLabel(item.status) }}
{{ item.old_ip || '未记录旧地址' }} → {{ item.new_ip || '未确认新地址' }}
收到变更:{{ fmt(item.created_at) }} · 更新:{{ fmt(item.updated_at) }}
下次重试:{{ fmt(item.next_attempt_at) }}

{{ item.summary }}

{{ item.last_error }}
{{ result.name || '关联隧道' }} {{ dynamicEndpointSyncStatusLabel(result.status) }}
{{ result.message }}
{{ tunnelRepairEndpointLabel(endpoint.endpoint) }} · {{ endpoint.interface || '隧道接口' }} · {{ endpoint.message }}
{{ tunnelRepairEndpointLabel(ping.endpoint) }} Ping:{{ dynamicEndpointSyncPingLabel(ping) }}

诊断 / 自动修复 · {{ tunnelRepairName }}

实时读取两端接口、公网地址并测试隧道双向 Ping。先查看原因和拟修复项,再执行自动修复。

正在读取两端设备并测试连通性,请稍候。
修复请求的返回结果未确认,后台可能已开始执行。请点击“重新诊断”读取最近任务,确认结果后再操作。

最近修复任务:{{ tunnelRepairJobStatusLabel(tunnelRepairJob.status) }}

更新时间:{{ fmt(tunnelRepairJob.updated_at) }}
{{ tunnelRepairJob.summary || '' }}
任务正在后台执行。收起面板后,可从同一链路重新打开查看进度。
{{ tunnelRepairJob.error }}
自动修复任务已完成。
修复验证未通过,本次变更已回滚。请核对任务原因后重新诊断。
任务未完整完成,请核对设备当前状态和下方结果,重新诊断后再处理。
阶段端点说明
{{ tunnelRepairPhaseLabel(event.phase) }}{{ event.endpoint ? tunnelRepairEndpointLabel(event.endpoint) : '双端' }}{{ event.message }}

本次回滚结果

端点恢复结果说明
{{ tunnelRepairEndpointLabel(result.endpoint) }}{{ result.ok ? '已恢复' : '未确认' }}{{ result.error || result.message || (result.ok ? '本次改动已恢复到修复前' : '请核对该端现场配置') }}
{{ tunnelRepairEndpointLabel(endpoint.endpoint) }} · {{ endpoint.device_name || endpoint.device_id }} · 任务验证结果
{{ tunnelRepairPingLabel(endpoint.ping) }}
{{ endpoint.error }}
本次任务未返回双端 Ping 明细,请重新诊断确认连通性。

设备注册参数

RouterOS 脚本

尚未生成

配置意图分析

从设备的最新成功配置快照和隧道台账归纳隧道、路由、策略、安全与出口用途。分析只读,不会修改 RouterOS。

正在读取配置快照和隧道台账,请稍候。
请选择设备开始分析。建议先查看 sz-office 或 wxm-home。

受控设备

设备名 区域 公网 IP DDNS SSH API 版本 最近心跳 配置
{{ device.identity }} {{ device.region || device.site }} {{ publicIpText(device) }}
中控 {{ device.ddns_hostname || '-' }}
上报 {{ reportedHostname(device) }}
脚本 {{ configDdnsHostnames(device) || (device.config_ddns && device.config_ddns.detected ? '已识别未提取域名' : '-') }}
{{ device.ddns_last_ip || device.ddns_status || configDdnsProviders(device) || '' }}
{{ device.ssh_port || '-' }}
{{ connectionProxyLabel(device.connection_proxy) }}
{{ device.api_enabled ? (device.api_port || (device.api_use_ssl ? 8729 : 8728)) : 'off' }}
{{ device.api_last_status || '' }}
{{ device.routeros_version || '-' }} {{ fmt(device.last_seen_at) }} {{ device.latest_config_status || 'none' }}
暂无设备

设备详情

选择一台设备

最新配置:{{ latestConfig.status }}

{{ latestConfig.config_text || latestConfig.error }}

全网维护

设备 {{ maintenanceReport.summary.devices }}
健康 {{ maintenanceReport.summary.healthy_devices }}
问题 {{ maintenanceReport.summary.issues.total }}
隧道 {{ maintenanceReport.summary.tunnels }}
路由 {{ maintenanceReport.summary.routes }}
真实网段冲突 {{ maintenanceReport.summary.hard_subnet_overlaps }}
脚本 / 计划 {{ maintenanceReport.summary.scripts }}/{{ maintenanceReport.summary.schedulers }}
DDNS 自动化 {{ maintenanceReport.summary.automation ? maintenanceReport.summary.automation.ddns_devices : 0 }}
拓扑 {{ maintenanceReport.summary.topology_nodes }} 个节点 / {{ maintenanceReport.summary.topology_edges }} 条连接; 地址段 {{ maintenanceReport.summary.subnets }} 个; DDNS 自动化 {{ maintenanceReport.summary.automation ? maintenanceReport.summary.automation.ddns_devices : 0 }} 台; 异常计划 {{ maintenanceReport.summary.automation ? maintenanceReport.summary.automation.broken_schedulers : 0 }}; 高权限脚本 {{ maintenanceReport.summary.automation ? maintenanceReport.summary.automation.high_privilege_scripts : 0 }}; 严重 {{ maintenanceReport.summary.issues.critical }},警告 {{ maintenanceReport.summary.issues.warning }},提示 {{ maintenanceReport.summary.issues.info }}。

服务器备份

备份文件 {{ backupStatus.count || 0 }}
备份占用 {{ formatBytes(backupStatus.total_size) }}
保留上限 {{ backupStatus.limits ? backupStatus.limits.max_files : 0 }}
磁盘剩余 {{ backupStatus.disk ? formatBytes(backupStatus.disk.free) : '-' }}
目录 {{ backupStatus.backup_dir }}; 最多 {{ backupStatus.limits.max_files }} 个 / {{ backupStatus.limits.max_age_days }} 天 / {{ formatBytes(backupStatus.limits.max_total_size) }}。
文件 大小 时间
{{ item.name }} {{ formatBytes(item.size) }} {{ fmt(item.mtime) }}

维护问题

级别 类别 设备 问题 建议
{{ severityLabel(issue.severity) }} {{ issue.category }} {{ issue.device_name || '-' }} {{ issue.title }}
{{ issue.detail }}
{{ issue.recommendation }}
暂无维护问题

设备健康

设备 区域 公网 心跳 配置 配置对象
{{ device.identity }} {{ device.region || '-' }} {{ publicIpText(device) }} {{ healthLabel(device.health) }}
{{ fmt(device.last_seen_at) }} · {{ ageLabel(device.last_seen_age_seconds) }}
{{ healthLabel(device.config_health) }}
{{ device.latest_config_status || '-' }} · {{ fmt(device.config_collected_at || device.latest_config_at) }}
隧道 {{ device.counts.tunnels }} / 路由 {{ device.counts.routes }} / 地址 {{ device.counts.addresses }} / 脚本 {{ device.counts.scripts }} / 计划 {{ device.counts.schedulers }}
{{ device.automation ? device.automation.summary : '' }}
暂无设备

自动化与 DDNS 分析

设备 状态 DDNS 脚本/计划 关注项 建议
{{ device.identity }} {{ healthLabel(device.automation ? device.automation.status : 'info') }} controller {{ (device.automation.ddns.providers || []).join(', ') || 'local' }} 未识别
中控 {{ device.automation && device.automation.ddns.controller_hostname ? device.automation.ddns.controller_hostname : '-' }}
脚本 {{ automationDdnsHostnames(device) || '-' }}
{{ device.automation ? device.automation.counts.scripts : 0 }} / {{ device.automation ? device.automation.counts.schedulers : 0 }} 异常计划 {{ device.automation ? device.automation.counts.broken_schedulers : 0 }} / 孤立脚本 {{ device.automation ? device.automation.counts.orphan_scripts : 0 }} / 高权限 {{ device.automation ? device.automation.counts.high_privilege_scripts : 0 }} {{ device.automation ? device.automation.recommendation : '-' }}
暂无自动化分析

自动化优化建议

级别 设备 对象 问题 建议
{{ severityLabel(item.severity) }} {{ item.device_name || '-' }} {{ automationObjectLabel(item.object_type) }}
{{ item.object_name || '-' }}
{{ item.title }}
{{ item.detail }}
{{ item.recommendation }}
暂无自动化优化建议

管理服务

设备 服务 端口 允许地址 状态 风险
{{ service.device_name }} {{ service.name }} {{ service.port || '-' }} {{ service.address || '0.0.0.0/0' }} {{ service.disabled ? 'disabled' : 'enabled' }} {{ severityLabel(service.risk) }}
暂无服务清单

脚本与计划任务

设备 脚本 类型 策略 调用 源 状态
{{ script.device_name }} {{ script.name || '-' }} {{ automationKindLabel(script.automation_kind) }}
{{ script.ddns_provider }}
{{ script.ddns_hostnames.join(', ') }}
{{ endpointRefreshText(script) }}
{{ script.policy || '-' }} {{ script.scheduler_count || 0 }}
{{ (script.referenced_by || []).join(', ') }}
{{ script.source_present ? '有' : '无' }}
{{ script.source_hash || '-' }} · {{ script.source_size || 0 }}B
{{ script.disabled ? 'disabled' : healthLabel(script.status || 'ok') }}
暂无脚本
设备 计划任务 类型 间隔 目标 状态
{{ scheduler.device_name }} {{ scheduler.name || '-' }} {{ automationKindLabel(scheduler.automation_kind) }}
{{ scheduler.ddns_provider }}
{{ scheduler.ddns_hostnames.join(', ') }}
{{ endpointRefreshText(scheduler) }}
{{ scheduler.interval || '-' }} {{ scheduler.target_script || scheduler.on_event || '-' }}
{{ automationExecutionLabel(scheduler.execution_type) }}
{{ scheduler.disabled ? 'disabled' : healthLabel(scheduler.status || 'ok') }}
暂无计划任务

隧道清单

来源 目标 协议 名称 双端地址 承载路由
{{ tunnel.source }} {{ tunnel.target }} 未纳管 {{ tunnel.protocol }} {{ tunnel.name || '-' }} {{ tunnel.local_address || '-' }} → {{ tunnel.remote_address || '-' }}
{{ route.dst_address }}
-
暂无隧道

自动化管理

设备 {{ automationAudit.summary.devices }}
脚本 / 计划 {{ automationAudit.summary.scripts }}/{{ automationAudit.summary.schedulers }}
发现项 {{ automationAudit.summary.findings }}
整改动作 {{ automationAudit.summary.actions }}
可自动执行 {{ automationAudit.summary.executable_actions }}
DDNS 设备 {{ automationAudit.summary.ddns_devices }}
异常计划 {{ automationAudit.summary.broken_schedulers }}
高权限脚本 {{ automationAudit.summary.high_privilege_scripts }}
{{ automationResult.dry_run ? '整改预览' : '整改结果' }}:{{ automationResult.action ? automationResult.action.title : '' }}
备份:{{ automationResult.backup.status || '-' }} · 配置 {{ automationResult.backup.config_id || '-' }}
刷新:{{ automationResult.after_refresh.map(item => item.status).join(', ') }}
{{ automationResult.commands.join('\n') }}
{{ dynamicUpdaterResult.dry_run ? '动态隧道更新器预览' : '动态隧道更新器下发结果' }}:{{ dynamicUpdaterResult.plan ? dynamicUpdaterResult.plan.device_name : '' }}
备份:{{ dynamicUpdaterResult.backup.status || '-' }} · 配置 {{ dynamicUpdaterResult.backup.config_id || '-' }}
刷新:{{ dynamicUpdaterResult.after_refresh.map(item => item.status).join(', ') }}
{{ dynamicUpdaterResult.commands.join('\n') }}

PPPoE 动态隧道公网更新

设备 公网接口 状态 本端隧道 对端 SSH 更新 现有 upip 操作
{{ plan.device_name }}
{{ plan.region || '-' }}
{{ plan.public_ip || '-' }}
{{ plan.source_interface || '-' }}
间隔 {{ plan.interval || '1m' }}
{{ dynamicUpdaterSourceKindLabel(plan.source_kind) }}
{{ dynamicUpdaterStatusLabel(plan) }}
已安装 controller-upip1
{{ plan.warnings.join(' / ') }}
{{ item.protocol }} {{ item.interface }}
{{ item.local_address || '-' }} -> {{ item.remote_address || '-' }}
未识别到需要动态维护的公网隧道
{{ peer.address }}:{{ peer.port }} · {{ peer.protocol }} {{ peer.interface }}
{{ peer.device_name || peer.source || '-' }}
仅更新本端或待核对对端
未发现
下发后禁用旧 upip1,成功后刷新配置
暂无动态隧道公网更新计划

设备自动化画像

设备 状态 DDNS 对象 发现/整改 建议
{{ device.identity }}
{{ device.region || '-' }}
{{ healthLabel(device.automation_status) }}
{{ fmt(device.config_collected_at) }}
controller {{ (device.ddns.providers || []).join(', ') || 'local' }}
{{ automationDeviceDdnsText(device) || '-' }}
脚本 {{ device.counts.scripts || 0 }} / 计划 {{ device.counts.schedulers || 0 }}
隧道 {{ device.counts.tunnels || 0 }} / 路由 {{ device.counts.routes || 0 }}
发现 {{ device.counts.findings || 0 }} / 整改 {{ device.counts.actions || 0 }}
可执行 {{ device.counts.executable_actions || 0 }}
{{ device.recommendation || '-' }}
暂无自动化画像

智能整改方案

级别 设备 对象 方案 命令 操作
{{ severityLabel(action.severity) }} {{ action.device_name }} {{ automationObjectLabel(action.object_type) }}
{{ action.object_name || '-' }}
{{ action.title }}
{{ action.reason }}
{{ action.impact }}
{{ action.command }}
{{ (action.manual_steps || []).join(' / ') || '-' }}
{{ automationSafetyLabel(action.safety) }}
暂无整改方案

发现项

级别 设备 对象 问题 建议
{{ severityLabel(finding.severity) }} {{ finding.device_name }} {{ automationObjectLabel(finding.object_type) }}
{{ finding.object_name || '-' }}
{{ finding.title }}
{{ finding.detail }}
{{ finding.recommendation }}
暂无发现项

脚本与计划任务提取

设备 脚本 类型 策略 调用 源摘要
{{ script.device_name }} {{ script.name || '-' }} {{ automationKindLabel(script.automation_kind) }}
{{ script.ddns_provider }}
{{ endpointRefreshText(script) }}
{{ script.policy || '-' }} {{ script.scheduler_count || 0 }}
{{ (script.referenced_by || []).join(', ') }}
{{ script.source_hash || '-' }} · {{ script.source_size || 0 }}B
暂无脚本
设备 计划任务 类型 间隔 目标
{{ scheduler.device_name }} {{ scheduler.name || '-' }} {{ automationKindLabel(scheduler.automation_kind) }}
{{ endpointRefreshText(scheduler) }}
{{ scheduler.interval || '-' }} {{ scheduler.target_script || scheduler.on_event || '-' }}
{{ automationExecutionLabel(scheduler.execution_type) }}
暂无计划任务

网络拓扑

设备关系总览 · 点击设备或连线查看详情
{{ topologyLayout.summary.visibleDevices }} / {{ topologyLayout.summary.totalDevices }} 台设备 {{ topologyLayout.summary.visibleRelations }} 组连接关系 {{ topologyLayout.summary.hiddenRoutes }} 条路由收纳在明细中 当前仅显示所选设备的直接连接
{{ Math.round(topologyZoom * 100) }}%
{{ nodeLabel(edge.source) }} ↔ {{ nodeLabel(edge.target) }} · {{ edge.protocols.join(' / ').toUpperCase() }} · {{ edge.recordCount }} 条接口记录 {{ edge.recordCount }} 记录 {{ node.label }} · {{ node.public_ip || node.region || '外部对端' }} {{ shortText(node.title, 21) }}{{ node.subtitle }}
{{ topologyLoading ? '正在读取配置关系…' : (topology.summary ? '没有符合条件的设备' : '尚未加载拓扑') }}可清空搜索,或切换查看范围。
拖动空白处平移 · Ctrl + 滚轮缩放 · 双击设备聚焦
配置推断关系 全部记录已禁用依据最新成功配置快照,不代表实时连通。
数据提示 · {{ topology.warnings.length }}

{{ warning }}

配置明细与导出

公网隧道自动纳管

默认用户名 {{ (unmanagedDefaults.usernames || []).join(', ') || '-' }}; 默认端口 {{ (unmanagedDefaults.ports || []).join(', ') || '-' }}; 私钥 {{ unmanagedDefaults.private_key_configured ? '已在服务器配置' : '未配置' }}; 密码 {{ unmanagedDefaults.passwords_configured ? '已在服务器配置' : '未配置' }}; 后台 {{ unmanagedDefaults.auto_enabled ? '已开启' : '未开启' }}; 间隔 {{ unmanagedDefaults.auto_interval_seconds || '-' }}s; 失败重试 {{ unmanagedDefaults.auto_retry_seconds || '-' }}s; 每轮最多 {{ unmanagedDefaults.auto_max_per_run || '-' }} 台。
后台状态 {{ autoAdoptionStatus.auto.running ? '运行中' : autoAdoptionStatus.auto.last_status || 'idle' }}; 上次开始 {{ fmt(autoAdoptionStatus.auto.last_started_at) }}; 上次结束 {{ fmt(autoAdoptionStatus.auto.last_finished_at) }}; 候选 {{ autoAdoptionStatus.auto.last_result.candidates || 0 }}, 尝试 {{ autoAdoptionStatus.auto.last_result.attempted || 0 }}, 纳管 {{ autoAdoptionStatus.auto.last_result.adopted || 0 }}, 失败 {{ autoAdoptionStatus.auto.last_result.failed || 0 }}, 延后 {{ autoAdoptionStatus.auto.last_result.deferred || 0 }}, 已存在跳过 {{ autoAdoptionStatus.auto.last_result.skipped_managed || 0 }}, 近期失败跳过 {{ autoAdoptionStatus.auto.last_result.skipped_recent || 0 }}。
{{ adoptionResult.status === 'adopted' ? '已纳管' : adoptionResult.status }}: {{ adoptionResult.device_name || adoptionResult.host }} {{ adoptionResult.host }}:{{ adoptionResult.ssh_port || '-' }} ;配置抓取 {{ adoptionResult.config.status }}
远端公网 来源设备 隧道 推断区域 承载路由 自动状态
暂无未纳管公网隧道对端

隧道巡检

查看两端设备、双向探测结果与公网地址同步状态

{{ tunnelDiscoveryNotice }}
正在读取隧道记录与后台任务…
{{ kind === 'scan' ? '发现扫描' : '连通巡检' }} · {{ tunnelDiscoveryJobLabel(tunnelDiscoveryJob(kind).state) }}{{ tunnelDiscoveryJobActive(kind) ? '结果自动刷新' : fmt(tunnelDiscoveryJob(kind).finished_at) }}
{{ kind === 'scan' ? '扫描' : '巡检' }}未完成:{{ tunnelDiscoveryJob(kind).error }}
自动扫描与公网地址同步 {{ tunnelDiscoverySettings.enabled ? '定时任务已开启' : '定时任务已暂停' }} · 每 {{ tunnelDiscoverySettings.check_interval_seconds / 60 }} 分钟巡检
有未保存的设置

公网地址同步由设备心跳触发,发现时间取决于心跳间隔。仅对确认配对、允许同步且通过现场校验的公网端点更新地址;固定覆盖地址、私网承载和无法唯一确认的接口会跳过。暂停定时巡检不等于关闭公网地址同步。此处开关仅控制巡检发现记录的维护,已有规划的公网同步仍单独运行。

{{ filteredTunnelDiscoveryLinks().length }} 条记录 · {{ discoveryCurrentPage() }} / {{ discoveryPageCount() }} 页

{{ tunnelDiscoveryScope === 'pending' ? '以下记录尚未确认唯一对端,不计入双端隧道。' : '每行是一条独立隧道;同一对设备的 GRE / IPIP 分别显示。' }} 状态来自最近一次巡检,点击记录展开完整信息。

{{ tunnelDiscoveryLinks.length ? '当前范围没有符合筛选条件的记录,可切换“待确认”或“全部记录”。' : '尚无隧道记录。点击“扫描并记录”,或等待后台首次扫描。' }}
共 {{ filteredTunnelDiscoveryLinks().length }} 条 · 每页 20 条{{ discoveryCurrentPage() }} / {{ discoveryPageCount() }}
设备扫描覆盖 · {{ tunnelDiscoveryCoverage.filter(item => item.status === 'ok').length }} / {{ tunnelDiscoveryCoverage.length }} 项成功 {{ tunnelDiscoveryCoverage.filter(item => item.status !== 'ok').length }} 项待处理
设备 / 注册项扫描结果说明最近扫描
{{ item.device_name || item.device_id || '未绑定设备的注册项' }}
关联 {{ item.registration_ids.length }} 个注册项
{{ tunnelDiscoveryCoverageLabel(item.status) }}{{ item.reason || '—' }}{{ fmt(item.scanned_at) }}

尚未绑定设备的注册项需先完成注册并保存可用 SSH 凭据,才能读取隧道;已有 SSH 代理设置会用于扫描和巡检。

串联链路规划

按 A → B → C → D 的顺序连接相邻设备,自动生成双向路由,保留内网源地址。新建 GRE / IPIP 隧道均关闭 Keepalive。保存规划后可预览配置脚本。

正在规划,请稍候;旧预览会在输入或排序变化后自动失效。
有序设备节点({{ chainForm.nodes.length }}/32) 至少 3 台;中间节点需开启转发并放行两侧网段。

节点必须是已纳管设备。列表中找不到的 RouterOS,请先完成纳管,再刷新本页。

按相邻设备的最新成功配置快照识别,可逐段选择新建或复用。

复用会保留已有接口、地址和加密方式;后续应用脚本可能添加串联路由。快照识别结果不代表实时连通状态。

请先选择至少 3 台不同的已纳管设备并填写链路名称;启用 IPsec 的新建链段需填写默认或该段独立密钥,并完成两端传输地址选择。
LAN 网段重叠,需调整发布范围后重新规划
{{ side.device_name || chainDeviceName(side.device_id) }} · {{ side.cidr }} · {{ chainNetworkSourceLabel(side) }}
不在当前链路,请核对已有网段占用。
仅调整本次规划;仅中继会停止发布该节点全部本地 LAN。真实业务网段重叠无法通过忽略提示解决。
当前预览:{{ chainPreview.links.length }} 条相邻链路。修改输入后需重新规划才能保存。
按顺序选择设备,点击“规划 IP / 路由”,查看每台设备的本地 LAN、下一跳和双向路由。
{{ warning }}

自动未发布的网段

{{ item.device_name || chainDeviceName(item.device_id) }} · {{ item.cidr }} {{ item.reason }}
以上网段按快照识别为隧道或承载网络。若业务确需发布,请手动替换该节点的全部 LAN 后重新规划。
路由冲突:{{ item.device_name || item.device_id }} · 拟添加 {{ item.cidr }} · {{ chainConflictReason(item) }} (已有 {{ item.existing_cidr || item.cidr }} via {{ item.existing_gateway }},规划 via {{ item.planned_gateway || '-' }})

路径与地址

{{ link.chain_position }}. {{ chainLinkModeLabel(link) }} · {{ chainSecurityLabel(link) }}
{{ chainDeviceName(link.endpoint_a_device_id) }} ↔ {{ chainDeviceName(link.endpoint_b_device_id) }} · {{ link.endpoint_a_tunnel_address }} ↔ {{ link.endpoint_b_tunnel_address }}
传输地址:{{ chainTransportModeSummary(link, 'a') }} {{ chainTransportSummary(link, 'a') }};{{ chainTransportModeSummary(link, 'b') }} {{ chainTransportSummary(link, 'b') }}
已有接口 {{ (link.reuse || {}).endpoint_a_interface || '-' }} ↔ {{ (link.reuse || {}).endpoint_b_interface || '-' }}

{{ item.identity || chainDeviceName(item.device_id) }} 中继转发

本地 LAN:{{ (item.local_networks || []).join('、') || '未发布' }}
下一跳 {{ hop.direction === 'left' ? '←' : '→' }} {{ chainDeviceName(hop.peer_device_id) }} via {{ hop.gateway }} 无
拟添加路由 {{ route.cidr }} via {{ route.gateway }} · {{ chainDirectionLabel(route.direction) }} · 目标 {{ chainDeviceName(route.source_device_id) }}
无拟添加路由

已保存串联规划

删除只删除中央规划,不删除设备上的现有配置。
名称路径协议状态更新时间
{{ item.name }} 当前 {{ chainPathText(item) }} {{ chainSavedProtocols(item) }} {{ chainStatusLabel(item.status) }} {{ fmt(item.updated_at) }}
{{ chainListLoading ? '正在加载串联规划…' : '暂无已保存串联规划' }}
{{ chainScriptsLoading ? '正在生成已保存规划的脚本预览…' : '正在加载规划详情…' }}

串联隧道配置下发:{{ chainApplyName }}

先执行干运行,只生成并校验每一跳脚本,不会连接或修改 RouterOS。确认后才会按 A → E 顺序通过 SSH 下发;正式下发仍会实时检查复用链路和设备写入状态。

{{ chainApplyResult ? '正在下发各段隧道配置,请稍候…' : '正在生成干运行预览,请稍候…' }}

编辑路由:{{ chainRouteEditorName }}

在同一串联规划中管理内网互通与公网出口策略。公网流量沿选定链路保留源 IP,仅在最终出口接口执行 NAT;保存草稿后,需另行确认“逐层发布”才会修改设备。

1
确认沿途链路检查每一跳的复用链路和接口证据。
2
填写访问需求按“来源 → 目标”添加内网或公网需求。
3
预览、保存并发布先确认去程/回程,再保存草稿,最后逐层发布。
当前路径{{ chainRouteNodePathText() }}路由只会沿这条设备顺序生成。
访问需求{{ chainRouteEnabledPolicyCount() }} 条启用共 {{ chainRouteForm.policies.length }} 条草稿
预览{{ chainRoutePreviewCurrent() ? '已同步' : '待生成' }}修改需求后需重新预览
草稿{{ chainRouteSavedCurrent() ? `版本 ${chainRouteForm.revision}` : '未保存' }}保存不会修改设备
当前状态{{ chainRouteWorkflowStatus().label }}{{ chainRouteWorkflowStatus().hint }}
正在读取接口网段和已有链路…

发布进度:{{ chainRouteJobStatusLabel(chainRouteJob.status) }}

离开本页不会中止后台任务;重新打开“编辑路由”可继续查看。
{{ chainRouteJob.error }}
发布失败,本次变更已回滚。请处理上述原因后重新预览。
部分配置未能回滚,请按下方设备结果核对现场状态。完成核对前请勿重复发布。
路由发布与配置校验已完成。请从来源设备或来源网段实测目标地址,确认业务互通。
阶段设备结果说明
{{ chainRoutePhaseLabel(event.phase) }}{{ event.device_name || chainRouteNodeName(event.device_id) }}{{ chainRouteJobStatusLabel(event.status) }}{{ event.message || '-' }}
回滚结果
设备配置结果说明
{{ result.device_name || chainRouteNodeName(result.device_id) }}{{ result.kind === 'routes' ? '路由' : result.kind === 'nat_exemptions' ? 'NAT 豁免' : result.kind }}
{{ result.comment || '' }}
{{ result.ok ? '已回滚' : '未完成' }}{{ result.error || result.message || (result.ok ? '本次变更已撤回或恢复原配置' : '请核对该设备现场配置') }}

已保存:{{ chainSelected.name }} {{ chainStatusLabel(chainSelected.status) }}

{{ chainSelected.comment || '无备注' }} · 地址池 {{ chainSelected.tunnel_pool_cidr }}
{{ warning }}
{{ item.device_name || chainDeviceName(item.device_id) }} · 拟添加 {{ item.cidr }} · {{ chainConflictReason(item) }} · 已有 {{ item.existing_cidr || item.cidr }} via {{ item.existing_gateway || '-' }},规划 via {{ item.planned_gateway || '-' }}
链段 / 方式协议 / 加密两端 / 接口隧道地址
{{ link.chain_position }} · {{ link.name }}
{{ chainLinkModeLabel(link) }}
{{ chainSecurityLabel(link) }}{{ chainDeviceName(link.endpoint_a_device_id) }} ↔ {{ chainDeviceName(link.endpoint_b_device_id) }}
{{ (link.reuse || {}).endpoint_a_interface || '-' }} ↔ {{ (link.reuse || {}).endpoint_b_interface || '-' }}
{{ chainTransportSummary(link, 'a') }}
{{ chainTransportSummary(link, 'b') }}
{{ link.endpoint_a_tunnel_address }} ↔ {{ link.endpoint_b_tunnel_address }}

{{ item.identity || chainDeviceName(item.device_id) }} 中继转发

本地 LAN:{{ (item.local_networks || []).join('、') || '未发布' }}
下一跳{{ chainDirectionLabel(hop.direction) }} · {{ chainDeviceName(hop.peer_device_id) }} via {{ hop.gateway }}
拟添加路由{{ route.cidr }} via {{ route.gateway }} · {{ chainDirectionLabel(route.direction) }} · 目标 {{ chainDeviceName(route.source_device_id) }}无

脚本预览

第 {{ item.position }} 段 · {{ item.name }}

{{ chainScriptEndpointName(item.position, 'a') }}
{{ (item.scripts || {}).endpoint_a_script || '无脚本' }}
{{ chainScriptEndpointName(item.position, 'b') }}
{{ (item.scripts || {}).endpoint_b_script || '无脚本' }}

隧道工作台

配置设备 {{ tunnelInventory.summary.devices_with_configs }}/{{ tunnelInventory.summary.devices }}
现有隧道 {{ tunnelInventory.summary.tunnels }}
可导入规划 {{ tunnelInventory.summary.planning_candidates || 0 }}
受控对端 {{ tunnelInventory.summary.managed_peer_tunnels }}
外部对端 {{ tunnelInventory.summary.external_peer_tunnels }}
隧道承载路由 {{ tunnelInventory.summary.tunnel_routes }}
待核对 {{ tunnelInventory.summary.warnings }}

设备配置快照

设备 区域 公网 IP 版本 配置时间 隧道/路由/地址
{{ device.device_name }} {{ device.region || '-' }} {{ device.public_ip || '-' }} {{ device.routeros_version || '-' }} {{ fmt(device.config_collected_at) }} {{ device.has_config ? 'ok' : 'no config' }} {{ device.tunnel_count }} / {{ device.route_count }} / {{ device.address_count }}
暂无设备配置

现有隧道

设备 协议/接口 对端 本端/远端地址 接口地址 承载路由 状态 规划 备注
{{ tunnel.device_name }}
{{ tunnel.protocol }} {{ tunnel.name || '-' }}
{{ tunnel.path }}
{{ tunnel.peer_device_name }} {{ tunnel.remote_address || '-' }}
{{ tunnel.peer_region || tunnel.raw_remote || '' }}
{{ tunnel.local_address || '-' }} → {{ tunnel.remote_address }}
{{ address.address }}
-
{{ route.dst_address }} via {{ route.gateway }}
-
{{ inventoryStatusLabel(tunnel.status) }} - {{ tunnel.comment || '-' }}
暂无现有隧道

现有路由

设备 目标网段 网关 关联隧道/网关设备 路由表/距离 状态 备注
{{ route.device_name }} {{ route.dst_address }} {{ route.gateway || '-' }} {{ route.tunnel_protocol }} {{ route.tunnel_name }} {{ route.gateway_device_name }} -
{{ route.out_interface || route.gateway_region || '' }}
{{ route.routing_table || route.routing_mark || 'main' }}
distance {{ route.distance || '-' }}
{{ inventoryStatusLabel(route.status) }} {{ route.comment || '-' }}
暂无现有路由

待核对项

级别 设备 类别 问题 说明
{{ severityLabel(item.severity) }} {{ item.device_name }} {{ item.category }} {{ item.title }} {{ item.detail }}
暂无待核对项

内网地址段占用

地址段 {{ subnetInventory.summary.subnets }}
涉及设备 {{ subnetInventory.summary.devices }}
真实冲突 {{ subnetInventory.summary.hard_overlaps || 0 }}
重复组 {{ subnetInventory.summary.exact_duplicate_groups || 0 }}
诊断项 {{ subnetInventory.summary.diagnostics || 0 }}
关联路由 {{ subnetInventory.summary.route_diagnostics || 0 }}
发现重复或重叠地址段,请先处理真实占用冲突,再继续规划新隧道。

冲突诊断

级别 类型 冲突网段 关联设备 关联路由 整改方向
{{ severityLabel(item.severity) }} {{ diagnosticCategoryLabel(item.category) }} {{ item.cidrs.join(' / ') }}
{{ device.device_name }} {{ device.region || '' }}
{{ item.related_route_count }} 条 {{ item.suggested_action }}
暂无匹配的冲突诊断

{{ selectedSubnetDiagnostic().title }} · {{ selectedSubnetDiagnostic().cidrs.join(' / ') }}

{{ selectedSubnetDiagnostic().summary }}

真实占用对象

设备 来源 网段 接口/隧道
{{ item.device_name }} {{ sourceLabel(item.source) }} {{ item.cidr }} {{ item.interface || item.comment || '-' }}

关联静态路由

设备 目标网段 网关 备注
{{ route.device_name }} {{ route.cidr }} {{ route.gateway || '-' }} {{ route.comment || '-' }}
暂无关联路由

逐条整改方案

{{ step.recommended_role || '建议核对' }} {{ step.device_name }} · {{ step.object_type }} · {{ step.object_ref || '-' }}

{{ step.summary || step.action }}

{{ step.cidr }}
{{ step.tunnel_endpoints && step.tunnel_endpoints.length ? '隧道双端地址' : '本端地址段' }}
{{ endpoint.address || endpoint.cidr }}
{{ rangeDeviceText(endpoint) }}
{{ rangeObjectText(endpoint) }}
冲突对端地址段
{{ peer.cidr }}
{{ rangeDeviceText(peer) }}
{{ rangeObjectText(peer) }}
暂无明确对端
建议目标
{{ step.suggested_replacement_cidr }}
{{ endpoint.device_name }}
{{ endpoint.replacement_address }}
{{ stepSuggestionValue(step) }}
先确认保留端,再处理关联路由
{{ step.action }}
关联路由 {{ route.device_name }} {{ route.cidr }} via {{ route.gateway || '-' }}
联动修改 {{ dependencyText(reference) }}
{{ command }}
{{ step.command_hint }}
该项需要人工处理,暂不支持自动执行。

整改结果

{{ pretty(subnetRemediationResult) }}
地址段 设备 区域 来源 接口/隧道 冲突 备注
{{ item.cidr }} {{ item.device_name }} {{ item.region || '-' }} {{ sourceLabel(item.source) }} {{ item.interface || '-' }} {{ item.conflict_count }}- {{ item.comment || item.gateway || '-' }}
暂无地址段

隧道规划

名称 协议 双端 隧道地址 状态 运行
{{ item.name }} 当前 {{ item.protocol }} {{ item.endpoint_a.identity }} ↔ {{ item.endpoint_b.identity }} {{ item.endpoint_a_tunnel_address }} ↔ {{ item.endpoint_b_tunnel_address }} {{ item.status }} {{ tunnelStatusLabel(tunnelOverallStatus(item)) }}
{{ tunnelStatusTime(item) }}
暂无隧道规划

{{ tunnelForm.id ? '编辑隧道' : '新建隧道' }}

当前草稿来自现有隧道: {{ selectedInventoryTunnel().device_name }} · {{ selectedInventoryTunnel().protocol }} {{ selectedInventoryTunnel().name || '-' }}

新建 GRE / IPIP 隧道均关闭 Keepalive,包括启用 IPsec 的隧道。

已保存:{{ tunnelForm.name }}
确认下发 {{ pendingTunnelApplyName() }} 到双端 RouterOS? 系统将通过 SSH 写入隧道接口、隧道地址和对端路由。建议先点“预览配置”确认脚本内容。
A 端:{{ deviceName(tunnelForm.endpoint_a_device_id) }}
公网:{{ devicePublicIp(tunnelForm.endpoint_a_device_id) || '-' }} 隧道地址:{{ tunnelForm.endpoint_a_tunnel_address || '-' }}
{{ routeKindLabel(item.kind) }} {{ item.cidr }} 选择设备后显示本端内网/VPN 网段
B 端:{{ deviceName(tunnelForm.endpoint_b_device_id) }}
公网:{{ devicePublicIp(tunnelForm.endpoint_b_device_id) || '-' }} 隧道地址:{{ tunnelForm.endpoint_b_tunnel_address || '-' }}
{{ routeKindLabel(item.kind) }} {{ item.cidr }} 选择设备后显示本端内网/VPN 网段
正在根据双端配置规划隧道地址和路由...
建议隧道内网:{{ tunnelPlan.tunnel_network }}; A 端 {{ tunnelPlan.endpoint_a_tunnel_address }}, B 端 {{ tunnelPlan.endpoint_b_tunnel_address }}。
A 端本地内网 B 端默认路由
{{ route.cidr }} dst={{ route.cidr }} via {{ tunnelPlanGateway('a') || '-' }}
未从 A 端配置中识别到可发布内网
B 端本地内网 A 端默认路由
{{ route.cidr }} dst={{ route.cidr }} via {{ tunnelPlanGateway('b') || '-' }}
未从 B 端配置中识别到可发布内网
A 端将写入的对端路由
来源:{{ deviceName(tunnelForm.endpoint_b_device_id) }} 的内网/VPN 网段 gateway:{{ tunnelPeerGateway('b') || '-' }}
已显示前 {{ routeDisplayLimit }} 条,可在下方文本框继续补充其它网段。
选择 A/B 两端后显示 A 端要写入的对端路由
未从 B 端配置中识别到可发布网段
B 端将写入的对端路由
来源:{{ deviceName(tunnelForm.endpoint_a_device_id) }} 的内网/VPN 网段 gateway:{{ tunnelPeerGateway('a') || '-' }}
已显示前 {{ routeDisplayLimit }} 条,可在下方文本框继续补充其它网段。
选择 A/B 两端后显示 B 端要写入的对端路由
未从 A 端配置中识别到可发布网段

A 端脚本

{{ tunnelScripts.endpoint_a_script }}

B 端脚本

{{ tunnelScripts.endpoint_b_script }}

下发结果

{{ pretty(tunnelScripts.results) }}

注册密钥

设备名 区域 心跳 公网接口 DDNS 状态 日志采集 有效期
暂无注册项