You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过Cloudflare Tunnel将本地MySQL数据库暴露至公网供多客户端应用连接

如何通过Cloudflare Tunnel将本地MySQL数据库暴露至公网供多客户端应用连接

嘿,你选的路子其实完全正确!用Cloudflare Tunnel来暴露本地MySQL,确实能完美避开端口转发和静态IP的麻烦,咱们一步步来排查你遇到的问题:

  • 先确认Cloudflare Tunnel的TCP配置细节
    你在添加公网主机名时选了TCP类型对吧?这里很多新手容易漏一个关键设置:TCP隧道不像HTTP/HTTPS服务默认用80/443端口,你得给这个公网TCP服务指定一个Cloudflare边缘节点监听的端口(比如可以用MySQL默认的3306,或者选一个Cloudflare允许的未被占用的端口,比如13306)。
    举个例子:你配置时公网主机名填db.abc.com,类型选TCP,服务地址填localhost:3508(对应你本地MySQL的端口),同时要在Cloudflare的配置里给这个TCP服务分配一个公网端口——这个端口就是你客户端连接时要用到的。

  • 连接MySQL的正确姿势
    ping通db.abc.com只能说明域名解析正常,但MySQL客户端连接时必须指定端口(除非你把Cloudflare的TCP端口设为MySQL默认的3306,且本地MySQL也用3306)。
    正确的连接命令应该是这样的:

    mysql -h db.abc.com -P [你在Cloudflare设置的公网端口] -u 你的数据库用户名 -p
    

    比如你给TCP隧道分配了3306端口,那连接命令就是mysql -h db.abc.com -P 3306 -u root -p;如果是13306,就把-P后面的数字换成13306。

  • 检查本地MySQL的绑定设置
    你得确保本地MySQL的配置文件(Windows是my.ini,Linux/macOS是my.cnf)里,bind-address不是设为127.0.0.1——不然只有本地程序能访问,Cloudflare Tunnel的客户端cloudflared也连不上你的MySQL。建议把它改成0.0.0.0(允许所有本地地址访问)或者你的本地局域网IP,改完后记得重启MySQL服务。

  • 确认Cloudflare Tunnel客户端运行正常
    打开命令行,运行cloudflared tunnel run [你的隧道名称],看看日志里有没有报错,比如“无法连接到localhost:3508”这类提示——如果有,说明本地MySQL没在3508端口运行,或者防火墙挡住了cloudflared的访问。

  • 给新手的安全提醒

    • 别用root用户给客户端连接,专门创建一个只有必要权限的数据库用户,降低风险;
    • 可以在Cloudflare防火墙里设置规则,只允许你的客户端IP段访问这个TCP端口,避免被恶意扫描;
    • 最好给MySQL开启SSL加密,或者用Cloudflare Zero Trust的访问规则,要求客户端通过认证才能连接。

按照上面的步骤排查一遍,应该就能解决连接问题啦。如果还有卡壳的地方,可以把你Cloudflare的TCP端口配置、本地MySQL的端口和绑定设置告诉我,我再帮你细化分析~

备注:内容来源于stack exchange,提问作者user7870766

火山引擎 最新活动