前提条件 需要NAT1类型网络

先查看自己的公网地址

之后我们追踪一下这个地址

这样就是NAT1类型 从路由器到运营商接入层再到公网 只经过一次NAT转换

我们需要在Lucky新建一条DDNS

Token可以在这获取

https://dash.cloudflare.com/profile/api-tokens

接口地址是飞书的机器人

请求体如下

{
  "msg_type": "post",
  "content": {
    "post": {
      "zh_cn": {
        "title": "Openwrt-DDNS-ipv4",
        "content": [
          [
            {
              "tag": "text",
              "text": "IP地址:#{ipAddr}"
            }
          ],
          [
            {
              "tag": "text",
              "text": "域名更新成功列表:#{successDomainsLine}"
            }
          ],
          [
            {
              "tag": "text",
              "text": "域名更新失败列表:#{failedDomainsLine}"
            }
          ],
          [
            {
              "tag": "text",
              "text": "Webhook触发时间: #{time}"
            }
          ]
        ]
      }
    }
  }
}

然后我们把想要访问的域名在cf上记录下 并开启小黄云 我这里以or4.lovelyy.us.kg举例只要你想要任意域名 全部都CNAME到刚刚的动态域名上我这里是 4.lovelyy.us.kg

我们把要访问的域名做一个规则 重写端口

我这里起名叫 OpenWrt Any

有多个主机可以用 or 逻辑判断

由于我是Openwrt使用Lucky 所以需要放行ipv4进入 网络>防火墙>通信规则

新建一条规则 允许WAN接口所有的ipv4入站

高级设置中只允许ipv4类型

然后我们在lucky创建一条STUN规则

我这里是路由器(AX1800Pro)拨号 所以是穿透的pppoe口

STUN穿透目标端口我这里以52061举例

自定义脚本可以再这个地方获取 (origin-rules.sh)

https://github.com/bailangvvk/lucky-cloudflare-origin-rules

GLOBAL API Key可以在这获取

https://dash.cloudflare.com/profile/api-tokens

请求体参考(飞书)

{
    "msg_type": "post",
    "content": {
        "post": {
            "zh_cn": {
                "title": "#{ruleName}",
                "content": [
                    [
                        {
                            "tag": "text",
                            "text": "触发Webhook的时间: #{time}"
                        }
                    ],
                    [
                        {
                            "tag": "text",
                            "text": "STUN穿透公网IP地址(含端口): #{ipAddr}"
                        }
                    ],
                    [
                        {
                            "tag": "text",
                            "text": "STUN穿透公网IP地址的IP部分: #{ip}"
                        }
                    ],
                    [
                        {
                            "tag": "text",
                            "text": "STUN穿透公网IP地址中的端口部分: #{port}"
                        }
                    ]
                ]
            }
        }
    }
}

后面能看到打洞成功的样子

接下来我们用Lucky实现单端口多域名反代后端服务器

我们新建一个Web服务穿透端口填写STUN穿透的端口演示的是 52061

默认规则不管 添加一个子规则 前端地址是你要访问的域名 后端地址是内网的服务

然后我们尝试访问or4.lovelyy.us.kg 成功了

以上是CloufFlare回源实现非80端口访问 以下是进阶步骤申请TLS证书并通过HTTPS访问

我们回到Lucky SSL/TLS证书>添加一个新证书

填写信息申请证书 我这里用ACME申请 证书颁发机构用的是ZeroSSL

Kid HMAC Key 可以在此处获取 未注册账号可以注册一个

https://app.zerossl.com/developer

申请好了以后 Lucky会自动使用这个证书实现HTTPS访问

回到Lucky>Web服务 启用TLS访问

但是如果我们每次都要加上HTTPS很麻烦 所以新建一个Web服务 让所有HTTP重定向到HTTPS

Tips:监听端口要和Web服务端口一致

只需要修改默认规则 服务类型选择重定向 默认目标地址如下

https://{host}:{port}

由于使用了HTTPS访问 所以在CloudFlare回源的时候需要把 SSL/TLS 加密改成完全

回到CloudFlare 规则>Configuration Rules>创建规则

输入我们的访问域名 启用自动HTTPS重写

滑动到最下面 把SSL选择完全(如果有多个域名弄个or判断表达式)