diff --git a/frontend/src/NetworkConfigManager.jsx b/frontend/src/NetworkConfigManager.jsx index 8652e4c..34ba1f2 100644 --- a/frontend/src/NetworkConfigManager.jsx +++ b/frontend/src/NetworkConfigManager.jsx @@ -538,10 +538,10 @@ function NetworkConfigManager() { } // Определяем IP родителя в зависимости от типа - const parentIp = parent.type === 'interface' ? parent.remoteIp : parent.ip; + const parentIp = parent.parentType === 'interface' ? parent.remoteIp : parent.ip; if (!parentIp) { - const parentType = parent.type === 'interface' ? 'интерфейс' : 'gateway'; + const parentType = parent.parentType === 'interface' ? 'интерфейс' : 'gateway'; code += `\n# Gateway "${gw.ip}" - родительский ${parentType} не имеет IP, пропущен\n`; return; } @@ -549,8 +549,8 @@ function NetworkConfigManager() { validRoutesCount++; // Создаём маршрут для рекурсивного gateway - const parentLabel = parent.type === 'interface' - ? `интерфейс ${parent.name || parent.type} (${parent.remoteIp})` + const parentLabel = parent.parentType === 'interface' + ? `интерфейс ${parent.name || parent.interfaceType || 'interface'} (${parent.remoteIp})` : `gateway ${parent.ip}`; code += `\n# Рекурсивный gateway: ${gw.ip}\n`; @@ -691,11 +691,32 @@ function NetworkConfigManager() { // Сначала ищем в gateway const gateway = config.gateways?.find(g => g.id === parentId); - if (gateway) return { type: 'gateway', ...gateway }; + if (gateway) { + return { + parentType: 'gateway', // Используем parentType чтобы не конфликтовать с type интерфейса + ...gateway, + ip: gateway.ip // Явно указываем IP для gateway + }; + } // Если не найден, ищем в интерфейсах const iface = config.tunnelInterfaces?.find(i => i.id === parentId); - if (iface) return { type: 'interface', ...iface }; + if (iface) { + return { + parentType: 'interface', // Используем parentType чтобы не конфликтовать с type интерфейса + ...iface, + remoteIp: iface.remoteIp, // Явно указываем remoteIp для интерфейса + localIp: iface.localIp, + name: iface.name, + interfaceType: iface.type // Сохраняем тип интерфейса (GRE, WireGuard и т.д.) отдельно + }; + } + + // Если не найден ни gateway, ни интерфейс - логируем для отладки + console.warn('Parent gateway/interface not found:', parentId, { + availableGateways: config.gateways?.map(g => g.id), + availableInterfaces: config.tunnelInterfaces?.map(i => i.id) + }); return null; }; @@ -775,9 +796,11 @@ function NetworkConfigManager() {
- Родитель: {parentGateway.type === 'interface' - ? `Интерфейс ${parentGateway.name || parentGateway.type} (${parentGateway.remoteIp})` - : `Gateway ${parentGateway.ip}` + Родитель: {parentGateway.parentType === 'interface' + ? `Интерфейс ${parentGateway.name || parentGateway.interfaceType || 'interface'} (${parentGateway.remoteIp || '—'})` + : parentGateway.ip + ? `Gateway ${parentGateway.ip}` + : 'Gateway (не указан IP)' }
@@ -1171,9 +1194,11 @@ function NetworkConfigManager() { {parentGateway && (
- → {parentGateway.type === 'interface' - ? `Интерфейс ${parentGateway.name || parentGateway.type} (${parentGateway.remoteIp})` - : `Gateway ${parentGateway.ip}` + → {parentGateway.parentType === 'interface' + ? `Интерфейс ${parentGateway.name || parentGateway.interfaceType || 'interface'} (${parentGateway.remoteIp || '—'})` + : parentGateway.ip + ? `Gateway ${parentGateway.ip}` + : 'Gateway (не указан IP)' }
)}