Lucky STUN 内网穿透
前提
NAT必须是Full Cone
类型,俗称NAT-1
关于NAT类型,参考:https://zhuanlan.zhihu.com/p/335253159
可以使用Python的pip包pystun3
测试NAT类型
1 | pip install pystun3 |
输出NAT Type: Full Cone
即可
安装Lucky
参考官网:https://lucky666.cn/
DDNS
登录Lucky后台,进入“动态域名”,添加任务
托管服务商以Dynv6(一个免费为IPv4和IPv6提供DDNS服务的网站)为例,每个托管服务商名称下方都有相应的教程链接
域名列表填写自己的域名example1.com
和对应的泛域名*.example1.com
,每行一个域名
SSL
在Lucky后台选择“安全管理”,为DDNS域名添加SSL证书
验证方式选择example1.com
所在的DNS平台,根据验证方式下方的说明进行操作,域名列表填写example1.com
和*.example1.com
,每行一个,电子邮箱任意,算法任意
Web服务
进入“Web服务”,添加Web服务规则
监听端口选择一个不和其他服务冲突的端口即可,打开“防火墙自动放行”和“TLS”
添加Web服务子规则
Web服务类型选择“反向代理”,后端地址填写内网IP和端口,比如群晖Web服务的IP和端口
打开跨域支持
添加完成后类似下图
Cloudflare页面规则
由于STUN内网穿透的IP和端口都会变化,本教程使用Cloudflare页面规则自动更新IP和端口
准备另一个域名example2.com
,添加A类型的DNS,IP地址任意,打开代理(橙色云朵)
添加页面规则 Page Rules
URL填写*.example2.com/*
,Setting 选择Forwarding URL
,status code 选择302
,destination URL 填写https://$1.example2.com:1234/$2
填写完成先不要保存,打开F12开发者模式(或网页空白处右键选择“检查”),选择“网络”选项卡,点击保存
点击名称中一长串的字母数字,在右边的标头-常规-请求网址中找到zones后面的zone ID
(红色下划线)和pagerules后面的page rule ID
(蓝色下划线),复制保存备用
如果保存了页面规则也没关系,选择编辑按照上述方法也可以获得zone ID
和page rule ID
,复制保存备用
STUN内网穿透
在Lucky后台选择“STUN内网穿透”,添加穿透规则
穿透通道监听端口设为0表示随机生成,目标地址填写内网IP,目标端口填写之前在Web服务中设置的监听端口
开启Webhook,接口地址:
1 | https://api.cloudflare.com/client/v4/zones/[zone ID]/pagerules/[page rule ID] |
将[zone ID]替换为之前保存的zone ID
,将[page rule ID]替换为之前保存的page rule ID
请求方法:PUT
请求头:
1 | X-Auth-Email: 注册CF的邮箱 |
Global API Key 在右上角 My Profile - API Tokens - Global API Key,点击“View”即可查看
请求主体:
1 | { |
接口调用成功包含的字符串:
1 | "success":true |
填写完成后点击“Webhook手动触发测试”,如果出现错误有可能是上述信息填写有问题或本机网络无法正常访问Cloudflare
如果本机网络无法访问Cloudflare或延迟过高,可以开启代理设置(HTTP/HTTPS/SOCKS)或使用代理URL,比如 https://github.com/gaboolic/cloudflare-reverse-proxy,这样就可以把接口地址改成
1 | https://yourproxydomain.com/proxy/https://api.cloudflare.com/client/v4/zones/[zone ID]/pagerules/[page rule ID] |
如果测试成功,就可以添加穿透规则
如上图,STUN穿透成功后会显示WebHook触发结果和公网地址,此时在浏览器中访问STUN穿透公网地址(IP:Port)也可以访问到内网服务
穿透成功后访问nas.example2.com
,浏览器会根据Cloudflare的页面规则自动跳转到nas.example1.com:2309
补充
动态域名定期检查公网IP是否改变,如果改变了就修改*.example1.com
的DNS为新的公网IP
Web服务用于反向代理,根据*.example1.com
的不同前缀访问内网的不同服务
STUN内网穿透会在穿透公网地址改变时触发WebHook,自动更新Cloudflare页面规则
安全管理用于自动申请和续期*.example1.com
的SSL证书
如果只有一个域名,也可以使用两个不同的二级域名进行穿透,比如将*.1.example.com
用于DDNS和SSL,将*.2.example.com
用于Cloudflare页面规则
参考链接
Lucky官网:https://lucky666.cn/
使用 Lucky 的 STUN 内网穿透利用 UPNP 和 NAT1 在公网打洞并配置伪 DDNS:https://www.xrgzs.top/posts/lucky-stun-upnp-nat1
打通大内网第一期 无公网部署https和反向代理 (基于Lucky的Stun穿透):https://zhuanlan.zhihu.com/p/668448423