Ошибка подключения Linux SAMBA от клиента Windows 11

Вопрос или проблема

У меня есть небольшая плата на aarch64 с embedded Linux, работающая под управлением ядра 5.15, и машина под управлением Windows 11. У меня нет возможности устанавливать samba нативно на этом устройстве. Однако у меня есть движок Docker и возможность загружать и запускать контейнеры.

Я хочу открыть каталог samba с Linux-машины для моей локально подключенной машины с Windows 11.

Я нашел образ контейнера на Docker Hub: https://hub.docker.com/r/crazymax/samba.

Согласно документации, я настроил файл конфигурации следующим образом:

cat config.yml
auth:
  - user: foo
    group: foo
    uid: 1000
    gid: 1000
    password: bar

global:
  - "force user = foo"
  - "force group = foo"

sambashare:
  - name: foo
    path: /samba/foo
    browsable: yes
    readonly: no
    guestok: no
    validusers: foo
    writelist: foo
    veto: no
    hidefiles: /_*/
    recycle: yes

Я убедился, что необходимые порты открыты, и запустил контейнер с помощью следующих команд:

iptables -A INPUT -m state --state NEW -p udp --dport 137 -j ACCEPT
iptables -A INPUT -m state --state NEW -p udp --dport 138 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 445 -j ACCEPT
docker run -d --network host --privileged -v "/data/data:/data" --name samba crazymax/samba

Логи Docker выглядят следующим образом:

