Lucky+Stun+EdgeOne实现无公网环境内网穿透转发
写在前面
“家宽有公网”曾是无数玩家、开发者、SOHO用户的默认起手式:NAS挂PT、摄像头远程、树莓派搭博客,一个DDNS就能搞定。
然而从2023年开始,国内三大运营商陆续收回IPv4公网地址——先是悄悄把80/443口封掉,随后直接把“大内网”地址甩给用户。
光猫后台再也看不到“Real IP”,拨号只能拿到100.64/10.0/172.16段;客服口径统一:“上级要求,不再提供公网IPv4,IPv6请自便。”
对于只有单栈IPv4、NAS在卧室、监控在老家、公司又要远程运维的普通人来说,这无异于断网。
买云服务器做FRP?——带宽贵、流量包小,高清一跑就欠费。
掏钱上商业SD-WAN?——节点少、订阅贵,延迟高得怀疑人生。
干脆摆烂用第三方“免费穿透”?——今天能连、明天跑路,数据从人家硬盘过,密码明文躺日志。
本文是一次“穷人版”自救实验的记录:
把家里那台吃灰的D1581小主机、腾讯云EdgeOne免费套餐、开源 Lucky(STUN) 模块、以及一段10行不到的Worker脚本拼在一起,
在“没有公网IP、没有备案、没有固定带宽”的三无场景下,硬生生把内网Web服务搬到线上,
还能跑满30 Mbps上行,顺带把“跨网限速”给绕了过去。
如果你也遇到“家宽突然没了公网”,又不想给运营商交“商务专线”保护费,
不妨花十分钟跟着做一遍——最坏的结果只是多学会一个Docker命令,
最好的结果,也许就能让家里的NAS、摄像头、游戏服务器,继续像当年一样“随开随连”。
提醒:本教程流量会经过EO代理,好处是不需要带端口和跳转,并且比较稳定,但速率受到腾讯云的限制。
如果你在找无中转的STUN转发,请阅读《利用STUN+NAT1/UPNP配合重定向实现无公网免中转内网穿透》
转发教程
前提条件
- 你家网络必须是NAT1(检测:https://dyebean.com/)
- 有个域名用于解析Worker和绑定Edgeone转发
- 有个设备可以安装Lucky,用于端口转发映射
安装Lucky
安装参考:https://lucky666.cn/docs/install,这里以Linux和Docker为例安装:
docker run -d --name lucky --restart=always --net=host gdy666/lucky
部署Worker
此步骤可选,如果你不想配置可以用我的部署,我不会看别人密钥信息,但不保证绝对安全
地址:https://websdk.524228.xyz/api/eo/zones/update
前往:https://github.com/PIKACHUIM/StunWebHooks,点击部署到EO或者CF平台
这里以EO为例,CF基本流程都一样,EO如果你没有备案域名,就选『全球可用区不含大陆』注意:EO这里部署命令需要改为:npm run build-eo
,否则可能无法正常构建和部署
创建完成后,去项目设置里面,绑定一个域名,根据向导设置CNAME,并开启自动证书申请
部署好了之后可以使用https://你部署Worker的域名/api/eo/zones/update
修改
设置转发
- 打开Lucky管理页
<IP地址>:16601
,默认账号密码都是666
,选择STUN内网穿透 - 添加一个穿透设置,填写
目标地址
和目标端口
,如果你是旁路由可能要开启UPnP
打开Webhook选项,请求方法选
POST
,接口地址
和请求体
需要按下面格式填写
- Webhook接口地址:
https://你部署Worker的域名/api/eo/zones/update
- Webhook请求体:
{ "secret_uuid": "腾讯云secretId", "secret_keys": "腾讯云secretKey", "domain_uuid": "zone-*******(EO区域ID)", "domain_name": "需要修改的域名", "public_host": "{ip}", "public_port": "{port}" }
腾讯云secretKey查看:https://console.cloud.tencent.com/cam/overview
EO区域ID获取地址:https://console.cloud.tencent.com/edgeone/zones- Webhook接口地址:
- 保存,等穿透生效,穿透会在日志按钮旁边显示地址的,此时已经可以直接使用IP访问
- 如果没问题,右边的WebHook会显示成功,此时你应该可以用域名直接访问内网页面了
常见问题
穿透的IP:端口
无法访问/获取的外网IP不对/显示连通性检查不通过
- 关闭梯子或者把Lucky所在的IP排除,否则获取到的IP可能是经过代理的IP
- 检查网络类型是否真的是NAT1,并且关闭光猫+路由器的防火墙,开启UPNP
Webhook提醒[当前域名状态下无法进行该操作...]等情况
当前域名状态下无法进行该操作,可能是域名处于部署中,请稍后操作,若无法解决,请联系智能客服或提交工单。
说明这个域名上次更新还没完成,需要等一段时间才能更新
速度测试
测试教程
启动一个Docker镜像,并用前面步骤的STUN设置好穿透和Webhook
docker run -p 80:8080 -d --name speedtest --rm ghcr.io/librespeed/speedtest
直连测试
不经过腾讯云直连的速度测试,这里的下载速度实际上是家宽的上行,反过来上传就是下行
可以看到『上传』速度基本是家宽下载上限,『下载』受限于家宽的上行基本跑不满下载的
转发测试
可以看到,转发测试『上传』速度反而更快了,这可能是因为直连会被跨网限速,EO不限速
『下载』速度大幅下降,因为EO免费版速度有限制,备案域名和付费套餐速度应该会快一些