├── README.md └── moon.sh /README.md: -------------------------------------------------------------------------------- 1 | # zerotier_moon 2 | 创建zerotier虚拟局域网moon节点一键脚本,包含SSH端口更改、计划任务设定等功能 3 | # 用法: 4 | 5 | curl -O https://raw.githubusercontent.com/dajiangfu/zerotier_moon/master/moon.sh && chmod +x moon.sh && ./moon.sh 6 | 7 | # 1.配置客户端 8 | 9 | Linux: 10 | 11 | 使用之前步骤中 moon.json 文件中的 id 值 (10 位的字符串,就是xxxxxx),不知道的话在服务器上执行如下命令可以得到id。 12 | 13 | 执行命令:grep id /var/lib/zerotier-one/moon.json | head -n 1 14 | 15 | 然后在客户端机器里执行命令: 16 | 17 | 执行命令:zerotier-cli orbit ed2c88f24 ed2c88f24 18 | 19 | 此处的ed2c88f24就是刚刚在服务器得到的ID值 20 | 21 | Windows: 22 | 23 | 打开服务程序services.msc, 找到服务"ZeroTier One", 并且在属性内找到该服务可执行文件路径,并且在其下建立moons.d文件夹,然后将moon服务器下生成的000xxxx.moon文件,拷贝到此文件夹内..再重启该服务即可(计算机右键管理-找到服务双击打开-找到zerotier one右键重新启动即可) 24 | 25 | 路径一般是Windows: C:\ProgramData\ZeroTier\One 26 | 27 | # 2.测试是否成功 28 | 29 | 客户端cmd执行命令:zerotier-cli listpeers 若有出现你的服务器IP地址,即可证明moon连接成功 30 | 31 | # 完成客户端配置 32 | -------------------------------------------------------------------------------- /moon.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | function blue(){ 4 | echo -e "\033[34m\033[01m$1\033[0m" 5 | } 6 | function green(){ 7 | echo -e "\033[32m\033[01m$1\033[0m" 8 | } 9 | function red(){ 10 | echo -e "\033[31m\033[01m$1\033[0m" 11 | } 12 | function version_lt(){ 13 | test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" != "$1"; 14 | } 15 | 16 | #copy from 秋水逸冰 ss scripts 17 | if [[ -f /etc/redhat-release ]]; then 18 | release_os="centos" 19 | elif cat /etc/issue | grep -Eqi "debian"; then 20 | release_os="debian" 21 | elif cat /etc/issue | grep -Eqi "ubuntu"; then 22 | release_os="ubuntu" 23 | elif cat /etc/issue | grep -Eqi "centos|red hat|redhat"; then 24 | release_os="centos" 25 | elif cat /proc/version | grep -Eqi "debian"; then 26 | release_os="debian" 27 | elif cat /proc/version | grep -Eqi "ubuntu"; then 28 | release_os="ubuntu" 29 | elif cat /proc/version | grep -Eqi "centos|red hat|redhat"; then 30 | release_os="centos" 31 | fi 32 | 33 | if [ "$release_os" == "centos" ]; then 34 | systemPackage_os="yum" 35 | elif [ "$release_os" == "ubuntu" ]; then 36 | systemPackage_os="apt" 37 | elif [ "$release_os" == "debian" ]; then 38 | systemPackage_os="apt" 39 | fi 40 | 41 | #修改SSH端口号 42 | function change_ssh_port(){ 43 | cd 44 | declare -i port_num 45 | read -p "请输入新端口号(1024-65535):" port_num 46 | if [[ $port_num -ge 1024 && $port_num -le 65535 ]]; then 47 | green " 输入端口号正确,正在设置该端口号" 48 | else 49 | red "输入的端口号错误,请重新输入" 50 | unset port_num 51 | change_ssh_port 52 | fi 53 | grep -q "Port $port_num" /etc/ssh/sshd_config 54 | if [ $? -eq 0 ]; then 55 | red " 端口已经添加,请勿重复添加" 56 | return 57 | else 58 | sed -i "/Port 22/a\Port $port_num" /etc/ssh/sshd_config 59 | sed -i '/Port 22/s/^#//' /etc/ssh/sshd_config 60 | if [ "$release_os" == "centos" ]; then 61 | firewall-cmd --zone=public --add-port=$port_num/tcp --permanent 62 | firewall-cmd --reload 63 | elif [ "$release_os" == "ubuntu" ]; then 64 | ufw allow $port_num 65 | ufw reload 66 | fi 67 | #目前SELinux 支持三种模式,分别是enforcing:强制模式,permissive:宽容模式,disabled:关闭 68 | if [ -f "/etc/selinux/config" ]; then 69 | CHECK=$(grep SELINUX= /etc/selinux/config | grep -v "#") 70 | if [ "$CHECK" != "SELINUX=disabled" ]; then 71 | read -p "检测到SELinux开启状态,是否继续开启SElinux ?请输入 [Y/n] :" yn 72 | [ -z "${yn}" ] && yn="y" 73 | if [[ $yn == [Yy] ]]; then 74 | green "添加放行$port_num端口规则" 75 | $systemPackage_os -y install policycoreutils-python 76 | semanage port -a -t ssh_port_t -p tcp $port_num 77 | else 78 | if [ "$CHECK" == "SELINUX=enforcing" ]; then 79 | sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 80 | elif [ "$CHECK" == "SELINUX=permissive" ]; then 81 | sed -i 's/SELINUX=permissive/SELINUX=disabled/g' /etc/selinux/config 82 | fi 83 | red "=======================================================================" 84 | red "关闭selinux后,必须重启VPS才能生效,再执行本脚本,即将在3秒后重启......" 85 | red "=======================================================================" 86 | clear 87 | green "重启倒计时3s" 88 | sleep 1s 89 | clear 90 | green "重启倒计时2s" 91 | sleep 1s 92 | clear 93 | green "重启倒计时1s" 94 | sleep 1s 95 | clear 96 | green "重启中..." 97 | reboot 98 | fi 99 | fi 100 | fi 101 | systemctl restart sshd.service 102 | sleep 1s 103 | red " 稍后请使用修改好的端口连接SSH" 104 | fi 105 | } 106 | 107 | #关闭SSH默认22端口 108 | function close_ssh_default_port(){ 109 | cd 110 | grep -q "#Port 22" /etc/ssh/sshd_config 111 | if [ $? -eq 0 ]; then 112 | red " 端口22已被关闭,无需重复操作" 113 | else 114 | sed -i 's/Port 22/#Port 22/g' /etc/ssh/sshd_config 115 | if [ "$release_os" == "centos" ]; then 116 | firewall-cmd --reload 117 | elif [ "$release_os" == "ubuntu" ]; then 118 | ufw reload 119 | fi 120 | systemctl restart sshd.service 121 | green " 新端口连接成功后屏蔽原22端口成功" 122 | fi 123 | } 124 | 125 | #创建moon节点 126 | function creat_moon(){ 127 | blue "安装zerotier软件" 128 | curl -s https://install.zerotier.com/ | sudo bash 129 | blue "启动zerotier" 130 | systemctl start zerotier-one.service 131 | systemctl enable zerotier-one.service 132 | blue "将安装好ZeroTier的加入你事先注册好的ZeroTier虚拟局域网中" 133 | read -p "请输入你的ZeroTier虚拟局域网ID号:" you_net_ID 134 | zerotier-cli join $you_net_ID | grep OK 135 | if [ $? -eq 0 ]; then 136 | green "加入网络成功!请去zerotier管理页面,对加入的设备进行打钩" 137 | read -s -n1 -p "确认zerotier管理页面加入该moon节点后按任意键继续... " 138 | blue "搭建ZeroTier的Moon中转服务器,生成moon配置文件" 139 | cd /var/lib/zerotier-one/ 140 | blue "生成moon.json文件并对其进行编辑" 141 | ip_addr=`curl ipv4.icanhazip.com` 142 | zerotier-idtool initmoon identity.public > moon.json 143 | if sed -i "s/\[\]/\[ \"$ip_addr\/9993\" \]/" moon.json >/dev/null 2>/dev/null; then 144 | green "编辑完成" 145 | else 146 | red "编辑出错" 147 | fi 148 | if [ "$release_os" == "centos" ]; then 149 | blue "防火墙开启zerotier默认udp端口9993" 150 | firewall-cmd --zone=public --add-port=9993/udp --permanent 151 | blue "防火墙重启" 152 | firewall-cmd --reload 153 | elif [ "$release_os" == "ubuntu" ]; then 154 | blue "防火墙开启zerotier默认udp端口9993" 155 | ufw allow 9993 156 | bule "防火墙重启" 157 | ufw reload 158 | fi 159 | blue "生成签名文件" 160 | zerotier-idtool genmoon moon.json 161 | blue "创建moons.d文件夹,并把签名文件移动到文件夹内" 162 | mkdir moons.d 163 | mv ./*.moon ./moons.d/ 164 | blue "zerotier-one服务" 165 | systemctl restart zerotier-one 166 | green "moon节点创建完成" 167 | green "请记得将moons.d文件夹拷贝出来用于客户端的配置,路径/var/lib/zerotier-one/" 168 | else 169 | red "加入失败,请检查你的网络ID号有无错误" 170 | fi 171 | } 172 | 173 | #设置计划任务 174 | function crontab_edit(){ 175 | cd 176 | cat /etc/crontab 177 | read -p "请按照以上格式输入计划任务:" crontab_cmd 178 | rm -f /etc/crontab 179 | sleep 1s 180 | cat > /etc/crontab <<-EOF 181 | SHELL=/bin/bash 182 | PATH=/sbin:/bin:/usr/sbin:/usr/bin 183 | MAILTO=root 184 | 185 | # For details see man 4 crontabs 186 | 187 | # Example of job definition: 188 | # .---------------- minute (0 - 59) 189 | # | .------------- hour (0 - 23) 190 | # | | .---------- day of month (1 - 31) 191 | # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... 192 | # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat 193 | # | | | | | 194 | # * * * * * user-name command to be executed 195 | 196 | $crontab_cmd 197 | 198 | EOF 199 | chmod +x /etc/crontab 200 | systemctl enable crond.service 201 | systemctl start crond.service 202 | crontab /etc/crontab 203 | systemctl reload crond.service 204 | systemctl status crond.service 205 | blue "编辑后的计划任务:" 206 | echo 207 | crontab -l 208 | } 209 | 210 | #清除缓存 211 | function del_cache(){ 212 | cd 213 | green " 缓存已清除完毕" 214 | rm -f "$0" 215 | } 216 | 217 | #一键全自动安装 218 | function auto_install(){ 219 | read -p "是否关闭SSH默认22端口 ?请输入 [Y/n] :" yn 220 | [ -z "${yn}" ] && yn="y" 221 | if [[ $yn == [Yy] ]]; then 222 | close_ssh_default_port 223 | sleep 1s 224 | fi 225 | read -p "是否创建moon ?请输入 [Y/n] :" yn 226 | [ -z "${yn}" ] && yn="y" 227 | if [[ $yn == [Yy] ]]; then 228 | creat_moon 229 | sleep 1s 230 | fi 231 | read -p "是否设置计划任务 ?请输入 [Y/n] :" yn 232 | [ -z "${yn}" ] && yn="y" 233 | if [[ $yn == [Yy] ]]; then 234 | echo 235 | crontab_edit 236 | sleep 1s 237 | fi 238 | read -p "是否清除缓存 ?请输入 [Y/n] :" yn 239 | [ -z "${yn}" ] && yn="y" 240 | if [[ $yn == [Yy] ]]; then 241 | del_cache 242 | fi 243 | } 244 | 245 | #开始菜单 246 | start_menu(){ 247 | clear 248 | green " =======================================" 249 | green " 介绍:" 250 | green " 一键zerotier虚拟局域网moon节点综合脚本" 251 | green " 一键配置计划任务、修改SSH端口" 252 | green " =======================================" 253 | echo 254 | green " 1. 修改SSH端口号" 255 | green " 2. 关闭SSH默认22端口" 256 | green " 3. 启动moon节点安装脚本" 257 | green " 4. 设置计划任务" 258 | green " 5. 清除缓存" 259 | green " 6. 全自动执行2-5" 260 | blue " 0. 退出脚本" 261 | echo 262 | read -p "请输入数字:" num 263 | case "$num" in 264 | 1) 265 | change_ssh_port 266 | exit 267 | ;; 268 | 2) 269 | close_ssh_default_port 270 | sleep 1s 271 | read -s -n1 -p "按任意键返回菜单 ... " 272 | start_menu 273 | ;; 274 | 3) 275 | creat_moon 276 | sleep 1s 277 | read -s -n1 -p "按任意键返回上级菜单 ... " 278 | start_menu 279 | ;; 280 | 4) 281 | crontab_edit 282 | sleep 1s 283 | read -s -n1 -p "按任意键返回菜单 ... " 284 | start_menu 285 | ;; 286 | 5) 287 | del_cache 288 | ;; 289 | 6) 290 | auto_install 291 | ;; 292 | 0) 293 | exit 1 294 | ;; 295 | *) 296 | clear 297 | red "请输入正确数字" 298 | sleep 1s 299 | start_menu 300 | ;; 301 | esac 302 | } 303 | 304 | start_menu 305 | --------------------------------------------------------------------------------