服务器消息块(Server Message Block,SMB)协议允许用户读取、写入和访问网络上的共享资源。由于安全风险,防火墙和 ISP 通常会阻止对 SMB 文件共享的公共连接。通过 Cloudflare Tunnel,您可以为网络外的用户提供安全且简单的 SMB 访问。
Cloudflare Zero Trust 提供了两种连接到 SMB 服务器的解决方案:
尽管 SMB 是为 Microsoft Windows 开发的,但 Samba 提供了来自类 UNIX 和 BSD 系统的 SMB 连接。可以参考此指南 ↗在 Ubuntu 机器上设置 Samba 服务器。
您可以使用 Cloudflare Tunnel 创建从您的服务器到 Cloudflare 全球网络的、安全且仅出站的连接。这需要在服务器上运行 cloudflared 守护程序。用户通过在其设备上安装 Cloudflare One 客户端并注册到您的 Zero Trust 组织来访问该服务。远程设备将能够像在您的私有网络中一样进行连接。默认情况下,在您组织中注册的所有设备都可以访问该服务,除非您构建策略来允许或阻止特定用户。
-
在 Cloudflare 仪表板中,转到 Networking(网络) > Tunnels(隧道)。
Go to Tunnels ↗ -
创建新隧道或编辑现有的
cloudflared隧道。
-
在 Cloudflare 仪表板中,转到 Networking(网络) > Routes(路由)。
Go to Routes ↗ -
选择Create route(创建路由) > Tunnel CIDR(隧道 CIDR)。选择您刚刚创建的隧道,输入服务器的私有 IP 或 CIDR 地址,并选择Create route(创建路由)。
-
(可选)设置 Zero Trust 策略以微调对您服务器的访问。
要将您的设备连接到 Cloudflare:
- 在您的设备上以流量和 DNS 模式(Traffic and DNS mode)部署 Cloudflare One Client,或生成代理端点(proxy endpoint)并部署 PAC 文件。
- 创建设备注册规则以确定哪些设备可以注册到您的 Zero Trust 组织。
默认情况下,WARP 会排除发往 RFC 1918 地址空间 ↗的流量,这些 IP 地址通常用于私有网络,且无法从互联网访问。为了让 Cloudflare One Client 向您的 private network 发送流量,您必须配置分流隧道(Split Tunnels),以便将您的 private network 的 IP/CIDR 路由通过 Cloudflare One Client。
-
首先,检查您的分流隧道模式是设置为**Exclude(排除)还是Include(包含)**模式。
-
根据该模式编辑您的分流隧道路由:
如果您使用的是**Exclude(排除)**模式:
a. 删除包含您的 private network 的 IP/CIDR 范围的路由。例如,如果您的网络使用默认 AWS 范围
172.31.0.0/16,请删除172.16.0.0/12。b. 重新添加您的 private network 没有明确使用的 IP/CIDR 范围。对于上述 AWS 示例,您需要为
172.16.0.0/13、172.24.0.0/14、172.28.0.0/15和172.30.0.0/16添加新条目。这可确保只有发往172.31.0.0/16的流量通过 Cloudflare One Client 进行路由。您可以使用以下计算器来确定要重新添加的 IP 地址:
计算器说明
- 在 Base CIDR 中,输入您从分流隧道中删除的 RFC 1918 范围。
- 在 Subtracted CIDRs 中,输入您的 private network 所使用的 IP/CIDR 范围。
- 将计算器结果重新添加到您的分流隧道“排除”模式列表中。
通过缩小 Cloudflare One Client 中包含的私有 IP 范围,您可以降低破坏用户访问本地资源的风险。
如果您使用的是**Include(包含)**模式:
- 将所需的 Zero Trust 域或IP 地址添加到您的分流隧道“包含”列表中。
- 添加一条路由以包含您的 private network 的 IP/CIDR 范围。
-
在 Finder 菜单中,选择 Go(前往) > Connect to Server(连接服务器)。
-
输入
smb://<smb-server-ip-address>/sambashare。
-
使用设置服务器时创建的用户名和密码登录。
- 打开文件资源管理器并右键单击 Network(网络) > Map network drive(映射网络驱动器)。
- 对于 Folder(文件夹),输入
\\<server-private-ip>\sambashare。 - 选择 Connect using different credentials(使用其他凭据连接)。
- 选择 Finish(完成)。
- 使用设置服务器时创建的用户名和密码登录。
Cloudflare Tunnel 还可以通过公共主机名路由应用程序,这允许用户在不安装 Cloudflare One 客户端的情况下连接到应用程序。此方法要求在服务器机器和客户端机器上都安装 cloudflared,并且在 Cloudflare 上有活动的区域。流量将通过该连接进行代理,用户使用其 Cloudflare Access 凭据登录服务器。
公共主机名方法可以与通过 Cloudflare One 客户端进行路由结合实施,以便有多种连接到服务器的方法。您可以为私有网络和公共主机名路由重复使用同一个隧道。
-
按照我们的仪表板设置指南创建 Cloudflare Tunnel。
-
在 Cloudflare 仪表板中,转到 Networking(网络) > **Tunnels(隧道)**并选择您的隧道。
Go to Tunnels ↗ -
在 Routes(路由) 选项卡上,选择 Add route(添加路由),然后选择 Published application(已发布的应用程序)。
-
从下拉菜单中选择一个域,并指定任何子域(例如
smb.example.com)。 -
对于 Service(服务),选择 SMB 并输入 SMB 监听端口(例如
localhost:445)。默认情况下,SMB 驱动器监听端口139或445。 -
选择 Add route(添加路由)。
默认情况下,互联网上的任何人都可以使用已发布应用程序的主机名连接到服务器。要允许或阻止特定用户,请在 Cloudflare Access 中创建自托管应用程序。
-
在客户端机器上安装
cloudflared。 -
运行以下命令打开 SMB 监听端口。您可以指定客户端机器上任何可用的端口。
cloudflared access tcp --hostname smb.example.com --url localhost:8445此命令可以包装为桌面快捷方式,这样终端用户就无需使用命令行。
-
打开您的 SMB 客户端并配置客户端指向
smb://localhost:8445/sambashare。请勿输入主机名。 -
使用设置服务器时创建的用户名和密码登录。
如果您使用的是 Windows 机器且无法指定 SMB 的端口,您可能需要禁用本地服务器。客户端机器上的本地服务器使用相同的默认端口 445 来提供 CIFS/SMB 服务。通过监听该端口,本地服务器可能会阻止 cloudflare access 连接。
要使用 Windows 机器禁用本地服务器:
- 按 Win+R 打开“运行”窗口。
- 输入
services.msc并选择 Enter(回车)。 - 找到本地服务器进程,通常名为
Server。 - 停止该服务并将启动类型设置为禁用。
- 对
TCP/IP NetBIOS Helper重复步骤 3 和 4。