用lucky加cloudflare实现域名访问内网

用cploar实现内网穿透,用起来很方便,但是免费的服务只有1M带宽(130kb/s),4个隧道,随机域名,随机端口,远程访问一下内网的小主机,开个ssh什么的,都很方便,也没有大流量。这里有个新方法,流量不限,只是方法很复杂。

主机上安装lucky,参见上一篇。

通过IP:16601访问,从左侧导航打开stun内网穿透,添加穿透规则,规则名ssh,目标地址:192.168.0.2,目标端口:22,点确定,会看到穿透详情里有蓝色标出的IP:随机端口。

通过webhook把得到的IP和端口应用到cloudflare

先注册,登录cloudflare,添加主机,把自己的域名托管到cloudflare,系统会提供两个dns主机名,把它填到域名注册商网站上的dns服务器上,过一会cloudflare就会把dns设置的记录复制过来。添加一条指向s.domain.com的A记录,IP随便填(填8.8.8.8就行),domain.com为自己的域名。

打开cloudflare左侧导航栏中的重定向规则,单一重定向,创建规则,名称ssh,自定义筛选表达式,下面选“主机名”“等于”“s.domain.com”,URL重定向,“动态”,“concat("http://192.168.0.2:22", http.request.uri.path)”,保存。



按F12打开游览器开发者工具,选中网络,再修改刚才的规则,把条目都点选一次,在右侧面板中找一条请求方法为PATCH的条目,请求网址类似于https://dash.cloudflare.com/api/v4/zones/4b6f20be9bbd211b60fe38542a*****f/rulesets/9df41177ce8*****a8c7c4ff3ee70beb/rules/4cba3b12a12f4efea640*****f1e1d10,把地址的dash替换成api,api替换成client,保存为url1备用。
这个url中zones,rulesets,rules三处后面有长长的字符串,第三段每个规则不一样。


打开lucky设置里的内网穿透,修改规则ssh,打开全局webhook,webhook,启用仅在地址不同时触发,接口地址填前面的url1,请求方法PATCH,请求头Authorization: Bearer LrM4kmqPEZKqa5dQjHJYEAa80F*****nXqE8HJ(Bearer后面是cloudflare申请的令牌),请求主体

{
        "action": "redirect",
    "description": "ssh",
    "expression": "(http.host eq \"s.domain.com\")",
        "action_parameters": {
          "from_value": {
            "preserve_query_string": true,
            "status_code": 301,
            "target_url": {
              "expression": "concat(\"http://#{ipAddr}\", http.request.uri.path)"
            }
          }
        }
      }

调用成功包含的字符串"success": true
点手动触发,再去看cloudflare上修改ssh的条目,发现里面的URL转发地址变成了concat("http://192.168.31.1:6666", http.request.uri.path),这就成功了。在lucky里点保存修改。

添加微信公众号通知(可以没有)

打开内网穿透-设置,开启全局webhook。使用pushplus消息推送功能。
打开www.pushplus.plus,微信扫码注册,实名,点右上角头像,个人中心,复制token。
在lucky里webhook界面,填写接口地址https://www.pushplus.plus/send,请求方式POST,请求头Content-Type: application/json,请求主体

{
    "token": "16dc****5064f13ba75feaa87303686",
    "title": "#{ruleName} 公网变化通知",
    "content": "#{ipAddr}", 
    "template": "txt"
}

调用成功包含字符串“请求成功”,保存。

把规则ssh关闭再打开,就会触发,微信会收到提示ssh公网变化通知。

更详细的图文说明参见-->使用Lucky的STUN内网穿透功能获取ipv4公网绑域名进行外网访问


这种方法适用于二级域名指向内网服务,相当于内网穿透加反向代理。但象ssh,xrdp,ftp这些需要带端口访问的服务则不行,但也可以从微信推送得知穿透的IP和端口。