我最近使用 Ubuntu Server 和 Samba 构建了一台小型服务器,用作文件服务器(还有其他用途),以便我的整个家庭都可以通过网络从 Windows 计算机访问某些文件。但是,我希望更进一步,让共享可以在家外通过互联网访问。我该怎么做呢?我对 Windows 网络共享系统的工作原理知之甚少,所以我不知道从哪里开始。
答案1
使用 Samba,您必须公开TCP 端口 445连接到外部 – 通常这涉及在路由器中配置“端口转发”。此外,您必须确保您的外部 IP 地址可从外部 ping 通。
此后,您将能够通过输入来访问共享\\youraddress
在探索者地址栏中或在开始运行。 (这里你的地址是您的服务器的 DNS 名称(如果有)或您的外部 IP 地址(如果没有)。
然而,如果你想直接通过互联网进行此操作,需要注意以下几点:
Windows 文件共享使用的旧版本 SMB(CIFS)协议不提供数据加密(因此任何拥有数据包嗅探器的人都可以监视您的文件传输),并且其身份验证也不是特别强。
SMBv3 是第一个支持加密的版本。您可以在 smb.conf 中启用它
smb encrypt =
,但这需要 Windows 8.1 或更高版本:smb min protocol = SMB3_02 smb encrypt = required
Windows Vista/7 使用 SMBv2.x,不支持加密。
Windows SMB 服务一直是非常过去经常被感染。即使您没有运行 Windows,也无法阻止您的 SMB 服务器成为攻击目标。
幸运的是,大多数漏洞都是针对特定实现的,例如 Windows 的 RCE 不会影响 Samba,反之亦然,但它是但这仍是一个潜在的风险。
这也意味着 SMB 端口(当前的 445 和旧的 139)通常在 ISP 层面进行阻止这样入站连接甚至无法到达您的路由器。
由于大多数 SMB 客户端不支持连接到备用端口并且需要 445/tcp,这会严重限制您从外部访问服务器的能力。
最后,请注意,Windows 计算机默认会记住整个本地会话的登录凭据。除非您以“访客”身份连接到 Samba,否则您必须特别注意公共计算机:始终使用
net use \\address
前在 Explorer 中打开共享,然后net use \\address /del
断开连接。(如果是您自己的个人电脑,则不需要这样做。)
简而言之,真的不建议直接通过 Internet 运行 SMB;您只应对托管低风险信息的 Samba 服务器执行此操作,而不要对 Windows 服务器执行此操作。
在所有其他情况下,服务器只能通过 VPN 访问(企业/网格/自托管,而不是商业 VPN)。例如,在笔记本电脑上安装 WireGuard 或 Tailscale 确实不需要做太多工作。
对于远程访问,您应该强烈考虑使用安全FTP可以使用 OpenSSH 服务器托管,该服务器通常被认为具有足够的弹性,可以在 Internet 上使用。另一种选择是 WebDAV(通过 HTTPS 运行),例如,它与 NextCloud 捆绑在一起。
答案2
如果您的家人可以使用 WinSCP,那么:
- 安装并设置 SSH
- 在您的服务器上为您的家庭成员提供本地帐户
- 将您的文件存储符号链接到这些目录。例如,如果您通过 Samba 公开
/srv/samba_files
,则需要ln -s /home/{user}/files /srv/samba_files
为每个帐户执行或类似操作。如果您必须为许多帐户执行此操作,您可以编写一个脚本来执行此操作。 - 在你家的电脑上安装 WinSCP
您将拥有一种非常安全且使用起来不太困难的文件传输方法。
但是,如果您真的想要将“网络驱动器”与 Windows 集成,我会了解 OpenVPN,然后设置到家庭网络的桥接隧道。我已经成功地让 Windows 文件共享通过这样的隧道工作。
您还可以使用 PoPToP (pptpd) 允许 Windows 系统通过 PPTP vpn 重新连接您的 Ubuntu 机器。(IPSec/L2TP 隧道可以提供更好的安全性,但设置起来比较困难)。
答案3
这取决于您要提供什么类型的文件。如果这些是文档,或者只是需要远程访问的文件,只需在您的 Ubuntu 服务器上运行 FTP 服务器即可。确保您使用良好的密码对其进行妥善保护,并且只访问文件目录,而不是根目录。
但是,如果您打算流式传输媒体文件(歌曲、电影),则需要运行流媒体服务器。有很多解决方案(这是一个)。
最后,您可以始终使用现有的“云”驱动器解决方案,如 Dropbox 或 SkyDrive 或 Amazon Cloud Player - 只需将您的文件与其中一种服务同步即可保证互联网访问(而且速度很快)。