|
本帖最后由 绮恸我心@爱绮命 于 2022-10-12 15:16 编辑
自己家是移动宽带,有公网ipv6,但是没有公网ipv4。办公室只有ipv4,ipv6使用不了,遂公网ipv6对我办公暂时没有什么帮助。朋友家是电信宽带,帮她要了公网ipv4,然后自己编译openwrt固件,送了个路由器给她,帮她把光猫桥接。可以使用她家公网ipv4。上面有zerotier,不适用moon服务,从办公室连接我家内网延迟大概在300-400ms左右。遂添加了moon,延迟降低到20ms左右,使用上感觉不到什么延迟。但是moon服务在最新版本的zerotier上测试用域名不正常,不能正常解析ip。看官网上说好像以后不支持域名添加到moon服务里面。所以想到用脚本更新公网ip添加到moon.json。这样就无痛使用zerotier和moon中转服务。
1、获取路由器公网ip。
- current_wan_ip=`ifconfig -a | grep P-t-P | awk '{print $2}' | tr -d "addr:"`
复制代码
2、获取moon.json中填写的ip
- current_moon_ip_value=$(awk -F""" '/stableEndpoints/{print $4}' /var/lib/zerotier-one/moon.json)
复制代码
3、判断两个ip是否相等,如果ip没有改变,则不进行操作;如果不相同,则替换目前公网ip到moon.json中,并生成000000xxxxx.moon,移动到moons.d文件夹,重启zerotier服务。只要在路由器中设置定时脚本,服务端基本功能就实现了。
- <div><span style="color: rgb(0, 0, 0); font-size: medium; background-color: rgb(255, 255, 255);"># 000000xxxxx.moon需修改成实际生成文件的文件名,同一台服务器加入zerotier网络后名字固定</span>
- <font color="#000"><font size="3">current_wan_ip_value="${current_wan_ip}/9993"</font></font>
- <font color="#000"><font size="3">if [ "${current_moon_ip_value}" != "${current_wan_ip_value}" ]; then </font></font>
- <font color="#000"><font size="3"> echo "ip is changed" </font></font>
- <font color="#000"><font size="3"> sed -e "s@$current_moon_ip_value@$current_wan_ip_value@g" -i /var/lib/zerotier-one/moon.json </font></font>
- <font color="#000"><font size="3"> zerotier-idtool genmoon /var/lib/zerotier-one/moon.json </font></font>
- <font color="#000"><font size="3"> mv /tmp/000000xxxxx.moon /var/lib/zerotier-one/moons.d </font></font>
- <font color="#000"><font size="3"> /etc/init.d/zerotier restart</font></font>
- <font color="#000"><font size="3">else </font></font>
- <font color="#000"><font size="3"> echo "ip no changed"fi</font></font></div>
复制代码
4、后来发现如果服务端重新生成0000xxxx.moon文件,客户端需要重新加入moon网络才能及时生效。故需要服务端更改后通知客户端重新加入moon网络。而我用的是L大固件,默认编译的时候没有编译openssh相关工具,默认使用的是dropbear。使用dropbear配置免密码登录客户端。
使用相关工具生成服务端私钥和公钥,如putty或者ssh-keygen,个人使用的是openwrt自带的dropbear
- dropbearkey -t rsa -f /root/.ssh/id_rsa | grep "ssh-rsa" > /root/.ssh/id_rsa.pub
复制代码
登录客户端把公钥写入/etc/dropbear/authorized_keys文件中
- <span style="color: rgb(0, 0, 0); font-size: medium; background-color: rgb(255, 255, 255);">#xxx.xxx.xxx.xxx 是客户端ip,可以在zerotier中设置路由,这样就可以使用本地ip</span>
复制代码
在各个客户端中编写一个重新加入moon网络脚本
- <div><font color="#000"><font size="3">#/bin/ash</font></font>
- <span style="color: rgb(0, 0, 0); font-size: medium;">#xxxx 是moon网络id,可以在服务器端/var/lib/zerotier-one/moon.json中查看</span><font color="#000"><font size="3">
- </font></font><span style="color: rgb(0, 0, 0); font-size: medium;">zerotier-cli deorbit xxxx</span>
- <span style="color: rgb(0, 0, 0); font-size: medium;">zerotier-cli orbit xxxx xxxx</span></div>
复制代码
保存文件为/root/mysh.sh,添加运行权限,
最后服务端完整代码
- <font color="#000"><font size="3">#/bin/ash
- </font></font>
- <font color="#000"><font size="3">current_wan_ip=`ifconfig -a | grep P-t-P | awk '{print $2}' | tr -d "addr:"`</font></font>
复制代码
在服务端中设置定时没10分钟运行一次脚本。由于脚本内容简单,几乎不需要消耗什么资源,定时任务可以根据个人情况自行修改
以上仅适合家庭有公网ip,且公网ip会随机变换的情况。
以上代码,在我的情况下测试成功。
服务端代码
客户端代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|