diff --git a/frontend/src/NetworkConfigManager.jsx b/frontend/src/NetworkConfigManager.jsx index 5514324..aa027dd 100644 --- a/frontend/src/NetworkConfigManager.jsx +++ b/frontend/src/NetworkConfigManager.jsx @@ -660,7 +660,9 @@ function NetworkConfigManager() { } const newGateways = []; - const usedIps = new Set(config.gateways.map(g => g.ip)); + // Для проверки конфликтов используем только IP из существующих gateways + // Рекурсивные gateways могут использовать те же IP, что и интерфейсы - это нормально + const usedGatewayIps = new Set(config.gateways.map(g => g.ip).filter(Boolean)); // Создаем маппинг между ID из шаблона и реальными ID после создания const templateIdToRealId = new Map(); @@ -691,9 +693,10 @@ function NetworkConfigManager() { ip = ip.trim(); - // Если IP уже используется, пропускаем - if (usedIps.has(ip)) { - notify.warning(`IP ${ip} уже используется, пропущен`); + // Проверяем конфликты только с другими gateways + // Для рекурсивных gateways разрешено использовать IP, которые уже используются в интерфейсах + if (usedGatewayIps.has(ip)) { + notify.warning(`IP ${ip} уже используется в другом gateway, пропущен`); return; } @@ -719,7 +722,8 @@ function NetworkConfigManager() { }; newGateways.push(newGateway); - usedIps.add(ip); + // Добавляем IP в список использованных для проверки конфликтов внутри этой же операции создания + usedGatewayIps.add(ip); }); if (newGateways.length === 0) {