From f80d9b7637ac9acadbb36f3d0909196e152f1c16 Mon Sep 17 00:00:00 2001 From: Denozordec Date: Fri, 9 Oct 2026 12:46:22 +0700 Subject: [PATCH] =?UTF-8?q?fix(ipsec):=20=D0=BF=D0=BE=D0=B4=D1=82=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D0=B4=D0=B8=D1=82=D1=8C=20=D0=B4=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=D0=B5=D1=80=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D0=BE?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D0=B9=20=D0=B8=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=D1=91=D0=BC=D0=BA=D1=83=20=D1=80=D0=B0=D0=B7=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/(main)/ipsec/page.tsx | 54 +-- backend/package.json | 3 +- backend/src/routes/ipsec.ts | 90 ++--- backend/src/services/entity-snapshots.ts | 3 - backend/src/services/ipsec-ca.ts | 2 + backend/src/services/ipsec-cleanup.ts | 32 ++ backend/src/services/ipsec-config.test.ts | 5 +- backend/src/services/ipsec-config.ts | 20 +- backend/src/services/ipsec-live.ts | 85 ++-- backend/src/services/ipsec-ros.ts | 41 +- backend/src/services/ipsec-state.test.ts | 78 ++++ components/ipsec/ipsec-peer-sheet.tsx | 18 +- docs/ux-ui-external-acceptance.md | 8 +- docs/ux-ui-plan.md | 10 +- docs/ux-ui-progress.md | 42 +- docs/ux-ui-stage-12.md | 40 +- docs/ux-ui-test-server.md | 10 +- .../browser-ipsec-section-2026-10-09.json | 45 +++ ...ploy-browser-ipsec-section-2026-10-09.json | 50 +++ .../deploy-ipsec-section-2026-10-09.json | 39 ++ .../acceptance/ipsec-section-2026-10-09.json | 372 ++++++++++++++++++ ...ec-section-source-manifest-2026-10-09.json | 58 +++ ...c-real-clients-server1-1280-2026-10-09.png | Bin 0 -> 120141 bytes ...ec-real-clients-server1-320-2026-10-09.png | Bin 0 -> 46872 bytes ...c-real-clients-server2-1280-2026-10-09.png | Bin 0 -> 118840 bytes ...ec-real-clients-server2-320-2026-10-09.png | Bin 0 -> 46908 bytes tests/e2e/ipsec-layout.spec.ts | 6 +- tests/e2e/ipsec-links.spec.ts | 28 ++ 28 files changed, 969 insertions(+), 170 deletions(-) create mode 100644 backend/src/services/ipsec-cleanup.ts create mode 100644 backend/src/services/ipsec-state.test.ts create mode 100644 docs/ux-ui/acceptance/browser-ipsec-section-2026-10-09.json create mode 100644 docs/ux-ui/acceptance/deploy-browser-ipsec-section-2026-10-09.json create mode 100644 docs/ux-ui/acceptance/deploy-ipsec-section-2026-10-09.json create mode 100644 docs/ux-ui/acceptance/ipsec-section-2026-10-09.json create mode 100644 docs/ux-ui/acceptance/ipsec-section-source-manifest-2026-10-09.json create mode 100644 docs/ux-ui/screens/ipsec-real-clients-server1-1280-2026-10-09.png create mode 100644 docs/ux-ui/screens/ipsec-real-clients-server1-320-2026-10-09.png create mode 100644 docs/ux-ui/screens/ipsec-real-clients-server2-1280-2026-10-09.png create mode 100644 docs/ux-ui/screens/ipsec-real-clients-server2-320-2026-10-09.png create mode 100644 tests/e2e/ipsec-links.spec.ts diff --git a/app/(main)/ipsec/page.tsx b/app/(main)/ipsec/page.tsx index 22926956..958e606a 100644 --- a/app/(main)/ipsec/page.tsx +++ b/app/(main)/ipsec/page.tsx @@ -1,7 +1,8 @@ "use client" import { z } from "zod" -import { useCallback, useEffect, useMemo, useRef, useState } from "react" +import { Suspense, useCallback, useEffect, useMemo, useRef, useState } from "react" +import { useSearchParams } from "next/navigation" import { PageHeader } from "@/components/page-header" import { servers as mockServers } from "@/lib/data" import type { Server } from "@/lib/data" @@ -174,7 +175,7 @@ const ipsecInventorySchema = z.array(z.object({ latency: z.number().nullable().optional(), asn: z.string().optional(), })).refine(rows => new Set(rows.map(row => row.id)).size === rows.length) -function IpsecPage() { +function IpsecPage({ selectedServerId, setSelectedServerId, workspaceTab, setWorkspaceTab }: { selectedServerId: string; setSelectedServerId: (id: string) => void; workspaceTab: IpsecWorkspaceTab; setWorkspaceTab: (tab: IpsecWorkspaceTab) => void }) { const { mode, backendUrl } = useDataSource() const isLive = mode === "live" @@ -201,10 +202,9 @@ function IpsecPage() { const certPending = useRef(false) useEffect(() => () => { certEpoch.current += 1 }, []) - const [selectedServerId, setSelectedServerId] = useState(ALL_SERVERS_ID) - const [workspaceTab, setWorkspaceTab] = useState("clients") const [search, setSearch] = useState("") const [initOpen, setInitOpen] = useState(false) + const [initTargetId, setInitTargetId] = useState() const [userOpen, setUserOpen] = useState(false) const [editing, setEditing] = useState(null) const [certOpen, setCertOpen] = useState(false) @@ -265,10 +265,8 @@ function IpsecPage() { const displaySummaries = isLive ? summaries : MOCK_IPSEC_SERVERS const displayClients = isLive ? clients : MOCK_IPSEC_CLIENTS - const effectiveServerId = - selectedServerId === ALL_SERVERS_ID || displayServers.some((s) => s.id === selectedServerId) - ? selectedServerId - : ALL_SERVERS_ID + const effectiveServerId = selectedServerId + const missingSelectedServer = selectedServerId !== ALL_SERVERS_ID && hasLoaded && !displayServers.some(s => s.id === selectedServerId) const historyServerId = effectiveServerId === ALL_SERVERS_ID ? null : effectiveServerId @@ -315,7 +313,7 @@ function IpsecPage() { } const failedServerIds = new Set(failures.map(f => f.serverId)) - const scopeUnknown = isLive && (!hasLoaded || !!dataError || (effectiveServerId === ALL_SERVERS_ID ? failures.length > 0 : failedServerIds.has(effectiveServerId))) + const scopeUnknown = missingSelectedServer || isLive && (!hasLoaded || !!dataError || (effectiveServerId === ALL_SERVERS_ID ? failures.length > 0 : failedServerIds.has(effectiveServerId))) const canManage = (serverId: string) => isLive && hasLoaded && !dataError && !inventoryError && !loading && !busy && !historyRestoring && !failedServerIds.has(serverId) && liveServers.some(s => s.id === serverId) @@ -337,7 +335,7 @@ function IpsecPage() { operationLock.current = false if (mounted.current) setBusy(false) } - const hasReadyDevice = displayServers.some(s => canManage(s.id)) + const hasReadyDevice = !missingSelectedServer && displayServers.some(s => (effectiveServerId === ALL_SERVERS_ID || s.id === effectiveServerId) && canManage(s.id)) const scopedClients = useMemo(() => { if (effectiveServerId === ALL_SERVERS_ID) return displayClients @@ -366,10 +364,6 @@ function IpsecPage() { const caOk = scopedSummaries.some((s) => s.caCert) const compactServer = effectiveServerId !== ALL_SERVERS_ID const sheetServerId = compactServer ? effectiveServerId : undefined - const certNames = useMemo( - () => Array.from(new Set(scopedSummaries.flatMap((s) => (s.certs ?? []).map((c) => c.name)))).sort(), - [scopedSummaries], - ) const peerOptions = useMemo( () => scopedSummaries.flatMap((s) => s.peers.map((p) => ({ serverId: s.serverId, name: p.name, managed: p.managed }))), [scopedSummaries], @@ -583,7 +577,6 @@ function IpsecPage() { address: form.address.trim() || undefined, exchangeMode: form.exchangeMode.trim() || undefined, passive: form.passive, - certificate: form.certificate.trim() || undefined, profile: form.profile.trim() || undefined, disabled: form.disabled, }) @@ -626,6 +619,7 @@ function IpsecPage() { <>
+ {missingSelectedServer && Устройство из ссылки не найденоВыберите доступный сервер. Данные других устройств не подставляются в этот срез.} Состояние серверов IPsec пока неизвестно

: { setSelectedServerId(s.serverId); setInitOpen(true) } : undefined} + onInit={isLive ? (s) => { setInitTargetId(s.serverId); setSelectedServerId(s.serverId); setInitOpen(true) } : undefined} onRemove={isLive ? (s) => setPendingDelete({ kind: "server", summary: s }) : undefined} onEditPeer={isLive ? openEditPeer : undefined} onDeletePeer={isLive ? (serverId, peer) => setPendingDelete({ kind: "peer", serverId, peer }) : undefined} @@ -831,12 +826,10 @@ function IpsecPage() { lines: [ "/ip ipsec peer add \\", " name=ipsec-vpn address=0.0.0.0/0 \\", - " exchange-mode=ike2 passive=yes \\", - " certificate=ipsec-server send-cert=always", + " exchange-mode=ike2 passive=yes profile=ipsec-vpn", "/ip ipsec identity add \\", - " peer=ipsec-vpn auth-method=rsa-key \\", + " peer=ipsec-vpn auth-method=digital-signature \\", " certificate=ipsec-server \\", - " match-by=certificate \\", " generate-policy=port-strict \\", " mode-config=ipsec-vpn", ], @@ -892,7 +885,6 @@ function IpsecPage() { onOpenChange={(v) => { setPeerOpen(v); if (!v) setEditingPeer(null) }} busy={busy} editing={editingPeer?.peer ?? null} - certificates={certNames} onSubmit={handleEditPeer} /> @@ -901,7 +893,7 @@ function IpsecPage() { onOpenChange={setInitOpen} servers={serverOptions.filter(s => canManage(s.id) || busy)} busy={busy} - defaultServerId={sheetServerId} + defaultServerId={initTargetId ?? sheetServerId} onSubmit={handleInit} /> @@ -959,7 +951,21 @@ function IpsecPage() { ) } -export default function IpsecSource() { +function IpsecRoute() { const { mode, backendUrl } = useDataSource() - return + const params = useSearchParams() + const selectedServerId = params.get("server") ?? ALL_SERVERS_ID + const rawTab = params.get("tab") + const workspaceTab: IpsecWorkspaceTab = rawTab === "server" || rawTab === "cli" ? rawTab : "clients" + const navigate = (key: string, value: string, defaultValue: string) => { + const next = new URLSearchParams(params.toString()) + if (value === defaultValue) next.delete(key) + else next.set(key, value) + window.history.pushState(null, "", "/ipsec" + (next.size ? "?" + next.toString() : "")) + } + return navigate("server", id, ALL_SERVERS_ID)} workspaceTab={workspaceTab} setWorkspaceTab={tab => navigate("tab", tab, "clients")} /> +} + +export default function IpsecSource() { + return Загрузка IPsec…
}> } diff --git a/backend/package.json b/backend/package.json index 60dbbe29..b2ad9022 100644 --- a/backend/package.json +++ b/backend/package.json @@ -28,8 +28,9 @@ "test:ros-file": "tsx src/services/ros-file-contents.test.ts", "test:scheduler": "tsx src/services/scheduler-running.test.ts && tsx src/services/scheduler-recorded-run.test.ts && tsx src/routes/scheduler.test.ts", "test:backups": "tsx src/services/backup-scheduler-run.test.ts && tsx src/services/backup-restore.test.ts && tsx src/services/backup-deletion.test.ts && tsx src/services/backup-dto.test.ts && tsx src/services/backup-storage-update.test.ts && tsx src/services/backup-job-execution.test.ts && tsx src/routes/backups-operations.test.ts && tsx src/services/s3-backup-client.test.ts", + "test:ipsec": "tsx src/services/ipsec-config.test.ts && tsx src/services/ipsec-state.test.ts", "test:live-maps": "tsx src/services/ospf-route-parse.test.ts && tsx src/services/vxlan-live.test.ts && tsx src/routes/vxlan.test.ts && tsx src/services/containers-live.test.ts && tsx src/services/firewall-poll.test.ts && tsx src/services/gre-catalog-poll.test.ts && tsx src/routes/filters-gre-catalog.test.ts && tsx src/routes/bgp-catalog.test.ts && tsx src/services/bgp-catalog-parse.test.ts && tsx src/routes/ospf-catalog.test.ts && tsx src/services/ospf-observed-values.test.ts", - "test": "npm run test:probes && npm run test:exec && npm run test:alert-engine && npm run test:alerts-telegram && npm run test:auth && npm run test:wireguard && npm run test:traffic-rate && npm run test:traffic-flow && npm run test:users && npm run test:pg && npm run test:backups && npm run test:scheduler && npm run test:live-maps && npm run test:ospf-optimizer && npm run test:recursive-routes && npm run test:config-sync && npm run test:ros-file && npm run test:containers && npm run test:certificates && npm run test:netflow-settings && npm run test:netflow-purge && npm run test:evolution && npm run test:system-database", + "test": "npm run test:probes && npm run test:exec && npm run test:alert-engine && npm run test:alerts-telegram && npm run test:auth && npm run test:wireguard && npm run test:ipsec && npm run test:traffic-rate && npm run test:traffic-flow && npm run test:users && npm run test:pg && npm run test:backups && npm run test:scheduler && npm run test:live-maps && npm run test:ospf-optimizer && npm run test:recursive-routes && npm run test:config-sync && npm run test:ros-file && npm run test:containers && npm run test:certificates && npm run test:netflow-settings && npm run test:netflow-purge && npm run test:evolution && npm run test:system-database", "test:evolution": "tsx src/services/evobgp-catalog.test.ts && tsx src/routes/evobgp-catalog.test.ts && tsx src/routes/evobgp-settings.test.ts && tsx src/plugins/auth.evolution-settings.test.ts", "test:netflow-purge": "tsx src/db/operation-lock.test.ts && tsx src/services/traffic-flow-purge-execution.test.ts && tsx src/routes/traffic-flow-purge.test.ts", "test:netflow-settings": "tsx src/services/traffic-flow-host-file-builders.test.ts && tsx src/services/traffic-flow-key-execution.test.ts && tsx src/routes/traffic-flow-settings.test.ts && tsx src/plugins/auth.netflow-settings.test.ts", diff --git a/backend/src/routes/ipsec.ts b/backend/src/routes/ipsec.ts index 2877a335..e3cca7ba 100644 --- a/backend/src/routes/ipsec.ts +++ b/backend/src/routes/ipsec.ts @@ -14,7 +14,6 @@ import { } from "@mmapp/contracts/ipsec" import { MikrotikClient, MikrotikError } from "../services/mikrotik.js" import { - IPSEC_CA_CERT, IPSEC_COMMON_NAME, IPSEC_SERVER_CERT, buildClientInstructions, @@ -49,7 +48,6 @@ import { patchPeer, deletePeer, ensureSharedIke2Identity, - listByPath, } from "../services/ipsec-ros.js" import { ensureCaCertificate, @@ -65,6 +63,7 @@ import { getEnabledIpsecServerById, listIpsec, mapClients, + resolveIpsecClientTarget, mapServerSummary, } from "../services/ipsec-live.js" import { @@ -75,11 +74,12 @@ import { } from "../services/config-revisions.js" import { parseIpsecSnapshot, planIpsecRestore } from "../services/entity-snapshots.js" import { executeRosOps } from "../services/ros-ops.js" +import { removeManagedIpsecServer } from "../services/ipsec-cleanup.js" import { parseDbServerId } from "../utils/server-id.js" +import { isIP } from "node:net" import { randomBytes } from "node:crypto" import { z } from "zod" -const IPV4_RE = /^\d{1,3}(?:\.\d{1,3}){3}$/ function generatePassphrase(): string { return randomBytes(9).toString("base64url") @@ -174,7 +174,7 @@ const ipsecRoutes: FastifyPluginAsyncZod = async (app) => { const sid = parseDbServerId(q.serverId) if (sid !== null) { const server = await getEnabledIpsecServerById(sid) - if (server) await recordIpsec(server, "observed") + if (server && !result.failures?.some(f => f.serverId === String(sid))) await recordIpsec(server, "observed") } return reply.send(result) }) @@ -206,6 +206,7 @@ const ipsecRoutes: FastifyPluginAsyncZod = async (app) => { await ensureSharedModeConfig(client, IPSEC_COMMON_NAME, IPSEC_COMMON_NAME, body.dns, comment) await ensurePolicyTemplate(client, body.poolCidr, IPSEC_COMMON_NAME, comment) await ensureIpsecPeer(client, IPSEC_COMMON_NAME, serverCert, IPSEC_COMMON_NAME, comment) + await ensureSharedIke2Identity(client, { peerName: IPSEC_COMMON_NAME, serverCertName: serverCert, modeConfigName: IPSEC_COMMON_NAME, comment: ipsecManagedComment("IKEv2 listener") }) if (body.createNatRule) { await ensureNatRule(client, body.poolCidr, ipsecManagedComment("интернет клиентам VPN")) } @@ -225,31 +226,7 @@ const ipsecRoutes: FastifyPluginAsyncZod = async (app) => { if (!server) return reply.status(404).send({ error: "Сервер не найден" }) const client = MikrotikClient.fromServer(server) try { - for (const path of ["/ip/ipsec/identity", "/ip/ipsec/mode-config", "/ip/ipsec/peer", "/ip/ipsec/policy", "/ip/pool"]) { - const rows = await listByPath(client, path) - for (const row of rows) { - if (!row[".id"]) continue - if (isIpsecManagedComment(row.comment) || (path === "/ip/ipsec/policy" && (row.template === "true" || row.template === "yes"))) { - await client.delete(`${path}/${encodeURIComponent(row[".id"])}`).catch(() => undefined) - } - } - } - const nat = await listByPath(client, "/ip/firewall/nat") - for (const row of nat) { - if (row[".id"] && isIpsecManagedComment(row.comment)) { - await client.delete(`/ip/firewall/nat/${encodeURIComponent(row[".id"])}`).catch(() => undefined) - } - } - // profile/proposal не критично оставлять; сертификаты — по флагу - if (removeCertificates) { - const certs = await client.getCertificates() - for (const c of certs) { - const name = String(c.name ?? "") - if (c[".id"] && (name === IPSEC_CA_CERT || name === IPSEC_SERVER_CERT || name.startsWith("ipsec-user-"))) { - await client.delete(`/certificate/${encodeURIComponent(c[".id"])}`).catch(() => undefined) - } - } - } + await removeManagedIpsecServer(client, removeCertificates) await recordIpsec(server, "apply") return reply.send({ ok: true }) } catch (e) { @@ -275,7 +252,6 @@ const ipsecRoutes: FastifyPluginAsyncZod = async (app) => { ?? ike2Peers.find((p) => isIpsecManagedComment(p.comment)) ?? ike2Peers.find((p) => (p.name ?? "").trim() === IPSEC_COMMON_NAME) ?? ike2Peers[0] - ?? state.peers[0] if (!peer) { return reply.status(400).send({ error: "На роутере нет ни одного IPsec peer — создайте peer на вкладке «Сервер»" }) } @@ -288,13 +264,15 @@ const ipsecRoutes: FastifyPluginAsyncZod = async (app) => { .find((n) => n && !n.startsWith("mc-ipsec-")) const sharedMc = (idMcName ? state.modeConfigs.find((m) => (m.name ?? "").trim() === idMcName) : undefined) ?? state.modeConfigs.find((m) => (m.name ?? "").trim() === IPSEC_COMMON_NAME) - const serverCertRow = resolveIke2ServerCert(state.certs, ike2Peers) + const serverCertRow = resolveIke2ServerCert(state.certs, ike2Peers, state.identities) const caName = resolveIke2CaName(state.certs, serverCertRow) if (body.authMethod === "certificate" && (!caName || !serverCertRow)) { return reply.status(400).send({ error: "Нет CA/серверного сертификата — для сертификатного клиента запустите мастер или используйте PSK", }) } + if (body.peerName && (peer.name ?? "").trim() !== body.peerName.trim()) return reply.status(404).send({ error: "Выбранный peer не найден" }) + if (mapClients(state).some(c => c.name === body.name.trim()) || (body.authMethod === "certificate" && state.certs.some(c => c.name === clientCertName(body.name)))) return reply.status(409).send({ error: "Клиент уже существует" }) const peerName = (peer.name ?? "").trim() const serverEndpoint = String(serverCertRow?.["common-name"] ?? "").trim() || server.host const dns = sharedMc?.["static-dns"]?.trim() || undefined @@ -309,7 +287,7 @@ const ipsecRoutes: FastifyPluginAsyncZod = async (app) => { let modeConfig = (sharedMc?.name ?? "").trim() if (body.staticIp) { const ip = body.staticIp.trim() - if (!IPV4_RE.test(ip)) return reply.status(400).send({ error: `Некорректный IP: ${ip}` }) + if (isIP(ip) !== 4) return reply.status(400).send({ error: `Некорректный IP: ${ip}` }) const taken = takenStaticIps(state.modeConfigs) if (taken.includes(ip)) { return reply.status(409).send({ error: `IP ${ip} уже назначен другому клиенту` }) @@ -386,22 +364,25 @@ const ipsecRoutes: FastifyPluginAsyncZod = async (app) => { return reply.status(400).send({ error: "Некорректное тело запроса", details: parsed.error.flatten() }) } const d = parsed.data + if ("staticIp" in d && d.staticIp && isIP(d.staticIp.trim()) !== 4) return reply.status(400).send({ error: "Некорректный статический IPv4 адрес" }) const server = await getEnabledIpsecServerById(serverIdParam(serverId)) if (!server) return reply.status(404).send({ error: "Сервер не найден" }) const client = MikrotikClient.fromServer(server) try { const state = await fetchIpsecState(server) const targetRosId = rosIdParam(rosId) - const identity = state.identities.find((i) => String(i[".id"] ?? "") === targetRosId) - const certRow = identity - ? undefined - : state.certs.find((c) => String(c[".id"] ?? "") === targetRosId) - ?? state.certs.find((c) => String(c.name ?? "").trim() === targetRosId) + const target = resolveIpsecClientTarget(state, targetRosId) + if (target.ambiguous) return reply.status(409).send({ error: "Неоднозначный ID клиента. Обновите список IPsec" }) + let { identity, certRow } = target + if (certRow) { + identity = state.identities.find(i => i["remote-certificate"] === certRow?.name) + if (identity) certRow = undefined + } if (!identity && !certRow) return reply.status(404).send({ error: "Клиент не найден" }) const ike2Peers = selectIke2Peers(state.peers) const ike2PeerNames = ike2Peers.map((p) => (p.name ?? "").trim()).filter(Boolean) - const serverCertRow = resolveIke2ServerCert(state.certs, ike2Peers) + const serverCertRow = resolveIke2ServerCert(state.certs, ike2Peers, state.identities) const managedIdentity = identity ? isIpsecManagedComment(identity.comment) : String(certRow?.name ?? "").startsWith("ipsec-user-") @@ -419,9 +400,11 @@ const ipsecRoutes: FastifyPluginAsyncZod = async (app) => { comment: managedIdentity ? ipsecUserComment(d.name) : d.name.trim(), }) } - // managed-серт переименовываем на конвенционное имя (client1/anakondra на устройстве не трогаем) - if (certRow?.[".id"] && managedIdentity) { - await client.patch(`/certificate/${encodeURIComponent(String(certRow[".id"]))}`, { name: clientCertName(d.name) }) + // Preserve the signed certificate CN/key/name; keep the editable display name in an identity. + if (certRow && !d.staticIp) { + const peer = ike2Peers.find(p => isIpsecManagedComment(p.comment)) ?? ike2Peers[0] + if (!peer || !serverCertRow) return reply.status(400).send({ error: "Нет IKEv2 peer или серверного сертификата" }) + await putIdentity(client, { peerName: peer.name ?? "", modeConfig: sharedMcName, comment: ipsecUserComment(d.name), authMethod: "certificate", certificate: serverCertRow.name, remoteCertificate: certRow.name }) } } @@ -434,7 +417,7 @@ const ipsecRoutes: FastifyPluginAsyncZod = async (app) => { if (personal) await deleteUserModeConfig(client, personal) } else { const ip = d.staticIp.trim() - if (!IPV4_RE.test(ip)) return reply.status(400).send({ error: `Некорректный IP: ${ip}` }) + if (isIP(ip) !== 4) return reply.status(400).send({ error: `Некорректный IP: ${ip}` }) const others = takenStaticIps( state.modeConfigs.filter((m) => (m.name ?? "").trim() !== currentMc), ) @@ -446,7 +429,7 @@ const ipsecRoutes: FastifyPluginAsyncZod = async (app) => { } else if (!identity && certRow && d.staticIp) { // cert-клиент без identity: персональная identity (match-by=certificate) + статический mode-config const ip = d.staticIp.trim() - if (!IPV4_RE.test(ip)) return reply.status(400).send({ error: `Некорректный IP: ${ip}` }) + if (isIP(ip) !== 4) return reply.status(400).send({ error: `Некорректный IP: ${ip}` }) const taken = takenStaticIps(state.modeConfigs) if (taken.includes(ip)) return reply.status(409).send({ error: `IP ${ip} уже назначен другому клиенту` }) const peer = ike2Peers.find((p) => isIpsecManagedComment(p.comment)) ?? ike2Peers[0] @@ -491,11 +474,10 @@ const ipsecRoutes: FastifyPluginAsyncZod = async (app) => { try { const state = await fetchIpsecState(server) const targetRosId = rosIdParam(rosId) - const identity = state.identities.find((i) => String(i[".id"] ?? "") === targetRosId) - const certRow = identity - ? undefined - : state.certs.find((c) => String(c[".id"] ?? "") === targetRosId) - ?? state.certs.find((c) => String(c.name ?? "").trim() === targetRosId) + const target = resolveIpsecClientTarget(state, targetRosId) + if (target.ambiguous) return reply.status(409).send({ error: "Неоднозначный ID клиента. Обновите список IPsec" }) + const identity = target.identity ?? (target.certRow ? state.identities.find(i => i["remote-certificate"] === target.certRow?.name) : undefined) + const certRow = identity ? undefined : target.certRow if (!identity && !certRow) return reply.status(404).send({ error: "Клиент не найден" }) const managed = identity ? isIpsecManagedComment(identity.comment) @@ -514,11 +496,11 @@ const ipsecRoutes: FastifyPluginAsyncZod = async (app) => { if (removeCertificate) { // удаляем только клиентский серт (managed / выбранный явно); CA и серверный не трогаем const ike2Peers = selectIke2Peers(state.peers) - const caName = resolveIke2CaName(state.certs, resolveIke2ServerCert(state.certs, ike2Peers)) - const serverCertName = String(resolveIke2ServerCert(state.certs, ike2Peers)?.name ?? "").trim() + const caName = resolveIke2CaName(state.certs, resolveIke2ServerCert(state.certs, ike2Peers, state.identities)) + const serverCertName = String(resolveIke2ServerCert(state.certs, ike2Peers, state.identities)?.name ?? "").trim() const certName = remoteCert || (managed && userName ? clientCertName(userName) : "") if (certName && certName !== caName && certName !== serverCertName) { - await client.removeCertificate(certName).catch(() => undefined) + await client.removeCertificate(certName) } } await recordIpsec(server, "apply") @@ -547,7 +529,7 @@ const ipsecRoutes: FastifyPluginAsyncZod = async (app) => { if (d.address !== undefined) body.address = d.address if (d.exchangeMode !== undefined) body["exchange-mode"] = d.exchangeMode if (d.passive !== undefined) body.passive = d.passive ? "yes" : "no" - if (d.certificate !== undefined) body.certificate = d.certificate + if (d.certificate !== undefined) return reply.status(400).send({ error: "Сертификат задаётся в IPsec identity, а не в peer" }) if (d.profile !== undefined) body.profile = d.profile if (d.disabled !== undefined) body.disabled = d.disabled ? "yes" : "no" if (Object.keys(body).length) await patchPeer(client, rosIdParam(rosId), body) @@ -633,7 +615,9 @@ const ipsecRoutes: FastifyPluginAsyncZod = async (app) => { const client = MikrotikClient.fromServer(server) try { const state = await fetchIpsecState(server) - const identity = state.identities.find((i) => String(i[".id"] ?? "") === rosIdParam(rosId)) + const target = resolveIpsecClientTarget(state, rosIdParam(rosId)) + if (target.ambiguous) return reply.status(409).send({ error: "Неоднозначный ID клиента. Обновите список IPsec" }) + const identity = target.identity if (!identity) return reply.status(404).send({ error: "Клиент не найден" }) const userName = parseIpsecUserComment(identity.comment) ?? "" if (!userName) return reply.status(400).send({ error: "Не managed-клиент" }) diff --git a/backend/src/services/entity-snapshots.ts b/backend/src/services/entity-snapshots.ts index 1c3ae9f4..485572ba 100644 --- a/backend/src/services/entity-snapshots.ts +++ b/backend/src/services/entity-snapshots.ts @@ -693,8 +693,6 @@ function ipsecPeerBody(p: IpsecSnapshotPeer): Record { address: p.address, "exchange-mode": p.exchangeMode, passive: rosYesNo(p.passive), - certificate: p.certificate, - "send-cert": "always", profile: p.profile, comment: p.comment, disabled: rosYesNo(p.disabled), @@ -723,7 +721,6 @@ function ipsecModeConfigBody(m: IpsecSnapshotModeConfig): Record "address-pool": m.addressPool, address: m.address, "static-dns": m.staticDns, - comment: m.comment, }) } diff --git a/backend/src/services/ipsec-ca.ts b/backend/src/services/ipsec-ca.ts index 0e627e26..115f374c 100644 --- a/backend/src/services/ipsec-ca.ts +++ b/backend/src/services/ipsec-ca.ts @@ -48,6 +48,8 @@ export async function ensureCaCertificate(client: MikrotikClient, daysValid: num await client.signCertificate({ name: IPSEC_CA_CERT, daysValid }) await waitCertificateSigned(client, IPSEC_CA_CERT) } + const ca = await findCertificate(client, IPSEC_CA_CERT) + if (ca?.[".id"] && !["true", "yes"].includes(ca.trusted ?? "")) await client.patch(`/certificate/${encodeURIComponent(ca[".id"])}`, { trusted: "yes" }) return IPSEC_CA_CERT } diff --git a/backend/src/services/ipsec-cleanup.ts b/backend/src/services/ipsec-cleanup.ts new file mode 100644 index 00000000..69ebeae0 --- /dev/null +++ b/backend/src/services/ipsec-cleanup.ts @@ -0,0 +1,32 @@ +import type { MikrotikClient } from "./mikrotik.js" +import { IPSEC_CA_CERT, IPSEC_SERVER_CERT, isManagedIpsecModeConfig, isIpsecManagedComment } from "./ipsec-config.js" +import { listByPath } from "./ipsec-ros.js" + +/** Read the whole deletion scope before writing; never treat unreadable state as empty. */ +export async function removeManagedIpsecServer(client: MikrotikClient, removeCertificates: boolean): Promise { + const paths = ["/ip/ipsec/identity", "/ip/ipsec/peer", "/ip/ipsec/policy", "/ip/ipsec/mode-config", "/ip/pool", "/ip/firewall/nat"] + if (removeCertificates) paths.push("/certificate") + const snapshots = await Promise.all(paths.map(async path => ({ path, rows: await listByPath(client, path) }))) + const owned = (path: string, row: Record) => isIpsecManagedComment(row.comment) || (path === "/ip/ipsec/mode-config" && isManagedIpsecModeConfig(row)) || (path === "/certificate" && (row.name === IPSEC_CA_CERT || row.name === IPSEC_SERVER_CERT || row.name?.startsWith("ipsec-user-"))) + const names = (path: string) => new Set(snapshots.find(s => s.path === path)?.rows.filter(row => owned(path, row)).map(row => row.name).filter((name): name is string => typeof name === "string" && name.length > 0)) + const peerNames = names("/ip/ipsec/peer"), modeConfigs = names("/ip/ipsec/mode-config"), certificates = names("/certificate") + for (const { path, rows } of snapshots) { + for (const row of rows.filter(row => !owned(path, row))) { + if (path === "/certificate" && certificates.has(row.ca ?? "")) throw new Error("Удаление заблокировано: управляемый CA подписал чужой сертификат") + if (path === "/ip/ipsec/identity" && (peerNames.has(row.peer ?? "") || modeConfigs.has(row["mode-config"] ?? "") || certificates.has(row.certificate ?? "") || certificates.has(row["remote-certificate"] ?? ""))) throw new Error("Удаление заблокировано: объекты IPsec используются чужой identity") + if (path === "/ip/ipsec/policy" && row.dynamic !== "true" && row.dynamic !== "yes" && (row.peer ?? "").split(",").some(peer => peerNames.has(peer.trim()))) throw new Error("Удаление заблокировано: peer используется чужой policy") + } + } + for (const { path, rows } of snapshots) { + if (rows.some(row => owned(path, row) && !row[".id"])) throw new Error(`Нет ID управляемого объекта: ${path}`) + } + for (const { path, rows } of snapshots) { + // Default/foreign templates are preserved. Certificates use the existing reserved naming convention. + const targets = rows.filter(row => owned(path, row)) + if (path === "/certificate") targets.sort((a, b) => Number(a.name === IPSEC_CA_CERT) - Number(b.name === IPSEC_CA_CERT)) + for (const row of targets) { + if (!row[".id"]) throw new Error(`Нет ID управляемого объекта: ${path}`) + await client.delete(`${path}/${encodeURIComponent(row[".id"])}`) + } + } +} diff --git a/backend/src/services/ipsec-config.test.ts b/backend/src/services/ipsec-config.test.ts index b7e70202..95b3a89d 100644 --- a/backend/src/services/ipsec-config.test.ts +++ b/backend/src/services/ipsec-config.test.ts @@ -36,6 +36,8 @@ import { identityRosBody } from "./ipsec-ros.js" assert.ok(!isIpsecManagedComment(undefined)) assert.equal(ipsecUserComment("alice"), `${IPSEC_MARKER} user=alice`) assert.equal(parseIpsecUserComment(ipsecUserComment("alice")), "alice") + assert.equal(parseIpsecUserComment(ipsecUserComment("Alice Cooper")), "Alice Cooper") + assert.equal(parseIpsecUserComment("foreign user=alice"), null) assert.equal(parseIpsecUserComment("не managed"), null) assert.equal(parseIpsecUserComment(null), null) } @@ -187,7 +189,8 @@ import { identityRosBody } from "./ipsec-ros.js" remoteCertificate: "ipsec-user-alice", placeBefore: "*S", }) - assert.equal(body["place-before"], "*S") + assert.equal(body["auth-method"], "digital-signature") + assert.equal(body["place-before"], undefined) assert.equal(body["remote-certificate"], "ipsec-user-alice") assert.equal(body["match-by"], "certificate") } diff --git a/backend/src/services/ipsec-config.ts b/backend/src/services/ipsec-config.ts index 9240f015..397baa9f 100644 --- a/backend/src/services/ipsec-config.ts +++ b/backend/src/services/ipsec-config.ts @@ -11,7 +11,12 @@ export function ipsecManagedComment(label = ""): string { } export function isIpsecManagedComment(comment: string | undefined | null): boolean { - return Boolean(comment) && String(comment).trim().startsWith(IPSEC_MARKER) + return Boolean(comment) && (String(comment).trim() === IPSEC_MARKER || String(comment).trim().startsWith(`${IPSEC_MARKER} `)) +} + +/** Reserved RouterOS names identify mode-configs on versions without a comment property. */ +export function isManagedIpsecModeConfig(row: { name?: string; comment?: string }): boolean { + return isIpsecManagedComment(row.comment) || row.name === "ipsec-vpn" || Boolean(row.name?.startsWith("mc-ipsec-")) } /** Комментарий identity клиента: `MikrotikManager:ipsec user=<имя>`. */ @@ -20,8 +25,8 @@ export function ipsecUserComment(name: string): string { } export function parseIpsecUserComment(comment: string | undefined | null): string | null { - if (!comment) return null - const m = /user=([^\s]+)/.exec(comment.trim()) + if (!isIpsecManagedComment(comment)) return null + const m = /(?:^|\s)user=(.+)$/.exec(comment!.trim()) return m?.[1] ?? null } @@ -150,7 +155,7 @@ export function isIke2RemoteAccessIdentity( if (names.size > 0 && !names.has((i.peer ?? "").trim())) return false const hasModeConfig = Boolean((i["mode-config"] ?? "").trim()) const hasRemoteCert = Boolean((i["remote-certificate"] ?? "").trim()) - const rsaKey = (i["auth-method"] ?? "").trim().toLowerCase() === "rsa-key" + const rsaKey = ["rsa-key", "digital-signature"].includes((i["auth-method"] ?? "").trim().toLowerCase()) return hasModeConfig || hasRemoteCert || (rsaKey && Boolean((i.certificate ?? "").trim())) } @@ -176,8 +181,9 @@ export function selectSharedIke2Identity( } /** Серверный серт IKEv2 — из `peer.certificate` (напр. vpn-server), fallback по имени/usage. */ -export function resolveIke2ServerCert(certs: T[], ike2Peers: PeerLike[]): T | undefined { - const names = new Set(ike2Peers.map((p) => (p.certificate ?? "").trim()).filter(Boolean)) +export function resolveIke2ServerCert(certs: T[], ike2Peers: PeerLike[], identities: Ike2IdentityLike[] = []): T | undefined { + const peerNames = new Set(ike2Peers.map(p => p.name)) + const names = new Set([...ike2Peers.map((p) => (p.certificate ?? "").trim()), ...identities.filter(i => peerNames.has(i.peer)).map(i => (i.certificate ?? "").trim())].filter(Boolean)) return certs.find((c) => names.has(String(c.name ?? "").trim())) ?? certs.find((c) => String(c.name ?? "").trim() === IPSEC_SERVER_CERT) ?? certs.find((c) => String(c["key-usage"] ?? "").includes("tls-server")) @@ -297,7 +303,7 @@ export function buildClientInstructions(args: { `1. Скачайте и импортируйте сертификат ${args.p12Filename}.`, pass ? ` ${pass.trim()}` : " Пароль архива задаётся при экспорте.", "2. Windows: Параметры → Сеть → VPN → Добавить: тип IKEv2, «Вход с сертификатом»", - " (сертификат из .p12 должен лежать в хранилище «Личный» текущего пользователя).", + " Импортируйте .p12 в «Локальный компьютер» → «Личный», CA — в доверенные корневые сертификаты.", "3. macOS/iOS: импортируйте .p12 в Связку ключей, затем добавьте VPN (IKEv2),", " аутентификация — сертификат; удалённый ID = CN серверного сертификата.", "4. Android: strongSwan app → импорт .sswan-профиля (сертификат уже внутри).", diff --git a/backend/src/services/ipsec-live.ts b/backend/src/services/ipsec-live.ts index c3d247b2..c721af3a 100644 --- a/backend/src/services/ipsec-live.ts +++ b/backend/src/services/ipsec-live.ts @@ -1,4 +1,5 @@ import {boundedCompleteCount,completeCollectionCount} from "./complete-count.js" +import { parseDbServerId } from "../utils/server-id.js" import { eq } from "drizzle-orm" import { db } from "../db/index.js" import { servers } from "../db/schema.js" @@ -20,6 +21,7 @@ import { identityDisplayName, isIke2RemoteAccessIdentity, isIpsecManagedComment, + isManagedIpsecModeConfig, resolveIke2CaName, resolveIke2ServerCert, selectIke2Peers, @@ -196,18 +198,19 @@ export interface IpsecServerState { certs: RosCertRow[] } -export async function fetchIpsecState(server: ServerRow): Promise { - const client = MikrotikClient.fromServer(server) - const empty = (v: unknown): T[] => (Array.isArray(v) ? (v as T[]) : []) +export async function fetchIpsecState(server: ServerRow, reader?: MikrotikClient): Promise { + if (!server.enabled) throw new Error("Сервер выключен. Опрос IPsec не выполнялся") + const client = reader ?? MikrotikClient.fromServer(server) + const collection = async (path: string): Promise => { + const raw = await client.get(path) + if (!Array.isArray(raw) || raw.some(row => !row || typeof row !== "object" || Array.isArray(row) || typeof row[".id"] !== "string" || !row[".id"])) throw new Error(`Некорректный ответ IPsec: ${path}`) + return raw as T[] + } const [peers, identities, modeConfigs, pools, policies, nat, active, certs] = await Promise.all([ - client.get("/ip/ipsec/peer").then((v) => empty(v)).catch(() => [] as RosIpsecPeer[]), - client.get("/ip/ipsec/identity").then((v) => empty(v)).catch(() => [] as RosIpsecIdentity[]), - client.get("/ip/ipsec/mode-config").then((v) => empty(v)).catch(() => [] as RosIpsecModeConfig[]), - client.get("/ip/pool").then((v) => empty(v)).catch(() => [] as RosIpsecPool[]), - client.get("/ip/ipsec/policy").then((v) => empty(v)).catch(() => [] as RosIpsecPolicy[]), - client.get("/ip/firewall/nat").then((v) => empty(v)).catch(() => [] as RosFirewallNat[]), - client.get("/ip/ipsec/active-peers").then((v) => empty(v)).catch(() => [] as RosIpsecActivePeer[]), - client.getCertificates().catch(() => [] as RosCertRow[]), + collection("/ip/ipsec/peer"), collection("/ip/ipsec/identity"), + collection("/ip/ipsec/mode-config"), collection("/ip/pool"), + collection("/ip/ipsec/policy"), collection("/ip/firewall/nat"), + collection("/ip/ipsec/active-peers"), collection("/certificate"), ]) return { server, client, peers, identities, modeConfigs, pools, policies, nat, active, certs } } @@ -226,10 +229,10 @@ export function mapClients(state: IpsecServerState): IpsecClientDto[] { const serverName = String(server.name ?? "").trim() || String(server.host ?? server.id) const roleCtx: CertificateRoleContext = { - peerCertNames: ike2Peers.map((p) => (p.certificate ?? "").trim()).filter(Boolean), + peerCertNames: [...ike2Peers.map((p) => (p.certificate ?? "").trim()), ...state.identities.filter(i => ike2PeerNames.includes((i.peer ?? "").trim())).map(i => (i.certificate ?? "").trim())].filter(Boolean), identityCertNames: state.identities.map((i) => (i["remote-certificate"] ?? "").trim()).filter(Boolean), } - const caName = resolveIke2CaName(state.certs, resolveIke2ServerCert(state.certs, ike2Peers)) + const caName = resolveIke2CaName(state.certs, resolveIke2ServerCert(state.certs, ike2Peers, state.identities)) const shared = selectSharedIke2Identity(state.identities, ike2PeerNames) const sharedRosId = shared?.[".id"] ? String(shared[".id"]) : undefined @@ -270,11 +273,11 @@ export function mapClients(state: IpsecServerState): IpsecClientDto[] { const active = (cn ? activeByRemote.get(cn) : undefined) ?? (identity?.["remote-id"] ? activeByRemote.get(String(identity["remote-id"]).trim()) : undefined) out.push({ - id: `${server.id}:${String(identity?.[".id"] ?? cert[".id"] ?? certName)}`, - rosId: String(identity?.[".id"] ?? cert[".id"] ?? certName), + id: `${server.id}:${identity ? "identity" : "cert"}:${String(identity?.[".id"] ?? cert[".id"] ?? certName)}`, + rosId: `${identity ? "identity" : "cert"}:${String(identity?.[".id"] ?? cert[".id"] ?? certName)}`, serverId: String(server.id), serverName, - name: cn || certName, + name: identity ? identityDisplayName(identity, state.certs) : (cn || certName), authMethod: "certificate", kind: "cert", certificateName: certName, @@ -305,8 +308,8 @@ export function mapClients(state: IpsecServerState): IpsecClientDto[] { const remoteId = (i["remote-id"] ?? "").trim() const active = remoteId ? activeByRemote.get(remoteId) : undefined out.push({ - id: `${server.id}:${rosId || "identity"}`, - rosId: rosId || "identity", + id: `${server.id}:identity:${rosId}`, + rosId: `identity:${rosId}`, serverId: String(server.id), serverName, name: identityDisplayName(i, state.certs), @@ -328,6 +331,16 @@ export function mapClients(state: IpsecServerState): IpsecClientDto[] { return out.sort((a, b) => a.name.localeCompare(b.name)) } +/** Explicit namespaces prevent cross-menu RouterOS ID collisions. Legacy ambiguous IDs fail closed. */ +export function resolveIpsecClientTarget(state: IpsecServerState, token: string) { + const kind = token.startsWith("cert:") ? "cert" : token.startsWith("identity:") ? "identity" : undefined + const raw = kind ? token.slice(kind.length + 1) : token + const clients = mapClients(state) + const identity = kind === "cert" ? undefined : state.identities.find(i => i[".id"] === raw && clients.some(c => c.rosId === "identity:" + raw)) + const certRow = kind === "identity" ? undefined : state.certs.find(c => (c[".id"] === raw || c.name === raw) && clients.some(user => user.kind === "cert" && user.certName === c.name)) + return { identity, certRow, ambiguous: Boolean(!kind && identity && certRow) } +} + export function mapServerSummary(state: IpsecServerState, clients: IpsecClientDto[]): IpsecServerSummaryDto { const server = state.server const ike2Peers = selectIke2Peers(state.peers) @@ -353,12 +366,12 @@ export function mapServerSummary(state: IpsecServerState, clients: IpsecClientDt ?? state.pools.find((p) => isIpsecManagedComment(p.comment)) : undefined - const serverCertRow = resolveIke2ServerCert(state.certs, ike2Peers) + const serverCertRow = resolveIke2ServerCert(state.certs, ike2Peers, state.identities) const caName = resolveIke2CaName(state.certs, serverCertRow) const caCertRow = caName ? state.certs.find((c) => String(c.name ?? "").trim() === caName) : undefined const roleCtx: CertificateRoleContext = { - peerCertNames: ike2Peers.map((p) => (p.certificate ?? "").trim()).filter(Boolean), + peerCertNames: [...ike2Peers.map((p) => (p.certificate ?? "").trim()), ...state.identities.filter(i => ike2PeerNames.includes((i.peer ?? "").trim())).map(i => (i.certificate ?? "").trim())].filter(Boolean), identityCertNames: ike2Identities.map((i) => (i["remote-certificate"] ?? "").trim()).filter(Boolean), } const referencedCertNames = new Set([ @@ -432,7 +445,7 @@ export async function captureIpsecSnapshot(server: ServerRow): Promise isIpsecManagedComment(m.comment)) + .filter(isManagedIpsecModeConfig) .map((m) => ({ name: (m.name ?? "").trim(), addressPool: (m["address-pool"] ?? "").trim(), @@ -496,7 +509,7 @@ export async function fetchIpsecRestoreState(server: ServerRow): Promise<{ .map((i) => ({ rosId: String(i[".id"] ?? ""), peerName: (i.peer ?? "").trim(), - authMethod: (i["auth-method"] ?? "") === "pre-shared-key" ? "pre-shared-key" as const : "rsa-key" as const, + authMethod: (i["auth-method"] ?? "").trim(), certificate: (i.certificate ?? "").trim(), remoteCertificate: (i["remote-certificate"] ?? "").trim(), matchBy: (i["match-by"] ?? "").trim(), @@ -508,7 +521,7 @@ export async function fetchIpsecRestoreState(server: ServerRow): Promise<{ disabled: asBool(i.disabled), })), modeConfigs: state.modeConfigs - .filter((m) => isIpsecManagedComment(m.comment)) + .filter(isManagedIpsecModeConfig) .map((m) => ({ rosId: String(m[".id"] ?? ""), name: (m.name ?? "").trim(), @@ -540,17 +553,21 @@ export async function fetchIpsecRestoreState(server: ServerRow): Promise<{ export type IpsecListResult = IpsecListResponse -export async function listIpsec(opts?: { serverId?: string }): Promise { +export async function listIpsec(opts?: { serverId?: string }, dependencies = { + findServer: async (id: number) => (await db.select().from(servers).where(eq(servers.id, id)).limit(1))[0], + enabledServers: async () => db.select().from(servers).where(eq(servers.enabled, true)), + readState: fetchIpsecState, +}): Promise { let serverRows: ServerRow[] if (opts?.serverId) { - const id = Number.parseInt(String(opts.serverId), 10) - if (!Number.isFinite(id)) { + const id = parseDbServerId(opts.serverId) + if (id === null) { return { servers: [], clients: [], failures: [{ serverId: String(opts.serverId), error: "Некорректный serverId" }] } } - const row = (await db.select().from(servers).where(eq(servers.id, id)).limit(1))[0] + const row = await dependencies.findServer(id) serverRows = row ? [row] : [] } else { - serverRows = await db.select().from(servers).where(eq(servers.enabled, true)) + serverRows = await dependencies.enabledServers() } const failures: IpsecListResult["failures"] = [] @@ -559,7 +576,8 @@ export async function listIpsec(opts?: { serverId?: string }): Promise { try { - const state = await fetchIpsecState(server) + if (!server.enabled) throw new Error("Сервер выключен. Опрос IPsec не выполнялся") + const state = await dependencies.readState(server) const serverClients = mapClients(state) summaries.push(mapServerSummary(state, serverClients)) clients.push(...serverClients) @@ -579,10 +597,11 @@ export async function listIpsec(opts?: { serverId?: string }): Promise{return boundedCompleteCount(()=>listIpsec(),value=>completeCollectionCount(value,"clients"))} -export async function getEnabledIpsecServerById(serverId: string | number) { - const id = typeof serverId === "number" ? serverId : Number.parseInt(String(serverId), 10) - if (!Number.isFinite(id)) return null - return (await db.select().from(servers).where(eq(servers.id, id)).limit(1))[0] ?? null +export async function getEnabledIpsecServerById(serverId: string | number, lookup = async (id: number) => (await db.select().from(servers).where(eq(servers.id, id)).limit(1))[0]) { + const id = parseDbServerId(serverId) + if (id === null) return null + const row = await lookup(id) + return row?.enabled ? row : null } /** Каталог клиентов для модуля «Пользователи» (привязка app-пользователей по CN сертификата). */ diff --git a/backend/src/services/ipsec-ros.ts b/backend/src/services/ipsec-ros.ts index c25ab693..b11e18a7 100644 --- a/backend/src/services/ipsec-ros.ts +++ b/backend/src/services/ipsec-ros.ts @@ -1,6 +1,7 @@ import type { MikrotikClient } from "./mikrotik.js" import { ipsecManagedComment, + isManagedIpsecModeConfig, selectIke2Peers, selectSharedIke2Identity, type Ike2IdentityLike, @@ -21,8 +22,9 @@ export function toRosBody(obj: Record async function listByPath(client: MikrotikClient, path: string): Promise { - const raw = await client.get(path).catch(() => []) - return Array.isArray(raw) ? (raw as RosRow[]) : [] + const raw = await client.get(path) + if (!Array.isArray(raw) || raw.some(row => !row || typeof row !== "object" || Array.isArray(row) || typeof row[".id"] !== "string" || !row[".id"])) throw new Error(`Некорректный ответ IPsec: ${path}`) + return raw as RosRow[] } /** PUT (создать) или PATCH по имени — мастер инициализации идемпотентен. */ @@ -49,21 +51,20 @@ async function findRosId(client: MikrotikClient, path: string, name: string): Pr // ── инициализация IKEv2-сервера ───────────────────────────────────────────── -export async function ensureIpsecProfile(client: MikrotikClient, name: string, comment: string): Promise { +export async function ensureIpsecProfile(client: MikrotikClient, name: string, _comment: string): Promise { await putOrPatchByName(client, "/ip/ipsec/profile", name, toRosBody({ name, "hash-algorithm": "sha256", "enc-algorithm": "aes-256,aes-192,aes-128", - "dh-group": "modp2048,modp1536,modp1024", + "dh-group": "modp2048", "nat-traversal": "yes", - comment, })) } export async function ensureIpsecProposal(client: MikrotikClient, name: string, comment: string): Promise { await putOrPatchByName(client, "/ip/ipsec/proposal", name, toRosBody({ name, - "auth-algorithms": "sha256,sha1", + "auth-algorithms": "sha256", "enc-algorithms": "aes-256-cbc,aes-192-cbc,aes-128-cbc", "pfs-group": "modp2048", comment, @@ -80,13 +81,13 @@ export async function ensureSharedModeConfig( name: string, poolName: string, dns: string | undefined, - comment: string, + _comment: string, ): Promise { await putOrPatchByName(client, "/ip/ipsec/mode-config", name, toRosBody({ name, "address-pool": poolName, + responder: "yes", "static-dns": dns, - comment, })) } @@ -119,7 +120,7 @@ export async function ensurePolicyTemplate( export async function ensureIpsecPeer( client: MikrotikClient, name: string, - serverCertName: string, + _serverCertName: string, profileName: string, comment: string, ): Promise { @@ -128,8 +129,6 @@ export async function ensureIpsecPeer( address: "0.0.0.0/0", "exchange-mode": "ike2", passive: "yes", - certificate: serverCertName, - "send-cert": "always", profile: profileName, comment, })) @@ -157,18 +156,21 @@ export async function putUserModeConfig( client: MikrotikClient, name: string, staticIp: string, - comment: string, + _comment: string, ): Promise { await putOrPatchByName(client, "/ip/ipsec/mode-config", name, toRosBody({ name, address: staticIp, - comment, + responder: "yes", + "address-prefix-length": "32", })) } export async function deleteUserModeConfig(client: MikrotikClient, name: string): Promise { - const id = await findRosId(client, "/ip/ipsec/mode-config", name) - if (id) await client.delete(`/ip/ipsec/mode-config/${encodeURIComponent(id)}`) + const row = (await listByPath(client, "/ip/ipsec/mode-config")).find(row => row.name === name) + if (!row?.[".id"] || !isManagedIpsecModeConfig(row)) return + if ((await listByPath(client, "/ip/ipsec/identity")).some(i => i["mode-config"] === name)) return + await client.delete(`/ip/ipsec/mode-config/${encodeURIComponent(row[".id"])}`) } export interface IdentityFields { @@ -183,22 +185,21 @@ export interface IdentityFields { /** psk. */ secret?: string remoteId?: string - /** Вставить identity перед указанной (per-client match-by=certificate должен идти раньше общей). */ + /** Legacy hint: RouterOS identities do not accept place-before; specificity uses match-by/remote-certificate. */ placeBefore?: string } export function identityRosBody(f: IdentityFields): Record { return toRosBody({ peer: f.peerName, - "auth-method": f.authMethod === "certificate" ? "rsa-key" : "pre-shared-key", + "auth-method": f.authMethod === "certificate" ? "digital-signature" : "pre-shared-key", certificate: f.certificate, "remote-certificate": f.remoteCertificate, - "match-by": f.authMethod === "certificate" ? "certificate" : undefined, + "match-by": f.authMethod === "certificate" && f.remoteCertificate ? "certificate" : undefined, secret: f.secret, - "remote-id": f.remoteId, + "remote-id": f.remoteId && !f.remoteId.includes(":") && !["auto", "ignore"].includes(f.remoteId) ? `key-id:${f.remoteId}` : f.remoteId, "mode-config": f.modeConfig, "generate-policy": "port-strict", - "place-before": f.placeBefore, comment: f.comment, }) } diff --git a/backend/src/services/ipsec-state.test.ts b/backend/src/services/ipsec-state.test.ts new file mode 100644 index 00000000..9183d694 --- /dev/null +++ b/backend/src/services/ipsec-state.test.ts @@ -0,0 +1,78 @@ +import assert from "node:assert/strict" +import { fetchIpsecState, getEnabledIpsecServerById, listIpsec, mapClients, mapServerSummary, resolveIpsecClientTarget } from "./ipsec-live.js" +import { removeManagedIpsecServer } from "./ipsec-cleanup.js" +import { deleteUserModeConfig, ensureIpsecPeer, identityRosBody, putOrPatchByName } from "./ipsec-ros.js" +import { ipsecManagedComment, isIpsecManagedComment } from "./ipsec-config.js" +import type { MikrotikClient } from "./mikrotik.js" + +const server = { id: 1, name: "test", host: "192.0.2.1", enabled: true } as Parameters[0] +const paths = ["/ip/ipsec/peer", "/ip/ipsec/identity", "/ip/ipsec/mode-config", "/ip/pool", "/ip/ipsec/policy", "/ip/firewall/nat", "/ip/ipsec/active-peers", "/certificate"] +let checks = 0 +for (const path of paths) { + const reader = { get: async (p: string) => { if (p === path) throw Error("upstream failed"); return [] } } as unknown as MikrotikClient + await assert.rejects(fetchIpsecState(server, reader), /upstream failed/); checks++ + for (const invalid of [{}, null, [null], [{}]]) { + await assert.rejects(fetchIpsecState(server, { get: async (p: string) => p === path ? invalid : [] } as unknown as MikrotikClient), /Некорректный ответ/); checks++ + } +} +let reads = 0 +const reader = { get: async () => { reads++; return [] } } as unknown as MikrotikClient +await assert.rejects(fetchIpsecState({ ...server, enabled: false }, reader), /выключен/) +assert.equal(reads, 0); checks++ +for (const id of ["1oops", "-1", "0", "srv1"]) { + await assert.equal(await getEnabledIpsecServerById(id, async () => { throw Error("must not look up") }), null); checks++ +} +assert.equal(await getEnabledIpsecServerById(1, async () => ({ ...server, enabled: false })), null); checks++ +const dependencies = { findServer: async () => server, enabledServers: async () => [server, { ...server, id: 2 }], readState: async (s: typeof server) => { if (s.id === 2) throw Error("second failed"); return fetchIpsecState(s, reader) } } +const partial = await listIpsec(undefined, dependencies) +assert.equal(partial.servers.length, 1); assert.equal(partial.failures?.[0]?.serverId, "2"); checks++ +reads = 0 +const disabled = await listIpsec({ serverId: "1" }, { ...dependencies, findServer: async () => ({ ...server, enabled: false }) }) +assert.equal(disabled.servers.length, 0); assert.match(disabled.failures?.[0]?.error ?? "", /выключен/); assert.equal(reads, 0); checks++ +const state = await fetchIpsecState(server, { get: async (p: string) => p === "/ip/ipsec/peer" ? [{ ".id": "*P", name: "ike", "exchange-mode": "ike2" }] : p === "/ip/ipsec/identity" ? [{ ".id": "*I", peer: "ike", "auth-method": "digital-signature", certificate: "server", "mode-config": "mc" }] : p === "/certificate" ? [{ ".id": "*CS", name: "server", ca: "ca", "key-usage": "tls-server,tls-client" }, { ".id": "*CA", name: "ca", "key-usage": "key-cert-sign" }] : [] } as unknown as MikrotikClient) +assert.equal(mapClients(state).length, 0); assert.equal(mapServerSummary(state, []).serverCert?.role, "server"); checks++ +assert.equal(identityRosBody({ peerName: "ike", modeConfig: "mc", comment: "test", authMethod: "certificate", certificate: "server" })["auth-method"], "digital-signature") +assert.equal(identityRosBody({ peerName: "ike", modeConfig: "mc", comment: "test", authMethod: "pre-shared-key", remoteId: "alice" })["remote-id"], "key-id:alice"); checks++ +assert.equal(isIpsecManagedComment("MikrotikManager:ipsec-foreign"), false); checks++ +const writes: Array<{ path: string; body?: Record }> = [] +await ensureIpsecPeer({ get: async () => [], put: async (path: string, body: Record) => writes.push({ path, body }) } as unknown as MikrotikClient, "ike", "server", "profile", "test") +assert.equal(writes[0]?.body?.certificate, undefined); assert.equal(writes[0]?.body?.["send-cert"], undefined); checks++ +await assert.rejects(putOrPatchByName({ get: async () => { throw Error("read failed") }, put: async () => { throw Error("must not write") } } as unknown as MikrotikClient, "/ip/pool", "x", {}), /read failed/); checks++ +for (const failRead of [false, true]) { + const deletes: string[] = [] + const client = { get: async (p: string) => { + if (failRead && p === "/certificate") throw Error("cert unreadable") + return [{ ".id": "*FOREIGN", template: "true", comment: "foreign" }, { ".id": "*OWN", comment: ipsecManagedComment("test") }] + }, delete: async (p: string) => { deletes.push(p) } } as unknown as MikrotikClient + if (failRead) { await assert.rejects(removeManagedIpsecServer(client, true), /cert unreadable/); assert.deepEqual(deletes, []) } + else { await removeManagedIpsecServer(client, true); assert.equal(deletes.length, 7); assert(deletes.every(p => p.endsWith("*OWN"))) } + checks++ +} +let deletes = 0 +await assert.rejects(removeManagedIpsecServer({ get: async () => [{ ".id": "*OWN", comment: ipsecManagedComment("test") }], delete: async () => { deletes++; throw Error("delete denied") } } as unknown as MikrotikClient, false), /delete denied/) +assert.equal(deletes, 1); checks++ +for (const shared of [false, true]) { + const removed: string[] = [] + await deleteUserModeConfig({ get: async (p: string) => p.endsWith("mode-config") ? [{ ".id": "*M", name: "mc", comment: shared ? ipsecManagedComment("test") : "foreign" }] : [{ ".id": "*I", "mode-config": "mc" }], delete: async (p: string) => { removed.push(p) } } as unknown as MikrotikClient, "mc") + assert.deepEqual(removed, []); checks++ +} +for (const reference of ["identity", "policy"]) { + let writes = 0 + await assert.rejects(removeManagedIpsecServer({ get: async (path: string) => path === "/ip/ipsec/peer" ? [{ ".id": "*P", name: "own", comment: ipsecManagedComment("test") }] : path.endsWith(reference) ? [{ ".id": "*F", peer: "own", comment: "foreign" }] : [], delete: async () => { writes++ } } as unknown as MikrotikClient, false), /чужой/) + assert.equal(writes, 0); checks++ +} +state.certs.push({ ".id": "*CLIENT", name: "client", "common-name": "Original CN", ca: "ca", "key-usage": "tls-client" }) +state.identities.push({ ".id": "*PERSONAL", peer: "ike", "auth-method": "digital-signature", "remote-certificate": "client", certificate: "server", comment: ipsecManagedComment("user=Alice Cooper") }) +assert.equal(mapClients(state)[0]?.name, "Alice Cooper"); assert.equal(mapClients(state)[0]?.commonName, "Original CN"); checks++ +state.certs.push({ ".id": "*COLLISION", name: "another-client", "common-name": "Certificate", ca: "ca", "key-usage": "tls-client" }) +state.identities.push({ ".id": "*COLLISION", peer: "ike", "auth-method": "pre-shared-key", comment: ipsecManagedComment("user=PSK"), "mode-config": "mc" }) +assert.equal(resolveIpsecClientTarget(state, "*COLLISION").ambiguous, true); checks++ +assert.equal(resolveIpsecClientTarget(state, "identity:*COLLISION").identity?.["auth-method"], "pre-shared-key"); checks++ +assert.equal(resolveIpsecClientTarget(state, "cert:*COLLISION").certRow?.name, "another-client"); checks++ +assert.equal(resolveIpsecClientTarget(state, "cert:*CA").certRow, undefined); checks++ +state.identities.find(i => i[".id"] === "*PERSONAL")!.comment = "Existing identity label" +assert.equal(mapClients(state).find(c => c.certName === "client")?.name, "Existing identity label"); checks++ +let foreignCertificateWrites = 0 +await assert.rejects(removeManagedIpsecServer({ get: async (path: string) => path === "/certificate" ? [{ ".id": "*CA", name: "ipsec-ca" }, { ".id": "*FOREIGN", name: "external-client", ca: "ipsec-ca" }] : [], delete: async () => { foreignCertificateWrites++ } } as unknown as MikrotikClient, true), /чужой сертификат/) +assert.equal(foreignCertificateWrites, 0); checks++ +console.log(`ipsec-state: ${checks} checks passed`) diff --git a/components/ipsec/ipsec-peer-sheet.tsx b/components/ipsec/ipsec-peer-sheet.tsx index 651fb34f..71d85c9f 100644 --- a/components/ipsec/ipsec-peer-sheet.tsx +++ b/components/ipsec/ipsec-peer-sheet.tsx @@ -16,7 +16,6 @@ export type IpsecPeerFormState = { address: string exchangeMode: string passive: boolean - certificate: string profile: string disabled: boolean } @@ -26,7 +25,6 @@ export const defaultIpsecPeerForm = (): IpsecPeerFormState => ({ address: "0.0.0.0/0", exchangeMode: "ike2", passive: true, - certificate: "", profile: "", disabled: false, }) @@ -39,14 +37,12 @@ function IpsecPeerSheet({ onOpenChange, busy, editing, - certificates, onSubmit, }: { open: boolean onOpenChange: (v: boolean) => void busy?: boolean editing: IpsecPeerDto | null - certificates: string[] onSubmit: (form: IpsecPeerFormState) => void | Promise }) { const [form, setForm] = useState(defaultIpsecPeerForm) @@ -68,7 +64,6 @@ function IpsecPeerSheet({ address: editing.address ?? "", exchangeMode: editing.exchangeMode ?? "ike2", passive: editing.passive ?? false, - certificate: editing.certificate ?? "", profile: editing.profile ?? "", disabled: editing.disabled, })) @@ -119,18 +114,7 @@ function IpsecPeerSheet({ ))} - - set("certificate", e.target.value)} - /> - - {certificates.map((c) => - +

Сертификат аутентификации задаётся в identity. Эта форма изменяет только peer.

set("profile", e.target.value)} /> diff --git a/docs/ux-ui-external-acceptance.md b/docs/ux-ui-external-acceptance.md index 92b044cd..7ae29278 100644 --- a/docs/ux-ui-external-acceptance.md +++ b/docs/ux-ui-external-acceptance.md @@ -1,6 +1,6 @@ # UX/UI: протокол внешней приёмки 12.5 -Статус на2026-10-09: backend/frontend ux-vxlan76, backend healthy; раздел VXLAN76 принят в описанных границах. В12.5.67 исправленный Peer .conf принят как клиентский шаблон: API6/6, browser4/4, server endpoint и placeholders; настоящий RSC roundtrip через UI/native/handshake/Ping принят в12.5.68, .conf с явнымName/отказы400/409/сохранение формы приняты в70; поздний native rejection/подтверждённая компенсация/retry приняты в72; изолированный audit INSERT permission denial принят в74; остальные неизвестные исходы/DB faults открыты. Мобильная ширина WireGuard Sheets принята в12.5.64. Мобильная GRE форма и native сохранение на обоих CHR приняты в12.5.57. WireGuard handshake/короткий Ping/native API/read-only UI приняты в границах12.5.58; 12.5.59 воспроизвёл оставшиеся peers/IP; 12.5.60 развернул исправление и принял обычное удаление own WG интерфейса с peer/IPv4 адресом на обоих CHR. 12.5.62 принял полный WireGuard UI create/peer/disable/enable/Ping/delete на обоих CHR; устойчивое меню развёрнуто. Устойчивость меню GRE при live refresh на обоих CHR принята в12.5.55. GRE peer metadata и реальный lifecycle/API/UI/двусторонний Ping подтверждены в12.5.53. Browser retry/checkpoint на реальном HTTP/PG принят в границах12.5.43–45; Telegram sender responses подменены, реальная доставка не проверена. PG-1/2/3/4/5 приняты в описанных границах, PG-6 integrated для одного isolated instance, PG-7 real JWT/processcounts и browser restore passed. PG-8 real PG/native и browser unknown→history done приняты с fault injection после настоящего COMMIT. ROS-8/9 real API/SQL/native приняты в границах12.5.23; browser pair/duration change и delete приняты в12.5.24. ROS-2 authentication failure принят в12.5.25. PortalSSO, физический TCP disconnect, мультиэкземпляры и остальные ROS/Q/интеграции остаются открытыми. [Паспорт](ux-ui-test-server.md), [журнал](ux-ui-progress.md). VXLAN75: собственная native пара/Ping/catalog/URL/export приняты, create/delete API отсутствует; selected baseline восстановлен. +Статус на2026-10-09: backend/frontend ux-ipsec77, backend healthy; основной блок IPsec77 и VXLAN76 приняты в описанных границах. В12.5.67 исправленный Peer .conf принят как клиентский шаблон: API6/6, browser4/4, server endpoint и placeholders; настоящий RSC roundtrip через UI/native/handshake/Ping принят в12.5.68, .conf с явнымName/отказы400/409/сохранение формы приняты в70; поздний native rejection/подтверждённая компенсация/retry приняты в72; изолированный audit INSERT permission denial принят в74; остальные неизвестные исходы/DB faults открыты. Мобильная ширина WireGuard Sheets принята в12.5.64. Мобильная GRE форма и native сохранение на обоих CHR приняты в12.5.57. WireGuard handshake/короткий Ping/native API/read-only UI приняты в границах12.5.58; 12.5.59 воспроизвёл оставшиеся peers/IP; 12.5.60 развернул исправление и принял обычное удаление own WG интерфейса с peer/IPv4 адресом на обоих CHR. 12.5.62 принял полный WireGuard UI create/peer/disable/enable/Ping/delete на обоих CHR; устойчивое меню развёрнуто. Устойчивость меню GRE при live refresh на обоих CHR принята в12.5.55. GRE peer metadata и реальный lifecycle/API/UI/двусторонний Ping подтверждены в12.5.53. Browser retry/checkpoint на реальном HTTP/PG принят в границах12.5.43–45; Telegram sender responses подменены, реальная доставка не проверена. PG-1/2/3/4/5 приняты в описанных границах, PG-6 integrated для одного isolated instance, PG-7 real JWT/processcounts и browser restore passed. PG-8 real PG/native и browser unknown→history done приняты с fault injection после настоящего COMMIT. ROS-8/9 real API/SQL/native приняты в границах12.5.23; browser pair/duration change и delete приняты в12.5.24. ROS-2 authentication failure принят в12.5.25. PortalSSO, физический TCP disconnect, мультиэкземпляры и остальные ROS/Q/интеграции остаются открытыми. [Паспорт](ux-ui-test-server.md), [журнал](ux-ui-progress.md). VXLAN75: собственная native пара/Ping/catalog/URL/export приняты, create/delete API отсутствует; selected baseline восстановлен. ## Паспорт стенда @@ -681,3 +681,9 @@ flowchart LR ``` Границы: app VXLAN API read-only, create/delete выполнены native REST только на собственных объектах. IPv6/bridge/FDB/throughput/RBAC/concurrency и произвольный терминальный .rsc import не приняты; динамический ARP/FDB baseline не сравнивался. Первый запуск Edge в sandbox завершился до страницы; повторный разрешённый запуск прошёл. Этап12.5 целиком не закрыт. Следующий раздел12.5.77 — IPsec; остаточные VXLAN/WireGuard ограничения остаются в протоколе. + +## 12.5.77 — основной блок IPsec (2026-10-09) + +Актуальное продолжение 2026-10-09: 12.5.77 завершил укрупнённый основной блок IPsec: достоверное чтение, запрет опроса выключенных устройств, совместимый RouterOS7 мастер, раздельные ID клиентов, безопаснее удаление, URL устройства/вкладки, Docker обеих частей и реальная приёмка. Local30/30 + context6/6 + backend67, live browser4/4, PSK и сертификатный защищённый GRE/Ping3/3 на двух CHR; cleanup/DB controls passed. Runtime backend/frontend ux-ipsec77, version1.0.0-test.ipsec77. Следующий12.5.78 — остаточная профильная приёмка IPsec: сопоставление active-peer/online, выдача mode-config, поздние ошибки операций и история восстановления; затем маршрутизация. Этап12.5 открыт. + +Подробный объём, протоколы, схема и ограничения: [12.5.77 в журнале](ux-ui-progress.md). diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index af8f8bc1..37d2d94a 100644 --- a/docs/ux-ui-plan.md +++ b/docs/ux-ui-plan.md @@ -1,12 +1,12 @@ # План реализации UX/UI по пятичасовым окнам -Актуальное продолжение 2026-10-09: 12.5.76 завершил укрупнённый раздел VXLAN: достоверный снимок/MTU, запрет опроса выключенных устройств, устойчивое меню, Docker deploy обеих частей и реальная приёмка двух CHR. Browser4/4, повторное применение экспортированного fragment с MTU1400 и Ping3/3 в обе стороны, probe0 и cleanup passed. Runtime backend/frontend ux-vxlan76, version1.0.0-test.vxlan76; происхождение сборки — base HEAD6b068ac плюс явный manifest13 файлов. Следующий12.5.77 — IPsec целиком: карта API/операций, собственная тестовая пара, профильные проверки и исправления, deployment/приёмка/cleanup, один локальный коммит. Этап12.5 открыт. +Актуальное продолжение 2026-10-09: 12.5.77 завершил укрупнённый основной блок IPsec: достоверное чтение, запрет опроса выключенных устройств, совместимый RouterOS7 мастер, раздельные ID клиентов, безопаснее удаление, URL устройства/вкладки, Docker обеих частей и реальная приёмка. Local30/30 + context6/6 + backend67, live browser4/4, PSK и сертификатный защищённый GRE/Ping3/3 на двух CHR; cleanup/DB controls passed. Runtime backend/frontend ux-ipsec77, version1.0.0-test.ipsec77. Следующий12.5.78 — остаточная профильная приёмка IPsec: сопоставление active-peer/online, выдача mode-config, поздние ошибки операций и история восстановления; затем маршрутизация. Этап12.5 открыт. Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-09. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат. ## Актуальная точка продолжения — 2026-10-09 -Актуальное продолжение 2026-10-09: 12.5.76 завершил укрупнённый раздел VXLAN: достоверный снимок/MTU, запрет опроса выключенных устройств, устойчивое меню, Docker deploy обеих частей и реальная приёмка двух CHR. Browser4/4, повторное применение экспортированного fragment с MTU1400 и Ping3/3 в обе стороны, probe0 и cleanup passed. Runtime backend/frontend ux-vxlan76, version1.0.0-test.vxlan76; происхождение сборки — base HEAD6b068ac плюс явный manifest13 файлов. Следующий12.5.77 — IPsec целиком: карта API/операций, собственная тестовая пара, профильные проверки и исправления, deployment/приёмка/cleanup, один локальный коммит. Этап12.5 открыт. +Актуальное продолжение 2026-10-09: 12.5.77 завершил укрупнённый основной блок IPsec: достоверное чтение, запрет опроса выключенных устройств, совместимый RouterOS7 мастер, раздельные ID клиентов, безопаснее удаление, URL устройства/вкладки, Docker обеих частей и реальная приёмка. Local30/30 + context6/6 + backend67, live browser4/4, PSK и сертификатный защищённый GRE/Ping3/3 на двух CHR; cleanup/DB controls passed. Runtime backend/frontend ux-ipsec77, version1.0.0-test.ipsec77. Следующий12.5.78 — остаточная профильная приёмка IPsec: сопоставление active-peer/online, выдача mode-config, поздние ошибки операций и история восстановления; затем маршрутизация. Этап12.5 открыт. Этапы0–11 завершены в локальных границах журнала. История выполненных внешних блоков и доказательства сохранены в [журнале](ux-ui-stage-12.md) и [протоколе](ux-ui-external-acceptance.md). Реальная Telegram доставка, Portal SSO, multi-instance и оставшиеся профильные сетевые ограничения открыты. @@ -368,3 +368,9 @@ flowchart LR ``` Границы: app VXLAN API read-only, create/delete выполнены native REST только на собственных объектах. IPv6/bridge/FDB/throughput/RBAC/concurrency и произвольный терминальный .rsc import не приняты; динамический ARP/FDB baseline не сравнивался. Первый запуск Edge в sandbox завершился до страницы; повторный разрешённый запуск прошёл. Этап12.5 целиком не закрыт. Следующий раздел12.5.77 — IPsec; остаточные VXLAN/WireGuard ограничения остаются в протоколе. + +## 12.5.77 — основной блок IPsec (2026-10-09) + +Актуальное продолжение 2026-10-09: 12.5.77 завершил укрупнённый основной блок IPsec: достоверное чтение, запрет опроса выключенных устройств, совместимый RouterOS7 мастер, раздельные ID клиентов, безопаснее удаление, URL устройства/вкладки, Docker обеих частей и реальная приёмка. Local30/30 + context6/6 + backend67, live browser4/4, PSK и сертификатный защищённый GRE/Ping3/3 на двух CHR; cleanup/DB controls passed. Runtime backend/frontend ux-ipsec77, version1.0.0-test.ipsec77. Следующий12.5.78 — остаточная профильная приёмка IPsec: сопоставление active-peer/online, выдача mode-config, поздние ошибки операций и история восстановления; затем маршрутизация. Этап12.5 открыт. + +Подробный объём, протоколы, схема и ограничения: [12.5.77 в журнале](ux-ui-progress.md). diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md index 370433fd..8b62b1d1 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -1,6 +1,6 @@ # UX/UI: журнал реализации -Актуальное продолжение 2026-10-09: 12.5.76 завершил укрупнённый раздел VXLAN: достоверный снимок/MTU, запрет опроса выключенных устройств, устойчивое меню, Docker deploy обеих частей и реальная приёмка двух CHR. Browser4/4, повторное применение экспортированного fragment с MTU1400 и Ping3/3 в обе стороны, probe0 и cleanup passed. Runtime backend/frontend ux-vxlan76, version1.0.0-test.vxlan76; происхождение сборки — base HEAD6b068ac плюс явный manifest13 файлов. Следующий12.5.77 — IPsec целиком: карта API/операций, собственная тестовая пара, профильные проверки и исправления, deployment/приёмка/cleanup, один локальный коммит. Этап12.5 открыт. +Актуальное продолжение 2026-10-09: 12.5.77 завершил укрупнённый основной блок IPsec: достоверное чтение, запрет опроса выключенных устройств, совместимый RouterOS7 мастер, раздельные ID клиентов, безопаснее удаление, URL устройства/вкладки, Docker обеих частей и реальная приёмка. Local30/30 + context6/6 + backend67, live browser4/4, PSK и сертификатный защищённый GRE/Ping3/3 на двух CHR; cleanup/DB controls passed. Runtime backend/frontend ux-ipsec77, version1.0.0-test.ipsec77. Следующий12.5.78 — остаточная профильная приёмка IPsec: сопоставление active-peer/online, выдача mode-config, поздние ошибки операций и история восстановления; затем маршрутизация. Этап12.5 открыт. Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md). @@ -36,7 +36,45 @@ | 10 | Маршрутизация, диагностика, карта и терминал | Завершён в границах локальной приёмки 2026-10-01; блоки 10.1–10.71, внешние ограничения в 10.71 | | 11А | Пользователи, контейнеры, сертификаты и резервные копии | Завершён в границах локальной приёмки 2026-10-01; 11А.1–11А.33, внешние ограничения в 11А.33 | | 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Завершён в границах локальной приёмки 2026-10-03; ограничения и evidence в11Б.7 | -| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–76 и ограничения ниже. Runtime backend/frontend ux-vxlan76. | +| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–77 и ограничения ниже. Runtime backend/frontend ux-ipsec77. | + +## 12.5.77 — IPsec: основной раздел, RouterOS7 и реальная профильная приёмка (2026-10-09) + +Укрупнённый блок включает backend/API/UI, тесты, production Docker build/deploy, собственные реальные объекты на обоих CHR и очистку. Один локальный коммит после блока, без push. Установленные ReUI/Frame/base-nova компоненты сохранены. + +**Достоверность и операции.** Чтение восьми коллекций IPsec больше не скрывает отказ RouterOS или некорректный контейнер/строки/ID пустым успешным списком. Агрегатор сохраняет успешные устройства и сообщает ошибку конкретного устройства; observed history не запускается для неудачного среза. Выключенный сервер исключён из чтения и операций, ID разбирается целиком. Init/User/Peer формы сохраняют поля при отказах по существующим шаблонам. Статический IPv4 проверяется до изменений; отсутствующий явный peer и дубликат клиента отклоняются. Зарезервированные имена mode-config учитываются в истории и очистке, поскольку RouterOS7.24.5 отклонил comment. + +**Совместимость RouterOS7.** Мастер создаёт сертификатную identity с digital-signature, certificate находится в identity; неподдерживаемые certificate/send-cert убраны из peer и restore body. Исправлены responder=yes для mode-config, доверие CA, неподдерживаемые profile/mode-config comment и identity place-before. Из генерации убраны DH1024/1536 и SHA1. Сертификатная роль учитывает identity references. Plain PSK remote ID при создании превращается в key-id. Отображаемое имя сертификатного клиента хранится в identity, подписанный CN/ключ/имя сертификата сохраняются. + +**Выбор объекта и удаление.** Клиенты используют явные rosId namespace identity:/cert:; совпадение ID разных RouterOS меню больше не выбирает чужой объект. Неоднозначный legacy ID даёт409 с предложением обновить список; CA не является клиентом. Удаление сервера заранее читает весь объём, сохраняет стандартный/чужой policy template, не скрывает ошибки и удаляет CA после leaf сертификатов. Чужие identity/policy и сертификат, подписанный управляемым CA, блокируют удаление до первой записи. Общий/чужой mode-config сохраняется при удалении клиента. Это проверки перечисленных ссылок, не гарантия учёта всех внешних потребителей PKI. + +**Контекст и интерфейс.** URL сохраняет server и tab при reload; неизвестное устройство остаётся отдельным срезом с ошибкой и заблокированным созданием клиента. Сохранена цель мастера при переключении контекста. Форма peer больше не предлагает сертификат, относящийся к identity. Реальный browser выявил возврат вкладки после закрытия Sheet; локальные query-state обновления переведены на History API без отдельного RSC перехода. [Next.js API](https://nextjs.org/docs/app/guides/single-page-applications). Тестовые PNG сохраняются в каталог конкретного запуска после ошибки записи общего файла Windows. + +**Проверки.** npm backend test:ipsec:67 новых проверок + config tests, entity-snapshots passed; backend/scoped frontend TypeScript и ESLint passed. Итоговый профильный набор30/30 (включает связанные GRE cases), context-race6/6. Реальный browser4/4: оба CHR ×1280/320px, готовность, peer/client формы, URL/tab/reload и отсутствие page overflow; без HTTP mocks. [Browser protocol](ux-ui/acceptance/browser-ipsec-section-2026-10-09.json). Полная регрессия проекта не повторялась. + +**Реальная схема.** На194.226.121.150 и104.165.244.7 выполнены HTTP init без NAT, создание/disable/enable/duplicate PSK клиента,400 на неверный IP,404 на отсутствующий peer, выпуск сертификатов, проверка .p12 через OpenSSL и сохранение CN при переименовании. Для сетевой проверки native REST создал собственные profile/proposal/peer/identity/policy/GRE и198.18.255.249/30↔.250/30; IPsec encrypt/require защищал GRE между публичными /32, без изменения firewall/default route. PSK, затем digital-signature с реальным экспортированным клиентским ключом: Ping3/3 в обе стороны, ph2-state established и ненулевые SA bytes. В импортированной цепочке CA/leaf получили одинаковое имя от RouterOS; тест назначает им уникальные имена по ID. Сертификатная роль задана явно: CHR1 responder, CHR2 initiator. Это native site-to-site проверка криптографии/экспорта; выдача road-warrior lease и импорт через приложение не объявляются проверенными. + +**Ошибки чтения и выключенные устройства.** Две собственные временные DB записи home-router/exit-node указывали на HTTP probe. Выключенные GET сообщали disabled, операции404, native calls0. Включение только fake endpoint вернуло настоящий upstream401: не было ложной успешной пустой сводки, два исправных CHR сохранились в частичном результате;16 probe calls на два чтения. Все fake записи удалены. [Native protocol](ux-ui/acceptance/ipsec-section-2026-10-09.json). + +**Развёртывание и состояние.** Образы backend/frontend ux-ipsec77/version1.0.0-test.ipsec77 собраны и развёрнуты;3 services running, backend/PG healthy, frontend проверен HTTP/browser. Source: архив базового HEAD e2d81f9 +14 явных working-file overrides, SHA256 e0a034a855eb2d07696a1849c9baed738890e7c84108d5a3d6dbe652188bee9e; [manifest](ux-ui/acceptance/ipsec-section-source-manifest-2026-10-09.json). Это не архив одного уже закоммиченного revision. Приватный pre-deploy PG backup2510309 bytes/0600, pg_restore --list passed; .env/прежние VXLAN образы сохранены на сервере. DB после: servers2/speedHistory9/retention14/migrations9. Пароли не менялись; оба CHR/SSH доступны, единичный401 CHR2 при контрольном чтении не повторился. [Deployment](ux-ui/acceptance/deploy-ipsec-section-2026-10-09.json), [smoke8 страниц](ux-ui/acceptance/deploy-browser-ipsec-section-2026-10-09.json). + +Очистка последнего цикла сравнила IPsec/PKI/GRE/IP/routes/IPv4 firewall/file metadata на обоих CHR: все проверки true. При восстановлении раннего цикла широкий отбор отклонила автоматическая проверка: выполнены инвентаризация и preflight17 точных ID/атрибутов собственного запуска, затем их разрешённая очистка. Удаление каталога flash наCHR2 отклонено отдельно: системное имя/пустота не доказывают ownership; каталог сохранён. Приватные .p12/.pass/.pem теста удалены, ключи не включены в отчёт/Git. + +| Референс | Схема и реальные экраны | +| --- | --- | +| [Data Grid Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | Устройство/URL → достоверный срез → клиент; [ПК](ux-ui/screens/ipsec-real-clients-server1-1280-2026-10-09.png), [телефон](ux-ui/screens/ipsec-real-clients-server2-320-2026-10-09.png) | +| [Sheet8](https://reui.io/preview/base/sheet-8?ref=mcp), [Tabs API/preview](https://reui.io/components/tabs?ref=mcp) | Peer/клиент → сохранение ввода → подтверждение API → возврат в тот же срез | + +```mermaid +flowchart LR + A[Устройство и вкладка в URL] --> B{Достоверный срез?} + B -->|Нет| C[Ошибка и последние данные] + B -->|Да| D[Peer или клиент с явным ID] + D --> E[Форма и подтверждение API] + E --> F[Native проверка и возврат] +``` + +Остаточные границы: online/active-peer корреляция, настоящая выдача mode-config, NAT/интернет, IPv6, Windows/macOS/iOS/Android подключения, late failure receipts/DB/transport, history restore, многопроцессность, IPsec-specific live JWT/RBAC и throughput не приняты этим блоком. Основной раздел внедрён и принят в перечисленных сценариях; этап12.5 и эти профильные ограничения остаются открытыми. ## 12.5.76 — VXLAN: достоверность, экспорт и полная профильная приёмка (2026-10-09) diff --git a/docs/ux-ui-stage-12.md b/docs/ux-ui-stage-12.md index 171295d7..36f7b4f9 100644 --- a/docs/ux-ui-stage-12.md +++ b/docs/ux-ui-stage-12.md @@ -1,6 +1,6 @@ # Этап 12: итоговая приёмка UX/UI -Актуальное продолжение 2026-10-09: 12.5.76 завершил укрупнённый раздел VXLAN: достоверный снимок/MTU, запрет опроса выключенных устройств, устойчивое меню, Docker deploy обеих частей и реальная приёмка двух CHR. Browser4/4, повторное применение экспортированного fragment с MTU1400 и Ping3/3 в обе стороны, probe0 и cleanup passed. Runtime backend/frontend ux-vxlan76, version1.0.0-test.vxlan76; происхождение сборки — base HEAD6b068ac плюс явный manifest13 файлов. Следующий12.5.77 — IPsec целиком: карта API/операций, собственная тестовая пара, профильные проверки и исправления, deployment/приёмка/cleanup, один локальный коммит. Этап12.5 открыт. +Актуальное продолжение 2026-10-09: 12.5.77 завершил укрупнённый основной блок IPsec: достоверное чтение, запрет опроса выключенных устройств, совместимый RouterOS7 мастер, раздельные ID клиентов, безопаснее удаление, URL устройства/вкладки, Docker обеих частей и реальная приёмка. Local30/30 + context6/6 + backend67, live browser4/4, PSK и сертификатный защищённый GRE/Ping3/3 на двух CHR; cleanup/DB controls passed. Runtime backend/frontend ux-ipsec77, version1.0.0-test.ipsec77. Следующий12.5.78 — остаточная профильная приёмка IPsec: сопоставление active-peer/online, выдача mode-config, поздние ошибки операций и история восстановления; затем маршрутизация. Этап12.5 открыт. План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push. @@ -1846,3 +1846,41 @@ flowchart LR ``` Границы: app VXLAN API read-only, create/delete выполнены native REST только на собственных объектах. IPv6/bridge/FDB/throughput/RBAC/concurrency и произвольный терминальный .rsc import не приняты; динамический ARP/FDB baseline не сравнивался. Первый запуск Edge в sandbox завершился до страницы; повторный разрешённый запуск прошёл. Этап12.5 целиком не закрыт. Следующий раздел12.5.77 — IPsec; остаточные VXLAN/WireGuard ограничения остаются в протоколе. + +## 12.5.77 — IPsec: основной раздел, RouterOS7 и реальная профильная приёмка (2026-10-09) + +Укрупнённый блок включает backend/API/UI, тесты, production Docker build/deploy, собственные реальные объекты на обоих CHR и очистку. Один локальный коммит после блока, без push. Установленные ReUI/Frame/base-nova компоненты сохранены. + +**Достоверность и операции.** Чтение восьми коллекций IPsec больше не скрывает отказ RouterOS или некорректный контейнер/строки/ID пустым успешным списком. Агрегатор сохраняет успешные устройства и сообщает ошибку конкретного устройства; observed history не запускается для неудачного среза. Выключенный сервер исключён из чтения и операций, ID разбирается целиком. Init/User/Peer формы сохраняют поля при отказах по существующим шаблонам. Статический IPv4 проверяется до изменений; отсутствующий явный peer и дубликат клиента отклоняются. Зарезервированные имена mode-config учитываются в истории и очистке, поскольку RouterOS7.24.5 отклонил comment. + +**Совместимость RouterOS7.** Мастер создаёт сертификатную identity с digital-signature, certificate находится в identity; неподдерживаемые certificate/send-cert убраны из peer и restore body. Исправлены responder=yes для mode-config, доверие CA, неподдерживаемые profile/mode-config comment и identity place-before. Из генерации убраны DH1024/1536 и SHA1. Сертификатная роль учитывает identity references. Plain PSK remote ID при создании превращается в key-id. Отображаемое имя сертификатного клиента хранится в identity, подписанный CN/ключ/имя сертификата сохраняются. + +**Выбор объекта и удаление.** Клиенты используют явные rosId namespace identity:/cert:; совпадение ID разных RouterOS меню больше не выбирает чужой объект. Неоднозначный legacy ID даёт409 с предложением обновить список; CA не является клиентом. Удаление сервера заранее читает весь объём, сохраняет стандартный/чужой policy template, не скрывает ошибки и удаляет CA после leaf сертификатов. Чужие identity/policy и сертификат, подписанный управляемым CA, блокируют удаление до первой записи. Общий/чужой mode-config сохраняется при удалении клиента. Это проверки перечисленных ссылок, не гарантия учёта всех внешних потребителей PKI. + +**Контекст и интерфейс.** URL сохраняет server и tab при reload; неизвестное устройство остаётся отдельным срезом с ошибкой и заблокированным созданием клиента. Сохранена цель мастера при переключении контекста. Форма peer больше не предлагает сертификат, относящийся к identity. Реальный browser выявил возврат вкладки после закрытия Sheet; локальные query-state обновления переведены на History API без отдельного RSC перехода. [Next.js API](https://nextjs.org/docs/app/guides/single-page-applications). Тестовые PNG сохраняются в каталог конкретного запуска после ошибки записи общего файла Windows. + +**Проверки.** npm backend test:ipsec:67 новых проверок + config tests, entity-snapshots passed; backend/scoped frontend TypeScript и ESLint passed. Итоговый профильный набор30/30 (включает связанные GRE cases), context-race6/6. Реальный browser4/4: оба CHR ×1280/320px, готовность, peer/client формы, URL/tab/reload и отсутствие page overflow; без HTTP mocks. [Browser protocol](ux-ui/acceptance/browser-ipsec-section-2026-10-09.json). Полная регрессия проекта не повторялась. + +**Реальная схема.** На194.226.121.150 и104.165.244.7 выполнены HTTP init без NAT, создание/disable/enable/duplicate PSK клиента,400 на неверный IP,404 на отсутствующий peer, выпуск сертификатов, проверка .p12 через OpenSSL и сохранение CN при переименовании. Для сетевой проверки native REST создал собственные profile/proposal/peer/identity/policy/GRE и198.18.255.249/30↔.250/30; IPsec encrypt/require защищал GRE между публичными /32, без изменения firewall/default route. PSK, затем digital-signature с реальным экспортированным клиентским ключом: Ping3/3 в обе стороны, ph2-state established и ненулевые SA bytes. В импортированной цепочке CA/leaf получили одинаковое имя от RouterOS; тест назначает им уникальные имена по ID. Сертификатная роль задана явно: CHR1 responder, CHR2 initiator. Это native site-to-site проверка криптографии/экспорта; выдача road-warrior lease и импорт через приложение не объявляются проверенными. + +**Ошибки чтения и выключенные устройства.** Две собственные временные DB записи home-router/exit-node указывали на HTTP probe. Выключенные GET сообщали disabled, операции404, native calls0. Включение только fake endpoint вернуло настоящий upstream401: не было ложной успешной пустой сводки, два исправных CHR сохранились в частичном результате;16 probe calls на два чтения. Все fake записи удалены. [Native protocol](ux-ui/acceptance/ipsec-section-2026-10-09.json). + +**Развёртывание и состояние.** Образы backend/frontend ux-ipsec77/version1.0.0-test.ipsec77 собраны и развёрнуты;3 services running, backend/PG healthy, frontend проверен HTTP/browser. Source: архив базового HEAD e2d81f9 +14 явных working-file overrides, SHA256 e0a034a855eb2d07696a1849c9baed738890e7c84108d5a3d6dbe652188bee9e; [manifest](ux-ui/acceptance/ipsec-section-source-manifest-2026-10-09.json). Это не архив одного уже закоммиченного revision. Приватный pre-deploy PG backup2510309 bytes/0600, pg_restore --list passed; .env/прежние VXLAN образы сохранены на сервере. DB после: servers2/speedHistory9/retention14/migrations9. Пароли не менялись; оба CHR/SSH доступны, единичный401 CHR2 при контрольном чтении не повторился. [Deployment](ux-ui/acceptance/deploy-ipsec-section-2026-10-09.json), [smoke8 страниц](ux-ui/acceptance/deploy-browser-ipsec-section-2026-10-09.json). + +Очистка последнего цикла сравнила IPsec/PKI/GRE/IP/routes/IPv4 firewall/file metadata на обоих CHR: все проверки true. При восстановлении раннего цикла широкий отбор отклонила автоматическая проверка: выполнены инвентаризация и preflight17 точных ID/атрибутов собственного запуска, затем их разрешённая очистка. Удаление каталога flash наCHR2 отклонено отдельно: системное имя/пустота не доказывают ownership; каталог сохранён. Приватные .p12/.pass/.pem теста удалены, ключи не включены в отчёт/Git. + +| Референс | Схема и реальные экраны | +| --- | --- | +| [Data Grid Filtering2](https://reui.io/preview/base/data-grid-filtering-2?ref=mcp) | Устройство/URL → достоверный срез → клиент; [ПК](ux-ui/screens/ipsec-real-clients-server1-1280-2026-10-09.png), [телефон](ux-ui/screens/ipsec-real-clients-server2-320-2026-10-09.png) | +| [Sheet8](https://reui.io/preview/base/sheet-8?ref=mcp), [Tabs API/preview](https://reui.io/components/tabs?ref=mcp) | Peer/клиент → сохранение ввода → подтверждение API → возврат в тот же срез | + +```mermaid +flowchart LR + A[Устройство и вкладка в URL] --> B{Достоверный срез?} + B -->|Нет| C[Ошибка и последние данные] + B -->|Да| D[Peer или клиент с явным ID] + D --> E[Форма и подтверждение API] + E --> F[Native проверка и возврат] +``` + +Остаточные границы: online/active-peer корреляция, настоящая выдача mode-config, NAT/интернет, IPv6, Windows/macOS/iOS/Android подключения, late failure receipts/DB/transport, history restore, многопроцессность, IPsec-specific live JWT/RBAC и throughput не приняты этим блоком. Основной раздел внедрён и принят в перечисленных сценариях; этап12.5 и эти профильные ограничения остаются открытыми. diff --git a/docs/ux-ui-test-server.md b/docs/ux-ui-test-server.md index de9cf37c..69cec086 100644 --- a/docs/ux-ui-test-server.md +++ b/docs/ux-ui-test-server.md @@ -1,6 +1,6 @@ # Тестовый сервер UX/UI — 2026-10-09 -Сервер161.104.46.222 предоставлен для временного тестирования. Backend/frontend ux-vxlan76, version1.0.0-test.vxlan76; backend/PostgreSQL healthy. SSH и оба CHR доступны с прежними доступами. Раздел VXLAN76 принят в описанных ниже границах; собственные объекты и временные выключенные DB записи удалены, selected baseline восстановлен. +Сервер161.104.46.222 предоставлен для временного тестирования. Backend/frontend ux-ipsec77/version1.0.0-test.ipsec77; backend/PG healthy, frontend HTTP/browser passed. Основной блок IPsec77 принят в границах журнала, own fixtures/fake DB rows удалены; каталог flash CHR2 сохранён из-за неподтверждённого ownership. SSH/оба CHR доступны, пароли прежние. | Параметр | Проверенное состояние | | --- | --- | @@ -14,7 +14,7 @@ | PostgreSQL | postgres:18-alpine,18.6;mmapp-test-postgres healthy;SELECT version() passed | | Данные | Отдельный Compose project mmapp-test,том mmapp-test_mmapp-pgdata и каталог ./data | | Доступ | PostgreSQL не публикуется;frontend3000/backend8000 привязаны к127.0.0.1 после запуска | -| Образы приложения | mmapp-test/backend:ux-vxlan76 и mmapp-test/frontend:ux-vxlan76; запущены | +| Образы приложения | mmapp-test/backend:ux-ipsec77 и mmapp-test/frontend:ux-ipsec77; запущены | Compose SHA256:3052bd6ab5d9865f97605cebfb5ff27a4410cd3357b81153a65a87fb7c92582f. OptionalBACKEND_IMAGE_TAG позволяетобновлятьbackendотдельно. Локальный и удалённый файлы совпали. Шаблоны: [Compose](../deploy/docker-compose.test.yml), [env без секретов](../deploy/env.test.example). @@ -689,3 +689,9 @@ flowchart LR ``` Границы: app VXLAN API read-only, create/delete выполнены native REST только на собственных объектах. IPv6/bridge/FDB/throughput/RBAC/concurrency и произвольный терминальный .rsc import не приняты; динамический ARP/FDB baseline не сравнивался. Первый запуск Edge в sandbox завершился до страницы; повторный разрешённый запуск прошёл. Этап12.5 целиком не закрыт. Следующий раздел12.5.77 — IPsec; остаточные VXLAN/WireGuard ограничения остаются в протоколе. + +## 12.5.77 — основной блок IPsec (2026-10-09) + +Актуальное продолжение 2026-10-09: 12.5.77 завершил укрупнённый основной блок IPsec: достоверное чтение, запрет опроса выключенных устройств, совместимый RouterOS7 мастер, раздельные ID клиентов, безопаснее удаление, URL устройства/вкладки, Docker обеих частей и реальная приёмка. Local30/30 + context6/6 + backend67, live browser4/4, PSK и сертификатный защищённый GRE/Ping3/3 на двух CHR; cleanup/DB controls passed. Runtime backend/frontend ux-ipsec77, version1.0.0-test.ipsec77. Следующий12.5.78 — остаточная профильная приёмка IPsec: сопоставление active-peer/online, выдача mode-config, поздние ошибки операций и история восстановления; затем маршрутизация. Этап12.5 открыт. + +Подробный объём, протоколы, схема и ограничения: [12.5.77 в журнале](ux-ui-progress.md). diff --git a/docs/ux-ui/acceptance/browser-ipsec-section-2026-10-09.json b/docs/ux-ui/acceptance/browser-ipsec-section-2026-10-09.json new file mode 100644 index 00000000..c5e926be --- /dev/null +++ b/docs/ux-ui/acceptance/browser-ipsec-section-2026-10-09.json @@ -0,0 +1,45 @@ +{ + "date": "2026-10-09", + "runtime": "ipsec77", + "httpMocks": false, + "cases": [ + { + "serverId": 1, + "width": 1280, + "ready": true, + "serverAndTabUrlPreserved": true, + "peerPropertiesOnly": true, + "clientFormFits": true, + "noPageOverflow": true + }, + { + "serverId": 1, + "width": 320, + "ready": true, + "serverAndTabUrlPreserved": true, + "peerPropertiesOnly": true, + "clientFormFits": true, + "noPageOverflow": true + }, + { + "serverId": 2, + "width": 1280, + "ready": true, + "serverAndTabUrlPreserved": true, + "peerPropertiesOnly": true, + "clientFormFits": true, + "noPageOverflow": true + }, + { + "serverId": 2, + "width": 320, + "ready": true, + "serverAndTabUrlPreserved": true, + "peerPropertiesOnly": true, + "clientFormFits": true, + "noPageOverflow": true + } + ], + "pageErrors": [], + "scope": "Real catalog, readiness, peer/client forms and URL reload; writes independently exercised through production HTTP/native checks" +} diff --git a/docs/ux-ui/acceptance/deploy-browser-ipsec-section-2026-10-09.json b/docs/ux-ui/acceptance/deploy-browser-ipsec-section-2026-10-09.json new file mode 100644 index 00000000..cbca2d04 --- /dev/null +++ b/docs/ux-ui/acceptance/deploy-browser-ipsec-section-2026-10-09.json @@ -0,0 +1,50 @@ +{ + "date": "2026-10-09", + "backendSource": "ipsec77", + "frontendSource": "ipsec77", + "httpMocks": false, + "pages": [ + { + "path": "/dashboard", + "status": 200, + "mobileFits": true + }, + { + "path": "/servers", + "status": 200, + "mobileFits": true + }, + { + "path": "/uptime?tab=speed", + "status": 200, + "mobileFits": true + }, + { + "path": "/settings", + "status": 200, + "mobileFits": true + }, + { + "path": "/filters", + "status": 200, + "mobileFits": true + }, + { + "path": "/wireguard", + "status": 200, + "mobileFits": true + }, + { + "path": "/vxlan", + "status": 200, + "mobileFits": true + }, + { + "path": "/ipsec", + "status": 200, + "mobileFits": true + } + ], + "pageErrors": [], + "badApiResponses": [] +} diff --git a/docs/ux-ui/acceptance/deploy-ipsec-section-2026-10-09.json b/docs/ux-ui/acceptance/deploy-ipsec-section-2026-10-09.json new file mode 100644 index 00000000..6de39ccb --- /dev/null +++ b/docs/ux-ui/acceptance/deploy-ipsec-section-2026-10-09.json @@ -0,0 +1,39 @@ +{ + "date": "2026-10-09", + "version": "1.0.0-test.ipsec77", + "source": { + "baseHead": "e2d81f9", + "workingFileOverrides": 14, + "archiveSha256": "e0a034a855eb2d07696a1849c9baed738890e7c84108d5a3d6dbe652188bee9e", + "revisionLabel": "ipsec77" + }, + "images": { + "backend": "sha256:a4a730666c4690d5147e92f6afcb7bb5ef35132a4a1b92d291738477b9aada443", + "frontend": "sha256:452b015751c5c26bc5492cdade76149140ef9e776cbad6927a151c6eead8f028" + }, + "productionBuildsPassed": true, + "services": { + "running": 3, + "backend": "healthy", + "postgres": "healthy", + "frontend": "no healthcheck; HTTP/browser passed" + }, + "backup": { + "bytes": 2510309, + "mode": "0600", + "pgRestoreListPassed": true, + "privateEnvPreserved": true + }, + "databaseAfter": { + "servers": 2, + "speedHistory": 9, + "retentionDays": 14, + "migrations": 9 + }, + "previousVxlanImagesRetained": true, + "retainedMetadata": { + "serverId": 2, + "name": "flash", + "reason": "Automatic review rejected deletion without demonstrated ownership" + } +} diff --git a/docs/ux-ui/acceptance/ipsec-section-2026-10-09.json b/docs/ux-ui/acceptance/ipsec-section-2026-10-09.json new file mode 100644 index 00000000..7455aa7e --- /dev/null +++ b/docs/ux-ui/acceptance/ipsec-section-2026-10-09.json @@ -0,0 +1,372 @@ +{ + "date": "2026-10-09", + "runtime": "ipsec77", + "realRouterOs": true, + "name": "mm-ipsec-1791524379334", + "apiOperations": [ + { + "method": "GET", + "path": "/ipsec?serverId=17", + "status": 200 + }, + { + "method": "POST", + "path": "/ipsec/users", + "status": 404 + }, + { + "method": "PATCH", + "path": "/ipsec/peers/:id", + "status": 404 + }, + { + "method": "DELETE", + "path": "/ipsec/server/17", + "status": 404 + }, + { + "method": "GET", + "path": "/ipsec?serverId=18", + "status": 200 + }, + { + "method": "POST", + "path": "/ipsec/users", + "status": 404 + }, + { + "method": "PATCH", + "path": "/ipsec/peers/:id", + "status": 404 + }, + { + "method": "DELETE", + "path": "/ipsec/server/18", + "status": 404 + }, + { + "method": "GET", + "path": "/ipsec?serverId=17", + "status": 200 + }, + { + "method": "GET", + "path": "/ipsec", + "status": 200 + }, + { + "method": "POST", + "path": "/ipsec/server/init", + "status": 201 + }, + { + "method": "POST", + "path": "/ipsec/users", + "status": 201 + }, + { + "method": "POST", + "path": "/ipsec/users", + "status": 409 + }, + { + "method": "POST", + "path": "/ipsec/users", + "status": 400 + }, + { + "method": "POST", + "path": "/ipsec/users", + "status": 404 + }, + { + "method": "PATCH", + "path": "/ipsec/users/:id", + "status": 200 + }, + { + "method": "PATCH", + "path": "/ipsec/users/:id", + "status": 200 + }, + { + "method": "POST", + "path": "/ipsec/users", + "status": 201 + }, + { + "method": "POST", + "path": "/ipsec/server/init", + "status": 201 + }, + { + "method": "POST", + "path": "/ipsec/users", + "status": 201 + }, + { + "method": "POST", + "path": "/ipsec/users", + "status": 409 + }, + { + "method": "POST", + "path": "/ipsec/users", + "status": 400 + }, + { + "method": "POST", + "path": "/ipsec/users", + "status": 404 + }, + { + "method": "PATCH", + "path": "/ipsec/users/:id", + "status": 200 + }, + { + "method": "PATCH", + "path": "/ipsec/users/:id", + "status": 200 + }, + { + "method": "POST", + "path": "/ipsec/users", + "status": 201 + }, + { + "method": "PATCH", + "path": "/ipsec/peers/:id", + "status": 200 + }, + { + "method": "PATCH", + "path": "/ipsec/peers/:id", + "status": 200 + }, + { + "method": "PATCH", + "path": "/ipsec/peers/:id", + "status": 200 + }, + { + "method": "PATCH", + "path": "/ipsec/peers/:id", + "status": 200 + }, + { + "method": "GET", + "path": "/ipsec?serverId=1", + "status": 200 + }, + { + "method": "PATCH", + "path": "/ipsec/users/:id", + "status": 200 + }, + { + "method": "GET", + "path": "/ipsec?serverId=1", + "status": 200 + }, + { + "method": "GET", + "path": "/ipsec?serverId=2", + "status": 200 + }, + { + "method": "PATCH", + "path": "/ipsec/users/:id", + "status": 200 + }, + { + "method": "GET", + "path": "/ipsec?serverId=2", + "status": 200 + }, + { + "method": "GET", + "path": "/ipsec", + "status": 200 + }, + { + "method": "GET", + "path": "/ipsec?serverId=1", + "status": 200 + }, + { + "method": "DELETE", + "path": "/ipsec/users/:id", + "status": 200 + }, + { + "method": "DELETE", + "path": "/ipsec/users/:id", + "status": 200 + }, + { + "method": "DELETE", + "path": "/ipsec/server/1", + "status": 200 + }, + { + "method": "GET", + "path": "/ipsec?serverId=2", + "status": 200 + }, + { + "method": "DELETE", + "path": "/ipsec/users/:id", + "status": 200 + }, + { + "method": "DELETE", + "path": "/ipsec/users/:id", + "status": 200 + }, + { + "method": "DELETE", + "path": "/ipsec/server/2", + "status": 200 + } + ], + "cleanup": [ + { + "serverId": 1, + "/ip/ipsec/identity": true, + "/ip/ipsec/peer": true, + "/ip/ipsec/policy": true, + "/ip/ipsec/profile": true, + "/ip/ipsec/proposal": true, + "/ip/ipsec/mode-config": true, + "/ip/pool": true, + "/ip/firewall/nat": true, + "/certificate": true, + "/interface/gre": true, + "/ip/address": true, + "/ip/route": true, + "/ip/firewall/filter": true, + "/ip/firewall/mangle": true, + "/file": true + }, + { + "serverId": 2, + "/ip/ipsec/identity": true, + "/ip/ipsec/peer": true, + "/ip/ipsec/policy": true, + "/ip/ipsec/profile": true, + "/ip/ipsec/proposal": true, + "/ip/ipsec/mode-config": true, + "/ip/pool": true, + "/ip/firewall/nat": true, + "/certificate": true, + "/interface/gre": true, + "/ip/address": true, + "/ip/route": true, + "/ip/firewall/filter": true, + "/ip/firewall/mangle": true, + "/file": true + } + ], + "disabledChecks": [ + { + "type": "home-router", + "readFailure": "disabled", + "mutationsStatus": 404, + "noNativeRequests": true + }, + { + "type": "exit-node", + "readFailure": "disabled", + "mutationsStatus": 404, + "noNativeRequests": true + } + ], + "disabledNativeProbeCalls": 0, + "realReadFailure": { + "status": 401, + "noFalseEmptySummary": true, + "partialSuccessfulServers": 2, + "probeCalls": 16 + }, + "fakeRecordsRemoved": true, + "init": [ + { + "serverId": 1, + "initialized": true, + "identityAuth": "digital-signature", + "certificateRole": "server" + }, + { + "serverId": 2, + "initialized": true, + "identityAuth": "digital-signature", + "certificateRole": "server" + } + ], + "clientChecks": [ + { + "serverId": 1, + "pskCreateToggleDuplicate": true, + "invalidIp400": true, + "missingPeer404": true, + "certificateIssued": true, + "pkcs12Validated": true, + "secretInPublicReport": false + }, + { + "serverId": 2, + "pskCreateToggleDuplicate": true, + "invalidIp400": true, + "missingPeer404": true, + "certificateIssued": true, + "pkcs12Validated": true, + "secretInPublicReport": false + } + ], + "encryptedPings": [ + { + "serverId": 1, + "received": 3, + "policyState": "established", + "installedSaCount": 2, + "nonzeroSaBytes": true + }, + { + "serverId": 2, + "received": 3, + "policyState": "established", + "installedSaCount": 2, + "nonzeroSaBytes": true + } + ], + "importedCertificateNamesUnique": true, + "certificatePings": [ + { + "serverId": 1, + "received": 3, + "policyState": "established", + "digitalSignatureConfigured": true, + "exportedClientCertificateUsed": true, + "nonzeroSaBytes": true + }, + { + "serverId": 2, + "received": 3, + "policyState": "established", + "digitalSignatureConfigured": true, + "exportedClientCertificateUsed": true, + "nonzeroSaBytes": true + } + ], + "activePeerEvidence": [ + { + "serverId": 1, + "active": [] + }, + { + "serverId": 2, + "active": [] + } + ] +} diff --git a/docs/ux-ui/acceptance/ipsec-section-source-manifest-2026-10-09.json b/docs/ux-ui/acceptance/ipsec-section-source-manifest-2026-10-09.json new file mode 100644 index 00000000..626c5ce9 --- /dev/null +++ b/docs/ux-ui/acceptance/ipsec-section-source-manifest-2026-10-09.json @@ -0,0 +1,58 @@ +[ + { + "path": "backend/package.json", + "sha256": "a257772b6dfa4a5789e8052050cfe108b6f17abcab60652b2d103e338352ce9e" + }, + { + "path": "backend/src/routes/ipsec.ts", + "sha256": "0f659b83e1a6659fce430674c012b4b802d84c305e0c7cb2121e542e27ec5c05" + }, + { + "path": "backend/src/services/entity-snapshots.ts", + "sha256": "3bfc9ec79b766bba78822f8cd0cb52c6a0f9275cce103230a8461fb4568d02c6" + }, + { + "path": "backend/src/services/ipsec-ca.ts", + "sha256": "62d6dc31e825e72b5bb97fdbca148ed4a961b83f40c2fd26dae2ad02ca6e2499" + }, + { + "path": "backend/src/services/ipsec-config.test.ts", + "sha256": "2b440b45d0e34badcbbb47805652c068edea1cf510e4800c8c2f34f9ac573c3f" + }, + { + "path": "backend/src/services/ipsec-config.ts", + "sha256": "0211752033b34d9ab2b78ff7c211caac8a7785e68ecd32b155ed997eccb66c1d" + }, + { + "path": "backend/src/services/ipsec-live.ts", + "sha256": "870c56d23ef7444588a9a95ea023426308da220675a86d426b86732ae2f4dd5c" + }, + { + "path": "backend/src/services/ipsec-ros.ts", + "sha256": "f52dd291f916d20578614789825134882ce1669605225879459f6f92b0c1872b" + }, + { + "path": "backend/src/services/ipsec-cleanup.ts", + "sha256": "08ffa7ad0ca1c9315720d80f1281279da0ccd4264c33abce9dda49df35050624" + }, + { + "path": "backend/src/services/ipsec-state.test.ts", + "sha256": "bc81e603e94d947596fb2c8a1cd23ab06efdd0a2b2a4ffaee607b1a36b512385" + }, + { + "path": "app/(main)/ipsec/page.tsx", + "sha256": "d1edad870a79161313c9718b2c448953dfa7a4e0e1ee7de4e5e478c8800fd558" + }, + { + "path": "components/ipsec/ipsec-peer-sheet.tsx", + "sha256": "3cd72d864dc6fd34077f279e82fc3a1ee4e437e8c42b993957120f60a1419324" + }, + { + "path": "tests/e2e/ipsec-links.spec.ts", + "sha256": "86909015ed7746047e5cb0d64f53d238fede520144dfb97fe2f537188964318f" + }, + { + "path": "tests/e2e/ipsec-layout.spec.ts", + "sha256": "7c4fac163b0a26e175d60d63809724d4857f3672d05b1328049bf8a21ca4dc99" + } +] diff --git a/docs/ux-ui/screens/ipsec-real-clients-server1-1280-2026-10-09.png b/docs/ux-ui/screens/ipsec-real-clients-server1-1280-2026-10-09.png new file mode 100644 index 0000000000000000000000000000000000000000..7528318564d67c12a8ca964320fe919d0f010767 GIT binary patch literal 120141 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�%`DJ@=m3yX_d51W*Y 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

oc~L$(!3sLp(7kh@&qI=uQh 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 document.documentElement.scrollWidth <= innerWidth)).toBe(true) await page.addStyleTag({ content: "nextjs-portal { display: none !important; }" }) mkdirSync("docs/ux-ui/screens", { recursive: true }) - await page.screenshot({ path: `docs/ux-ui/screens/ipsec-${device}.png`, animations: "disabled" }) + await page.screenshot({ path: test.info().outputPath(`ipsec-${device}.png`), animations: "disabled" }) if (device === "mobile") { await page.getByRole("button", { name: "Серверы", exact: true }).click() await page.getByRole("dialog").getByRole("option").filter({ hasText: "Резервный VPN роутер" }).click() @@ -40,7 +40,7 @@ for (const device of ["desktop", "mobile"] as const) { const dialog = page.getByRole("dialog") await dialog.getByRole("textbox", { name: "Имя клиента" }).fill("Проверенный клиент") await expect.poll(() => dialog.evaluate(el => el.getBoundingClientRect().left >= 0 && el.getBoundingClientRect().right <= innerWidth)).toBe(true) - await page.screenshot({ path: `docs/ux-ui/screens/ipsec-client-${device}.png`, animations: "disabled" }) + await page.screenshot({ path: test.info().outputPath(`ipsec-client-${device}.png`), animations: "disabled" }) await dialog.getByRole("button", { name: "Сохранить", exact: true }).focus() await page.keyboard.press("Enter") await expect(dialog).toHaveCount(0) @@ -52,6 +52,6 @@ for (const device of ["desktop", "mobile"] as const) { await page.clock.fastForward(6000) await expect(page.getByText("Клиент обновлён", { exact: true })).toHaveCount(0) if (device === "mobile") await page.getByRole("button", { name: "Переинициализировать", exact: true }).scrollIntoViewIfNeeded() - await page.screenshot({ path: `docs/ux-ui/screens/ipsec-servers-${device}.png`, animations: "disabled" }) + await page.screenshot({ path: test.info().outputPath(`ipsec-servers-${device}.png`), animations: "disabled" }) }) } diff --git a/tests/e2e/ipsec-links.spec.ts b/tests/e2e/ipsec-links.spec.ts new file mode 100644 index 00000000..b8365035 --- /dev/null +++ b/tests/e2e/ipsec-links.spec.ts @@ -0,0 +1,28 @@ +import { test, expect } from "@playwright/test" + +test.beforeEach(async ({ page }) => { + await page.route("**/health", r => r.fulfill({ json: { ok: true } })) + await page.route("**/api/**", r => { + const p = new URL(r.request().url()).pathname + return r.fulfill({ json: p === "/api/auth/config" ? { required: false } : p === "/api/servers" ? [1, 2].map(id => ({ id, name: "Роутер " + id, host: "192.0.2." + id, enabled: true, type: "home-router", country: "RU", status: "online" })) : p === "/api/ipsec" ? { servers: [1, 2].map(id => ({ serverId: String(id), serverName: "Роутер " + id, initialized: false, ike2Ready: false, natRuleManaged: false, clientsTotal: 0, clientsOnline: 0, peers: [] })), clients: [] } : {} }) + }) +}) + +test("IPsec: URL сохраняет устройство и вкладку после reload", async ({ page }) => { + await page.goto("/ipsec?server=2&tab=server") + await expect(page.getByRole("tab", { name: "Сервер", exact: true })).toHaveAttribute("aria-selected", "true") + await expect(page.getByRole("button", { name: "Инициализировать", exact: true })).toHaveCount(1) + await page.getByRole("tab", { name: "Клиенты", exact: true }).click() + await expect(page).toHaveURL(/server=2$/) + await page.reload() + await expect(page.getByRole("tab", { name: "Клиенты", exact: true })).toHaveAttribute("aria-selected", "true") + await page.getByRole("tab", { name: "Сервер", exact: true }).click() + await expect(page).toHaveURL(/server=2&tab=server$/) +}) + +test("IPsec: неизвестное устройство из URL не подменяется общим срезом", async ({ page }) => { + await page.goto("/ipsec?server=999&tab=server") + await expect(page.getByRole("alert").filter({ hasText: "Устройство из ссылки не найдено" })).toBeVisible() + await expect(page.getByRole("button", { name: "Инициализировать", exact: true })).toHaveCount(0) + await expect(page.getByRole("button", { name: "Новый клиент", exact: true })).toBeDisabled() +})