Заметка по поводу браузинга сети в Samba >= 4.8

Начиная с Samba 4.8 перестал работать «обзор сети Windows», даже если она состоит из других самб. При этом в smbtree все видится. В Samba 4.7 проблемы нет.


Михаил Новоселов, [08.02.19 21:02]
Почему в одной подсети из виртуалок и контейнеров одна подхватила имеющийся мастер-браузер samba, а другая нет? Конфиги 192.168.122.106 и 192.168.122.62 одинаковые.

Михаил Новоселов, [08.02.19 21:02]
[ Фотография ]

Alexey Shabalin, [08.02.19 21:48]
[В ответ на Михаил Новоселов]
Если это не DC, то мастер выбирается на выборах. В выборах сравниваются разные параметры — версия ОС, процессор и т.п. выборы могут затянутся на долго. Каждая новая включенная машинка инициирует выборы.

Alexey Shabalin, [08.02.19 21:49]
Придумано это было в эпоху до dns, и даже до tcp/ip. Все это легаси.

Михаил Новоселов, [08.02.19 21:58]
[В ответ на Alexey Shabalin]
Не DC, обычные samba standalone server. У меня несколько lxc контейнеров с Росой запущено, при этом они почти одинаковые, т.к. получены клонированием, только хостнейм менял. Они друг друга видят. Все признали ROSA5 как мастера. А вот в той же подсети 192.168.1220/24

Михаил Новоселов, [08.02.19 21:58]
есть ALT и DragonFlyBSD, они не признают ROSA5 как мастера. Получается, это как раз сработала описанная эвристика подбора?

Михаил Новоселов, [08.02.19 22:05]
Вообще это все делаю из-за того, что в Samba 4.9 (Sisyphus) по сравнению с 4.7 (p8) сломался обзор сети Windows через libsmbclient, в т.ч. в GVFS и KIO. Вероятно, связано с постепенным отказом от SMB1.

Михаил Новоселов, [08.02.19 22:06]
При чем обычно помогает установка client max protocol = NT1 в smb.conf клиента. Никак не пойму, почему max, а не min.

Михаил Новоселов, [08.02.19 22:06]
По всей документации оно пробует NT1 (SMB1) и далее по возрастающей.

Михаил Новоселов, [08.02.19 22:07]
Разве что после WannaCry что-то второпях сделали.

Alexey Shabalin, [08.02.19 22:18]
Зря в max такое пишете

Alexey Shabalin, [08.02.19 22:19]
Значит smb3 вообще не будет

Михаил Новоселов, [08.02.19 22:25]
[В ответ на Alexey Shabalin]
Я понимаю, что тогда smb3 не будет, но не понятно, почему именно эта настройка помогает, не улавливаю логики.

Михаил Новоселов, [08.02.19 22:26]
client min protocol = NT1 ничего не меняет и не имеет смысла, т.к. это и так дефолт. Почему-то libsmbclient при листинге smb:// в Samba 4.9 перестал переключаться в SMB1 для вывода списка рабочих групп.

Михаил Новоселов, [08.02.19 22:26]
По факту листинг smb:// вообще перестал работать. Может, так и задумано, конечно, потому что на Windows отказались от NetBIOS, и новые протколы smb его уже не подедрживают.

Михаил Новоселов, [08.02.19 22:28]
В файловых менедежрах обзор сети Windows престал работать из-за этого. Он тоже использует libsmbclient.

Михаил Новоселов, [08.02.19 22:29]
Вот в Caja в ALT p8 работает, а в Sisyphus — пусто.

Михаил Новоселов, [08.02.19 22:29]
И так на всех дистрибутивах.

Alexander Bokovoy, [08.02.19 22:59]
Браузинг сети возможен только в SMB1, поэтому max и помогает. Но в апстриме мы это уже починили тем, что переключаемся в SMb1 для конкретно браузинга сети, если требуется и gvfs-smb должен это нормально подхватывать. Не работало всё это до 4.8/

Alexander Bokovoy, [08.02.19 23:03]
но также есть https://bugzilla.samba.org/show_bug.cgi?id=12876, где выяснилось, что не всё пофиксили, потому что не всё реально возможно.

