type
status
date
slug
summary
tags
category
icon
password

📝 前言

😀
本文介绍外网访问的两种方式:
1.无公网IP,使用Cloudflare Tunnel。
2.有公网IP,使用Cloudflare代理,路由器的端口转发和DDNS。
以上两种方式都使用可以绕过80/443端口封禁,并且隐蔽原始的IP地址。
两种方式不冲突,可以同时使用(通过域名区分)。
最后通过安装Traefik插件,获取Cloudflare代理/隧道后面客户端的真实IP。
💡
媒体服务等对带宽需求较大的不适合使用Cloudflare代理。

💻 Cloudflare Tunnel

使用 Cloudflare Tunnel,您可以运行 cloudflared 服务,将位于内部网络的服务器安全地暴露在互联网上。例如,在您的内部网络上安装 后,您可以将您的本地 Web 应用程序暴露在互联网上,比如 example.com,使远程办公者可以在任何地方访问。
Cloudflare Tunnel 可以将 HTTP Web 服务器、SSH 服务器远程桌面和其他协议安全地连接到 Cloudflare。
notion image
 

一、设置本地解析(自定义挟持域名)

假设Traefik本地IP为192.168.1.80,emby服务域名为https://emby.example.com
以下方法任选其一:

在路由器上设置(推荐)

因为各家路由器设置方法不一样,请自行搜索路由器品牌或型号+自定义Hosts,大部分可以找到对应的设置方法。
下面列出部分路由器的设置方法
  • 基于linux系统的路由,如OpenWrt固件、小米路由等:
    • 大部分智能路由器是定制的linux系统,使用root账户登录SSH,修改/etc/hosts,重启生效。
  • OpenWrt WEB:
    • 网络→主机名→新增 或 网络→DHCP/DNS→自定义挟持域名
notion image
  • 小米路由:
    • 米家APP→路由器卡片更多操作→路由应用→自定义Hosts。
  • 爱快固件:
    • 网络设置→DNS设置→DNS设置→增加→填写要劫持的域名和IP→保存。
  • 极路由:
    • 在应用中心,安装自定义hosts,添加劫持,重启路由器即可。
  • 斐讯路由:
    • 功能设置→高级设置→HOST配置或高级设置→系统设置→系统参数→hosts配置,使用标准hosts格式。
  • 潘多拉固件:
    • 网络→DHCP/DNS→HOSTS和解析文件→自定义DNS解析,根据提示添加即可。
  • 华硕梅林固件:
    • 首先登陆路由器后台,在系统管理→系统设置中开启JFFSSSH,然后重启路由器。
      使用SSH登陆路由器,在/jffs/configs下建立dnsmasq.conf.add文件,文件内容addn-hosts=/jffs/configs/hosts
      /jffs/configs下创建自己的hosts文件,按照标准hosts规则填写需劫持的域名,然后执行service restart_dnsmasq重启或者重启路由器即可生效。
  • 老毛子固件:
    • 内部网络→DHCP服务器→自定义HOSTS文件→添加一行→保存,重启生效。

自建DNS服务

DNS服务器需要长期稳定运行,有条件的可以装一个AdGuard-Home。
  • AdGuard-Home:
    • AdGuard-Home使用Docker部署时,需分配固定IP,并将路由器的首选DNS设置为该IP。
      主页→过滤器→DNS重写
      notion image
  • Dnsmasq:
    • /etc/dnsmasq.conf添加一行:
      address=/example.com/192.168.1.80
  • SmartDNS:
    • 域名地址添加一行:
      address /example.com/192.168.1.80
      💡
      address选项中:
      • /domain/为后缀匹配算法,范围包含其子域名。
      • ip: 可以为IPV6,或IPV4地址,可以指定多个IP地址,如果有多个IP地址,查询的时候,将会进行随机排序。
      💡
      前缀通配与主域名匹配
      // 通配 *-a.example.com // 仅匹配子域名 *.example.com // 仅匹配主域名 -.example.com
      注意:* 和 - 仅支持写在域名开头。其他位置的写法均不支持。

添加记录到容器hosts

仅cloudflare tunnel使用,内网访问需额外设置。
在cloudflared容器的高级视图中
notion image
额外参数后面加上--add-host='emby.example.com:192.168.1.80'

