首先,SMBv1有已知安全问题,因而微软决定禁用 SMBv1,因此导致了 NetBIOS 不能工作。
其次,采取其他方案。Web Service Discovery 就是我们想要的方案

自从升级了某个版本的 Windows 10之后,启动 smbd 的 Linux 主机一直不能自动的出现在Windows 资源管理器中。但是直接输入IP也是可以使用的,就一直没有太关心。

今天想解决这个问题,很幸运找到了正确的文章:

Samba 4, shares, wsdd and Windows 10 - how to list Linux Samba servers in the Win 10 Explorer

长话短说:Windows 一直以来依靠 NetBIOS 来发现其他机器。SMBv1有已知安全问题,因而微软决定禁用 SMBv1,因此导致了 NetBIOS 不能工作(具体逻辑请看原文)

显然,我们不应该为了网络发现启用SMBv1,而应该采取其他方案。Web Service Discovery 就是我们想要的方案。为此我们应当:

在 Windows 启用相关服务(Windows默认为启动,但仍需要检查)

启用 Function Discovery Provider Host

启用 Function Discovery Resource Publication

在 Linux 安装 WSDD 来作为 Web Service Discovery 的服务器

WSDD 是 Web Service Discovery host daemon 的简称,
Github : christgau/wsdd

以Ubuntu 20.04 为例,安装步骤如下

信任Key

1
curl -L https://pkg.ltec.ch/public/conf/ltec-ag.gpg.key | sudo apt-key add -

添加源

1
echo "deb https://pkg.ltec.ch/public/ focal main" | sudo tee /etc/apt/sources.list.d/wsdd.list

更新并安装

1
sudo apt update && sudo apt install wsdd

启动 WSDD 服务并自动启动

sudo systemctl start wsdd && sudo systemctl enable wsdd
WSDD 启动成功后,Windows 应该就能在网络中发现你的 samba 主机了。

如果你开了ufw防火墙的话,也是看不到的,我们需要打开ufw

1
2
sudo ufw app list
sudo ufw allow Samba

然后打开多播235.255.255.250的3702端口
编辑/etc/ufw/before.rules,其中192.168.1.0/24改为你的网段

1
2
3
4
5
6
7
# allow MULTICAST WS-Discovery for service discovery (be sure the MULTICAST line above
# is uncommented)
-A ufw-before-input -m pkttype --pkt-type multicast -j ACCEPT
-A ufw-before-input -p udp -s 192.168.1.0/24 --dport 3702 -j ACCEPT
-A ufw-before-input -p udp -s 192.168.1.0/24 --sport 3702 -j ACCEPT
-A ufw-before-input -p tcp -s 192.168.1.0/24 --dport 5357 -j ACCEPT
-A ufw-before-input -p tcp -s 192.168.1.0/24 --sport 5357 -j ACCEPT

修改/etc/wsdd.conf文件。
其中interface改为你的网卡

1
WSDD_PARAMS="-4 --shortlog --interface ens160 --discovery"