免费使用 CloudFlare 转发 HTTP(S)、WebSocket 等流量

427

前言

  CloudFlare 是国外著名的免费全球 CDN 网站加速服务公司,它还提供实时安全保护服务和网络优化及流量统计等,可以免费使用,并且不用备案。有以下使用场景的话,可以使用 CloudFlare 充当反向代理的角色,代理转发HTTP(S)、WebSocket、gRPC 流量。

使用场景

  • 服务端主机在国内无法访问或访问速度缓慢
  • 服务端主机拥有公网 IPv6 地址但客户端主机只有 IPv4
  • 使用共享 IPv4 的 NAT 服务端主机
  • 需要隐藏服务端主机真实的 IP 地址
  • 家庭无公网IPv4网络,有远程(内网穿透)连接家庭服务需求(仅能支持方法二)

前置步骤

  • 更改域名的 NS 记录至 CloudFlare 服务器地址,使用 CloudFlare 来托管域名

方法一:使用 DNS 记录的 proxies 服务

优点

  • 对客户端和服务端无侵入性,无需在客户端和服务端安装软件服务

缺点

设置步骤

示例:服务端主机仅有 IPv6 ,且在 30750 端口上提供了 HTTP 服务,客户端机器需要使用域名 abc.eu.org 访问服务端的 HTTP 服务。

  1. 在 CloudFlare 中 abc.eu.org 域名控制台的 DNS 选项卡中,新增当前域名的 AAAA 记录,指向服务端主机的 IPv6 地址,并且启用 Proxy status。

image.png

  1. 打开 Rules 选项卡中的 Origin Rules 项,Create origin rule,设置如下,使所有访问 abc.eu.org 的流量被 CloudFlare 转发至服务端主机的 30750 端口。

image.png

方法二:使用 Cloudflare Zero Trust 的 Tunnel 隧道服务

优点

  • 可以代理多种应用层协议的流量,如 SSH、RDP、SMB等,也可代理 TCP 流量

缺点

设置步骤

示例:服务端主机无公网 IP ,且在 30750 端口上提供了 HTTP 服务,客户端机器需要使用域名 xui.abc.eu.org 访问服务端的 HTTP 服务。

  1. 在 CloudFlare 中 abc.eu.org 域名控制台的 Traffic 选项卡,选择 Cloudflare Tunnel,点击 Launch Zero Trust Dashboard 进入 CoudFlare Zero Trust 控制台。
  2. 进入 Access 选项卡,选择 Tunnels,点击 Create a tunnel,填入名称,点击 Save tunnel。

image.png

  1. 根据服务端主机系统选择安装 cloudflared ,也有 Docker 版本的可以选择。安装成功之后,Connectores 标签会展示连接状态,点击 Next。

  1. 设置路由规则和服务器端机器的服务协议和内网 IP 或者域名和端口。注意,如果使用 Docker 版本的 cloudflared ,宿主机的服务需要使用 IP:172.17.0.1 访问。

常见问题

访问域名出现 502 bad gateway 或 SSL 错误

检查 SSL/TLS 选项卡中的 Overview 项根据 SSL 证书在 CloudFlare 和服务端主机的配置情况,选择正确的 encryption mode。

在 Docker 私网中,无法在容器中使用 IP:172.17.0.1 访问到宿主机的服务

  • 原因
    • 出于安全考虑,Linux 系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包。这通常是路由器所要实现的功能。
    • 要让 Linux 系统具有路由转发功能,需要配置一个 Linux 的内核参数net.ipv4.ip_forward。这个参数指定了 Linux 系统当前对路由转发功能的支持情况;其值为0时表示禁止进行IP转发;如果是1,则说明IP转发功能已经打开。
  • 配置方法
    • 修改 /etc/sysctl.conf 文件,增加 net.ipv4.ip_forward 配置项。执行 sysctl -p 使之生效。
    • 执行命令
grep "net.ipv4.ip_forward" /etc/sysctl.conf
if [ $? -eq 0 ];then
    sed -i -r -e "s|net.ipv4.ip_forward.*|net.ipv4.ip_forward=0|g" /etc/sysctl.conf
else
    echo "net.ipv4.ip_forward=0" >> sysctl.conf    
fi
sysctl -p

首次启用 Cloudflare Zero Trust 时需要绑定 PayPal 或信用卡账户

正常流程绑定 PayPlay 账户之后,会自动开启 Cloudflare 商户的自动付款功能,为避免意外扣费,建议在 PayPal 官网关闭自动付款功能。