stun穿透+tailscale方案进行远程访问(50%)

stun穿透的前提是nat1,可以将内网服务通过本地网络上层的公网ip加端口开放出去。公网ip和端口一般会不定期的更新。所以基于这些特性,来优化stun穿透的使用体验。

这里我使用一个特别好用的工具:lucky。基本的关于网络设置的功能他都有并且使用简单方便。


搭建网页服务

1.设置ddns

lucky的ddns非常方便,我推荐使用一些免费的二级域名来做ddns。例如dynv6或者freemyip。

ddns具体步骤就不细说了,因为这很简单。注意要将域名和子域名都添加上。

这里要选择通过接口获取ip,这样就是ddns公网ipv4地址。

ddns

1718451497621

2.设置反向代理

设置反向代理有很多好处,其一是只用穿透一个端口就可以多个本地服务,非常方便。同时反向代理也更安全。

我们创建一个新的web服务规则打开tcp4和tls,同时自行设置一个没用过的端口作为监听端口,我这里设置为9902。

web服务规则

设置好后,就可以开始添加子规则。这里前端地址设置为自己ddns的域名,前缀添加为自己容易记忆的字符串。比如我这里是反代lucky,就将前缀填写为lucky。后端地址就填lucky在本地的地址加端口。

如果你还想添加更多的子规则就如法炮制就可以了。

子规则

这样反向代理就设置的差不多了,我们接下来通过stun穿透将反向代理的监听端口开放出去,我这里就是上面填的9902.

开放反向代理监听端口

这样反向代理服务就完全设置好了。可以看到通过域名加上stun穿透的端口就可以访问了。

成功访问地址

3.设置重定向服务

重定向服务是为了通过一个固定域名加端口跳转到最新的反向代理地址。所以我们可以借用国内的frp服务来实现这种效果,并且由于只做基本的跳转,也并不消耗多少流量。

我们添加一个新的规则,同样选择tcp4和tls,并且把监听端口设置一个没有用的端口,我这里就设置为9903。

重定向服务

接着我们需要将重定向服务的端口通过frp开放出去。以樱花穿透为例,本地端口选择自己设置的重定向监听端口,开放端口选一个自己容易记得的端口。然后在自己的主机上连接上frp的服务就可以了

frp设置

当frp服务连接上的时候会显示连接的域名加端口(我自己选择的是33333)

frp服务连接

接下来我们在dynv6上再申请一个域名,将泛域名通过cname的方式记录这个域名(我这里就是frp-oil.top)注意,dynv6上的cname需要在记录中的域名后加上一个点才能生效。

cname的方式记录

接下来,回到重定向规则那里,添加子规则,服务类型选择重定向。我演示开放lucky为例,前端地址就填刚刚cname的域名,前缀自行编辑。后端就选择上面反向代理穿透出去可以访问的地址。

重定向子规则

这样就可以通过前端地址加上固定的端口(我设置的是33333)就可以转跳到下面的后端地址了。

接下来我们就通过webhook让端口变换时自动同步到重定向的后端地址中。

4.设置webhook自动更新端口

我们先在lucky的设置中打开opentoken,记下来这个token。

opentoken

然后回到重定向规则的页面,点击重定向的绿色标识会复制出来对应的接口

重定向api接口

然后在stun规则的设置中开启webhook,接口中的地址和端口填写自己的本地ip和lucky服务端口即可。请求方式为put,请求头填写自己刚刚记下的token。请求主体填写刚刚复制出来的api接口,把最后的端口更换即可。

一般来说每个人都有多个服务,这里请求主体的接口拼在一起需要注意格式。

1
2
3
4
5
6
7
http://127.0.0.1:16601/openapi/webseivce/update
PUT
openToken:
[{"rule":"D0kEqYYOq99HOEkM","subRule":"GjszgnnKT22jSLLt","serviceType":"redirect","location":"https://nas.motto.dynv6.net:#{port}{path}"},
{"rule":"D0kEqYYOq99HOEkM","subRule":"D7dbwvZTrK5z6yY9","serviceType":"redirect","location":"https://lucky.motto.dynv6.net:#{port}{path}"}]
//注意[]和{}的对应,两个接口之间用,隔开
{"ret":0}

填写好后点一下webhook手动触发的蓝色按钮看看是不是调用成功了,如果没有就看看哪填的有问题。

stun的webhook设置

这样就把端口更新也解决了

5.申请证书和结束

由于开启了tls,大家最后在安全管理里面将刚刚申请的两个dynv6域名申请ssl证书,就不会出现不安全的提示了。如果不想申请,也可以把tls关了。

这样网页服务就搭建完成了,我这里只是提供思路,大家需要了解基本的原理,这样的话后期就更好维护和更改。

搭建tailscale服务


stun穿透+tailscale方案进行远程访问(50%)
https://motto1.github.io/2024/06/07/stun穿透+tailscale方案进行远程访问/
作者
motto
发布于
2024年6月7日
许可协议