我知道这个问题已经被问过几次了,但我认为我的问题可能略有不同。也许我没有理解问题的根本原因。
我有一个 Linux Samba 共享,我想通过 SSH 隧道从 Windows 使用。当我使用 VPN 时,我可以访问 Samba 共享,并且隧道端口 139 在 Linux 上工作正常。当我从 VPN 之外的 Linux 计算机访问共享时,我只需转发端口 139,如下所示:
ssh user@remotehost -L 1139:localhost:139
然后挂载驱动器:
mount -t cifs //remotehost/shared /mnt/cifs -o username=myuser,password=mypass,ip=127.0.0.1,port=1139
对于 Windows,我尝试按照教程通过 PuTTY 创建环回适配器和隧道:http://www.nikhef.nl/~janjust/CifsOverSSH/Win8Loopback.html
这不起作用,所以我尝试按照不同的教程使用端口 139 而不是 445:https://www.simonholywell.com/post/2009/04/samba-file-share-over-ssh-tunnel/
这两个教程都不起作用,所以我想我的第一个问题是我实际上需要转发哪个端口?我需要端口 139、端口 445 还是两者兼而有之?我不知道问题可能是什么。
如果您需要任何其他信息,请告诉我,我曾尝试使用 nmap 进行故障排除,但没有任何进展。
答案1
您只需要转发端口 445。在 putty 中,本地端口应该是 loopbackIP:44445(或任何其他未使用的端口),转发目的地应该是 localhost:445 或 127.0.0.1:445。
它对我有用,请按照此链接中的步骤操作:http://how-to.cc/setup-windows-filesharing-over-ssh
请注意,所有对服务“smb”的引用都需要更改为服务“server”。
如果仍然不起作用,您可以尝试在 Windows 机器上禁用 samba v3 或尝试在 Linux 服务器上升级 samba。请参阅此链接https://it.awroblew.biz/windows-10-and-problems-accessing-smb-shares/
答案2
如何将 smb 代理到 Windows 10 客户端:
启动 hdwwiz.exe
网络适配器 -> Microsoft KM-TEST 环回适配器 -> 完成
禁用新网络接收器中除 IPv4 之外的所有内容
在 ipv4 设置中设置一个 ip,255.255.255.255 作为子网掩码并禁用 netbios
- 如果您无法决定 IP,则只需使用 192.168.2.123。
遗憾的是,无法使用 127.0.0.2 或类似的 IP。由于某些未知原因,Windows 无法连接到它。
- 如果您无法决定 IP,则只需使用 192.168.2.123。
高架窗户外壳
- 运行
sc config lanmanserver start= delayed-auto
这个很遗憾是必需的,因为微软会将其 smb 绑定到 0.0.0.0:445,从而无法自己监听该端口。
微软也不希望您在 445 以外的端口上使用 smb。 - 运行
netsh interface portproxy add v4tov4 listenaddress=192.168.2.123 listenport=445 connectaddress=192.168.2.123 connectport=44445
此命令将确保 445 在 lanmanserver 启动后立即保持绑定。从而使您可以在 44445 上生成一个监听器来监听 445 而不会出现 eaddrinuse 错误等。
- 运行
编辑
%windir%\system32\drivers\etc\hosts
并添加适当的映射,例如:
192.168.2.123 smbproxy
重启
只需使用
ssh -L 192.168.2.123:44445:internalsmbhost:445 sshuser@publicjumphost
打开资源管理器并导航至
\\smbproxy
您还可以在 hosts 文件中为此创建多个映射。
好处是,您的笔记本电脑/ PC 的多个用户可以使用不同的用户名/会话访问您的 nas,而不会让窗口打扰您,因为其他人已经在使用该资源。
随意打开 Windows 的任务创建工具在系统启动时启动它。
这是从我为 websocket 代理制作的 readme.md 中摘录的https://gitfap.de/GottZ/websocketproxy
编辑:现在是 2020 年。为此使用 wireguard。它比 ssh 可靠得多。
答案3
我对这个问题采取了不同的方法。我以前有这个问题,我遵循了本指南。但它更复杂,而且(我记得)最终吞吐量较低。如果事实并非如此,请评论。
顺便说一句,您只需要隧道化 TCP 端口 445 即可使 SAMBA Shares 正常工作。
简而言之,您可以使用 VMWare Workstation Player/Pro 或任何虚拟化软件创建虚拟机,前提是它们具有桥接网络(我只测试了这两个版本的 VMWare)。安装您选择的 Linux 服务器发行版,我选择了 Ubuntu Server。在网络配置中,配置桥接网络。在虚拟机内部,手动分配静态 IP 配置。然后创建到您的 SAMBA 服务器的 SSH 隧道(显然是通过互联网),从虚拟机中的 TCP 端口 445 指向 SAMBA 服务器上的 TCP 端口 445。隧道设置完成后,您可以从 Windows 10 计算机访问,在 Windows 资源管理器路径栏中输入:
\\<your virtualmachine static IP>\<SAMBA Share in the SAMBA server>\
现在您可以从Windows 10 / VMWare-Ubuntu-服务器系统。如果您需要更广泛的解释,您可以访问我的博客文章这里。
笔记:
- 我认为(99% 确定)对于大文件,最终的吞吐量取决于光纤连接允许的吞吐量。例如,如果您的 Windows 10 中的互联网速度为 1Gbps,SAMBA 服务器中的互联网速度为 1Gbps,对于大文件,您可以看到 130MB/s 的吞吐量。我尝试使用 300Mbps 光纤,它显示的吞吐量约为 35MB/s。对于大量小文件,情况有所不同,但这不是因为我采用的这种方法,而是我认为 SMB 协议的设计。
- VMWare Workstation Player 可免费用于非商业用途。您可以在此设置中使用它,并且不会出现与专业版相关的任何缺点。
- 如果您想在装有 Windows 的笔记本电脑上进行此设置,进出 SAMBA 服务器的 LAN,您可以使用一个特殊技巧:为 VM-Ubuntu-Server 分配与 SAMBA 服务器相同的本地 IP,这样当您在同一 LAN 中通过 SSH 隧道连接到 Samba 服务器时,或者当您直接连接到 SAMBA 服务器时,所有到 Samba 共享的快捷方式都是相同的。但是不要在 SAMBA 服务器的 LAN 内启动虚拟机!。我认为这会给你带来某种网络问题。
- 关于 SSH 隧道,您可以执行自定义
systemctl
服务,以在启动时自动化 SSH 隧道,因此您只需启动虚拟机即可使其正常工作。 - 我不确定桥接网络是否适用于无线连接。如果您想确定,请在此处发表评论,我会检查一下。
--编辑于 2023-01-13--有一个错别字--