Alexander Bokovoy, [08.02.19 23:05]
проблема в том, что на протокольном уровне это всё просто не поддерживается больше. Микрософт добавила поддержку dnssd, но она с ошибками, так что и тут проблемы. Короче, с исчезновением smb1 всё совсем не должно работать.

Alexander Bokovoy, [08.02.19 23:08]
коммит 0f9d10246071160dc736205af234ab0ca456d0dc должен быть в 4.8.0+, он заставляет соединение к IPC$ выполнять по SMB1 и тем самым позволяет браузинг. По идее, этот код можно преписать на использование прямого DCE RPC вызова, чтобы он работал поверх любой версии SMB, но это все равно не решит проблему с поиском серверов в окружении, потому что они по-другому работают.

Михаил Новоселов, [08.02.19 23:14]
[В ответ на Alexander Bokovoy]
В выводе smbclient -L вижу текст о том, что выполнено переключение в SMB1 для вывода рабочих групп. До 4.8 или 4.9 все работает, по крайней мере в чисто линуксовой сети, Samba 4.7 в обзоре сети видит самбы 4.9. А вот самба 4.9 не видит ни 3.х, ни 4.7, ни 4.9.
Ниже скриншот из Samba 4.9.4 — smbtree видит сеть, а Gnome VFS — нет.
При этом в окружении с samba 4.7 и smbtree, и Gnome VFS видят сеть.

Михаил Новоселов, [08.02.19 23:14]
[ Фотография ]

Alexander Bokovoy, [08.02.19 23:15]
потому что начиная с 4.8 по умолчанию smb > 2

Alexander Bokovoy, [08.02.19 23:16]
это же вопрос клиента, что он там в браузинге найдет.

Михаил Новоселов, [08.02.19 23:16]
[В ответ на Alexander Bokovoy]
Этот коммит (0f9d10246071160dc736205af234ab0ca456d0dc) относится как раз только в CLI-утилите, к ней вопросов нет. Вопросы к libsmbclient.so.0.
По умолчанию smb >2 — имеется в виду, что до 4.8 клиент пытался установить соединение начиная с smb1, постепенно повышая версию протокола, а начиная с 4.8 начинает сразу с smb 2?

Alexander Bokovoy, [08.02.19 23:17]
если клиент не использует smb1, он ничего не найдет.

Михаил Новоселов, [08.02.19 23:18]
И начиная с 4.8 клиенты больше не пытаются использовать smb1? А это сделано в целях безопасности и ухода с smb1, или могут возникнуть проблемы при работе с современными версиями Windows-серверов?

Alexander Bokovoy, [08.02.19 23:20]
Современные Windows серверы перестали поддерживать SMb1

Alexander Bokovoy, [08.02.19 23:21]
https://support.microsoft.com/en-us/help/4034314/smbv1-is-not-installed-by-default-in-windows

Alexander Bokovoy, [08.02.19 23:21]
Windows Server 2016 no longer contains the SMBv1 client or server by default after a clean installation.
Windows 10 Home and Windows 10 Professional no longer contain the SMBv1 server by default after a clean installation.
Windows 10 Home and Windows 10 Professional still contain the SMBv1 client by default after a clean installation. If the SMBv1 client is not used for 15 days in total (excluding the computer being turned off), it automatically uninstalls itself.

Alexander Bokovoy, [08.02.19 23:23]
Единственная серьезная проблема на текущий момент для линуксовых клиентов — отсутствие POSIX extensions в SMB > 1, но работа над этим практически закончена. В ядре 5.0 почти всё должно быть в cifs.ko, а в Самбу пока еще не втянули отдельную ветку, но она практически завершена.

Alexander Bokovoy, [08.02.19 23:24]
Ну и браузинг.

Alexander Bokovoy, [08.02.19 23:25]
С браузингом никто не разбирается, потому что никому он не нужен из тех, кто работает над кодом. Там, в основном, вопросы клиент-серверного взаимодействия, а не декстопы.

