STUN(Session Traversal Utilities for NAT)技术主要用于帮助在网络地址转换(NAT)环境中进行音视频通信。通过 STUN,NAT1 用户可以获取公网 IP 地址和端口,从而允许外部设备与其内网服务建立连接,无需申请公网
这篇文章也是参考各位大佬的教程整理出来的,可能会有好几期类似的,但是实现的效果各不相同,有兴趣的一起学习一下。
需要具备哪些条件
- 需要一个域名
- 需要浏览器F12抓包
- 需要安装lucky
- 需要域名托管到Cloudflare
优点
特别适合移动大内网
无需申请公网ipv4,即可在外网ipv4环境下访问
缺点
IP和端口不固定,随时会变动
这篇文章主要实现的功能是,通过STUN内网穿透获取NAT1 公网ipv4,可以实现外网访问,主要是通过访问域名之后重定向到公网ip:端口,当然这个是全自动的,端口变更后会自动更新到Cloudflare,并且会把最新的ip和端口通过消息推送到微信提醒。
我建议只使用在飞牛APP、TV端、web端,注意保密不要泄漏IP
安装开始
实现上面的功能要先安装lucky
docker安装方式参考下面的文章,飞牛用户应用中心下载、群辉用户直接矿神套件安装
fnOS系统nas 使用Docker安装Lucky详细教程
1、域名托管到Cloudflare申请令牌
我在腾讯云购买了域名,那我们在使用 CF 前,首先要做的就是将域名托管到 CF。CF 使用需要注册账号,这一步就不做过多赘述了,网站支持简体中文,我相信按照说明注册账号应该都能顺利完成。
选择免费套餐
什么都不用管,继续前往激活
去腾讯云把DNS地址修改成cloudflare提供的
在“修改 DNS 服务器”界面中,完成名称服务器的修改:
等待CF同步DNS完成,大概几分钟就好了,下面是完成的状态
获取令牌,点击右上角,,点击我的个人资料
使用编辑区域DNS模板
使用的模板权限默认,区域资源选择包括、特定区域、选择你的域名,如下图,点击继续
创建令牌
记住保存你的令牌
2、设置路由
我是光猫桥接,路由拨号,也就是说如果你平常能获取到ipv6的公网,那么这个教程适用于你,如果获取不到ipv6公网就不行,先研究怎么获取ipv6怎么外网访问
我的是小米路由器,需要到小米路由器里面打开DMZ,如果你是其他设备请自行研究一下,如果你感觉开启这个有风险就不需要继续下去了。
3、测试能否获取到公网IPV4
为了不浪费大家时间,先简单配置一下lucky进行测试一下,如果能成功获取到公网ipv4并且能在外网访问成功之后再往下继续。
点击左侧STUN内网穿透->添加穿透规则
名称:随意
操作模式:简易模式
穿透类型:ipv4
穿透端口:默认可以为0(0代表任何端口),或者你指定端口,这个其实可以随意
防火墙自动放行:打钩
目标地址:NAS的内网IP地址
目标端口:NAS的内网IP访问端口
浏览器外网访问这个获取到的IP加端口,如果正常就能打开飞牛,如果不能请排查是否打开了DMZ,只要你之前ipv6访问都没有没问题,这里一般也不会有问题。
或者使用 ITDOG 测试
https://www.itdog.cn/tcping
4、域名解析
以上都没问题,可以进行域名解析
打开 Cloudflare,在域名的 DNS 设置里面添加 A 记录,ip填8.8.8.8,或者其他任意IP都行,代理状态要打开
5、设置重定向
左边菜单栏 规则 -> 重定向规则 ->创建一个规则
免费用户只能创建10个规则,也就是说我们能重定向10个项目到这里,一个公网IP:端口只能访问一个项目
规则名称不用有中文,要记牢后面要用,其他照抄就行
表达式:
concat("http://192.168.31.100:1984", http.request.uri.path)
点击部署
抓取相关参数信息,需要重新 编辑规则
进入编辑页面之后按F12 打开开发者模式,然后点击保存,就能获取到以下信息
这一部分很重要
复制下来的接口
https://dash.cloudflare.com/api/v4/zones/{区域ID}/rulesets/{规则集ID}/rules/{规则ID}
要替换成下面的接口,只有zones前面的不一样,zones后面都一样复制替换就行了,这个要仔细,弄错了就调用不成功了,自己比对一下就能区分出来
https://api.cloudflare.com/client/v4/zones/{区域ID}/rulesets/{规则集ID}/rules/{规则ID}
6、编辑STUN内网穿透
回到lucky 编辑最开始创建的穿透规则,打开全局WebHook(全局WebHook主要用于推送最新IP和端口到你微信)和WebHook,按照下面图片填写
lucky的一些参数,了解一下就行
除了我说明的地方,其他地方照抄就行
请求接口:前面让你复制替换的
https://api.cloudflare.com/client/v4/zones/{区域ID}/rulesets/{规则集ID}/rules/{规则ID}
请求方式:PATCH
请求头:
该有的空格不能少
Authorization: Bearer 你的令牌
请求主体:
{
"action": "redirect",
"description": "换成你重定向创建的规则名称",
"expression": "(http.host eq \"换成你的域名\")",
"action_parameters": {
"from_value": {
"preserve_query_string": true,
"status_code": 301,
"target_url": {
"expression": "concat(\"http://#{ipAddr}\", http.request.uri.path)"
}
}
}
}
接口调用成功包含的字符串:
"success": true
填写完成,点击手动触发测试
返回接口调用成功信息,如果不成功请先确认你的令牌权限那边是否设置了单一重定向,看前面创建令牌的截图
返回到cloudflare编辑创建的规则,可以看到表达式这边的IP变成192.168.31.1:6666,这个IP和端口是手动触发模拟的IP和端口
没问题就保存lucky创建的穿透规则
7、配置全局WebHook
左侧菜单栏点击 STUN内网穿透->设置,开启全局Stun Webhook
使用的是pushplus消息推送功能,免费额度够用无需付费。
打开www.pushplus.plus微信扫码注册登录->点击右上角头像->个人中心复制token
接口地址:
https://www.pushplus.plus/send
请求方式:POST
请求头:
Content-Type: application/json
请求主体:
{
"token": "你的token",
"title": "公网变化通知",
"content": "#{ipAddr}",
"template": "txt"
}
填写完成,点击手动触发测试返回下面信息就代表没问题,并且能收到微信推送的消息
返回lucky任务列表,点击操作:开关一下,重新获取IP和端口,注意一下IP端口变化,没变化不推送的,触发结果都是:成功 就算完成了
微信推送的消息
8、使用小知识
- 我们只需要访问cloudflare解析的域名,就会转跳到对应的IP:端口,域名访问方便之处就是不需要记IP:端口
- 如果是飞牛APP和TV端使用,直接使用IP:端口就行,域名用不了,无法转跳。
- cloudflare免费用户重定向10个项目,一个公网IP:端口只能访问一个项目。
- 如果不使用域名就想在APP或者TV使用,那就跳过第六步:编辑STUN内网穿透,把第七步设置里面全局Stun Webhook的接口请求体等代码挪到穿透规则里面就行了,这样就只提醒推送最新IP:端口到你微信
- IP:端口也不是一直变动的,有时候一天都不会变,反正变动了也会推送到你微信能第一时间拿到手,正常使用没有问题。