Zerotier+Moon+Nginx实现内网穿透搭建网站

Song118 次浏览0个评论2024年11月02日

由于Zerotier服务器在国外,导致在国内的速度不快,所以官方推荐设置自己的moon服务器做节点加速。moon服务器需要24小时不挂机,并且有固定ip,对硬件要求不高,所以云服务器比较符合做moon服务器

第一步:在云服务器linux上安装Zerotier客户端:

curl -s https://install.zerotier.com/ | sudo bash

默认监听的端口是9993,这个端口需要对外提供服务,需要在服务器防火墙和云服务提供商的安全组的UDP传输类型进行设置放行。

安装完成后,输入命令检查是否安装成功:

zerotier-cli info

代表已经安装成功。

第二步:进入zerotier官网创建一个虚拟网络:

访问官网:https://my.zerotier.com,注册登录之后,点击Create A Network按钮创建一个虚拟网络

看到记录产生的时候,代表已经创建成功。点击创建成功的NETWORKID,会进入到网络参数配置详情页:

↑ 可以对Name进行修改方便日后识别

↑  尽量创建一个私有的网络,这样相对安全一些,需要管理员手动通过才能加入到该网络。

 ↑ 选择一个虚拟网络网段,为了好记,我选择了192.168.192.*这个网段。

第三步:把云服务器linux加入虚拟网络:

输入命令加入网络

zerotier-cli join [network_ID]

↑ 反馈join ok代表加入成功。

 ↑  回到官网网络详情页,页面下方会发现一条记录,通过观察Address发现正是云服务器申请加入。点击Auth通过,即可加入此虚拟网络。

↑  点击通过后,过几秒钟(不需要刷新页面)会发现,系统为云服务器分配了ip 185,可以在short-name文本框中为这台机器起一个名字方便识别。

回到linux中,输入命令观察是否加入成功:

zerotier-cli  listnetworks

↑ 从反馈的描述中得知已加入成功。

输入ifconfig观察ip:

↑ zerotier已为系统生成了虚拟网卡,ip也没问题。

第四步:配置Moon

进入zerotier-one程序目录:

cd /var/lib/zerotier-one

生成moon配置文件:

zerotier-idtool initmoon identity.public >> moon.json

运行后moon.json就生成出来了,

vim moon.json

需要编辑红框位置的配置节点stableEndpoints,指定为当前云服务器的外网ip与监听端口号

↑  需要注意ip与端口号直接用/分割,而不是:

生成.moon文件:

zerotier-idtool genmoon moon.json

↑  生成成功

将生成的.moon文件移动到moons.d目录下

mkdir moons.d
mv 000000xxxxxx.moon moons.d

重启zerotier-one服务

systemctl restart zerotier-one

配置开机启动

systemctl enable zerotier-one.service

至此,moon服务器就搭建好了,接下来是在客户端中配置moon节点

在linux和wondows下配置Moon:

假设现在公司本地有一台运行的linux系统,没有公网ip,平时想在家里也能连接操作它:

登录到这台本地linux服务器,安装客户端:

curl -s https://install.zerotier.com | sudo bash

windows客户端则是登录官网下载页https://www.zerotier.com/download/下载安装即可

输入命令查看当前所在网络下的所有机器:

zerotier-cli listpeers

识别到moon的主机之后,输入命令将其由LEAF变为MOON:

zerotier-cli orbit [节点ID] [节点ID]  #linux
zerotier-cli.bat orbit [节点ID] [节点ID]  #windows
zerotier-cli listmoons    #列出加入的Moon节点
zerotier-cli orbit <world ID> <seed> #加入某个Moon节点
zerotier-cli deorbit <world ID> #离开某个Moon节点

windows与linux已经双双设置成功~

ping测试:(ping zerotier为其生成的虚拟ip)

用windows   在本地网络环境下 ping linux

用windows 在异地网络环境下ping linux

PS:经测试,有时候加入网络识别的慢一些,有可能是开启了代理的原因,如果长时间服务器没有识别到,建议检查网络后重试。

使用Nginx反向代理到内网:

我想了想好像不用部署Moon都可以,后续验证了再说吧;其实就是网络使用线上的,服务器使用本地的。等我验证清楚再说吧。

线上Nginx反向代理:

server {
    listen      80;#内网穿透
    server_name www.域名.com;

    location / {
        proxy_pass http://192.168.180.120:80;#内网穿透局域网服务的IP地址和端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

内部服务器无需多说,自己搭建即可。

更多相关好文