Михаил Новоселов, [08.02.19 23:28]
А для браузинга насколько реально патчем опустить минимальную версию протокола с SMB2, как Вы сказали, до SMB1 (NT1), как было до 4.8? Что в новых Windows не работает smb1 и что microsoft очень хочет от него избавиться, знаю, но не совсем понятна причина не работы браузинга. В коде cli-клиента уже сам находил перебор протоколов, а вот в libsmclient.so.0, котоырй используется браузингом, по-моему, не нашел такого.

Михаил Новоселов, [08.02.19 23:29]
Еще по документации client min protocol = NT1 до сих пор, да и по коду смотрел, там client min protocol = CORE, где именно smb > 2 стало, не нашел

Anton Gorlov, [08.02.19 23:31]
а я во твсё с локами для 1с воюю…

Alexander Bokovoy, [08.02.19 23:31]
это всё SMBC_opendir_ctx(), там есть точка, где cli = get_ipc_connect_master_ip(), затем SMBC_server() и cli_NetServerEnum().

Anton Gorlov, [08.02.19 23:32]
зависла опять 1с… омпы на которых 1с была запущена перезагрузили…
а в smbstatus вижу что лк-файлы всё ещё типа держатся…

Alexander Bokovoy, [08.02.19 23:32]
проблема в том, что даунгрейд на SMB1 невозможен (это часть исправлений для badlock), поэтому там реально нужно делать отдельное соединение с smb1, потом пытаться соединиться и забирать через него данные.

Alexander Bokovoy, [08.02.19 23:34]
а внутри libsmbclient соединения к одному и тому же серверу кешируются

Alexander Bokovoy, [08.02.19 23:34]
то есть, открыть второе с другой версией протокола не получится

Alexander Bokovoy, [08.02.19 23:34]
см. SMBC_server_internal()

Alexander Bokovoy, [08.02.19 23:36]
тот же SMBC_server_internal() старается использовать минимальный-максимальный диапазон протокола при соединении, то есть в реальности он всегда попытается подключиться на SMB3

Anton Gorlov, [08.02.19 23:36]
Кстати вопрос.. вот есть мой комп домашний… он же в роли роутера… и он же самба-сервер
в самбе явно указано

interfaces = lo eth1
hosts allow = 127. 172.25.37.

виндовые компы меняв сети видят..а я с сервера их не особо.. по кр мере в kde..

Anton Gorlov, [08.02.19 23:37]
есть ли шанс чт-то тут сделать кроме как убиратьсмоего компа роутинг?

Alexander Bokovoy, [08.02.19 23:37]
и после чего cli_NetServerEnum() уже не вызовут, потому что перед этим идет проверка, версии соединения из SMBC_server()

Alexander Bokovoy, [08.02.19 23:37]
см. выше, эта та же история.

Anton Gorlov, [08.02.19 23:38]
а.. то есть никак в общем-то?

Anton Gorlov, [08.02.19 23:38]
хотя странно.. на рабое на компе тоже более 1 интерфейса..но при этом я вижу конторские шары

Anton Gorlov, [08.02.19 23:39]
а тут дельфин выдаёт
Невозможно найти рабочие группы в вашей локальной сети. Возможно, этому препятствует брандмауэр.

Alexander Bokovoy, [08.02.19 23:39]
это не имеет отношение к интерфейсу

Alexander Bokovoy, [08.02.19 23:39]
я же говорю, смотри нашу дискуссию выше

Anton Gorlov, [08.02.19 23:40]
как раз сижу читаю…

Anton Gorlov, [08.02.19 23:41]
более того не прокатывате даже
smb://172.25.37.113/

но главное не пойму почему в офисе отрабатывает..а дома нет

Михаил Новоселов, [08.02.19 23:41]
[В ответ на Alexander Bokovoy]
Примерно это и подозревал… код gnome vfs не смотрел,а вот в KIO-бекенде smb есть место, где обрабатывается условие «если URL = корень smb:/», в него бы подсунуть установку версии протокола smb1, но libsmbclient не позволяет это сделать, я смог только придумать, что чисто теоретически можно оттуда LD_PRELOAD некую бибилиотеку, которая подменит ~/.smb/smb.conf на тот, в котором client max protocol = NT1, но это совсем изврат.

На счет POSIX-расширений, про них читал, а они имеют отношение к браузингу сети?