docker logs -f samba
[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 01-config.sh: executing...
Setting timezone to UTC
Initializing files and folders
Setting global configuration
Creating user foo/foo (1000:1000)
Add global option: force user = foo
Add global option: force group = foo
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed by GnuTLS (e.g. NTLM as a compatibility fallback)

WARNING: The 'netbios name' is too long (max. 15 chars).

# Global parameters
[global]
Server role: ROLE_STANDALONE

        disable netbios = Yes
        disable spoolss = Yes
        dns proxy = No
        local master = No
        map to guest = Bad User
        pam password change = Yes
        printcap name = /dev/null
        security = USER
        server role = standalone server
        server services = s3fs, rpc, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate
        server string = Docker Samba Server
        smb1 unix extensions = No
        smb ports = 445
        usershare allow guests = Yes
        winbind scan trusted domains = Yes
        fruit:time machine = yes
        fruit:delete_empty_adfiles = yes
        fruit:wipe_intentionally_left_blank_rfork = yes
        fruit:veto_appledouble = no
        fruit:posix_rename = yes
        fruit:model = MacSamba
        fruit:metadata = stream
        idmap config * : backend = tdb
        create mask = 0664
        directory mask = 0775
        force create mode = 0664
        force directory mode = 0775
        force group = foo
        force user = foo
        hosts allow = 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
        hosts deny = 0.0.0.0/0
        printing = bsd
        strict locking = No
        vfs objects = fruit streams_xattr
        wide links = Yes
[cont-init.d] 01-config.sh: exited 0.
[cont-init.d] 02-svc-smbd.sh: executing...
[cont-init.d] 02-svc-smbd.sh: exited 0.
[cont-init.d] 03-svc-wsdd2.sh: executing...
[cont-init.d] 03-svc-wsdd2.sh: exited 0.
[cont-init.d] ~-socklog: executing...
[cont-init.d] ~-socklog: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.
smbd version 4.19.6 started.
Copyright Andrew Tridgell and the Samba Team 1992-2023
Denied connection from 172.1.17.3 (172.1.17.3)
Denied connection from 172.1.17.3 (172.1.17.3)
Denied connection from 172.1.17.3 (172.1.17.3)
Denied connection from 172.1.17.3 (172.1.17.3)

Затем я установил Ubuntu на Windows 11 WSL. Я убедился, что установил необходимые пакеты cifs/samba и убедился, что могу успешно пинговать Linux-машину (расположенную по адресу 172.1.17.1).

Ошибка возникает, когда я пытаюсь смонтировать общий ресурс samba с Linux из Windows WSL. Я вижу в логах Docker, что он видит входящее соединение, но ‘отказывает’ в нем (обратите внимание на это сообщение выше: Denied connection from 172.1.17.3).

Я не могу понять, как правильно смонтировать, или почему соединение отклонено. Ниже приведены некоторые команды, которые я пробовал. Что я могу сделать, чтобы это монтирование работало?

   sudo mount -t cifs -o rw,vers=3.0 //172.1.17.1/sambashare /media/share
   sudo mount -t cifs -o rw,vers=1.0 //172.1.17.1/sambashare /media/share
   sudo mount -t cifs //172.1.17.1/sambashare /media/share
   sudo mount -t cifs guest //172.1.17.1/sambashare /media/share
   sudo mount.cifs --options guest //172.1.17.1/sambashare /media/share/
   sudo mount.cifs --options user=foo,pass=foo //172.1.17.1/sambashare /media/share/
   sudo mount.cifs --options vers=1.0,user=foo,pass=foo //172.1.17.1/sambashare /media/share/

Это монтирование также будет неудачным, если я попытаюсь использовать саму Windows для монтирования диска:

введите описание изображения здесь

Ваши логи говорят:

        hosts allow = 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
Denied connection from 172.1.17.3 (172.1.17.3)

То есть, Docker-контейнер предварительно настраивает Samba так, чтобы разрешать подключения только от ‘приватных’ IP-адресов, и адрес вашего клиента 172.1.17.3 не находится в ни одном из этих диапазонов.

На самом деле это публичный адрес, принадлежащий AT&T и назначенный кому-то в Техасе, США, так что, если вы не этот человек, вам не следует использовать такие адреса для вашей локальной сети. (Если вы являетесь этим человеком, вы можете изменить опцию hosts allow = в smb.conf.)

Для справки, диапазон 172.16.0.0/12 начинается с 172.16.0.0 и заканчивается на 172.31.255.255.

Ответ или решение

Для решения проблемы с подключением к Samba-серверу из Windows 11, вам необходимо изменить конфигурацию вашего Docker-контейнера Samba, чтобы он мог принимать подключения от клиента с IP-адресом 172.1.17.3. Ошибка "Denied connection" в логах Samba указывает на то, что адрес клиента не попадает в список разрешённых адресов.

  1. Измените настройку hosts allow:

    В вашем конфигурационном файле config.yml, который вы передаёте в контейнер, вам нужно добавить IP-адрес клиента (или изменить диапазон IP-адресов, чтобы он его включал):

    global:
     - "force user = foo"
     - "force group = foo"
     - "hosts allow = 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 172.1.17.3"

    Либо вы можете добавить разрешение для целого диапазона, если это необходимо:

    global:
     - "hosts allow = 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 172.1.17.0/24"

    Имейте в виду, что указанная вами сеть (172.1.17.0/24) может представлять собой область, используемую вашим провайдером. Возможность работы с такими адресами в частных сетях должна быть проверена.

  2. Перезапустите контейнер:

    После внесения изменений вам нужно перезапустить контейнер Samba, чтобы изменения вступили в силу:

    docker restart samba
  3. Проверьте, может ли клиент подключиться:

    После перезапуска контейнера попробуйте снова подключиться к Samba-шару с Windows 11 или WSL (Windows Subsystem for Linux). Используйте команду mount или соответствующие команды из Windows для подключения.

  4. Дополнительные рекомендации:

    • Убедитесь, что ваш клиент действительно имеет доступ к сети и что на нём нет блокировок (например, брандмауэра Windows), которые могут помешать подключению.
    • Проверьте, что заданные учетные данные (пользователь и пароль) совпадают с теми, которые были указаны в конфигурационном файле для Samba.
    • Если проблема не решалась добавлением IP-адреса, проверьте наличие других ограничений, которые могли бы быть установлены в конфигурации Samba.

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

Оцените материал
Добавить комментарий

Капча загружается...