Пересылка трафика SMB — не та же задача, что его завершение, и маршрутизатор, делающий одно, может не справляться с другим. Пересылка означает, что маршрутизатор перемещает пакеты, содержимое которых он никогда не разбирает. Монтирование означает, что маршрутизатор становится файловым клиентом, с программным обеспечением, которого может не быть в поставке, с учётными данными, которые он должен защищать, и с режимами отказа, которые теперь его. Выбор между ними — вопрос о том, где нужны файлы, а не о том, что удастся уговорить установить платформу маршрутизации.

Пересылка и завершение — разные задачи

В роли пересылки у маршрутизатора одна обязанность: доставлять пакеты между клиентом и сервером, применяя политику, которую требует путь. Он не проходит аутентификацию на общем ресурсе, не кэширует данные файлов и не заботится о том, говорит ли сервер SMB2 или SMB3, потому что никогда не читает так глубоко в поток. Если ресурс становится недоступным, пользователь видит ошибку, а маршрутизатор продолжает маршрутизировать.

В роли клиента маршрутизатор вступает в разговор протокола. Он согласует диалект, аутентифицируется, разрешает имена, удерживает точку монтирования и показывает локальное представление файловой системы всему, что работает выше. Это настоящая служба с жизненным циклом, и она делает шлюз зависимостью рабочего процесса с файлами. Он также наследует все режимы отказа этой зависимости, включая ожидания при загрузке и устаревшие учётные данные.

Сравнение не только о возможностях. Платформа, которая умеет монтировать общий ресурс, не обязательно должна это делать, а платформа, которая не умеет монтировать ни один, всё же может быть правильным местом для маршрутизации трафика.

Что на самом деле нужно для монтирования CIFS в ядре

На устройстве под Linux клиент CIFS в ядре и клиент в пользовательском пространстве — разные возможности, и небольшие образы часто не содержат ни одной. Поддержка ядра должна быть в работающем образе, помощник монтирования должен существовать, а диалект SMB, согласованный с сервером, должен быть таким, который принимают обе стороны. Об этом говорит руководство по клиенту CIFS для Linux, устройство ядра и его параметры монтирования, и это правильная справка, прежде чем предполагать, что сборка поставщика его содержит.

Проверьте возможность до того, как проектировать вокруг неё, и проверяйте версию, а не наличие имени команды. Имя модуля в списке пакетов — не то же самое, что работающий клиент.

lsmod | grep -w cifs
modinfo cifs | head -5
mount.cifs --version
smbclient -L //fs02.corp.internal -U svc-router -m SMB3

Модуль ядра, который загружается, и утилита в пользовательском пространстве, сообщающая версию, всё ещё не гарантируют, что монтирование переживёт обновление ключей VPN, поэтому относитесь к проверке как к начальному условию, а не как к доказательству. Если образ поставляет только поддержку SMB1, это причина остановиться, а не причина включить её на сервере.

Учётные данные и идентичность источника отличаются от ноутбука

Пересланный запрос несёт идентичность ноутбука через туннель, тогда как запрос, созданный на маршрутизаторе, несёт его собственный адрес источника, путь резолвера и фильтрацию выхода. Они могут попасть в другое правило межсетевого экрана, в другое представление DNS и в другой список разрешённых на стороне сервера. Поэтому копия, работающая с рабочей станции, ничего не доказывает о собственном монтировании маршрутизатора. Проверяйте монтирование из собственной оболочки маршрутизатора, а не с рабочей станции за ним.

Дайте маршрутизатору узко авторизованную служебную идентичность, если роль вообще одобрена. Никогда не помещайте пароль прямо в командную строку монтирования, потому что он остаётся в истории оболочки и появляется в таблице процессов, пока монтирование выполняется.

Храните учётные данные через защищённый механизм платформы и читайте их из файла с ограничительными правами. Этот файл должен быть нечитаем для любой учётной записи, кроме той, что выполняет монтирование.

install -m 600 /dev/null /etc/cifs-reports.creds
printf 'username=svc-router\npassword=REPLACE_ME\ndomain=CORP\n' > /etc/cifs-reports.creds
mount -t cifs //fs02.corp.internal/reports /mnt/reports -o credentials=/etc/cifs-reports.creds,vers=3.1.1,ro

Кто отвечает за сбой, когда общий ресурс исчезает

Отсутствующая удалённая файловая система ведёт себя иначе, чем отсутствующий маршрут. Монтирование может блокировать процессы, которые к нему обращаются, может отказать при загрузке до появления туннеля, а запись, предназначенная серверу, может попасть не туда, если под точкой монтирования есть локальный каталог. Это отказы хранилища, которые теперь принадлежат сетевой команде, хотела она их или нет. Никто не соглашался с такой ответственностью, но она приходит вместе с монтированием.

Проектируйте порядок загрузки и параметры монтирования исходя из этой реальности. Монтирование только для чтения с коротким тайм-аутом и документированным шагом восстановления защитить легче, чем монтирование для записи, от которого зависит всё остальное. Убедитесь, что туннель поднимается до того, как что-либо попытается монтировать, иначе первая загрузка после сбоя питания зависнет.

Для значительной обработки файлов или для чего угодно, что реэкспортирует данные дальше, отдельный хост обычно даёт более ясную границу ответственности. Маршрутизатор продолжает маршрутизировать, а рабочий процесс с файлами получает машину, которую можно перезагрузить, не забирая с собой сеть.

Проверьте решение по реальной задаче

Запишите, какой задаче нужны файлы и где эта задача выполняется. Если ответ — рабочая станция, маршрутизируйте ресурс и остановитесь на этом. Если ответ — служба на устройстве, подтвердите возможности клиента, поддерживаемый диалект и путь учётных данных до первого монтирования, а затем решите, действительно ли устройство подходящий хост.

Проверьте смонтированное представление и свободное место с самого маршрутизатора, потому что именно там их увидит нагрузка. Повторите проверку после переподключения, а не только после чистой загрузки.

findmnt -t cifs -o TARGET,SOURCE,OPTIONS
df -h /mnt/reports
ls -l /mnt/reports | head

Монтирование, которое перечисляет файлы, но сообщает о полной или доступной только для чтения файловой системе, уже сказало вам, с каким отказом вы столкнётесь в 2 часа ночи. Подтвердите и путь восстановления: чисто размонтируйте, опустите туннель, поднимите его снова и смонтируйте заново без перезагрузки устройства. Если эта последовательность каждый раз требует обращения в поддержку, маршрутизатор — неправильное место для роли клиента.

Похожие статьи