用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和端口。