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

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

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

在此上下文中:“服务器”是一台简单的 Windows 10 机器,“客户端”是 Ubuntu 18。

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

我正在尝试使用 CIFS 将 Linux 上的文件夹挂载到 Windows 共享,这是我以前做过很多次的事情 - 但不可否认的是,不是针对这台特定的 Windows 机器。

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

mount:/mnt/share:mount(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 防火墙已关闭,共享和文件夹对于我尝试使用的用户帐户具有完全权限,以及guestanonymous 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

答案1

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

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

(您可能还会看到端口 139,用于与旧版本兼容Win2000 之前的客户端,仅支持 SMB-over-NetBIOS。这些客户端还需要 UDP 137–138 上的 NetBIOS 数据报服务。)

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

“连接被拒绝”意味着客户端在握手尝试响应中收到了 TCP RST,这通常意味着服务器没有监听该 TCP 端口,或者存在一个防火墙伪造 RST 以阻止连接。

这通常与协议版本或安全选项无关,因为这些只是通过协商确定的TCP 连接已建立。

Windows 防火墙已关闭

为什么?

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

在 Windows 服务器上是否有任何方法可以准确查看它对连接所做的操作?以及/或者是否有任何方法可以从 Ubuntu 上的 CIFS 获得更多调试输出?

tun0安装数据包捕获工具,例如 Wireshark;在 OpenVPN TAP 适配器上开始捕获;查看 TCP RST 生成之前立即发生的情况。

注意双方是否看到相同的数据包,例如,如果客户端实际上收到了 TCP RST,那么服务器是否显示它已经发送了一个?

相关内容