fix(NetworkConfigManager): enhance validation for /30 networks by ensuring generated local and remote IPs are always checked against network and broadcast address conflicts, improving IP generation reliability
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m43s
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m43s
This commit is contained in:
@@ -996,22 +996,21 @@ function NetworkConfigManager() {
|
||||
const localIp = `${a}.${b}.${c}.${dVal + 1}`;
|
||||
const remoteIp = `${a}.${b}.${c}.${dVal + 2}`;
|
||||
|
||||
// Для сетей /30 проверяем, что не используем сетевой адрес (базовый) и broadcast (базовый + 3)
|
||||
// Для /30 используем только dVal + 1 и dVal + 2, что уже гарантировано формулой выше
|
||||
// Дополнительно проверяем границы
|
||||
// Для сетей /30 проверяем границы
|
||||
if (prefix >= 30) {
|
||||
if (dVal % 4 !== 0) continue; // Базовый адрес должен быть кратен 4
|
||||
if (dVal + 2 > 255) continue; // Проверяем, что remoteIp не превышает 255
|
||||
// Для /30 dVal + 1 и dVal + 2 всегда валидны (не сетевой и не broadcast)
|
||||
// Но нужно проверить, что эти IP не являются сетевыми или broadcast для других сетей /30
|
||||
const localLastOctet = dVal + 1;
|
||||
const remoteLastOctet = dVal + 2;
|
||||
// Проверяем, что Local IP не является сетевым адресом (кратен 4) или broadcast (кратен 4 + 3)
|
||||
if (localLastOctet % 4 === 0 || localLastOctet % 4 === 3) continue;
|
||||
// Проверяем, что Remote IP не является сетевым адресом (кратен 4) или broadcast (кратен 4 + 3)
|
||||
if (remoteLastOctet % 4 === 0 || remoteLastOctet % 4 === 3) continue;
|
||||
}
|
||||
|
||||
// ВСЕГДА проверяем, что генерируемые IP не являются сетевыми или broadcast для любой сети /30
|
||||
// Это важно даже если пул имеет префикс меньше /30
|
||||
const localLastOctet = dVal + 1;
|
||||
const remoteLastOctet = dVal + 2;
|
||||
// Проверяем, что Local IP не является сетевым адресом (кратен 4) или broadcast (остаток 3 при делении на 4)
|
||||
if (localLastOctet % 4 === 0 || localLastOctet % 4 === 3) continue;
|
||||
// Проверяем, что Remote IP не является сетевым адресом (кратен 4) или broadcast (остаток 3 при делении на 4)
|
||||
if (remoteLastOctet % 4 === 0 || remoteLastOctet % 4 === 3) continue;
|
||||
|
||||
// Проверяем, что IP входят в диапазон пула
|
||||
if (!isIpInCidr(localIp, cidr)) continue;
|
||||
if (!isIpInCidr(remoteIp, cidr)) continue;
|
||||
@@ -1041,18 +1040,19 @@ function NetworkConfigManager() {
|
||||
const remoteIp = `${a}.${b}.${cVal}.${dVal + 2}`; // Remote IP = базовый + 2
|
||||
|
||||
// Для сетей /30 проверяем границы
|
||||
// Для /30 dVal + 1 и dVal + 2 всегда валидны (не сетевой и не broadcast)
|
||||
if (prefix >= 30) {
|
||||
if (dVal + 2 > 255) continue; // Проверяем, что remoteIp не превышает 255
|
||||
// Дополнительно проверяем, что IP не являются сетевыми или broadcast для других сетей /30
|
||||
const localLastOctet = dVal + 1;
|
||||
const remoteLastOctet = dVal + 2;
|
||||
// Проверяем, что Local IP не является сетевым адресом (кратен 4) или broadcast (кратен 4 + 3)
|
||||
if (localLastOctet % 4 === 0 || localLastOctet % 4 === 3) continue;
|
||||
// Проверяем, что Remote IP не является сетевым адресом (кратен 4) или broadcast (кратен 4 + 3)
|
||||
if (remoteLastOctet % 4 === 0 || remoteLastOctet % 4 === 3) continue;
|
||||
}
|
||||
|
||||
// ВСЕГДА проверяем, что генерируемые IP не являются сетевыми или broadcast для любой сети /30
|
||||
// Это важно даже если пул имеет префикс меньше /30
|
||||
const localLastOctet = dVal + 1;
|
||||
const remoteLastOctet = dVal + 2;
|
||||
// Проверяем, что Local IP не является сетевым адресом (кратен 4) или broadcast (остаток 3 при делении на 4)
|
||||
if (localLastOctet % 4 === 0 || localLastOctet % 4 === 3) continue;
|
||||
// Проверяем, что Remote IP не является сетевым адресом (кратен 4) или broadcast (остаток 3 при делении на 4)
|
||||
if (remoteLastOctet % 4 === 0 || remoteLastOctet % 4 === 3) continue;
|
||||
|
||||
// Проверяем, что IP входят в диапазон пула и отличаются
|
||||
if (!isIpInCidr(localIp, cidr)) continue;
|
||||
if (localIp === remoteIp) continue;
|
||||
|
||||
Reference in New Issue
Block a user