使用 Cloudflare Tunnel 的私有网络,用户可以连接到任意非基于浏览器的 TCP/UDP 应用程序,如数据库。您可以设置实施零信任控制的网络策略,以定义谁和什么可以使用 Cloudflare One 客户端访问这些应用程序。
在本教程结束时,通过网络策略的用户将能够访问通过 TCP 端口 3306 上的 Cloudflare Tunnel 可用的远程 MySQL 数据库。
确保您拥有:
- 一个监听远程连接并配置了可以远程连接的用户的 MySQL 数据库
- (可选)账户中已启用解析器策略
在您私有网络中的服务器上安装 cloudflared。此服务器应具有到 MySQL 数据库的连接。
-
登录 Cloudflare 仪表板,转到 Networking(网络) > Tunnels(隧道)。
Go to Tunnels ↗ -
选择 Create a tunnel(创建隧道)。
-
为您的隧道输入名称。我们建议选择能够反映您希望通过此隧道连接的资源类型的名称(例如,
enterprise-VPC-01)。 -
选择 Create Tunnel(创建隧道)。
-
选择您的操作系统,然后复制安装命令并在您的源服务器的终端上运行。
-
等待隧道连接。连接建立后,选择 Continue(继续)。
-
在 Cloudflare 仪表板中,转到 Networking(网络) > Routes(路由)。
Go to Routes ↗ -
选择 Create route(创建路由) > Tunnel CIDR(隧道 CIDR)。选择您刚刚创建的隧道,输入您的 MySQL 服务器的私有 IP/CIDR(例如
10.128.0.175/32),然后选择 Create route(创建路由)。
3.(可选)重复操作以针对您的内部 DNS 服务器的私有 IP/CIDR 创建第二条路由。
应用程序和(可选的)DNS 服务器现在已连接到 Cloudflare。
- 转到 Traffic policies(流量策略) > Network policies(网络策略)。
- 添加一条针对 MySQL 数据库的私有 IP 地址和端口(默认为端口 3306)的网络策略。以下示例允许使用
@example.com电子邮件地址注册到 Cloudflare One 客户端的用户访问数据库。该网络策略还可以将设备状态检查考虑在内。
| 选择器 | 运算符 | 值 | 逻辑 | 操作 |
|---|---|---|---|---|
| Destination IP(目标 IP) | in | 10.128.0.175 |
And(且) | Allow(允许) |
| Destination Port(目标端口) | in | 3306 |
And(且) | |
| User Email(用户电子邮件) | matches regex | .*example.com |
除了上面的 Allow(允许) 规则外,Cloudflare 还推荐在您的网络策略列表底部添加一条全部阻止 (catch-all block) 策略,以实施默认拒绝模式。
现在,获得允许的 Cloudflare One 客户端用户可以使用他们选择的 MySQL 客户端连接到位于 10.128.0.175 的 MySQL 服务器。
##(可选)创建 Gateway 解析器策略
为了允许用户使用内部主机名而不是私有 IP 地址访问 MySQL 数据库,请配置 Gateway 解析器策略。
-
转到 Traffic policies(流量策略) > Resolver policies(解析器策略)。
-
选择 Add a policy(添加策略)。
-
创建一个表达式以匹配应用程序的私有域或主机名,如以下示例所示:
选择器 运算符 值 Domain(域名) in internalrecord.com -
在 Select DNS resolver(选择 DNS 解析器) 中,选择 Configure custom DNS resolvers(配置自定义 DNS 解析器)。
-
输入您的 DNS 服务器的私有 IP 地址。
-
在下拉菜单中,选择
<IP-address> - Private。
7.(可选)输入自定义端口。
- 选择 Create policy(创建策略)。
如果您的内部 DNS 服务器拥有该 MySQL 数据库的 A 记录,用户可以使用此记录连接到服务器。例如,假设 BIND 服务器包含以下条目:
mysql IN A 10.128.0.175
获得允许的 Cloudflare One 客户端用户可以使用他们选择的 MySQL 客户端连接到位于 mysql.internalrecord.com 的 MySQL 数据库。