Using WS-Discovery to enable Windows 10 to browse SMB shares in my home network of Linux computers
June 16, 2020 17 Comments
I have not used Windows 10 for more than two years now (see ‘Bye bye Windows 10, and good riddance‘ regarding my failed attempts to upgrade Windows 10 Version 1607 to 1703 and 1709). Nevertheless I am aware that, since Version 1709, Windows 10 no longer has SMBv1 and Computer Browser service installed by default. Computer Browser service used NetBIOS and SMBv1 to provide what Microsoft named ‘My Network Places‘ or ‘Network Neighborhood’. Thus Microsoft has dropped the concepts of network ‘workgroups’, ‘master browsers’, NetBIOS, NetBIOS broadcasts, WINS and so on. SMB has not been dropped, though; Versions 2 and 3 of the SMB protocol are now used, albeit using a different mechanism for device discovery.
Although they perform different jobs, Microsoft bundled the Computer Browser service software with the SMBv1 software. Microsoft could have provided them separately, but it made some sense to bundle them together in the early days of Windows networking. Thus, as SMBv1 is not installed by default in Windows 10 Version 1709 and later versions, neither is Computer Browser service. To put it another way, if you install SMBv1 in Windows 10 you automatically install Computer Browser service as well. None of that interested me since I stopped using Windows 10 after Version 1607. Since then my home network has comprised a server, desktop and laptops running various Linux distributions with Samba and using broadcast NetBIOS for name resolution. Of course I know that NetBIOS — especially broadcast NetBIOS for name resolution — is ancient networking technology, but it works well for my home networking needs. All my machines can browse each other’s SMB shares and create/copy/move/delete remote files and folders. The File Manager + app on my phone running Android 9 can also browse SMB shares on the Linux machines and create/copy/move/delete remote files and folders.
Two of my blog posts from 2016 and 2017 explain how I set up my home network for file sharing. One of the machines in the network had Windows 10 1607 installed, but that was replaced with Lubuntu in 2018.
- A correct method of configuring Samba for browsing SMB shares in a home network
- Prevent Linux firewalls interfering with Samba commands in a home network that uses broadcast NetBIOS name resolution
SMBv1 is an inherently insecure protocol, so, after I dropped Windows, I reconfigured Samba on my Linux machines to use only SMBv3, which works fine. Subsequently I found that Android 9 on my Samsung Galaxy Note 8 phone apparently does not support SMBv3, only SMBv1 and SMBv2, so I reconfigured Samba on my Linux machines to allow SMBv2 as well as SMBv3. In other words, the Linux machines use SMBv3 with each other but SMBv2 with the phone (see my comments in the Comments section of my 2016 post ‘A correct method of configuring Samba for browsing SMB shares in a home network‘).
Anyway, I happen to have an evaluation copy of Windows 10 Enterprise Version 1709 installed in a VirtualBox VM (virtual machine) on one of my Linux laptops and, purely to satisfy my curiosity, I decided to try to get Windows 10 Version 1709 to browse and access SMB shares on the Linux machines in my home network, and vice versa, without having to dispense with broadcast NetBIOS name resolution for the Linux machines and without having to install SMBv1 (and Computer Browser service) in Windows 10.
When I first booted Windows 10 Enterprise 1709, SMB shares on my Linux machines were not displayed in File Explorer, and Windows 10 could not find them if I entered the UNC (Universal Naming Convention) address ‘\\hostname\foldername
‘ or ‘\\IPaddress\foldername
‘ (e.g. ‘\\AKHANATEN\anne
‘ or ‘\\192.168.1.70\anne
‘) in File Explorer’s address bar. My Web searches indicated that many people cannot see SMB shares in File Explorer either but can access a share by entering the UNC address in the File Explorer address bar. Apparently the advice from Microsoft these days is to use ‘Map a Network Drive…’ in File Explorer. Therefore, given that I wanted to be able to browse SMB shares in ‘File Explorer’ > ‘Network’, I clearly had some work to do. My goal for Windows 10 was twofold: to be able to view my remote SMB shares in Windows 10 File Explorer automatically and to be able to access (copy/move/delete/open) my remote SMB shares in Windows 10 File Explorer. Of course I also wanted to be able to browse and access SMB shares on the Windows 10 machine from the Linux machines.
Now, Windows 10 comes with Web Services Dynamic Discovery (WS-Discovery) installed. This enables SMB hosts running WS-Discovery software to be found by clients running WS-Discovery software. I believe Version 20.04 of the KDE Applications package kio-extras
will support SMB host discovery using WS-Discovery, but that version is not available in the Stable Branch of Gentoo Linux installed on my main laptop, nor in Lubuntu 18.04 which is installed on my family’s desktop machine. So I thought I would have a look at what is currently available for those two distributions. I was particularly interested to see if I could find an implementation of WS-Discovery for Linux that would run in parallel with broadcast NetBIOS name resolution currently installed on the Linux machines in my home network, as broadcast NetBIOS name resolution works fine with SMBv2 and SMBv3 for Linux and Android devices in a home network (my Samsung Galaxy Note 8 phone can browse the SMB shares on any of the Linux machines in my home network).
Thanks are due to Steffen Christgau for creating a daemon that can be used in Linux installations to enable Windows 10 to discover SMB shares on Linux machines via WS-Discovery: wsdd – A Web Service Discovery host daemon. The README file for wsdd
states:
wsdd implements a Web Service Discovery host daemon. This enables (Samba) hosts, like your local NAS device, to be found by Web Service Discovery Clients like Windows.
It also implements the client side of the discovery protocol which allows to search for Windows machines and other devices implementing WSD. This mode of operation is called discovery mode.
wsdd
only depends on Python 3 and can be installed in many Linux distributions. If no wsdd
package exists for a specific distribution, it can simply be run from the command line or from a Bash script. The following blog post by Ralph Mönchmeyer explains how to use wsdd
(although not a complete solution for my specific case): Samba 4, shares, wsdd and Windows 10 – how to list Linux Samba servers in the Win 10 Explorer.
Below I list the steps I took to enable me to browse SMB shares in an evaluation copy of Windows 10 Enterprise Version 1709 running in a VM on one of my Linux laptops. I don’t have access to the latest version of Windows 10 (2004), but hopefully some or most of the following will still be applicable.
Step 1. Disable firewalls temporarily
I disabled the firewall in the Linux machine and in the Windows 10 machine so that the firewalls could be ruled out if there were any problems getting share browsing to work. Once all the steps were completed I re-enabled the firewalls.
Step 2. Specify the workgroup in Windows 10
Select ‘Control Panel’ > ‘System and Security’ > ‘System’ and, under ‘Computer name, domain, and workgroup settings’, if necessary click ‘Change settings’ to rename the workgroup. The default workgroup name was ‘WORKGROUP
‘ so I renamed it to ‘HOME
‘, my current network’s workgroup.
Step 3. Ensure the correct SMB protocol in Windows 10
SMBv1 (and Computer Browser service) are disabled by default in Windows 10 Version 1709 and later (see ‘SMBv1 is not installed by default in Windows 10 version 1709, Windows Server version 1709 and later versions‘) but I nevertheless made sure that SMBv1 is disabled and that SMBv2 and SMBv3 are installed (see ‘How to detect, enable and disable SMBv1, SMBv2, and SMBv3 in Windows‘). I did the following in PowerShell (Run as administrator):
PS C:\WINDOWS\system32> Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
PS C:\WINDOWS\system32> Set-SmbServerConfiguration -EnableSMB2Protocol $true
Step 4. Disable NetBIOS-over-TCP/IP in Windows 10
Select ‘Settings’ > ‘Network & Internet’ > ‘Ethernet’ > ‘Change adapter options’.
Right-click ‘Ethernet’, click ‘Properties’, select ‘Internet Protocol Version 4 (TCP/IPv4)’ and click ‘Properties’. Click ‘Advanced’. Click on the WINS tab (even though my network does not use WINS), select ‘Disable NetBIOS over TCP/IP’ and click ‘OK’, ‘OK’ and ‘Close’.
Step 5. Configure ‘Function Discovery’ in Windows 10
See the article ‘SMBv1 is not installed by default in Windows 10 version 1709, Windows Server version 1709 and later versions | Microsoft Docs‘, in particular the following:
Explorer Network Browsing
The Computer Browser service relies on the SMBv1 protocol to populate the Windows Explorer Network node (also known as “Network Neighborhood”). This legacy protocol is long deprecated, doesn’t route, and has limited security. Because the service cannot function without SMBv1, it is removed at the same time.
However, if you still have to use the Explorer Network in home and small business workgroup environments to locate Windows-based computers, you can follow these steps on your Windows-based computers that no longer use SMBv1:
- Start the “Function Discovery Provider Host” and “Function Discovery Resource Publication” services, and then set them to Automatic (Delayed Start).
- When you open Explorer Network, enable network discovery when you are prompted.
All Windows devices within that subnet that have these settings will now appear in Network for browsing. This uses the WS-DISCOVERY protocol. Contact your other vendors and manufacturers if their devices still don’t appear in this browse list after the Windows devices appear. It is possible they have this protocol disabled or that they support only SMBv1.
Press Windows Key+R, enter ‘services.msc
‘ (without the quotes) and click ‘OK’.
Change the ‘Startup type’ of ‘Functions Discovery Provider Host’ to ‘Automatic (Delayed Start)’.
Change the ‘Startup type’ of ‘Function Discovery Resource Publication’ to ‘Automatic (Delayed Start)’.
Step 6. Configure the sharing options in Windows 10
Select ‘Settings’ > ‘Network & Internet’ > ‘Sharing options’ and configure the options as follows:
Private (current profile)
- Network discovery
- ‘Turn on network discovery’ is selected.
- ‘Turn on automatic setup of network connected devices.’ is ticked.
- File and printer sharing
- ‘Turn on file and printer sharing’ is selected.
- HomeGroup connections
- ‘Allow Windows to manage homegroup connections (recommended)’ is selected.
Guest or Public
- Network discovery
- ‘Turn on network discovery’ is selected.
- File and printer sharing
- ‘Turn on file and printer sharing’ is selected.
All Networks
- Public folder sharing
- ‘Turn on sharing so anyone with network access can read and write files in the Public folders’ is selected.
- Media streaming
- Nothing is selected.
- File sharing connections
- ‘Use 128-bit encryption to help protect file sharing connections (recommended)’ is selected.
- Password protected sharing
- ‘Turn off password protected sharing’ is selected.
Step 7. Install WS-Discovery daemon on the Linux machines
Gentoo Linux
In Gentoo I simply installed the package net-misc/wsdd
from the guru
overlay:
root # eix -I wsdd
[I] net-misc/wsdd [1]
Available versions: (~)0.5 (~)0.6 {samba PYTHON_TARGETS="python3_6 python3_7 python3_8"}
Installed versions: 0.6(00:39:07 07/06/20)(-samba PYTHON_TARGETS="python3_7 -python3_6 -python3_8")
Homepage: https://github.com/christgau/wsdd
Description: A Web Service Discovery host daemon.
[1] "guru" /var/lib/layman/guru
and, as I use OpenRC in Gentoo, I configured /etc/conf.d/wsdd.conf
as follows:
# /etc/conf.d/wsdd # Override the default user/group under which wsdd runs. # Must follow the user[:group] notation. #WSDD_USER="daemon:daemon" # Specify alternative log file location. #WSDD_LOG_FILE="/var/log/wsdd.log" # Disable automatic detection of the workgroup from samba configuration. #WSDD_WORKGROUP="MYGROUP" WSDD_WORKGROUP="HOME" # Additional options for the daemon, e.g. to listen on interface eth0 only. # Refer to wsdd(1) for details. #WSDD_OPTS="-i eth0" WSDD_OPTS="--shortlog --interface enp4s0f1 --interface wlp3s0 --hostname tutankhamun --discovery"
Specifying the interfaces and hostname are optional, but wsdd
seemed to work better when I specified them explicitly. You can ascertain the interfaces by using the command ‘ip address
‘ or the deprecated command ‘ifconfig
‘.
I added the service to the default
runlevel so that it is started automatically when I boot the machine, and then I started it:
root # rc-update add wsdd default
root # rc-service wsdd start
Lubuntu 18.04
In Lubuntu 18.04 (which uses systemd) wsdd
can be installed either manually or from a package:
a) Manual installation
user $ wget https://github.com/christgau/wsdd/archive/master.zip
user $ unzip master.zip
user $ sudo cp wsdd-master/src/wsdd.py /usr/bin/wsdd
user $ sudo cp wsdd-master/etc/systemd/wsdd.service /etc/systemd/system/
Edit the systemd service file /etc/systemd/system/wsdd.service
to add desired options to the ExecStart
command and to change the group from ‘nobody
‘ to ‘nogroup
‘:
... ExecStart=/usr/bin/wsdd --workgroup HOME --shortlog --interface eno1 --interface wlp2s0 --hostname thutmoseiii --discovery ... User=nobody Group=nogroup ...
You can check whether the user and group exist in your installation as follows:
user $ grep ^nobody /etc/passwd
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
user $ grep ^nobody /etc/group
user $ grep ^nogroup /etc/group
nogroup:x:65534:
Actually, I prefer to specify ‘daemon
‘ for the user and group in the wsdd.service
file (which is also what the Gentoo Linux ebuild uses and what the .deb
package uses):
... ExecStart=/usr/bin/wsdd --workgroup HOME --shortlog --interface eno1 --interface wlp2s0 --hostname thutmoseiii --discovery ... User=daemon Group=daemon ...
You can check that this user and group also exist:
user $ grep ^daemon /etc/passwd
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
user $ grep ^daemon /etc/group
daemon:x:1:
(I tried both nobody:nogroup
and daemon:daemon
, and there was no apparent difference in behaviour.)
Enable the service so that it starts automatically when the machine is booted, and also start it now:
user $ sudo systemctl enable wsdd
user $ sudo systemctl start wsdd
b) Installing from a package
Here is a link to a .deb
package for wsdd
Version 0.6.0:
https://pkg.ltec.ch/public/pool/main/w/wsdd/
The resulting installation differs slightly from the manual procedure; the package creates a configuration file /etc/wsdd.conf
and you declare the wsdd
options in that file instead:
# command line parameters for wsdd (consult man page) WSDD_PARAMS=""
The package also installs a systemd service file /lib/systemd/system/wsdd.service
containing the following:
[Unit] Description=Web Services Dynamic Discovery host daemon After=network-online.target Wants=network-online.target [Service] Type=simple EnvironmentFile=/etc/wsdd.conf ExecStart=/usr/bin/wsdd $WSDD_PARAMS User=daemon Group=daemon [Install] WantedBy=multi-user.target
The package installs the Python 3 executable wsdd
in the directory /usr/bin/
. It’s a very straightforward package.
Step 8. Configure Samba to make Windows 10 prompt for username and password
When you click on a network share in Windows 10’s File Explorer, Windows 10 uses the Windows 10 username and password to try to access the SMB share on the remote machine (see ‘Samba share does not ask for credentials from Windows Client‘). This will obviously not work unless the usernames/passwords on both machines match. To make Windows 10 prompt the user to enter the remote username and password, edit the file /etc/samba/smb.conf
on each Linux machine and comment out the line ‘map to guest = bad user
‘ (see the smb.conf
files listed in my 2016 article ‘A correct method of configuring Samba for browsing SMB shares in a home network‘).
Step 9. Enable guest access in Windows 10
If I enter a SMB share’s UNC address in File Explorer’s address bar, or if I double-click on the remote machine’s icon in File Explorer (after WS-Discovery has made the SMB share visible in File Explorer), Windows 10 displays the following error message:
Network Error
Windows cannot access \\hostname
Check the spelling of the name. Otherwise, there might be a problem with your network. To try to identify and resolve network problems, click Diagnose.
Error Code: 0x80070035
The network path was not found.
This has nothing to do with the fact that SMBv1 is disabled in Windows 10. It happens because Windows 10 1709 and onwards have guest logins disabled:
- Guest access in SMB2 disabled by default in Windows
- Windows 10 and Linux Samba Problem: ‘Windows cannot access \\hostname’
- Windows 10 1709 Cannot Access SMB2 Share Guest Access
- Policy CSP – LanmanWorkstation
To enable guest logins I edited the Windows 10 Registry and changed the following key from zero to one:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters]
“AllowInsecureGuestAuth”=dword:1
Step 10. Configure the Windows 10 firewall
Select ‘Windows Defender Security Center’ > ‘Firewall & network protection’.
Click ‘Allow an app through the firewall’.
If not already ticked, select ‘Private’ and ‘Public’ for ‘Network Discovery’ and for ‘File and Printer Sharing’.
Step 11. Configure the Linux firewall
This is where things get more complicated. According to the README for wsdd
:
Firewall Setup
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 (ff02::c) is used.
Incoming TCP traffic (and related outgoing traffic) on port 5357 must be allowed.
My laptops and desktop use UFW, and below I explain how I configured UFW to satisfy the above requirements.
Firstly, as my firewall is configured to deny incoming traffic and allow outgoing traffic by default, I enabled UFW and added the following DNS rules to UFW’s main rules (the following two commands add rules for both IPv4 and IPv6):
user $ sudo ufw allow 53/tcp
user $ sudo ufw allow 53/udp
Note that, in order for the multicast rule I use to work, xt_pkttype
must either have been built into the kernel or built as a kernel module and have been loaded:
user $ lsmod | grep pkttype
xt_pkttype 16384 2
x_tables 40960 17 ip6table_filter,xt_conntrack,iptable_filter,xt_LOG,xt_multiport,xt_tcpudp,xt_addrtype,ip6t_rt,ip6_tables,ipt_REJECT,xt_CT,xt_pkttype,iptable_raw,ip_tables,xt_limit,xt_hl,ip6t_REJECT
To load the module automatically at boot, in Gentoo Linux I added ‘xt_pkttype
‘ to the list of modules in the file /etc/conf.d/modules
, and in Lubuntu 18.04 I added ‘xt_pkttype
‘ to the list of modules in the file /etc/modules-load.d/modules.conf
.
Also note that my firewall had previously already been configured for NetBIOS and SMB by using the following commands:
user $ # Rules for SMB
user $ # IPv4:
user $ sudo ufw allow from 192.168.1.0/24 to any port 137,138 proto udp
user $ sudo ufw allow from 192.168.1.0/24 to any port 139,445 proto tcp
user $ # IPv6:
user $ # (NetBIOS is undefined for IPv6 but I believe SMB uses Port 445 in IPv6)
user $ sudo ufw allow from ff80::/10 to any port 445 proto tcp
IPv4
The end of the file /etc/ufw/before.rules
previously looked like this:
... # allow MULTICAST mDNS for service discovery (be sure the MULTICAST line above # is uncommented) -A ufw-before-input -p udp -d 224.0.0.251 --dport 5353 -j ACCEPT # allow MULTICAST UPnP for service discovery (be sure the MULTICAST line above # is uncommented) -A ufw-before-input -p udp -d 239.255.255.250 --dport 1900 -j ACCEPT # don't delete the 'COMMIT' line or these rules won't be processed COMMIT # The following is needed to enable Samba commands to # work properly for broadcast NetBIOS name resolution # # raw table rules *raw :OUTPUT ACCEPT [0:0] -F OUTPUT -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns COMMIT
I inserted seven lines as shown below:
... # allow MULTICAST mDNS for service discovery (be sure the MULTICAST line above # is uncommented) -A ufw-before-input -p udp -d 224.0.0.251 --dport 5353 -j ACCEPT # allow MULTICAST UPnP for service discovery (be sure the MULTICAST line above # is uncommented) -A ufw-before-input -p udp -d 239.255.255.250 --dport 1900 -j ACCEPT # 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 # don't delete the 'COMMIT' line or these rules won't be processed COMMIT # The following is needed to enable Samba commands to # work properly for broadcast NetBIOS name resolution # # raw table rules *raw :OUTPUT ACCEPT [0:0] -F OUTPUT -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns COMMIT
Actually the two IPv4 rules shown above for mDNS and UPnP that were already in the file /etc/ufw/before.rules
have become redundant because the first of the five new rules I added encompasses them. It does no harm to leave those two rules in the file, though.
IPv6
The end of the file /etc/ufw/before6.rules
previously looked like this:
... # allow MULTICAST mDNS for service discovery -A ufw6-before-input -p udp -d ff02::fb --dport 5353 -j ACCEPT # allow MULTICAST UPnP for service discovery -A ufw6-before-input -p udp -d ff02::f --dport 1900 -j ACCEPT # don't delete the 'COMMIT' line or these rules won't be processed COMMIT
I inserted six lines as shown below:
... # allow MULTICAST mDNS for service discovery -A ufw6-before-input -p udp -d ff02::fb --dport 5353 -j ACCEPT # allow MULTICAST UPnP for service discovery -A ufw6-before-input -p udp -d ff02::f --dport 1900 -j ACCEPT # allow MULTICAST WS-Discovery for service discovery -A ufw6-before-input -m pkttype --pkt-type multicast -j ACCEPT -A ufw6-before-input -p udp -s fe80::/10 --dport 3702 -j ACCEPT -A ufw6-before-input -p udp -s fe80::/10 --sport 3702 -j ACCEPT -A ufw6-before-input -p tcp -s fe80::/10 --dport 5357 -j ACCEPT -A ufw6-before-input -p tcp -s fe80::/10 --sport 5357 -j ACCEPT # don't delete the 'COMMIT' line or these rules won't be processed COMMIT
Actually the two IPv6 rules shown above for mDNS and UPnP that were already in the file /etc/ufw/before6.rules
have become redundant because the first of the five new rules I added encompasses them. It does no harm to leave those two rules in the file, though.
Because the Linux machines in my network still use broadcast NetBIOS for name resolution I left all the NetBIOS rules in UFW as they were, including the extra lines I previously added to /etc/ufw/before.rules
(see the raw table rule at the end of /etc/ufw/before.rules
listed above and my blog post ‘Prevent Linux firewalls interfering with Samba commands in a home network that uses broadcast NetBIOS name resolution‘).
Actually, as my laptops change firewall zones automatically (see my post ‘Firewall zones (profiles) in Linux, and how to switch them automatically if you use UFW‘), on my laptops I added the new rules to the zone for my home network specified in my NetworkManager Dispatcher hook script /etc/NetworkManager/dispatcher.d/20_ufw-zones
.
After reloading UFW, the UFW status on my machines now looks like this (I’ve excluded rules unrelated to this topic):
user $ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
137,138/udp ALLOW IN 192.168.1.0/24
139,445/tcp ALLOW IN 192.168.1.0/24
53/tcp ALLOW IN Anywhere
53/udp ALLOW IN Anywhere
445/tcp ALLOW IN ff80::/10
53/tcp (v6) ALLOW IN Anywhere (v6)
53/udp (v6) ALLOW IN Anywhere (v6)
Note that UFW does not display rules declared in /etc/ufw/{before,before6}.rules
Step 12. Re-enable the Windows 10 firewall
Select ‘Settings’ > ‘Network & Internet’ > ‘Windows Firewall’.
Step 13. Check that wsdd
is working as expected
To check that wsdd
is actually detecting other machines running WS-Discovery, you can stop the daemon running and instead launch wsdd
manually in a terminal window with verbose logging enabled.
For example, on my laptop running Gentoo Linux I did the following:
user $ sudo rc-service wsdd stop
user $ wsdd --workgroup HOME --verbose --interface enp4s0f1 --interface wlp3s0 --hostname tutankhamun --discovery
And on my family’s desktop running Lubuntu 18.04 I did the following:
user $ sudo systemctl stop wsdd
user $ wsdd --workgroup HOME --verbose --interface eno1 --interface wlp2s0 --hostname thutmoseiii --discovery
Check the output in the terminal window includes a discovered line for each machine running Windows 10 and for each Linux machine running wsdd
. For example:
...
2020-06-16 00:31:09,331:wsdd INFO(pid 17574): discovered MSWIN10PC in Workgroup:HOME on 192.168.1.111%eno1
...
2020-06-16 00:31:10,013:wsdd INFO(pid 17574): discovered MSWIN10PC in Workgroup:HOME on [fe80::fc7e:7068:8c2c:e664]%eno1
...
After pressing Ctrl+C to stop wsdd
running in the terminal, you can restart the daemon:
Gentoo Linux
user $ sudo rc-service wsdd start
Lubuntu 18.04
user $ sudo systemctl start wsdd
With wsdd
running on the Linux machines they become visible in File Explorer on Windows 10 machines connected to the network. However, the converse is not necessarily true, as explained further on.
As I had previously configured Samba on my Linux machines to use broadcast NetBIOS to resolve names, Samba on the Linux machines fails to resolve the hostnames of the Windows 10 machines because Windows 10 no longer supports NetBIOS name resolution (neither broadcast nor WINS). I confirmed this by using the smbclient
command in a terminal window:
user $ sudo smbclient //MSEDGEWIN10/TestSMBShare1 --debuglevel=10
...
added interface eno1 ip=192.168.1.111 bcast=192.168.1.255 netmask=255.255.255.0
Netbios name list:-
my_netbios_names[0]="THUTMOSEIII"
Client started (version 4.7.6-Ubuntu).
Opening cache file at /var/cache/samba/gencache.tdb
Opening cache file at /var/run/samba/gencache_notrans.tdb
sitename_fetch: No stored sitename for realm ''
internal_resolve_name: looking up MSEDGEWIN10#20 (sitename (null))
no entry for MSEDGEWIN10#20 found.
name_resolve_bcast: Attempting broadcast lookup for name MSEDGEWIN10
Connection to MSEDGEWIN10 failed (Error NT_STATUS_UNSUCCESSFUL)
However, in Gentoo Linux (Stable Branch, KDE Plasma 5.18.5, KDE Applications 19.12.3) on my main laptop I can enter ‘smb://hostname/sharename
‘ (e.g. smb://msedgewin10/Users/Public
) in the Dolphin file manager’s address bar and browse the contents of the SMB share on the Window 10 machine. I assume this is because Avahi on the Linux machine performs name resolution anyway even though the broadcast NetBIOS lookup has failed. Although Lubuntu 18.04 also has the Avahi daemon running, it does not resolve the hostname when I enter ‘smb://hostname/sharename
‘ in PCManFM’s address bar; I have to enter ‘smb://IPaddress/sharename
‘ (e.g. smb://192.168.1.64/Users/Public
) to be able to browse the contents of the Windows 10 shared folder.
Conclusion
wsdd
running on Linux machines enables Windows 10 to view networked Linux machines in File Explorer and browse SMBv2 and SMBv3 shares residing on Linux machines. It does not guarantee I will be able to view Windows 10 machines in Linux file managers automatically, though. But I can access Windows 10 machines by entering ‘smb://IPaddress/sharename
‘ in the Linux file manager’s address bar, or, depending on what has been installed in the Linux installation and how it has been configured, by entering ‘smb://hostname/sharename
‘.
To access a Linux SMB shared folder (as declared in that machine’s smb.conf file
) in Windows 10 File Explorer, either I double-click on the Linux machine’s icon in the Network view or I enter the UNC address (e.g. \\tutankhamun\Users\Public
) in the address bar. I can then access the files and sub-folders.
To browse a Windows 10 SMB shared folder and files in KDE Dolphin in Gentoo Linux current Stable Branch on my main laptop, I enter the UNC address (e.g. smb://msedgewin10/Users/Public
) or click on the location I previously bookmarked under ‘Places’ in the left pane of the Dolphin window. I can then access the files and sub-folders. To browse a Windows 10 SMB shared folder and files in LXDE PCManFM in Lubuntu 18.04, I enter the UNC address with an IP address instead of a hostname (e.g. smb://192.168.1.64/Users/Public
). I can then access the files and sub-folders. I am going to have to do some more digging to try to find out why KDE Dolphin in Gentoo Linux on my main laptop (kio-extras
installed from Gentoo ebuild kio-extras-19.12.3-r2
) can access Windows 10 by hostname but PCManFM in Lubuntu 18.04 cannot.
To enable machines running Window 10 to browse SMB shares on my other Linux machines I would need to perform the same Linux-related steps in each of those installations. My server firewall uses IPTABLES directly, rather than UFW, so the syntax of the additional firewall rules would be different.
Addendum, 16 June 2020: I suspected the problem browsing the Windows 10 SMB shares from Lubuntu 18.04 is due to PCManFM, so I installed a different file manager: SpaceFM (Version 1.0.5 for GTK2) and its associated utility udevil (Version 0.4.4). SpaceFM allows me to enter UNC addresses such as ‘smb://mswin10pc/Users/Public
‘ without any problems. So, problem solved in Lubuntu 18.04 now as well.