type
status
date
slug
summary
tags
category
icon
password

📝 前言

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

💻 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
      注意:* 和 - 仅支持写在域名开头。其他位置的写法均不支持。

二、创建隧道

  1. 登录至Zero Trust,然后转到Access>Tunnels。
    1. 选择“Create a tunnel”。
      1. 输入隧道的名称。例如myhome-VPC-01
    1. 保存好红框中的token。
      1. notion image
    1. 添加“Public hostnames”
      1. notion image

    三、安装cloudflared

    1. 找到cloudflared点击安装
      1. 修改发布参数,与创建隧道时生成的命令一致(tunnel --no-autoupdate run --token <YourToken>)。并在br0网络分配一个IP。
        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必须开启,防止DNS污染误伤,毕竟拿CF干什么的都有。
         

        👥 真实IP

        如果Traefik位于Cloudflare代理/隧道后面,它将无法从外部客户端获取真实IP以及其他信息。基于客户端IP的部分功能无法生效,如CrowdSec等。
        所以我们还需要安装Real IP from Cloudflare Proxy/Tunnel插件来获取客户端真实IP。
        在下方找到此插件
        notion image
        该插件通过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出现的无限重定向问题)

        插件安装

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

        完成

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

        📎 参考文章

         
        💡
        有关Cloudflare使用上的问题,欢迎您在底部评论区留言,一起交流~
         
        Traefik 篇八:服务监控和日志管理Traefik 篇六:入侵防御系统CrowdSec
        • Twikoo
        • Utterance