因安全原因,win10的1809版本之后默认关闭了SMB1.0/CIFS文件共享支持,导致linux系统使用samba软件开启的共享在win10的【网络】中不能被发现。网上大多数的解决办法是启用win10的SMB1.0/CIFS文件共享支持,这个方法只对支持SMB1协议的共享端有效,如共享端强制使用SMB1之上协议,在【网络】中还是发现不了共享主机。经过一番搜索,终于找到了wsdd这个方案。无需设置win10即可发现共享主机

解决步骤

环境依赖

需要python3运行环境,openwrt/lede系统直接翻到文章最后。

克隆项目

git clone https://github.com/christgau/wsdd.git

复制wsdd可执行文件

sudo cp wsdd/src/wsdd.py /usr/bin/wsdd

复制systemd文件

这一步为了实现开机启动,现在ubuntu、archlinux、debian等发行版基本使用systemd基础组件
sudo cp wsdd/etc/systemd/wsdd.service /lib/systemd/system

启动

  • 启动:sudo systemctl start wsdd
  • 查看状态:sudo systemctl status wsdd
  • 如果运行失败,并看到类似这样的log,说明当前系统不存在wsdd.service配置的用户名和组

    wsdd.service: Failed to determine user credentials: No such process
  • 解决办法是修改wsdd.service文件sudo vim /lib/systemd/system/wsdd.service

  • 注释掉USER=GROUP=两行。或者替换为系统存在的用户
  • 如果启动成功后在win10网络中还是没有出现共享的samba主机,则需要检测是否是防火墙屏蔽了3702、5357等端口

    Both incoming and outgoing multicast traffic on port 3702 must be allowed. For IPv4, the multicast address is 239.255.255.250, for IPv6 the link local SSDP multicast address (fe02::c) is used.
    Incoming TCP traffic (and related outgoing traffic) on port 5357 must be allowed.

贴一下配置文件

[Unit]
Description=Web Services Dynamic Discovery host daemon
; Start after the network has been configured
After=network-online.target
Wants=network-online.target
; It makes sense to have Samba running when wsdd starts, but is not required
;Wants=smb.service

[Service]
Type=simple
ExecStart=/usr/bin/wsdd --shortlog
; Replace those with an unprivledged user/group that matches your environment,
; like nobody/nogroup or daemon:daemon or a dedicated user for wsdd
User=nobody
Group=nobody

[Install]
WantedBy=multi-user.target

开机启动

sudo systemctl enable wsdd

注意

对于openwrt/lede路由系统,则有C语言的实现版wsdd2

openwrt/lede下的解决办法

openwrt下可以直接安装wsdd2

opkg install wsdd2

安装完成之后即可使用。

引用资料

https://ubuntuforums.org/showthread.php?t=2409183
https://github.com/christgau/wsdd