Не добавляются узлы: IP address on interface matches existing node

Started by Kris, October 10, 2024, 12:09:59 PM

Previous topic - Next topic

Kris

Здравствуйте! Столкнулись с проблемой: не добавляются новые узлы по причине того, что на существующих узлах уже существуют интерфейсы с таким же IP-адресом. В дебаге по poll.discovery вижу следующее:

2024.10.10 11:19:00.025 *D* [poll.discovery    ] AcceptNewNodeStage2(172.18.10.87): IP address 192.168.1.1 on interface Vlan1 matches existing node 192-168-64-253 [206]
2024.10.10 11:19:00.025 *D* [poll.discovery    ] ProcessDiscoveredAddressStage2(172.18.10.87): address discarded

2024.10.10 11:44:28.012 *D* [poll.discovery    ] AcceptNewNodeStage2(172.18.25.154): IP address 0.1.134.160 on interface 1 matches existing node 172-18-26-50 [268459]

Как видите, это дефолтные IP-адреса для интерфейсов vlan 1, с 192.168.1.1 и так всё понятно, 0.1.134.160 - это у Eltex. 

Как сделать так, чтобы NetXMS игнорировал эти интерфейсы при проверке на дубликаты? Версия сервера 5.0.7. Ранее был 4.3.0 и таких проблем не наблюдалось.

Filipp Sudanov

Да, в рамках одной зоны в NetXMS не может быть интерфейсов с одинаковыми адресами. Выход - в хук скрипте, который запускается перед созданием новых интерфейсов (Hook::CreateInterface) можно запретиться создание интерфейса, например:

for (i : $1.ipAddressList) {
  if (i.address == "10.2.1.188") {
    PollerTrace("  Blocked interface creation, because it is 10.2.1.188");  // this prints in conf poll output
    return false;
  }
}
return true;

Но уже существующие интерфейсы это не удалит, их можно или удалить вручную, или если их много, то можем сделать скрипт, который пройдет по нодам и удалит интерфейсы.

Filipp Sudanov

Но вообще-то это довольно типичная ситуация, мы подумаем, может быть добавим какой-то специальный список сабнетов, для которых дубликаты будут игнорироваться

Victor Kirhenshtein

Пока как workaround можно сделать configuration poll hook, в котором находить нужные интерфейсы, и на них вызывать setExcludeFromTopology(true). Что-то вроде этого:

if ($node)
{
   for(iface : $node.interfaces)
   {
      for(a : iface.ipAddressList)
      {
         if (a == "0.1.134.160" or a == "192.168.1.1")
         {
            iface.setExcludeFromTopology(true);
            break;
         }
      }
   }
}

В версии 5.2 добавим какой-то более удобный встроенный механизм.