通过 Ubuntu/CIFS 访问 Windows 10 共享时连接被拒绝

Mtl*_*Dev 5 networking linux network-shares smb windows-10

目标:通过 VPN 从 Linux 访问 Windows 10 文件共享。

在这种情况下:“服务器”是一台简单的 Windows 10 计算机,“客户端”是 Ubuntu 18。

我有一个 OpenVPN 隧道设置,连接似乎良好,可以连接、ping 服务器,portscan 提供正确的结果,并且我可以手动建立到端口 135 的 telnet 连接。

我正在尝试使用 CIFS 将 Linux 上的文件夹安装到 Windows 共享,我之前已经做过很多次了 - 但不可否认的是,不是在这台特定的 Windows 机器上。

我正在有效地使用:mount -t cifs //server/share /mnt/share但结果始终是:

安装:/mnt/share:安装(2)系统调用失败:连接被拒绝。

dmesg/syslog 显示:

CIFS VFS:连接到套接字时出错。正在中止操作。
CIFS VFS:cifs_mount 失败,返回代码 = -111

我已经尝试了几乎所有我能想到的 CIFS 标志,包括所有安全选项。我当前使用的实际命令是:
sudo mount -v -t cifs -o vers=3.1.1,username=myuser,pass=mypass,servern=WINDESKTOP,sec=ntlmssp //10.8.0.1/share /mnt/share

Windows 防火墙已关闭,共享和文件夹对我尝试使用的用户帐户以及 、 具有完全guest权限anonymous login

我在服务器上安装了一个 FTP 服务器,只是为了三次检查连接性,工作发现。

为什么 CIFS 无法连接?Windows 服务器上有什么方法可以准确地查看它对连接做了什么吗?和/或是否有办法在 Ubuntu 上从 CIFS 获得更好的调试输出?

编辑:
端口nmap -Pn <host>扫描显示以下开放端口:

港口国服务
135/tcp 打开 msrpc
554/tcp 打开 rtsp
2869/tcp 打开 icslap
10243/tcp 打开未知

更新/解决方案:

找到了问题和解决方法。以下来自 @grawity 的答案提醒服务器未在端口 445 上侦听。该问题与 OpenVPN 或 linux/CIFS 无关

  1. 请注意,smb 服务器服务未侦听端口 445,这意味着ms_server组件无法运行。
  2. ms_server是 SMB 服务器服务,可通过在设备网络设置中切换以下复选框来启用/禁用此服务:File and Printer Sharing for Microsoft Networks.
  3. 在本例中,该复选框已被选中。取消选中它并再次选中它,问题得到解决,服务器侦听端口 445,文件共享工作正常。但只是暂时的,直到下次重新启动。
  4. 整个问题似乎是 Windows 10 的一个已知问题,由最近的 Windows 更新引起
  5. 我无法找到一个干净的解决方案,或者针对实际问题的真正补丁。
  6. 一种短期解决方法是创建一个小脚本,可以有效地“取消选中和选中该框”,并在用户登录时运行。

解决此问题的 powershell 命令是:
Disable-NetAdapterBinding -Name "MyVPN" -ComponentID ms_server
Enable-NetAdapterBinding -Name "MyVPN" -ComponentID ms_server

use*_*686 3

\n

我可以手动建立到端口 135 的 telnet 连接。

\n
\n\n

这不是正确的端口(即 RPC-EPMAP 端口)。SMB 在 TCP 端口\xc2\xa0 445上运行。

\n\n

(您可能还会看到端口 139 与旧的Win2000 之前的客户端兼容,这些客户端仅支持 SMB-over-NetBIOS。这些客户端还需要 \xc2\xa0UDP\xc2\xa0137\xe2\x80\x93138 上的 NetBIOS 数据报服务。)

\n\n
\n

安装:/mnt/share:mount(2) 系统调用失败:连接被拒绝
\n CIFS VFS:连接到套接字时出错。正在中止操作。
\n CIFS VFS:cifs_mount 失败,返回代码 = -111

\n
\n\n

“连接被拒绝”意味着客户端收到了一个 TCP RST 以响应其握手尝试,这通常意味着服务器没有侦听该 TCP 端口,或者有防火墙欺骗 RST 以阻止该连接联系。

\n\n

这通常不是协议版本或安全选项的问题,这些选项仅在建立 TCP 连接后进行协商。

\n\n
\n

Windows 防火墙已关闭

\n
\n\n

为什么?

\n\n

Windows 防火墙是可配置的:如果您想允许某个协议通过它,您可以创建一条规则来允许该协议。(或者实际上只是在允许 SMB 或 ICMP 时启用预定义规则。)

\n\n
\n

Windows 服务器上有什么方法可以准确地查看它对连接做了什么吗?和/或是否有办法在 Ubuntu 上从 CIFS 获得更好的调试输出?

\n
\n\n

安装Wireshark等抓包工具;tun0在OpenVPN TAP 适配器上启动捕获;看看 TCP RST 生成之前发生了什么。

\n\n

注意双方是否看到相同的数据包,例如,如果客户端确实收到了 TCP\xc2\xa0RST,那么服务器是否表明它已发送了一个?

\n