说到内网穿透,一般都会想起frp,但速度完全依靠公网服务器的带宽,而且每起一个服务都要暴露一个端口,比较麻烦。
而今天要讲的zeroiter给了我们另一种选择,还可以搭配nginx实现上面类似的效果。
- 异地组网+反向代理 方案
- 内网带宽能跑满,但需要加入网络。
- 外网开放访问,但受服务器带宽影响,且需要只能开放可定端口。
zerotier
一款异地组网工具,每台设备终端上只需要安装对应的客户端,加入到同一个网络组,就可以实现内网 IP 互相访问。
所有的设备都是客户端,连接方式是点对点(p2p)。
基础概念
Earth
指的就是所有设备都连接起来的整体的一个服务。
Network
每一个 Network 包含的所有设备都在同一个网络里。每个网络有一个 Network ID。各客户端通过这个 ID 连接到此网络。
一个账号是可以创建多个网络的。
网络分为 Public 和 Private。
一般我们自己组网是要用 Private,需要在页面授权设备才可以进行访问。
Planet
星球。指的是官方提供的服务器节点(好像在欧洲)。
各客户端都是通过这些服务来互相寻址的。
Moon
自定义的 Planet。由于 Zerotier 没有国内节点,在两个设备刚开始互连的时候有可能需要通过国外的节点寻址,(部分地区)可能创建连接的速度偏慢。
在自己的网络里搭建 Moon 可以使连接提速。
Leaf
客户端。就是连接到网络上的每一个设备。其实经过测试,Moon 也是客户端的一种。这里特指没有额外功能,单纯用于连接的客户端。
nginx
完成了上面的组网后,虽然自己可以随意访问了,但对于没有加入网络的设备要怎么访问呢?
其实很简单,这时候整个可以视作同一个内网,只需要其中一台设备具有公网ip,通过其转发端口就可以了。
# stream模块,用于转发内网端口
stream {
# v-Ubuntu ssh 22端口
upstream rabbitmq{
server 10.24.159.16:22;
}
server{
listen 221; # 任意不占用的端口
proxy_connect_timeout 10s;
proxy_timeout 300s;
proxy_pass rabbitmq; # 注意写法,不带http://
}
# v-Ubuntu mysql 3306端口
server{
listen 33069;
proxy_connect_timeout 10s;
proxy_timeout 300s;
proxy_pass 10.24.159.16:3306;
}
# v-Ubuntu redis 6379端口
server{
listen 63799;
proxy_connect_timeout 10s;
proxy_timeout 300s;
proxy_pass 10.24.159.16:6379;
}
# v-Ubuntu selenium 4455端口
server{
listen 4455;
proxy_connect_timeout 10s;
proxy_timeout 300s;
proxy_pass 10.24.159.16:4488;
}
}
# 仅支持http协议的
http {
//...
}
评论 (0)