二、创建隧道

  1. 登录至Zero Trust,然后转到Access>Tunnels。
    1. notion image
  1. 选择“Create a tunnel”。
    1. 输入隧道的名称。例如myhome-VPC-01
  1. 保存好红框中的token。
    1. notion image
  1. 添加“Public hostnames”
    1. notion image
      💡
      这里的Service指的是内网服务地址,如果经由Traefik则必须使用域名。也可以跳过Treafik,使用http://unraid_ip:port

三、安装cloudflared

  1. 找到cloudflared点击安装
    1. notion image
  1. 打开高级视图修改发布参数,与创建隧道时生成的命令一致(tunnel --no-autoupdate run --token <YourToken>)。并在br0网络分配一个IP。
    1. notion image
      此IP需要添加到Traefik受信任的IP列表中traefik.yml:
  1. 启动容器
💡
注意
cloudflared使用QUIC协议,如果路由器上运行有openclash,建议关闭UDP流量转发或排除cloudflared,否则可能会连接失败。

四、完成

Tunnel状态变为HEALTHY就完成了。
notion image

🌐 Cloudflare 代理

一、端口转发设置

在路由器网络-防火墙-端口转发中新增一条转发将路由器WAN口的8443端口的流量转发到Traefik(192.168.1.80)的443端口。其中8443也可以是其他Cloudfare支持的流量代理端口。
notion image
💡
Cloudfare默认情况下支持流量代理端口如下:
HTTP端口
  • 80
  • 8080
  • 8880
  • 2052
  • 2082
  • 2086
  • 2095
HTTPS端口
  • 443
  • 2053
  • 2083
  • 2087
  • 2096
  • 8443

二、DDNS设置

  1. 添加一个用于DDNS的记录
    1. 名称这里使用随机生成的字符串。IPv4地址目前可以随便填,注意要取消Cloudflare代理。
      notion image
  1. 添加一个CNAME记录
    1. 为了以后不用每新增一个服务就新增一个域名,名称这里使用了泛域名*目标则是上一步中的完整域名,并且开启Cloudflare代理。
      notion image
      💡
      泛域名
      泛域名指在一个根域名之下,所有未建立的子域名的合集。如果某子域名已经存在,那么不在此列之中。
      利用通配符*(星号)来做次级域名以实现所有的次级域名均指向同一IP地址。
  1. 设置DDNS
    1. 在路由器的动态DNS中新建一个条目,域名中的主机名与域名使用@ 而不是.分隔。
      notion image
  1. 完成
    1. 等待几分钟后,前面手动设置的192.168.1.10,已经自动更新为本地公网IP。
      notion image
 

三、Origin Rules设置

在Cloudflare中找到Origin Rules设置
notion image
创建一条端口改写规则,将目标端口重写到8443。这里的匹配规则可以根据需求自行设置。
notion image

四、完成

这个方法相较于Workers没有每日次数限制, 相对来说也更优雅, 还提供了DDoS防护和CDN缓存, 如果觉得慢还可以关闭缓存, 只用cast IP当跳板
最后: 根据评论所说,建议开启DNSSEC和端到端(FULL)加密。

👥 真实IP

如果Traefik位于Cloudflare代理/隧道后面,它将无法从外部客户端获取真实IP以及其他信息。基于客户端IP的部分功能无法生效,如CrowdSec等。
所以我们还需要安装Real IP from Cloudflare Proxy/Tunnel插件来获取客户端真实IP。
在下方找到此插件
该插件通过CF-Connecting-IP覆盖X-Real-IP和X-Forwarded-For来解决此问题。
如果请求来自Cloudflare,则真实IP将是Cf-Connecting-IP(在配置文件中的最可信IP)。
该插件还将CF-Visitor方案写入X-Forwarded-Proto。(这解决了在使用CF[443]→PROXY/隧道→Traefik[80]→WP[80]时,WordPress出现的无限重定向问题)

插件安装

notion image
在静态配置文件中:
在动态配置文件中:

完成

可以看到插件安装好后,X-Real-IP已经是客户端的真实IP了。
notion image
 

📎 参考文章

 
💡
有关Cloudflare使用上的问题,欢迎您在底部评论区留言,一起交流~
 
Traefik 篇八:使用Grafana监控服务和管理日志Traefik 篇六:云“fail2ban”协作式防火墙CrowdSec
Loading...