В течение последнего дня я безуспешно пытался разрешить моей виртуальной машине Ubuntu разрешать имена NetBIOS в локальной сети, чтобы найти некоторые некомпьютерные устройства (принтеры, специальные штрихкодовые машины и т. д.), которые не имеют фиксированного IP-адреса.
Сначала я предположил, что мне не удается настроить использование winbind/wins для разрешения, хотя я прочитал каждую веб-страницу, где когда-либо упоминался nsswitch.conf, и был уверен, что моя конфигурация должна быть правильной.
запуск nmblookup printername
возвращает успешный результат, который выглядит так:
x.x.x.x printername<00>
И это была моя первая подсказка, тип службы <00>. Я запустил wireshark и попытался ping printername
, и увидел широковещательную передачу NetBIOS с запросом printername<20>
, на которую никто не ответил.
Я остановил службу winbindd и запустил ее вручную в фоновом режиме с помощью:
sudo winbindd -F -S -d 10
затем попробовал тот же ping и увидел, что winbindd пытается выполнить тот же ошибочный запрос с <20> вместо <00>.
Почему это происходит? Где это можно настроить?
EDIT: Закрываю этот вопрос, так как это жестко закодировано в исходнике. Покопавшись в коде, я нашел функцию в winbindd_wins_byname.c, закодированную следующим образом:
subreq = resolve_wins_send(state, ev, state->request->data.winsreq, 0x20);
решение1
Вы должны получить возврат в размере:
x.x.x.x printername<20>
windbindd
верно, поскольку тип службы <20> предназначен для служб общего доступа к файлам/принтерам. Вы пробовали конфигурацию службы WINS из samba? Тип службы по умолчанию будет предоставлен, если клиент запросит общий ресурс, не указанный в smb.conf
.