Alexander Bokovoy, [08.02.19 23:42]
нет, они не имеют отношение к браузингу. Они имеют отношение к расшариванию домашних директорий и тому подобному

Alexander Bokovoy, [08.02.19 23:42]
новые POSIX extensions в SMB3.11 еще и позволяют добиться производительности выше NFS

Alexander Bokovoy, [08.02.19 23:44]
но об этом https://fosdem.org/2019/schedule/event/smb2_posix_extensions/

Alexander Bokovoy, [08.02.19 23:46]
и еще клиентская часть в ядре — https://www.interopevents.com/uploads/2666379-4_39_1015_SMB3.1.1%20and%20beyond_Optimizing%20access%20from%20Linux%20to%20Samba%20and%20advanced%20SMB3.1.1%20servers-final.pdf

Alexander Bokovoy, [08.02.19 23:47]
fio with the read/write job file : SMB3 12.5% faster to Samba (than NFSv4.2 server) for random reads and SMB3 12.8% faster for writes
For sequential: SMB3 31.8% faster for read, 31.2% faster for write (and not just because of stricter sync)

Alexander Bokovoy, [08.02.19 23:48]
это примерно 4 месяца назад

Alexander Bokovoy, [08.02.19 23:48]
ладно, мне надо отключаться.

Михаил Новоселов, [08.02.19 23:48]
[В ответ на Alexander Bokovoy]
Если отключить кеш, это же не поможет, т.к. все равно нет функицонала перебора версий протокола?
Еще вопрос есть: Windows 10 не ищет по NetBIOS в обзоре сети, я не пробовал, но в теории он не увидит Samb-ы в сети. Есть весьма простой демон wsdd https://github.com/christgau/wsdd/ , призван обеспечить обнаружение самб виндовсами, как понял, этой проблемой в апмтриме самбы тоже почти не занимались.

Михаил Новоселов, [08.02.19 23:48]
[В ответ на Alexander Bokovoy]
Спасибо за пояснения.


Сегодня в 0:17
я уже костыльнул: в самбу добавлен /etc/avahi/services/smb.service (https://abf.io/import/samba/blob/rosa2016.1/avahi_samba.xml), а plasma5-zeroconf-ioslave запатчен (https://abf.io/import/plasma5-zeroconf-ioslave/blob/rosa2016.1/0001-Enable-SMB-Zeroconf-discovery.patch), чтобы по Zeroconf видеть smb в сети, в https://abf.io/import/plasma5-config-fresh добавлена зависимость от plasma5-zeroconf-ioslave, чтобы он приехал с обновлением, и в него же добавлен (https://abf.io/import/plasma5-config-fresh/commit/655075ff183e0a18caeb8be350813d8e618f742f) кусок конфига, позволяющий открывать smb, найденные по zeroconf (Avahi).

Однако это немного не то, что было, т.к. нет деления на рабочие группы.

Gnome VFS без патчей и так нормально находит smb по zeroconf. Сам zeroconf как протокол родом из macOS.

Survolog 0:24
Круто.
А рабочую группу возможно прочесть?
Если можно будет собрать такую информацию, то по ней можно и каталоги со ссылками создать, наверное.

0:25
Насколько бегло понял из чтения примеров сервис-файлов Avahi, по Zeroconf можно передать доп. параметры, например, рабочую группу. Вопроса 2: как ее передать (можно решить динамическим генерированием /etc/avahi/services/smb.service) и кто ее будет читать и что делать.

Тут проблема-то увидеть компы в сети
Если ты знаешь адрес или имя хоста компа, то smb://host работает, как и раньше, грубо говоря.


Вроде бы решение проблемы:

Михаил Новоселов, [09.02.19 11:40]
[В ответ на Alexander Bokovoy]
Нашел, о чем была речь про gvfs: https://bugzilla.redhat.com/show_bug.cgi?id=1513394

Михаил Новоселов, [09.02.19 11:56]
А ведь там smbc_setOptionProtocols (smb_context, "NT1", "NT1"); и нормальное решение всей проблемы.
(Эта функция добавлена в Samba коммитом 0dae4e2f5c65).

Отправить ответ

avatar
  Subscribe  
Сообщать по почте