【使用Lucky在公网IPv4环境自建重定向和中转服务,固定STUN的反代端口】 – 哔哩哔哩

其他杂项43字数 2995阅读9分59秒阅读模式
摘要【观前提醒】

【观前提醒】

本教程旨在为异地无公网IPv4的环境,提供方便从不特定的纯IPv4外部网络,直接访问内网服务

阅读本教程需要一定的网络和Web服务相关知识基础

本教程基于有公网IPv4的网络环境,使用安装在OpenWrt上的Lucky

需要OpenWrt作为拨号的主路由,或者在拨号设备上设置OpenWrt为DMZ主机

因为本人能力有限,如因为网络和设备等与教程不同而遇到问题,请自行探索

关于Lucky的安装和使用请在官网https://lucky666.cn/仔细阅读说明文档和网友的经验分享

上一期讲了怎么用域名和STUN随机的公网端口访问内网服务

【使用Lucky的STUN穿透,部署近似公网IPv4的反向代理服务】https://www.bilibili.com/read/cv28567798

这期讲一下如果你恰好拥有另一处公网IPv4环境的网络,该怎么为无公网的环境固定访问端口

【第1步 添加DDNS】

上一期已经讲解过如何在Lucky添加DDNS任务

这次你需要另一个域名

假设你另一个域名是b.com,域名列表填写b.com和子域名*.b.com

[email protected]

这样就能把你的公网IP解析到域名了

【第2步 申请SSL证书 】

上一期已经讲解过如何在Lucky申请SSL证书 

这次域名列表填写b.com和子域名*.b.com

把使用IPv4通道申请证书、DNS查询强制IPv4、DNS查询仅使用TCP通道都打开

5d2ecb9879b60e0d5abdc56e88896043180146.png@1002w_2450h.avif


【第3步 设置重定向跳转或反向代理中转】

在Lucky的Web服务一栏点击添加Web服务规则

监听端口选择tcp4,监听端口填一个未被占用的端口,这里假设端口是4

打开防火墙自动放行和TLS,点击添加Web服务子规则

[email protected]

假设需要设置的是上一期AList反向代理的重定向

Web服务类型选择重定向

前端域名填写alist.b.com(子域名前缀可以随你喜欢)

后端地址填写AList的反向代理地址和端口https://alist.a.com:1132

[email protected]

这样在外部网络用浏览器输入alist.b.com:4时就会自动跳转到alist.a.com:1132

如此一来就实现了公网端口的固定,不用再看通知输入随机的端口了

但是有些使用websocket的服务是无法通过重定向跳转使用的,就比如Home Assistant的APP

首先编辑Web服务规则,把操作模式改为定制模式,点击添加Web服务子规则

Web服务类型选择反向代理,打开忽略后端TLS证书验证、使用目标地址Host

前端域名ha.b.com,后端地址https://ha.a.com:1132

注意,二次反向代理Home Assistant需要禁用Lucky默认打开的万事大吉,否则会报错400 bad request

查阅其日志可以看到报错原因为请求头过多,所以需要关闭自添加请求头的万事大吉

[email protected]

这样在外部网络用浏览器输入ha.b.com:4就不会跳转,APP就能正常使用websocket

这就是重定向跳转和回源中转的区别,一个会改变浏览器显示的地址,一个不会

前者能让你直连后端的服务,流量不经过当前设备,资源消耗低,性能更高

后者虽然会让流量经过当前这台设备,但是可以支持一些不能跳转的服务

当然,也别忘了添加HTTP自动跳转HTTPS的Web服务规则

[email protected]


【第4步 设置Webhook同步变化的端口】

上一期已经讲过STUN获取的公网端口是随机的,也就是一旦变化就要修改上一步中后端的端口

为此需要设置Webhook以自动同步这个端口,否则手动改设置岂不是比看通知更麻烦

Lucky提供了OpenToken供第三方开发者调用api使用,在Lucky的设置一栏最底下打开,点保存修改

[email protected]

记下这个OpenToken

启用OpenToken后,点击Web规则的这个地方,就会得到一条api

[email protected]

形如[{"rule":"4gC0PGgEDKv0gCcD","subRule":"u4ZmO8CYRUAr1tH8","serviceType":"redirect","location":"https://alist.a.com:1132"}]

包含了规则的唯一标识、子规则唯一标识、子规则类型、后端地址四项信息

api会被自动复制到剪贴板,记下这个api

然后给Lucky也添加一条Web服务子规则来远程调用api

Web服务类型选择反向代理

前端例如lucky.b.com,后端填写Lucky的地址和端口,例如http://192.168.1.1:16601

b2e984fadfb05b87f88ba5cce9dfc078180146.png@1192w_1848h.avif

接下来回到上一期中设置STUN穿透的那台设备上的Lucky编辑穿透规则

因为已经不需要再查看通知得知变化后的端口了,全局Webhook可以关闭

打开这条规则自身的Webhook

接口地址填https://lucky.b.com:4/openapi/webseivce/update

https://lucky.b.com:4是刚才设置的Lucky的反向代理域名端口

请求方法选择PUT

请求头填openToken:XXXXXXXXXX

XXXXXXXXXX就是刚才记下的OpenToken

请求主体填刚才记下的Web服务子规则的api,把数字端口改成#{port}

多条api像下面这样选取{}里的内容用逗号隔开,包含在一个[]里

[{"rule":"4gC0PGgEDKv0gCcD","subRule":"u4ZmO8CYRUAr1tH8","serviceType":"redirect","location":"https://alist.a.com:#{port}"},

{"rule":"4gC0PGgEDKv0gCcD","subRule":"WRsd9mAVfYVpIp77","serviceType":"reverseproxy","location":"https://ha.a.com:#{port}"}]

接口调用成功包含的字符串填{"ret":0}

[email protected]

这样在STUN获取的公网端口变化时,就会被自动同步到公网设备上的Lucky

【下期预告】

没有了,完结撒花

感谢古大羊大佬提供了Lucky这样一款好用的插件

 
  • 本文由 asdfasd 发表于 2025-02-2202:20:24
  • 转载请务必保留本文链接:http://wp.fangfa.me/other-note/%e3%80%90%e4%bd%bf%e7%94%a8lucky%e5%9c%a8%e5%85%ac%e7%bd%91ipv4%e7%8e%af%e5%a2%83%e8%87%aa%e5%bb%ba%e9%87%8d%e5%ae%9a%e5%90%91%e5%92%8c%e4%b8%ad%e8%bd%ac%e6%9c%8d%e5%8a%a1%ef%bc%8c%e5%9b%ba%e5%ae%9ast.html