通过 Cloudflared 为 Gitea 提供保护
/ 2 min read
Updated:Table of Contents
自建 Gitea 放到公网后,最直接的顾虑是源站 IP 暴露。把它放到 Cloudflare 后面,既能隐藏源站 IP,也能获得一定的加速效果。
麻烦在于 Cloudflare 的代理只处理 HTTP(S),SSH 方式的 git clone 会失效,需要单独处理。
网页端 / HTTPS
假设 Gitea 的域名是 git.example.com,在 Cloudflare DNS 中打开代理(橙色小云朵)即可,用户无感知。
SSH 的单独处理
- 用 Cloudflare Tunnel 把 Gitea 的 SSH 端口以内网穿透的方式暴露出来。
- 在 Cloudflare 中为 SSH 新增一个主机名,例如
git-ssh.example.com,解析到对应 Tunnel 的 CNAME。 - 在 Gitea 配置中把
SSH_DOMAIN改为git-ssh.example.com,这样仓库页面显示的 SSH 地址才是对的。 - 重启 Gitea 服务或 Docker 容器。
客户端访问
客户端需要安装 cloudflared,然后在 ~/.ssh/config 中加入:
Host git-ssh.example.com ProxyCommand cloudflared access ssh --hostname %hProxyCommand 里的 cloudflared 写成命令即可,只要在 PATH 中,不需要写绝对路径。
安装方式:
- Windows 可以用
scoop等包管理器安装 - 其他系统见 Cloudflare 官方下载页,或直接从 GitHub Releases 下载
配置好之后,git clone git@git-ssh.example.com:user/repo.git 就能正常使用了。实现方式不止这一种,但这种对客户端的要求最少,体验也最好。