如何在非标准端口上挂载 Samba 共享?

如何在非标准端口上挂载 Samba 共享?

我的网络上的防火墙丢弃了 TCP 端口 139 和 445 上的所有数据包。因此,所有 samba 共享都无法在 LAN 之外工作。

我尝试让 samba 守护进程监听非标准端口。此方法在 Linux 上效果很好,因为和smbclient都有smbmount设置服务器端口的选项。但在 Windows 上我找不到类似的选项。

Windows 是否支持在非标准端口上挂载 smb 共享?第三方软件也可以接受。


编辑:

\\hostname:port\share在 Windows 资源管理器中不起作用。奇怪的是,我可以看到服务器上已建立连接。但 Windows 一直告诉我无法访问服务器。即使在具有标准端口 445 的 LAN 中也不起作用,在这种情况下,没有端口号的路径将通过。

答案1

这是可能的!这几年过得不错,但结合我找到的环回接口教程部分在@Mike 的 [..link-only] 答案(多主机版本)中,我创建了一个可以为您执行此操作的脚本。

你可以使用这个在管理终端运行后Install-Module -Name LoopbackAdapter -MinimumVersion 1.2.0.0(不要忘记对脚本进行点源,以便可以调用它)。

Create-Host -Name bob -Ip 10.254.0.1 -Dest ipOfHostname -Port port

重新启动后,您将可以访问\\bob(假 IP 10.254.0.1),该 IP 附加到您问题中的“主机名:端口”。
这将在启动过程中持续存在,并且如果源服务器启动或关闭,您无需重新运行它;拆卸非常简单Retire-Host -Name bob

就这么简单,一个命令,编程,没有 GUI/Windows 设置对话框;但请随意手动按照下面的步骤操作。


解释:

使用netsh portproxy将虚假 IP 与您的 SMB 服务器链接起来,这将使非标准端口在 Explorer 上可访问。

#it's important IP's are used here, not hostnames
netsh `
    interface portproxy `
    add       v4tov4 `
    listenaddress=<#fakeIP#> `
    listenport=445 `
    connectaddress=<#serverIP#> `
    connectport=<#serverPort#>

可选择将 IP 添加到您的%windir%\System32\drivers\etc\hosts文件中,这样您就不需要记住这个 IP(例如与 交互\\bob而不是\\10.254.0.1)。

使用DevCon创建一个环回网络适配器,这个“网络”将托管IP。

$interface = New-LoopbackAdapter -Name <#NAME#>

禁用会破坏各种事物的冲突/未使用的服务。

$interface `
| Disable-NetAdapterBinding `
    -ComponentID ms_msclient,ms_pacer,ms_server,ms_lltdio,ms_rspndr

$interface `
| Set-DnsClient `
    -RegisterThisConnectionsAddress $False `
    -PassThru `
| Set-NetIPInterface `
    -InterfaceMetric '254' `
    -WeakHostSend    Enabled `
    -WeakHostReceive Enabled `
    -Dhcp Disabled

设置您的机器在此“网络”上可访问的 IP。

$interface `
| New-NetIPAddress `
    -IPAddress     <#fakeIP#> `
    -PrefixLength  32 `
    -AddressFamily IPv4

完成!重启后,转发将连接起来,只要您的电脑可以访问远程端口,您就可以访问它。除非您手动将其拆除,否则设置不会消失。


值得注意的是,我只转发到 445(实际上是从 445 使用ssh -L隧道传输到我的电脑无法直接看到的网络上的机器),但如果需要的话,只需更改/netsh portproxy添加 139 等效项即可。

要进行故障排除,您可以检查 Windows 是否正在尝试使用

netsh interface portproxy show v4tov4

是否成功监听了环回设备

netstat -an | sls ':445'

并且如果你的远程机器的服务器正在接受连接

Test-NetConnection -ComputerName <#serverIP#> -Port <#serverPort#>

最终,所有事情都尘埃落定(也许是一些凭证问题)

Test-NetConnection -ComputerName <#fakeIP#> -Port 445

答案2

不幸的是,这是不可能的,因为 Windows 仅支持端口 445 和 139

您可能能够使用 ssh 隧道。以下是使用 Windows 和 Linux 的参考:https://www.ocf.berkeley.edu/~xuanluo/sshproxywin.html

答案3

对于那些仍在寻找在非标准端口上安装 SMB 资源的方法的人来说,这里是一篇关于如何做到这一点的很棒的文章。我个人设置stunnel使用 SSL 封装 SMB 流量,因为我通过互联网远程访问我的 SMB 共享。效果非常好。

答案4

如果第三方工具没问题,并且你只需要访问 SMB 共享,而不需要真正将其安装到驱动器号上,则该工具猫头鹰档案完成此工作。在这里,您可以输入用于访问 SMB 共享的其他端口号。

我开始在通过 SSH 隧道传输 SMB 时使用它,因此不需要设置环回适配器。

该工具可通过 MS 商店获取,并且该功能在该工具的免费版本中可用。

相关内容