├── other ├── README.md ├── Aria2 │ ├── dht.dat │ └── aria2.conf ├── adhook.ini └── ocserv.conf ├── sources ├── ca.sources.list ├── cn.sources.list ├── de.sources.list ├── fr.sources.list ├── hk.sources.list ├── jp.sources.list ├── kr.sources.list ├── ru.sources.list ├── sg.sources.list ├── uk.sources.list ├── us.sources.list ├── cn2.sources.list ├── us.sources_stretch.list ├── aliyun.sources.list ├── 163.sources.list └── README.md ├── LICENSE ├── base64.sh ├── service ├── adbyby_debian ├── adbyby_centos ├── lightsocks_debian ├── lightsocks_centos ├── caddy_debian ├── caddy_centos ├── mtproxy_debian ├── mtproxy_centos ├── ocserv_debian ├── goflyway_debian ├── daze_debian ├── ss_go_debian ├── daze_centos ├── goflyway_centos ├── brook_centos ├── ss_go_centos ├── brook_debian ├── dowsdns_debian ├── dowsdns_centos ├── pserver_debian ├── mtproxy_go_debian ├── mtproxy_go_centos ├── pserver_centos ├── aria2_debian ├── aria2_centos ├── cloudt_debian ├── cloudt_centos ├── brook-pf_debian └── brook-pf_centos ├── libsodium.sh ├── pythonhttp.sh ├── caddy_install.sh ├── adbyby.sh ├── ssh_port.sh ├── haproxy.sh ├── bbr.sh ├── aria2_old.sh ├── README.md ├── iptables-pf.sh ├── pserver.sh └── socat.sh /other/README.md: -------------------------------------------------------------------------------- 1 | # 一些脚本的依赖都放到这里 2 | -------------------------------------------------------------------------------- /other/Aria2/dht.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/P3TERX/doubi_backup/HEAD/other/Aria2/dht.dat -------------------------------------------------------------------------------- /sources/ca.sources.list: -------------------------------------------------------------------------------- 1 | deb http://ftp.ca.debian.org/debian/ jessie main 2 | deb-src http://ftp.ca.debian.org/debian/ jessie main 3 | deb http://ftp.ca.debian.org/debian jessie-backports main 4 | 5 | deb http://security.debian.org/ jessie/updates main contrib 6 | deb-src http://security.debian.org/ jessie/updates main contrib 7 | 8 | # jessie-updates, previously known as 'volatile' 9 | deb http://ftp.ca.debian.org/debian/ jessie-updates main contrib 10 | deb-src http://ftp.ca.debian.org/debian/ jessie-updates main contrib -------------------------------------------------------------------------------- /sources/cn.sources.list: -------------------------------------------------------------------------------- 1 | deb http://ftp.cn.debian.org/debian/ jessie main 2 | deb-src http://ftp.cn.debian.org/debian/ jessie main 3 | deb http://ftp.cn.debian.org/debian jessie-backports main 4 | 5 | deb http://security.debian.org/ jessie/updates main contrib 6 | deb-src http://security.debian.org/ jessie/updates main contrib 7 | 8 | # jessie-updates, previously known as 'volatile' 9 | deb http://ftp.cn.debian.org/debian/ jessie-updates main contrib 10 | deb-src http://ftp.cn.debian.org/debian/ jessie-updates main contrib -------------------------------------------------------------------------------- /sources/de.sources.list: -------------------------------------------------------------------------------- 1 | deb http://ftp.de.debian.org/debian/ jessie main 2 | deb-src http://ftp.de.debian.org/debian/ jessie main 3 | deb http://ftp.de.debian.org/debian jessie-backports main 4 | 5 | deb http://security.debian.org/ jessie/updates main contrib 6 | deb-src http://security.debian.org/ jessie/updates main contrib 7 | 8 | # jessie-updates, previously known as 'volatile' 9 | deb http://ftp.de.debian.org/debian/ jessie-updates main contrib 10 | deb-src http://ftp.de.debian.org/debian/ jessie-updates main contrib -------------------------------------------------------------------------------- /sources/fr.sources.list: -------------------------------------------------------------------------------- 1 | deb http://ftp.fr.debian.org/debian/ jessie main 2 | deb-src http://ftp.fr.debian.org/debian/ jessie main 3 | deb http://ftp.fr.debian.org/debian jessie-backports main 4 | 5 | deb http://security.debian.org/ jessie/updates main contrib 6 | deb-src http://security.debian.org/ jessie/updates main contrib 7 | 8 | # jessie-updates, previously known as 'volatile' 9 | deb http://ftp.fr.debian.org/debian/ jessie-updates main contrib 10 | deb-src http://ftp.fr.debian.org/debian/ jessie-updates main contrib -------------------------------------------------------------------------------- /sources/hk.sources.list: -------------------------------------------------------------------------------- 1 | deb http://ftp.hk.debian.org/debian/ jessie main 2 | deb-src http://ftp.hk.debian.org/debian/ jessie main 3 | deb http://ftp.hk.debian.org/debian jessie-backports main 4 | 5 | deb http://security.debian.org/ jessie/updates main contrib 6 | deb-src http://security.debian.org/ jessie/updates main contrib 7 | 8 | # jessie-updates, previously known as 'volatile' 9 | deb http://ftp.hk.debian.org/debian/ jessie-updates main contrib 10 | deb-src http://ftp.hk.debian.org/debian/ jessie-updates main contrib -------------------------------------------------------------------------------- /sources/jp.sources.list: -------------------------------------------------------------------------------- 1 | deb http://ftp.jp.debian.org/debian/ jessie main 2 | deb-src http://ftp.jp.debian.org/debian/ jessie main 3 | deb http://ftp.jp.debian.org/debian jessie-backports main 4 | 5 | deb http://security.debian.org/ jessie/updates main contrib 6 | deb-src http://security.debian.org/ jessie/updates main contrib 7 | 8 | # jessie-updates, previously known as 'volatile' 9 | deb http://ftp.jp.debian.org/debian/ jessie-updates main contrib 10 | deb-src http://ftp.jp.debian.org/debian/ jessie-updates main contrib -------------------------------------------------------------------------------- /sources/kr.sources.list: -------------------------------------------------------------------------------- 1 | deb http://ftp.kr.debian.org/debian/ jessie main 2 | deb-src http://ftp.kr.debian.org/debian/ jessie main 3 | deb http://ftp.kr.debian.org/debian jessie-backports main 4 | 5 | deb http://security.debian.org/ jessie/updates main contrib 6 | deb-src http://security.debian.org/ jessie/updates main contrib 7 | 8 | # jessie-updates, previously known as 'volatile' 9 | deb http://ftp.kr.debian.org/debian/ jessie-updates main contrib 10 | deb-src http://ftp.kr.debian.org/debian/ jessie-updates main contrib -------------------------------------------------------------------------------- /sources/ru.sources.list: -------------------------------------------------------------------------------- 1 | deb http://ftp.ru.debian.org/debian/ jessie main 2 | deb-src http://ftp.ru.debian.org/debian/ jessie main 3 | deb http://ftp.ru.debian.org/debian jessie-backports main 4 | 5 | deb http://security.debian.org/ jessie/updates main contrib 6 | deb-src http://security.debian.org/ jessie/updates main contrib 7 | 8 | # jessie-updates, previously known as 'volatile' 9 | deb http://ftp.ru.debian.org/debian/ jessie-updates main contrib 10 | deb-src http://ftp.ru.debian.org/debian/ jessie-updates main contrib -------------------------------------------------------------------------------- /sources/sg.sources.list: -------------------------------------------------------------------------------- 1 | deb http://ftp.sg.debian.org/debian/ jessie main 2 | deb-src http://ftp.sg.debian.org/debian/ jessie main 3 | deb http://ftp.sg.debian.org/debian jessie-backports main 4 | 5 | deb http://security.debian.org/ jessie/updates main contrib 6 | deb-src http://security.debian.org/ jessie/updates main contrib 7 | 8 | # jessie-updates, previously known as 'volatile' 9 | deb http://ftp.sg.debian.org/debian/ jessie-updates main contrib 10 | deb-src http://ftp.sg.debian.org/debian/ jessie-updates main contrib -------------------------------------------------------------------------------- /sources/uk.sources.list: -------------------------------------------------------------------------------- 1 | deb http://ftp.uk.debian.org/debian/ jessie main 2 | deb-src http://ftp.uk.debian.org/debian/ jessie main 3 | deb http://ftp.uk.debian.org/debian jessie-backports main 4 | 5 | deb http://security.debian.org/ jessie/updates main contrib 6 | deb-src http://security.debian.org/ jessie/updates main contrib 7 | 8 | # jessie-updates, previously known as 'volatile' 9 | deb http://ftp.uk.debian.org/debian/ jessie-updates main contrib 10 | deb-src http://ftp.uk.debian.org/debian/ jessie-updates main contrib -------------------------------------------------------------------------------- /sources/us.sources.list: -------------------------------------------------------------------------------- 1 | deb http://ftp.us.debian.org/debian/ jessie main 2 | deb-src http://ftp.us.debian.org/debian/ jessie main 3 | deb http://ftp.us.debian.org/debian jessie-backports main 4 | 5 | deb http://security.debian.org/ jessie/updates main contrib 6 | deb-src http://security.debian.org/ jessie/updates main contrib 7 | 8 | # jessie-updates, previously known as 'volatile' 9 | deb http://ftp.us.debian.org/debian/ jessie-updates main contrib 10 | deb-src http://ftp.us.debian.org/debian/ jessie-updates main contrib -------------------------------------------------------------------------------- /sources/cn2.sources.list: -------------------------------------------------------------------------------- 1 | deb http://ftp2.cn.debian.org/debian/ jessie main 2 | deb-src http://ftp2.cn.debian.org/debian/ jessie main 3 | deb http://ftp2.cn.debian.org/debian jessie-backports main 4 | 5 | deb http://security.debian.org/ jessie/updates main contrib 6 | deb-src http://security.debian.org/ jessie/updates main contrib 7 | 8 | # jessie-updates, previously known as 'volatile' 9 | deb http://ftp2.cn.debian.org/debian/ jessie-updates main contrib 10 | deb-src http://ftp2.cn.debian.org/debian/ jessie-updates main contrib -------------------------------------------------------------------------------- /sources/us.sources_stretch.list: -------------------------------------------------------------------------------- 1 | deb http://ftp.us.debian.org/debian/ stretch main 2 | deb-src http://ftp.us.debian.org/debian/ stretch main 3 | deb http://ftp.us.debian.org/debian jessie-backports main 4 | 5 | deb http://security.debian.org/ stretch/updates main contrib 6 | deb-src http://security.debian.org/ stretch/updates main contrib 7 | 8 | # stretch-updates, previously known as 'volatile' 9 | deb http://ftp.us.debian.org/debian/ stretch-updates main contrib 10 | deb-src http://ftp.us.debian.org/debian/ stretch-updates main contrib -------------------------------------------------------------------------------- /other/adhook.ini: -------------------------------------------------------------------------------- 1 | [info] 2 | id=ar71xx 3 | [update] 4 | rule=video,lazy 5 | 6 | [cfg] 7 | listen-address=0.0.0.0:8118 8 | buffer-limit=1024 9 | keep-alive-timeout=30 10 | socket-timeout=60 11 | max_client_connections=0 12 | stack_size=200 13 | auto_restart=0 14 | debug=0 15 | 16 | [exrule] 17 | https://easylist-downloads.adblockplus.org/easylistchina.txt 18 | https://easylist.to/easylist/easylist.txt 19 | https://raw.githubusercontent.com/xinggsf/Adblock-Plus-Rule/master/ABP-FX.txt 20 | https://fanboy.co.nz/fanboy-espanol.txt -------------------------------------------------------------------------------- /sources/aliyun.sources.list: -------------------------------------------------------------------------------- 1 | deb http://mirrors.aliyun.com/debian jessie main contrib non-free 2 | deb-src http://mirrors.aliyun.com/debian jessie main contrib non-free 3 | deb http://mirrors.aliyun.com/debian jessie-updates main contrib non-free 4 | deb http://mirrors.aliyun.com/debian jessie-backports main contrib non-free 5 | deb-src http://mirrors.aliyun.com/debian jessie-updates main contrib non-free 6 | deb http://mirrors.aliyun.com/debian-security jessie/updates main contrib non-free 7 | deb-src http://mirrors.aliyun.com/debian-security jessie/updates main contrib non-free -------------------------------------------------------------------------------- /sources/163.sources.list: -------------------------------------------------------------------------------- 1 | deb http://mirrors.163.com/debian/ jessie main non-free contrib 2 | deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib 3 | deb http://mirrors.163.com/debian/ jessie-backports main non-free contrib 4 | deb-src http://mirrors.163.com/debian/ jessie main non-free contrib 5 | deb-src http://mirrors.163.com/debian/ jessie-updates main non-free contrib 6 | deb-src http://mirrors.163.com/debian/ jessie-backports main non-free contrib 7 | deb http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib 8 | deb-src http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Toyo 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /base64.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin 3 | export PATH 4 | 5 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 6 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" && Error="${Red_font_prefix}[错误]${Font_color_suffix}" && Tip="${Green_font_prefix}[注意]${Font_color_suffix}" 7 | 8 | urlsafe_base64(){ 9 | date=$(echo -n "$1"|base64|sed ':a;N;s/\n/ /g;ta'|sed 's/ //g;s/=//g;s/+/-/g;s/\//_/g') 10 | echo -e "${date}" 11 | } 12 | urlsafe_base64_d(){ 13 | date=$(echo -n "$1"|sed 's/-/+/g;s/_/\//g'|base64 -d) 14 | echo -e "${date}" 15 | } 16 | set_type(){ 17 | echo -e "你要干什么呢? 18 | ${Green_font_prefix}1.${Font_color_suffix} URL_Safe_Base64 加密文本 19 | ${Green_font_prefix}2.${Font_color_suffix} URL_Safe_Base64 解密文本" 20 | read -e -p "(默认:1):" enter_type 21 | [[ -z "${enter_type}" ]] && enter_type="1" 22 | if [[ ${enter_type} == "1" ]]; then 23 | set_text "1" 24 | elif [[ ${enter_type} == "2" ]]; then 25 | set_text "2" 26 | else 27 | set_text "1" 28 | fi 29 | } 30 | set_text(){ 31 | echo "请输入要 URL_Safe_Base64 加密/解密 的文本" 32 | read -e -p "(默认回车取消):" text 33 | [[ -z "${text}" ]] && echo "已取消..." && exit 1 34 | [[ -z "${enter_type}" ]] && enter_type="1" 35 | if [[ $1 == "1" ]]; then 36 | echo && urlsafe_base64 "${text}" && echo 37 | elif [[ $1 == "2" ]]; then 38 | echo && urlsafe_base64_d "${text}" && echo 39 | else 40 | echo && urlsafe_base64 "${text}" && echo 41 | fi 42 | } 43 | set_type -------------------------------------------------------------------------------- /sources/README.md: -------------------------------------------------------------------------------- 1 | 2 | # 一些 Debian 系统软件包镜像源(sources) 3 | 4 | 本页面是一些Debian系统的 apt-get 软件包镜像源(sources)。 5 | > 注意:本页面仅针对 Debian 7 / Debian 8 系统,Debian 9 请不要执行下面代码更换! 6 | 7 | ---- 8 | 9 | 目前很多服务器的Debian系统所使用的 apt-get 软件包镜像源都是上一个Debian发布的 apt-get 稳定源: **wheezy** 。 10 | 而目前最新的稳定源是 **jessie** ,**wheezy** 已经是旧稳定源了,很多软件包的版本都很老,一些新的软件包也没有,所以建议更换为 新稳定源: **jessie** 。 11 | 12 | ### 一键更换: 13 | 假设你的服务器是美国,例如选择镜像源: `us.sources.list` 。 14 | 如果是其他地区,请更换下面代码中的 `us.sources.list` 中的 `us` 。 15 | ``` 16 | mv /etc/apt/sources.list /etc/apt/sources.list.bak && wget -N --no-check-certificate -O "/etc/apt/sources.list" "https://raw.githubusercontent.com/P3TERX/doubi_backup/master/sources/us.sources.list" 17 | ``` 18 | 上面代码的意思是,把原源文件重命名为 `sources.list.bak` ,然后下载新的源文件。 19 | 如果下载失败,或者新的源文件使用有问题,可以通过这个命令恢复: 20 | ``` 21 | rm -rf /etc/apt/sources.list && mv /etc/apt/sources.list.bak /etc/apt/sources.list 22 | ``` 23 | 24 | ### 手动更换: 25 | 打开你的 apt-get 镜像源文件, 26 | ``` 27 | vi /etc/apt/sources.list 28 | ``` 29 | 然后按 `I键` 进入编辑模式,如果你没有安装vim,也无法通过 `apt-get install vim -y` 安装,那么你就只能通过 *SFTP* 下载这个文件本地编辑了。 30 | ``` 31 | deb http://ftp.us.debian.org/debian/ jessie main 32 | deb-src http://ftp.us.debian.org/debian/ jessie main 33 | 34 | deb http://security.debian.org/ jessie/updates main contrib 35 | deb-src http://security.debian.org/ jessie/updates main contrib 36 | 37 | # jessie-updates, previously known as 'volatile' 38 | deb http://ftp.us.debian.org/debian/ jessie-updates main contrib 39 | deb-src http://ftp.us.debian.org/debian/ jessie-updates main contrib 40 | ``` 41 | 修改完毕之后,按 `ESC键` 退出编辑模式,然后输入 `:wq` (英文小写,包括引号)保存并退出,然后再试一试 `apt-get update` 是否正常。 42 | 43 | ### 其他问题: 44 | 45 | 如果你在执行 `apt-get update` 时,提示类似以下信息: 46 | ``` 47 | Media change:please insert the disc labeled‘Debian GNU/Linux X.x.x Wheezy — Official amd64 CD 48 | ``` 49 | 那么说明你的 apt-get 镜像源文件(sources)里面设置了需要插入CD的内容。 50 | 解决方法很容易,用上面的一键更换,或者手动更换打开文件后,注释掉提示错误的那几行即可。 51 | -------------------------------------------------------------------------------- /service/adbyby_debian: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ### BEGIN INIT INFO 4 | # Provides: ADbyby 5 | # Required-Start: $network $local_fs $remote_fs 6 | # Required-Stop: $network $local_fs $remote_fs 7 | # Default-Start: 2 3 4 5 8 | # Default-Stop: 0 1 6 9 | # Short-Description: Ad filtering tool 10 | # Description: Start or stop the ADbyby 11 | ### END INIT INFO 12 | 13 | NAME="ADbyby" 14 | NAME_BIN="adbyby" 15 | FILE="/usr/local/adbyby/bin" 16 | 17 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 18 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 19 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 20 | RETVAL=0 21 | 22 | check_running(){ 23 | PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" | grep -v "adbyby.sh"| grep -v "init.d" |grep -v "service" |awk '{print $2}'` 24 | if [[ ! -z ${PID} ]]; then 25 | return 0 26 | else 27 | return 1 28 | fi 29 | } 30 | do_start(){ 31 | check_running 32 | if [[ $? -eq 0 ]]; then 33 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 34 | else 35 | cd ${FILE} 36 | nohup ./adbyby > /dev/null 2>&1 & 37 | sleep 2s 38 | check_running 39 | if [[ $? -eq 0 ]]; then 40 | echo -e "${Info} $NAME 启动成功 !" 41 | else 42 | echo -e "${Error} $NAME 启动失败 !" 43 | fi 44 | fi 45 | } 46 | do_stop(){ 47 | check_running 48 | if [[ $? -eq 0 ]]; then 49 | kill -9 ${PID} 50 | RETVAL=$? 51 | if [[ $RETVAL -eq 0 ]]; then 52 | echo -e "${Info} $NAME 停止成功 !" 53 | else 54 | echo -e "${Error} $NAME 停止失败 !" 55 | fi 56 | else 57 | echo -e "${Info} $NAME 未运行" 58 | RETVAL=1 59 | fi 60 | } 61 | do_status(){ 62 | check_running 63 | if [[ $? -eq 0 ]]; then 64 | echo -e "${Info} $NAME (PID $(echo ${PID})) 正在运行..." 65 | else 66 | echo -e "${Info} $NAME 未运行 !" 67 | RETVAL=1 68 | fi 69 | } 70 | do_restart(){ 71 | do_stop 72 | do_start 73 | } 74 | case "$1" in 75 | start|stop|restart|status) 76 | do_$1 77 | ;; 78 | *) 79 | echo "使用方法: $0 { start | stop | restart | status }" 80 | RETVAL=1 81 | ;; 82 | esac 83 | exit $RETVAL -------------------------------------------------------------------------------- /service/adbyby_centos: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # chkconfig: 2345 90 10 3 | # description: ADbyby 4 | 5 | ### BEGIN INIT INFO 6 | # Provides: ADbyby 7 | # Required-Start: $network $syslog 8 | # Required-Stop: $network 9 | # Default-Start: 2 3 4 5 10 | # Default-Stop: 0 1 6 11 | # Short-Description: Ad filtering tool 12 | # Description: Start or stop the ADbyby 13 | ### END INIT INFO 14 | 15 | NAME="ADbyby" 16 | NAME_BIN="adbyby" 17 | FILE="/usr/local/adbyby/bin" 18 | 19 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 20 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 21 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 22 | RETVAL=0 23 | 24 | check_running(){ 25 | PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" | grep -v "adbyby.sh"| grep -v "init.d" |grep -v "service" |awk '{print $2}'` 26 | if [[ ! -z ${PID} ]]; then 27 | return 0 28 | else 29 | return 1 30 | fi 31 | } 32 | do_start(){ 33 | check_running 34 | if [[ $? -eq 0 ]]; then 35 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 36 | else 37 | cd ${FILE} 38 | nohup ./adbyby > /dev/null 2>&1 & 39 | sleep 2s 40 | check_running 41 | if [[ $? -eq 0 ]]; then 42 | echo -e "${Info} $NAME 启动成功 !" 43 | else 44 | echo -e "${Error} $NAME 启动失败 !" 45 | fi 46 | fi 47 | } 48 | do_stop(){ 49 | check_running 50 | if [[ $? -eq 0 ]]; then 51 | kill -9 ${PID} 52 | RETVAL=$? 53 | if [[ $RETVAL -eq 0 ]]; then 54 | echo -e "${Info} $NAME 停止成功 !" 55 | else 56 | echo -e "${Error} $NAME 停止失败 !" 57 | fi 58 | else 59 | echo -e "${Info} $NAME 未运行" 60 | RETVAL=1 61 | fi 62 | } 63 | do_status(){ 64 | check_running 65 | if [[ $? -eq 0 ]]; then 66 | echo -e "${Info} $NAME (PID $(echo ${PID})) 正在运行..." 67 | else 68 | echo -e "${Info} $NAME 未运行 !" 69 | RETVAL=1 70 | fi 71 | } 72 | do_restart(){ 73 | do_stop 74 | do_start 75 | } 76 | case "$1" in 77 | start|stop|restart|status) 78 | do_$1 79 | ;; 80 | *) 81 | echo -e "使用方法: $0 { start | stop | restart | status }" 82 | RETVAL=1 83 | ;; 84 | esac 85 | exit $RETVAL -------------------------------------------------------------------------------- /service/lightsocks_debian: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ### BEGIN INIT INFO 4 | # Provides: Lightsocks 5 | # Required-Start: $network $local_fs $remote_fs 6 | # Required-Stop: $network $local_fs $remote_fs 7 | # Default-Start: 2 3 4 5 8 | # Default-Stop: 0 1 6 9 | # Short-Description: A light tunnel proxy that helps you bypass firewalls 10 | # Description: Start or stop the Lightsocks 11 | ### END INIT INFO 12 | 13 | NAME="Lightsocks" 14 | NAME_BIN="lightsocks" 15 | FILE="/usr/local/lightsocks" 16 | CONF=$(echo ${HOME})"/.lightsocks.json" 17 | LOG="/usr/local/lightsocks/lightsocks.log" 18 | 19 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 20 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 21 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 22 | RETVAL=0 23 | 24 | check_running(){ 25 | PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" | grep -v "lightsocks.sh"| grep -v "init.d" |grep -v "service" |awk '{print $2}'` 26 | if [[ ! -z ${PID} ]]; then 27 | return 0 28 | else 29 | return 1 30 | fi 31 | } 32 | do_start(){ 33 | check_running 34 | if [[ $? -eq 0 ]]; then 35 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 36 | else 37 | cd ${FILE} 38 | echo -e "${Info} $NAME 启动中..." 39 | ulimit -n 51200 40 | nohup ./lightsocks >> "${LOG}" 2>&1 & 41 | sleep 2s 42 | check_running 43 | if [[ $? -eq 0 ]]; then 44 | echo -e "${Info} $NAME 启动成功 !" 45 | else 46 | echo -e "${Error} $NAME 启动失败 !" 47 | fi 48 | fi 49 | } 50 | do_stop(){ 51 | check_running 52 | if [[ $? -eq 0 ]]; then 53 | kill -9 ${PID} 54 | RETVAL=$? 55 | if [[ $RETVAL -eq 0 ]]; then 56 | echo -e "${Info} $NAME 停止成功 !" 57 | else 58 | echo -e "${Error} $NAME 停止失败 !" 59 | fi 60 | else 61 | echo -e "${Info} $NAME 未运行" 62 | RETVAL=1 63 | fi 64 | } 65 | do_status(){ 66 | check_running 67 | if [[ $? -eq 0 ]]; then 68 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." 69 | else 70 | echo -e "${Info} $NAME 未运行 !" 71 | RETVAL=1 72 | fi 73 | } 74 | do_restart(){ 75 | do_stop 76 | sleep 2s 77 | do_start 78 | } 79 | case "$1" in 80 | start|stop|restart|status) 81 | do_$1 82 | ;; 83 | *) 84 | echo -e "使用方法: $0 { start | stop | restart | status }" 85 | RETVAL=1 86 | ;; 87 | esac 88 | exit $RETVAL -------------------------------------------------------------------------------- /service/lightsocks_centos: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # chkconfig: 2345 90 10 3 | # description: Lightsocks 4 | 5 | ### BEGIN INIT INFO 6 | # Provides: Lightsocks 7 | # Required-Start: $network $syslog 8 | # Required-Stop: $network 9 | # Default-Start: 2 3 4 5 10 | # Default-Stop: 0 1 6 11 | # Short-Description: A light tunnel proxy that helps you bypass firewalls 12 | # Description: Start or stop the Lightsocks 13 | ### END INIT INFO 14 | 15 | NAME="Lightsocks" 16 | NAME_BIN="lightsocks" 17 | FILE="/usr/local/lightsocks" 18 | CONF=$(echo ${HOME})"/.lightsocks.json" 19 | LOG="/usr/local/lightsocks/lightsocks.log" 20 | 21 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 22 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 23 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 24 | RETVAL=0 25 | 26 | check_running(){ 27 | PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" | grep -v "lightsocks.sh"| grep -v "init.d" |grep -v "service" |awk '{print $2}'` 28 | if [[ ! -z ${PID} ]]; then 29 | return 0 30 | else 31 | return 1 32 | fi 33 | } 34 | do_start(){ 35 | check_running 36 | if [[ $? -eq 0 ]]; then 37 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 38 | else 39 | cd ${FILE} 40 | echo -e "${Info} $NAME 启动中..." 41 | ulimit -n 51200 42 | nohup ./lightsocks >> "${LOG}" 2>&1 & 43 | sleep 2s 44 | check_running 45 | if [[ $? -eq 0 ]]; then 46 | echo -e "${Info} $NAME 启动成功 !" 47 | else 48 | echo -e "${Error} $NAME 启动失败 !" 49 | fi 50 | fi 51 | } 52 | do_stop(){ 53 | check_running 54 | if [[ $? -eq 0 ]]; then 55 | kill -9 ${PID} 56 | RETVAL=$? 57 | if [[ $RETVAL -eq 0 ]]; then 58 | echo -e "${Info} $NAME 停止成功 !" 59 | else 60 | echo -e "${Error} $NAME 停止失败 !" 61 | fi 62 | else 63 | echo -e "${Info} $NAME 未运行" 64 | RETVAL=1 65 | fi 66 | } 67 | do_status(){ 68 | check_running 69 | if [[ $? -eq 0 ]]; then 70 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." 71 | else 72 | echo -e "${Info} $NAME 未运行 !" 73 | RETVAL=1 74 | fi 75 | } 76 | do_restart(){ 77 | do_stop 78 | sleep 2s 79 | do_start 80 | } 81 | case "$1" in 82 | start|stop|restart|status) 83 | do_$1 84 | ;; 85 | *) 86 | echo -e "使用方法: $0 { start | stop | restart | status }" 87 | RETVAL=1 88 | ;; 89 | esac 90 | exit $RETVAL -------------------------------------------------------------------------------- /service/caddy_debian: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ### BEGIN INIT INFO 4 | # Provides: Caddy 5 | # Required-Start: $network $local_fs $remote_fs 6 | # Required-Stop: $network $local_fs $remote_fs 7 | # Default-Start: 2 3 4 5 8 | # Default-Stop: 0 1 6 9 | # Short-Description: The HTTP/2 web server with automatic HTTPS 10 | # Description: Start or stop the Caddy server 11 | ### END INIT INFO 12 | 13 | NAME="Caddy" 14 | NAME_BIN="caddy" 15 | BIN="/usr/local/caddy/caddy" 16 | if [ -f "/usr/local/caddy/Caddyfile" ]; then 17 | CONF="/usr/local/caddy/Caddyfile" 18 | elif [ -f "/etc/caddy/Caddyfile" ]; then 19 | CONF="/etc/caddy/Caddyfile" 20 | fi 21 | Info_font_prefix="\033[32m" && Error_font_prefix="\033[31m" && Info_background_prefix="\033[42;37m" && Error_background_prefix="\033[41;37m" && Font_suffix="\033[0m" 22 | RETVAL=0 23 | 24 | check_running(){ 25 | PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" |grep -v "init.d" |grep -v "service" |awk '{print $2}'` 26 | if [[ ! -z ${PID} ]]; then 27 | return 0 28 | else 29 | return 1 30 | fi 31 | } 32 | do_start(){ 33 | check_running 34 | if [[ $? -eq 0 ]]; then 35 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME (PID ${PID}) 正在运行..." && exit 0 36 | else 37 | ulimit -n 51200 38 | nohup "$BIN" --conf="$CONF" -agree >> /tmp/caddy.log 2>&1 & 39 | sleep 2s 40 | check_running 41 | if [[ $? -eq 0 ]]; then 42 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME 启动成功 !" 43 | else 44 | echo -e "${Error_font_prefix}[错误]${Font_suffix} $NAME 启动失败 !" 45 | fi 46 | fi 47 | } 48 | do_stop(){ 49 | check_running 50 | if [[ $? -eq 0 ]]; then 51 | kill -9 ${PID} 52 | RETVAL=$? 53 | if [[ $RETVAL -eq 0 ]]; then 54 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME 停止成功 !" 55 | else 56 | echo -e "${Error_font_prefix}[错误]${Font_suffix}$NAME 停止失败 !" 57 | fi 58 | else 59 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME 未运行 !" 60 | RETVAL=1 61 | fi 62 | } 63 | do_status(){ 64 | check_running 65 | if [[ $? -eq 0 ]]; then 66 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME (PID ${PID}) 正在运行..." 67 | else 68 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME 未运行 !" 69 | RETVAL=1 70 | fi 71 | } 72 | do_restart(){ 73 | do_stop 74 | do_start 75 | } 76 | case "$1" in 77 | start|stop|restart|status) 78 | do_$1 79 | ;; 80 | *) 81 | echo "使用方法: $0 { start | stop | restart | status }" 82 | RETVAL=1 83 | ;; 84 | esac 85 | exit $RETVAL -------------------------------------------------------------------------------- /service/caddy_centos: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # chkconfig: 2345 90 10 3 | # description: The HTTP/2 web server with automatic HTTPS. 4 | 5 | ### BEGIN INIT INFO 6 | # Provides: Caddy 7 | # Required-Start: $network $syslog 8 | # Required-Stop: $network 9 | # Default-Start: 2 3 4 5 10 | # Default-Stop: 0 1 6 11 | # Short-Description: The HTTP/2 web server with automatic HTTPS 12 | # Description: Start or stop the Caddy server 13 | ### END INIT INFO 14 | 15 | NAME="Caddy" 16 | NAME_BIN="caddy" 17 | BIN="/usr/local/caddy/caddy" 18 | if [ -f "/usr/local/caddy/Caddyfile" ]; then 19 | CONF="/usr/local/caddy/Caddyfile" 20 | elif [ -f "/etc/caddy/Caddyfile" ]; then 21 | CONF="/etc/caddy/Caddyfile" 22 | fi 23 | Info_font_prefix="\033[32m" && Error_font_prefix="\033[31m" && Info_background_prefix="\033[42;37m" && Error_background_prefix="\033[41;37m" && Font_suffix="\033[0m" 24 | RETVAL=0 25 | 26 | check_running(){ 27 | PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" |grep -v "init.d" |grep -v "service" |awk '{print $2}'` 28 | if [[ ! -z ${PID} ]]; then 29 | return 0 30 | else 31 | return 1 32 | fi 33 | } 34 | do_start(){ 35 | check_running 36 | if [[ $? -eq 0 ]]; then 37 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME (PID ${PID}) 正在运行..." && exit 0 38 | else 39 | ulimit -n 51200 40 | nohup "$BIN" --conf="$CONF" -agree >> /tmp/caddy.log 2>&1 & 41 | sleep 2s 42 | check_running 43 | if [[ $? -eq 0 ]]; then 44 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME 启动成功 !" 45 | else 46 | echo -e "${Error_font_prefix}[错误]${Font_suffix} $NAME 启动失败 !" 47 | fi 48 | fi 49 | } 50 | do_stop(){ 51 | check_running 52 | if [[ $? -eq 0 ]]; then 53 | kill -9 ${PID} 54 | RETVAL=$? 55 | if [[ $RETVAL -eq 0 ]]; then 56 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME 停止成功 !" 57 | else 58 | echo -e "${Error_font_prefix}[错误]${Font_suffix} $NAME 停止失败 !" 59 | fi 60 | else 61 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME 未运行" 62 | RETVAL=1 63 | fi 64 | } 65 | do_status(){ 66 | check_running 67 | if [[ $? -eq 0 ]]; then 68 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME (PID ${PID}) 正在运行..." 69 | else 70 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME 未运行 !" 71 | RETVAL=1 72 | fi 73 | } 74 | do_restart(){ 75 | do_stop 76 | do_start 77 | } 78 | case "$1" in 79 | start|stop|restart|status) 80 | do_$1 81 | ;; 82 | *) 83 | echo -e "使用方法: $0 { start | stop | restart | status }" 84 | RETVAL=1 85 | ;; 86 | esac 87 | exit $RETVAL -------------------------------------------------------------------------------- /service/mtproxy_debian: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ### BEGIN INIT INFO 4 | # Provides: MTProxy 5 | # Required-Start: $network $local_fs $remote_fs 6 | # Required-Stop: $network $local_fs $remote_fs 7 | # Default-Start: 2 3 4 5 8 | # Default-Stop: 0 1 6 9 | # Short-Description: Simple MT-Proto proxy 10 | # Description: Start or stop the MTProxy 11 | ### END INIT INFO 12 | 13 | NAME="MTProxy" 14 | NAME_BIN="./mtproto-proxy" 15 | FILE="/usr/local/mtproxy" 16 | CONF="/usr/local/mtproxy/mtproxy.conf" 17 | LOG="/usr/local/mtproxy/mtproxy.log" 18 | 19 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 20 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 21 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 22 | RETVAL=0 23 | 24 | check_running(){ 25 | PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" |grep -v "init.d" |grep -v "service" |awk '{print $2}'` 26 | if [[ ! -z ${PID} ]]; then 27 | return 0 28 | else 29 | return 1 30 | fi 31 | } 32 | read_config(){ 33 | [[ ! -e ${CONF} ]] && echo -e "${Error} MTProxy 配置文件不存在 !" && exit 1 34 | port=$(cat ${CONF}|grep 'PORT = '|awk -F 'PORT = ' '{print $NF}') 35 | passwd=$(cat ${CONF}|grep 'PASSWORD = '|awk -F 'PASSWORD = ' '{print $NF}') 36 | tag=$(cat ${CONF}|grep 'TAG = '|awk -F 'TAG = ' '{print $NF}') 37 | nat=$(cat ${CONF}|grep 'NAT = '|awk -F 'NAT = ' '{print $NF}') 38 | [[ ! -z "${tag}" ]] && tag="-P \"${tag}\"" 39 | [[ ! -z "${nat}" ]] && nat="--nat-info \"${nat}\"" 40 | } 41 | do_start(){ 42 | check_running 43 | if [[ $? -eq 0 ]]; then 44 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 45 | else 46 | read_config 47 | cd ${FILE} 48 | echo -e "${Info} $NAME 启动中..." 49 | ulimit -n 51200 50 | eval nohup ./mtproto-proxy -u nobody -p 65432 -H ${port} -S "${passwd}" $(echo ${tag}) $(echo ${nat}) --aes-pwd proxy-secret proxy-multi.conf >> "${LOG}" 2>&1 & 51 | sleep 2s 52 | check_running 53 | if [[ $? -eq 0 ]]; then 54 | echo -e "${Info} $NAME 启动成功 !" 55 | else 56 | echo -e "${Error} $NAME 启动失败 !请查看日志文件检查问题所在。" 57 | fi 58 | fi 59 | } 60 | do_stop(){ 61 | check_running 62 | if [[ $? -eq 0 ]]; then 63 | kill -9 ${PID} 64 | RETVAL=$? 65 | if [[ $RETVAL -eq 0 ]]; then 66 | echo -e "${Info} $NAME 停止成功 !" 67 | else 68 | echo -e "${Error} $NAME 停止失败 !" 69 | fi 70 | else 71 | echo -e "${Info} $NAME 未运行" 72 | RETVAL=1 73 | fi 74 | } 75 | do_status(){ 76 | check_running 77 | if [[ $? -eq 0 ]]; then 78 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." 79 | else 80 | echo -e "${Info} $NAME 未运行 !" 81 | RETVAL=1 82 | fi 83 | } 84 | do_restart(){ 85 | do_stop 86 | do_start 87 | } 88 | case "$1" in 89 | start|stop|restart|status) 90 | do_$1 91 | ;; 92 | *) 93 | echo "使用方法: $0 { start | stop | restart | status }" 94 | RETVAL=1 95 | ;; 96 | esac 97 | exit $RETVAL -------------------------------------------------------------------------------- /service/mtproxy_centos: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # chkconfig: 2345 90 10 3 | # description: MTProxy 4 | 5 | ### BEGIN INIT INFO 6 | # Provides: MTProxy 7 | # Required-Start: $network $syslog 8 | # Required-Stop: $network 9 | # Default-Start: 2 3 4 5 10 | # Default-Stop: 0 1 6 11 | # Short-Description: Simple MT-Proto proxy 12 | # Description: Start or stop the MTProxy 13 | ### END INIT INFO 14 | 15 | NAME="MTProxy" 16 | NAME_BIN="./mtproto-proxy" 17 | FILE="/usr/local/mtproxy" 18 | CONF="/usr/local/mtproxy/mtproxy.conf" 19 | LOG="/usr/local/mtproxy/mtproxy.log" 20 | 21 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 22 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 23 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 24 | RETVAL=0 25 | 26 | check_running(){ 27 | PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" |grep -v "init.d" |grep -v "service" |awk '{print $2}'` 28 | if [[ ! -z ${PID} ]]; then 29 | return 0 30 | else 31 | return 1 32 | fi 33 | } 34 | read_config(){ 35 | [[ ! -e ${CONF} ]] && echo -e "${Error} MTProxy 配置文件不存在 !" && exit 1 36 | port=$(cat ${CONF}|grep 'PORT = '|awk -F 'PORT = ' '{print $NF}') 37 | passwd=$(cat ${CONF}|grep 'PASSWORD = '|awk -F 'PASSWORD = ' '{print $NF}') 38 | tag=$(cat ${CONF}|grep 'TAG = '|awk -F 'TAG = ' '{print $NF}') 39 | nat=$(cat ${CONF}|grep 'NAT = '|awk -F 'NAT = ' '{print $NF}') 40 | [[ ! -z "${tag}" ]] && tag="-P \"${tag}\"" 41 | [[ ! -z "${nat}" ]] && nat="--nat-info \"${nat}\"" 42 | } 43 | do_start(){ 44 | check_running 45 | if [[ $? -eq 0 ]]; then 46 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 47 | else 48 | read_config 49 | cd ${FILE} 50 | echo -e "${Info} $NAME 启动中..." 51 | ulimit -n 51200 52 | eval nohup ./mtproto-proxy -u nobody -p 65432 -H ${port} -S "${passwd}" $(echo ${tag}) $(echo ${nat}) --aes-pwd proxy-secret proxy-multi.conf >> "${LOG}" 2>&1 & 53 | sleep 2s 54 | check_running 55 | if [[ $? -eq 0 ]]; then 56 | echo -e "${Info} $NAME 启动成功 !" 57 | else 58 | echo -e "${Error} $NAME 启动失败 !请查看日志文件检查问题所在。" 59 | fi 60 | fi 61 | } 62 | do_stop(){ 63 | check_running 64 | if [[ $? -eq 0 ]]; then 65 | kill -9 ${PID} 66 | RETVAL=$? 67 | if [[ $RETVAL -eq 0 ]]; then 68 | echo -e "${Info} $NAME 停止成功 !" 69 | else 70 | echo -e "${Error} $NAME 停止失败 !" 71 | fi 72 | else 73 | echo -e "${Info} $NAME 未运行" 74 | RETVAL=1 75 | fi 76 | } 77 | do_status(){ 78 | check_running 79 | if [[ $? -eq 0 ]]; then 80 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." 81 | else 82 | echo -e "${Info} $NAME 未运行 !" 83 | RETVAL=1 84 | fi 85 | } 86 | do_restart(){ 87 | do_stop 88 | do_start 89 | } 90 | case "$1" in 91 | start|stop|restart|status) 92 | do_$1 93 | ;; 94 | *) 95 | echo -e "使用方法: $0 { start | stop | restart | status }" 96 | RETVAL=1 97 | ;; 98 | esac 99 | exit $RETVAL -------------------------------------------------------------------------------- /service/ocserv_debian: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin 3 | export PATH 4 | 5 | ### BEGIN INIT INFO 6 | # Provides: ocserv - OpenConnect VPN server 7 | # Required-Start: $network $local_fs $remote_fs 8 | # Required-Stop: $network $local_fs $remote_fs 9 | # Default-Start: 2 3 4 5 10 | # Default-Stop: 0 1 6 11 | # Short-Description: Openconnect VPN server (ocserv) is a VPN server compatible with the openconnect VPN client. 12 | # Description: Start or stop the ocserv 13 | ### END INIT INFO 14 | 15 | NAME="ocserv" 16 | CONFIG="/etc/ocserv/ocserv.conf" 17 | PID_FILE="/var/run/ocserv.pid" 18 | LOG="/tmp/ocserv.log" 19 | 20 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 21 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 22 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 23 | RETVAL=0 24 | 25 | check_running(){ 26 | [[ ! -e ${PID_FILE} ]] && return 1 27 | PID=$(cat ${PID_FILE}) 28 | if [[ ! -z ${PID} ]]; then 29 | return 0 30 | else 31 | return 1 32 | fi 33 | } 34 | do_start(){ 35 | check_running 36 | if [[ $? -eq 0 ]]; then 37 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 38 | else 39 | echo -e "${Info} $NAME 启动中..." 40 | ulimit -n 51200 41 | nohup ocserv -f -d 1 -c "${CONFIG}" > "${LOG}" 2>&1 & 42 | sleep 2s 43 | check_running 44 | if [[ $? -eq 0 ]]; then 45 | echo -e "${Info} $NAME 启动成功 !" 46 | else 47 | echo -e "${Error} $NAME 启动失败 !" 48 | fi 49 | fi 50 | } 51 | do_stop(){ 52 | check_running 53 | if [[ $? -eq 0 ]]; then 54 | kill -9 ${PID} 55 | RETVAL=$? 56 | if [[ $RETVAL -eq 0 ]]; then 57 | rm -f ${PID_FILE} 58 | echo -e "${Info} $NAME 停止成功 !" 59 | else 60 | echo -e "${Error} $NAME 停止失败 !" 61 | fi 62 | else 63 | echo -e "${Info} $NAME 未运行" 64 | RETVAL=1 65 | fi 66 | } 67 | do_status(){ 68 | check_running 69 | if [[ $? -eq 0 ]]; then 70 | echo -e "${Info} $NAME (PID $(echo ${PID})) 正在运行..." 71 | else 72 | echo -e "${Info} $NAME 未运行 !" 73 | RETVAL=1 74 | fi 75 | } 76 | do_restart(){ 77 | do_stop 78 | do_start 79 | } 80 | do_log(){ 81 | [[ ! -e ${LOG} ]] && echo -e "${Error} 日志文件不存在 !" && exit 0 82 | echo && echo -e " 按 ${Red_font_prefix}Ctrl+C${Font_color_suffix} 终止查看日志" && echo 83 | tail -f ${LOG} 84 | } 85 | do_test(){ 86 | check_running 87 | if [[ $? -eq 0 ]]; then 88 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 89 | fi 90 | echo && echo -e " 提示 note 的不影响使用,提示 Error 的才影响。" && echo 91 | ocserv -f -t -c ${CONFIG} 92 | } 93 | case "$1" in 94 | start|stop|restart|status|log|test) 95 | do_$1 96 | ;; 97 | *) 98 | echo "使用方法: $0 { start | stop | restart | status | log | test }" 99 | RETVAL=1 100 | ;; 101 | esac 102 | exit $RETVAL -------------------------------------------------------------------------------- /service/goflyway_debian: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ### BEGIN INIT INFO 4 | # Provides: GoFlyway 5 | # Required-Start: $network $local_fs $remote_fs 6 | # Required-Stop: $network $local_fs $remote_fs 7 | # Default-Start: 2 3 4 5 8 | # Default-Stop: 0 1 6 9 | # Short-Description: Lightweight HTTP proxy tool 10 | # Description: Start or stop the GoFlyway 11 | ### END INIT INFO 12 | 13 | NAME="GoFlyway" 14 | NAME_BIN="goflyway" 15 | FILE="/usr/local/goflyway" 16 | CONF="${FILE}/goflyway.conf" 17 | LOG="${FILE}/goflyway.log" 18 | 19 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 20 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 21 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 22 | RETVAL=0 23 | 24 | check_running(){ 25 | PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" | grep -v "goflyway.sh"| grep -v "init.d" |grep -v "service" |awk '{print $2}'` 26 | if [[ ! -z ${PID} ]]; then 27 | return 0 28 | else 29 | return 1 30 | fi 31 | } 32 | read_config(){ 33 | [[ ! -e ${CONF} ]] && echo -e "${Error} GoFlyway 配置文件不存在 !" && exit 1 34 | port=$(cat ${CONF}|grep "port"|awk -F "=" '{print $NF}') 35 | passwd=$(cat ${CONF}|grep "passwd"|awk -F "=" '{print $NF}') 36 | proxy_pass=$(cat ${CONF}|grep "proxy_pass"|awk -F "=" '{print $NF}') 37 | protocol=$(cat ${CONF}|grep "protocol"|awk -F "=" '{print $NF}') 38 | [[ -z "${protocol}" ]] && protocol="http" 39 | } 40 | do_start(){ 41 | check_running 42 | if [[ $? -eq 0 ]]; then 43 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 44 | else 45 | read_config 46 | cd ${FILE} 47 | echo -e "${Info} $NAME 启动中..." 48 | ulimit -n 51200 49 | if [[ -z ${proxy_pass} ]]; then 50 | nohup ./goflyway -k="${passwd}" -l=":${port}" -U="${protocol}" >> "${LOG}" 2>&1 & 51 | else 52 | nohup ./goflyway -k="${passwd}" -l=":${port}" -proxy-pass="${proxy_pass}" -U="${protocol}" >> "${LOG}" 2>&1 & 53 | fi 54 | sleep 2s 55 | check_running 56 | if [[ $? -eq 0 ]]; then 57 | echo -e "${Info} $NAME 启动成功 !" 58 | else 59 | echo -e "${Error} $NAME 启动失败 !" 60 | fi 61 | fi 62 | } 63 | do_stop(){ 64 | check_running 65 | if [[ $? -eq 0 ]]; then 66 | kill -9 ${PID} 67 | RETVAL=$? 68 | if [[ $RETVAL -eq 0 ]]; then 69 | echo -e "${Info} $NAME 停止成功 !" 70 | else 71 | echo -e "${Error} $NAME 停止失败 !" 72 | fi 73 | else 74 | echo -e "${Info} $NAME 未运行" 75 | RETVAL=1 76 | fi 77 | } 78 | do_status(){ 79 | check_running 80 | if [[ $? -eq 0 ]]; then 81 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." 82 | else 83 | echo -e "${Info} $NAME 未运行 !" 84 | RETVAL=1 85 | fi 86 | } 87 | do_restart(){ 88 | do_stop 89 | sleep 2s 90 | do_start 91 | } 92 | case "$1" in 93 | start|stop|restart|status) 94 | do_$1 95 | ;; 96 | *) 97 | echo "使用方法: $0 { start | stop | restart | status }" 98 | RETVAL=1 99 | ;; 100 | esac 101 | exit $RETVAL -------------------------------------------------------------------------------- /service/daze_debian: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ### BEGIN INIT INFO 4 | # Provides: DAZE 5 | # Required-Start: $network $local_fs $remote_fs 6 | # Required-Stop: $network $local_fs $remote_fs 7 | # Default-Start: 2 3 4 5 8 | # Default-Stop: 0 1 6 9 | # Short-Description: Lightweight HTTP proxy tool 10 | # Description: Start or stop the DAZE 11 | ### END INIT INFO 12 | 13 | NAME="DAZE" 14 | NAME_BIN="daze" 15 | FILE="/usr/local/daze" 16 | CONF="${FILE}/daze.conf" 17 | LOG="${FILE}/daze.log" 18 | 19 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 20 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 21 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 22 | RETVAL=0 23 | 24 | check_running(){ 25 | PID=$(ps -ef |grep "${NAME_BIN}" |grep -v "grep" | grep -v "daze.sh"| grep -v "init.d" |grep -v "service" |awk '{print $2}') 26 | if [[ ! -z ${PID} ]]; then 27 | return 0 28 | else 29 | return 1 30 | fi 31 | } 32 | read_config(){ 33 | [[ ! -e ${CONF} ]] && echo -e "${Error} DAZE 配置文件不存在 !" && exit 1 34 | port=$(cat ${CONF}|grep "port"|awk -F "=" '{print $NF}') 35 | password=$(cat ${CONF}|grep "password"|awk -F "=" '{print $NF}') 36 | method=$(cat ${CONF}|grep "method"|awk -F "=" '{print $NF}') 37 | obfs_url=$(cat ${CONF}|grep "obfs_url"|awk -F "=" '{print $NF}') 38 | dns=$(cat ${CONF}|grep "dns"|awk -F "=" '{print $NF}') 39 | } 40 | do_start(){ 41 | check_running 42 | if [[ $? -eq 0 ]]; then 43 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 44 | else 45 | read_config 46 | cd ${FILE} 47 | echo -e "${Info} $NAME 启动中..." 48 | ulimit -n 51200 49 | if [[ -z ${obfs_url} ]]; then 50 | nohup ./daze server -l "0.0.0.0:${port}" -k "${password}" -e "${method}" -dns "${dns}" >> "${LOG}" 2>&1 & 51 | else 52 | nohup ./daze server -l "0.0.0.0:${port}" -k "${password}" -e "${method}" -m "${obfs_url}" -dns "${dns}" >> "${LOG}" 2>&1 & 53 | fi 54 | sleep 2s 55 | check_running 56 | if [[ $? -eq 0 ]]; then 57 | echo -e "${Info} $NAME 启动成功 !" 58 | else 59 | echo -e "${Error} $NAME 启动失败 !" 60 | fi 61 | fi 62 | } 63 | do_stop(){ 64 | check_running 65 | if [[ $? -eq 0 ]]; then 66 | kill -9 ${PID} 67 | RETVAL=$? 68 | if [[ $RETVAL -eq 0 ]]; then 69 | echo -e "${Info} $NAME 停止成功 !" 70 | else 71 | echo -e "${Error} $NAME 停止失败 !" 72 | fi 73 | else 74 | echo -e "${Info} $NAME 未运行" 75 | RETVAL=1 76 | fi 77 | } 78 | do_status(){ 79 | check_running 80 | if [[ $? -eq 0 ]]; then 81 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." 82 | else 83 | echo -e "${Info} $NAME 未运行 !" 84 | RETVAL=1 85 | fi 86 | } 87 | do_restart(){ 88 | do_stop 89 | sleep 2s 90 | do_start 91 | } 92 | case "$1" in 93 | start|stop|restart|status) 94 | do_$1 95 | ;; 96 | *) 97 | echo "使用方法: $0 { start | stop | restart | status }" 98 | RETVAL=1 99 | ;; 100 | esac 101 | exit $RETVAL -------------------------------------------------------------------------------- /service/ss_go_debian: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ### BEGIN INIT INFO 4 | # Provides: Shadowsocks Golang 5 | # Required-Start: $network $local_fs $remote_fs 6 | # Required-Stop: $network $local_fs $remote_fs 7 | # Default-Start: 2 3 4 5 8 | # Default-Stop: 0 1 6 9 | # Short-Description: Lightweight SOCKS5 proxy tool Shadowsocks 10 | # Description: Start or stop the Shadowsocks-go 11 | ### END INIT INFO 12 | 13 | NAME="Shadowsocks" 14 | NAME_BIN="./shadowsocks-go " 15 | FOLDER="/usr/local/shadowsocks-go" 16 | CONF="/usr/local/shadowsocks-go/shadowsocks-go.conf" 17 | LOG="/usr/local/shadowsocks-go/shadowsocks-go.log" 18 | 19 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 20 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 21 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 22 | RETVAL=0 23 | 24 | check_running(){ 25 | PID=$(ps -ef |grep "${NAME_BIN}" |grep -v "grep" |grep -v "init.d" |grep -v "service" |awk '{print $2}') 26 | if [[ ! -z ${PID} ]]; then 27 | return 0 28 | else 29 | return 1 30 | fi 31 | } 32 | read_config(){ 33 | [[ ! -e ${CONF} ]] && echo -e "${Error} $NAME 配置文件不存在 !" && exit 1 34 | port=$(cat ${CONF}|grep 'PORT = '|awk -F 'PORT = ' '{print $NF}') 35 | password=$(cat ${CONF}|grep 'PASSWORD = '|awk -F 'PASSWORD = ' '{print $NF}') 36 | cipher=$(cat ${CONF}|grep 'CIPHER = '|awk -F 'CIPHER = ' '{print $NF}') 37 | verbose=$(cat ${CONF}|grep 'VERBOSE = '|awk -F 'VERBOSE = ' '{print $NF}') 38 | if [[ "${verbose}" == "YES" ]]; then 39 | verbose="-verbose" 40 | else 41 | verbose="" 42 | fi 43 | } 44 | do_start(){ 45 | check_running 46 | if [[ $? -eq 0 ]]; then 47 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 48 | else 49 | read_config 50 | cd ${FOLDER} 51 | echo -e "${Info} $NAME 启动中..." 52 | ulimit -n 51200 53 | nohup ./shadowsocks-go -s ":${port}" -cipher "${cipher}" -password "${password}" "${verbose}" >> "${LOG}" 2>&1 & 54 | sleep 2s 55 | check_running 56 | if [[ $? -eq 0 ]]; then 57 | echo -e "${Info} $NAME 启动成功 !" 58 | else 59 | echo -e "${Error} $NAME 启动失败 !请查看日志文件检查问题所在。" 60 | fi 61 | fi 62 | } 63 | do_stop(){ 64 | check_running 65 | if [[ $? -eq 0 ]]; then 66 | kill -9 ${PID} 67 | RETVAL=$? 68 | if [[ $RETVAL -eq 0 ]]; then 69 | echo -e "${Info} $NAME 停止成功 !" 70 | else 71 | echo -e "${Error} $NAME 停止失败 !" 72 | fi 73 | else 74 | echo -e "${Info} $NAME 未运行" 75 | RETVAL=1 76 | fi 77 | } 78 | do_status(){ 79 | check_running 80 | if [[ $? -eq 0 ]]; then 81 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." 82 | else 83 | echo -e "${Info} $NAME 未运行 !" 84 | RETVAL=1 85 | fi 86 | } 87 | do_restart(){ 88 | do_stop 89 | do_start 90 | } 91 | case "$1" in 92 | start|stop|restart|status) 93 | do_$1 94 | ;; 95 | *) 96 | echo "使用方法: $0 { start | stop | restart | status }" 97 | RETVAL=1 98 | ;; 99 | esac 100 | exit $RETVAL -------------------------------------------------------------------------------- /service/daze_centos: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # chkconfig: 2345 90 10 3 | # description: DAZE 4 | 5 | ### BEGIN INIT INFO 6 | # Provides: DAZE 7 | # Required-Start: $network $syslog 8 | # Required-Stop: $network 9 | # Default-Start: 2 3 4 5 10 | # Default-Stop: 0 1 6 11 | # Short-Description: Lightweight HTTP proxy tool 12 | # Description: Start or stop the DAZE 13 | ### END INIT INFO 14 | 15 | NAME="DAZE" 16 | NAME_BIN="daze" 17 | FILE="/usr/local/daze" 18 | CONF="${FILE}/daze.conf" 19 | LOG="${FILE}/daze.log" 20 | 21 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 22 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 23 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 24 | RETVAL=0 25 | 26 | check_running(){ 27 | PID=$(ps -ef |grep "${NAME_BIN}" |grep -v "grep" | grep -v "daze.sh"| grep -v "init.d" |grep -v "service" |awk '{print $2}') 28 | if [[ ! -z ${PID} ]]; then 29 | return 0 30 | else 31 | return 1 32 | fi 33 | } 34 | read_config(){ 35 | [[ ! -e ${CONF} ]] && echo -e "${Error} DAZE 配置文件不存在 !" && exit 1 36 | port=$(cat ${CONF}|grep "port"|awk -F "=" '{print $NF}') 37 | password=$(cat ${CONF}|grep "password"|awk -F "=" '{print $NF}') 38 | method=$(cat ${CONF}|grep "method"|awk -F "=" '{print $NF}') 39 | obfs_url=$(cat ${CONF}|grep "obfs_url"|awk -F "=" '{print $NF}') 40 | dns=$(cat ${CONF}|grep "dns"|awk -F "=" '{print $NF}') 41 | } 42 | do_start(){ 43 | check_running 44 | if [[ $? -eq 0 ]]; then 45 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 46 | else 47 | read_config 48 | cd ${FILE} 49 | echo -e "${Info} $NAME 启动中..." 50 | ulimit -n 51200 51 | if [[ -z ${obfs_url} ]]; then 52 | nohup ./daze server -l "0.0.0.0:${port}" -k "${password}" -e "${method}" -dns "${dns}" >> "${LOG}" 2>&1 & 53 | else 54 | nohup ./daze server -l "0.0.0.0:${port}" -k "${password}" -e "${method}" -m "${obfs_url}" -dns "${dns}" >> "${LOG}" 2>&1 & 55 | fi 56 | sleep 2s 57 | check_running 58 | if [[ $? -eq 0 ]]; then 59 | echo -e "${Info} $NAME 启动成功 !" 60 | else 61 | echo -e "${Error} $NAME 启动失败 !" 62 | fi 63 | fi 64 | } 65 | do_stop(){ 66 | check_running 67 | if [[ $? -eq 0 ]]; then 68 | kill -9 ${PID} 69 | RETVAL=$? 70 | if [[ $RETVAL -eq 0 ]]; then 71 | echo -e "${Info} $NAME 停止成功 !" 72 | else 73 | echo -e "${Error} $NAME 停止失败 !" 74 | fi 75 | else 76 | echo -e "${Info} $NAME 未运行" 77 | RETVAL=1 78 | fi 79 | } 80 | do_status(){ 81 | check_running 82 | if [[ $? -eq 0 ]]; then 83 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." 84 | else 85 | echo -e "${Info} $NAME 未运行 !" 86 | RETVAL=1 87 | fi 88 | } 89 | do_restart(){ 90 | do_stop 91 | sleep 2s 92 | do_start 93 | } 94 | case "$1" in 95 | start|stop|restart|status) 96 | do_$1 97 | ;; 98 | *) 99 | echo -e "使用方法: $0 { start | stop | restart | status }" 100 | RETVAL=1 101 | ;; 102 | esac 103 | exit $RETVAL -------------------------------------------------------------------------------- /service/goflyway_centos: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # chkconfig: 2345 90 10 3 | # description: GoFlyway 4 | 5 | ### BEGIN INIT INFO 6 | # Provides: GoFlyway 7 | # Required-Start: $network $syslog 8 | # Required-Stop: $network 9 | # Default-Start: 2 3 4 5 10 | # Default-Stop: 0 1 6 11 | # Short-Description: Lightweight HTTP proxy tool 12 | # Description: Start or stop the GoFlyway 13 | ### END INIT INFO 14 | 15 | NAME="GoFlyway" 16 | NAME_BIN="goflyway" 17 | FILE="/usr/local/goflyway" 18 | CONF="${FILE}/goflyway.conf" 19 | LOG="${FILE}/goflyway.log" 20 | 21 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 22 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 23 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 24 | RETVAL=0 25 | 26 | check_running(){ 27 | PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" | grep -v "goflyway.sh"| grep -v "init.d" |grep -v "service" |awk '{print $2}'` 28 | if [[ ! -z ${PID} ]]; then 29 | return 0 30 | else 31 | return 1 32 | fi 33 | } 34 | read_config(){ 35 | [[ ! -e ${CONF} ]] && echo -e "${Error} GoFlyway 配置文件不存在 !" && exit 1 36 | port=$(cat ${CONF}|grep "port"|awk -F "=" '{print $NF}') 37 | passwd=$(cat ${CONF}|grep "passwd"|awk -F "=" '{print $NF}') 38 | proxy_pass=$(cat ${CONF}|grep "proxy_pass"|awk -F "=" '{print $NF}') 39 | protocol=$(cat ${CONF}|grep "protocol"|awk -F "=" '{print $NF}') 40 | [[ -z "${protocol}" ]] && protocol="http" 41 | } 42 | do_start(){ 43 | check_running 44 | if [[ $? -eq 0 ]]; then 45 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 46 | else 47 | read_config 48 | cd ${FILE} 49 | echo -e "${Info} $NAME 启动中..." 50 | ulimit -n 51200 51 | if [[ -z ${proxy_pass} ]]; then 52 | nohup ./goflyway -k="${passwd}" -l=":${port}" -U="${protocol}" >> "${LOG}" 2>&1 & 53 | else 54 | nohup ./goflyway -k="${passwd}" -l=":${port}" -proxy-pass="${proxy_pass}" -U="${protocol}" >> "${LOG}" 2>&1 & 55 | fi 56 | sleep 2s 57 | check_running 58 | if [[ $? -eq 0 ]]; then 59 | echo -e "${Info} $NAME 启动成功 !" 60 | else 61 | echo -e "${Error} $NAME 启动失败 !" 62 | fi 63 | fi 64 | } 65 | do_stop(){ 66 | check_running 67 | if [[ $? -eq 0 ]]; then 68 | kill -9 ${PID} 69 | RETVAL=$? 70 | if [[ $RETVAL -eq 0 ]]; then 71 | echo -e "${Info} $NAME 停止成功 !" 72 | else 73 | echo -e "${Error} $NAME 停止失败 !" 74 | fi 75 | else 76 | echo -e "${Info} $NAME 未运行" 77 | RETVAL=1 78 | fi 79 | } 80 | do_status(){ 81 | check_running 82 | if [[ $? -eq 0 ]]; then 83 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." 84 | else 85 | echo -e "${Info} $NAME 未运行 !" 86 | RETVAL=1 87 | fi 88 | } 89 | do_restart(){ 90 | do_stop 91 | sleep 2s 92 | do_start 93 | } 94 | case "$1" in 95 | start|stop|restart|status) 96 | do_$1 97 | ;; 98 | *) 99 | echo -e "使用方法: $0 { start | stop | restart | status }" 100 | RETVAL=1 101 | ;; 102 | esac 103 | exit $RETVAL -------------------------------------------------------------------------------- /service/brook_centos: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # chkconfig: 2345 90 10 3 | # description: Brook 4 | 5 | ### BEGIN INIT INFO 6 | # Provides: Brook 7 | # Required-Start: $network $syslog 8 | # Required-Stop: $network 9 | # Default-Start: 2 3 4 5 10 | # Default-Stop: 0 1 6 11 | # Short-Description: Lightweight SOCKS5 proxy tool 12 | # Description: Start or stop the Brook 13 | ### END INIT INFO 14 | 15 | NAME="Brook" 16 | NAME_BIN="./brook " 17 | FILE="/usr/local/brook" 18 | CONF="/usr/local/brook/brook.conf" 19 | LOG="/usr/local/brook/brook.log" 20 | 21 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 22 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 23 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 24 | RETVAL=0 25 | 26 | check_running(){ 27 | PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" |grep -v "brook.sh" |grep -v "init.d" |grep -v "service" |awk '{print $2}'` 28 | if [[ ! -z ${PID} ]]; then 29 | return 0 30 | else 31 | return 1 32 | fi 33 | } 34 | read_config(){ 35 | [[ ! -e ${CONF} ]] && echo -e "${Error} Brook 配置文件不存在 !" && exit 1 36 | user_all=$(cat ${CONF}|sed "1d") 37 | user_all_num=$(echo "${user_all}"|wc -l) 38 | [[ -z ${user_all} ]] && echo -e "${Error} Brook 配置文件中用户配置为空 !" && exit 1 39 | protocol=$(cat ${CONF}|sed -n "1p") 40 | } 41 | do_start(){ 42 | check_running 43 | if [[ $? -eq 0 ]]; then 44 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 45 | else 46 | read_config 47 | cd ${FILE} 48 | echo -e "${Info} $NAME 启动中..." 49 | ulimit -n 51200 50 | servers_all="" 51 | for((integer = 1; integer <= ${user_all_num}; integer++)) 52 | do 53 | user_text=$(echo "${user_all}"|sed -n "${integer}p") 54 | port=$(echo "${user_text}"|awk '{print $1}') 55 | password=$(echo "${user_text}"|awk '{print $2}') 56 | servers_all="${servers_all}-l \":${port} ${password}\" " 57 | done 58 | eval nohup ./brook ${protocol} $(echo ${servers_all}) >> "${LOG}" 2>&1 & 59 | sleep 2s 60 | check_running 61 | if [[ $? -eq 0 ]]; then 62 | echo -e "${Info} $NAME 启动成功 !" 63 | else 64 | echo -e "${Error} $NAME 启动失败 !" 65 | fi 66 | fi 67 | } 68 | do_stop(){ 69 | check_running 70 | if [[ $? -eq 0 ]]; then 71 | kill -9 ${PID} 72 | RETVAL=$? 73 | if [[ $RETVAL -eq 0 ]]; then 74 | echo -e "${Info} $NAME 停止成功 !" 75 | else 76 | echo -e "${Error} $NAME 停止失败 !" 77 | fi 78 | else 79 | echo -e "${Info} $NAME 未运行" 80 | RETVAL=1 81 | fi 82 | } 83 | do_status(){ 84 | check_running 85 | if [[ $? -eq 0 ]]; then 86 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." 87 | else 88 | echo -e "${Info} $NAME 未运行 !" 89 | RETVAL=1 90 | fi 91 | } 92 | do_restart(){ 93 | do_stop 94 | do_start 95 | } 96 | case "$1" in 97 | start|stop|restart|status) 98 | do_$1 99 | ;; 100 | *) 101 | echo -e "使用方法: $0 { start | stop | restart | status }" 102 | RETVAL=1 103 | ;; 104 | esac 105 | exit $RETVAL -------------------------------------------------------------------------------- /service/ss_go_centos: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # chkconfig: 2345 90 10 3 | # description: Shadowsocks Golang 4 | 5 | ### BEGIN INIT INFO 6 | # Provides: Shadowsocks Golang 7 | # Required-Start: $network $syslog 8 | # Required-Stop: $network 9 | # Default-Start: 2 3 4 5 10 | # Default-Stop: 0 1 6 11 | # Short-Description: Lightweight SOCKS5 proxy tool Shadowsocks 12 | # Description: Start or stop the Shadowsocks-go 13 | ### END INIT INFO 14 | 15 | NAME="Shadowsocks" 16 | NAME_BIN="./shadowsocks-go " 17 | FOLDER="/usr/local/shadowsocks-go" 18 | CONF="/usr/local/shadowsocks-go/shadowsocks-go.conf" 19 | LOG="/usr/local/shadowsocks-go/shadowsocks-go.log" 20 | 21 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 22 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 23 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 24 | RETVAL=0 25 | 26 | check_running(){ 27 | PID=$(ps -ef |grep "${NAME_BIN}" |grep -v "grep" |grep -v "init.d" |grep -v "service" |awk '{print $2}') 28 | if [[ ! -z ${PID} ]]; then 29 | return 0 30 | else 31 | return 1 32 | fi 33 | } 34 | read_config(){ 35 | [[ ! -e ${CONF} ]] && echo -e "${Error} $NAME 配置文件不存在 !" && exit 1 36 | port=$(cat ${CONF}|grep 'PORT = '|awk -F 'PORT = ' '{print $NF}') 37 | password=$(cat ${CONF}|grep 'PASSWORD = '|awk -F 'PASSWORD = ' '{print $NF}') 38 | cipher=$(cat ${CONF}|grep 'CIPHER = '|awk -F 'CIPHER = ' '{print $NF}') 39 | verbose=$(cat ${CONF}|grep 'VERBOSE = '|awk -F 'VERBOSE = ' '{print $NF}') 40 | if [[ "${verbose}" == "YES" ]]; then 41 | verbose="-verbose" 42 | else 43 | verbose="" 44 | fi 45 | } 46 | do_start(){ 47 | check_running 48 | if [[ $? -eq 0 ]]; then 49 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 50 | else 51 | read_config 52 | cd ${FOLDER} 53 | echo -e "${Info} $NAME 启动中..." 54 | ulimit -n 51200 55 | nohup ./shadowsocks-go -s ":${port}" -cipher "${cipher}" -password "${password}" "${verbose}" >> "${LOG}" 2>&1 & 56 | sleep 2s 57 | check_running 58 | if [[ $? -eq 0 ]]; then 59 | echo -e "${Info} $NAME 启动成功 !" 60 | else 61 | echo -e "${Error} $NAME 启动失败 !请查看日志文件检查问题所在。" 62 | fi 63 | fi 64 | } 65 | do_stop(){ 66 | check_running 67 | if [[ $? -eq 0 ]]; then 68 | kill -9 ${PID} 69 | RETVAL=$? 70 | if [[ $RETVAL -eq 0 ]]; then 71 | echo -e "${Info} $NAME 停止成功 !" 72 | else 73 | echo -e "${Error} $NAME 停止失败 !" 74 | fi 75 | else 76 | echo -e "${Info} $NAME 未运行" 77 | RETVAL=1 78 | fi 79 | } 80 | do_status(){ 81 | check_running 82 | if [[ $? -eq 0 ]]; then 83 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." 84 | else 85 | echo -e "${Info} $NAME 未运行 !" 86 | RETVAL=1 87 | fi 88 | } 89 | do_restart(){ 90 | do_stop 91 | do_start 92 | } 93 | case "$1" in 94 | start|stop|restart|status) 95 | do_$1 96 | ;; 97 | *) 98 | echo -e "使用方法: $0 { start | stop | restart | status }" 99 | RETVAL=1 100 | ;; 101 | esac 102 | exit $RETVAL -------------------------------------------------------------------------------- /service/brook_debian: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ### BEGIN INIT INFO 4 | # Provides: Brook 5 | # Required-Start: $network $local_fs $remote_fs 6 | # Required-Stop: $network $local_fs $remote_fs 7 | # Default-Start: 2 3 4 5 8 | # Default-Stop: 0 1 6 9 | # Short-Description: Lightweight SOCKS5 proxy tool 10 | # Description: Start or stop the Brook 11 | ### END INIT INFO 12 | 13 | NAME="Brook" 14 | NAME_BIN="./brook " 15 | FILE="/usr/local/brook" 16 | CONF="/usr/local/brook/brook.conf" 17 | LOG="/usr/local/brook/brook.log" 18 | 19 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 20 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 21 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 22 | RETVAL=0 23 | 24 | check_running(){ 25 | PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" |grep -v "brook.sh" |grep -v "init.d" |grep -v "service" |awk '{print $2}'` 26 | if [[ ! -z ${PID} ]]; then 27 | return 0 28 | else 29 | return 1 30 | fi 31 | } 32 | read_config(){ 33 | [[ ! -e ${CONF} ]] && echo -e "${Error} Brook 配置文件不存在 !" && exit 1 34 | user_all=$(cat ${CONF}|sed "1d") 35 | user_all_num=$(echo "${user_all}"|wc -l) 36 | [[ -z ${user_all} ]] && echo -e "${Error} Brook 配置文件中用户配置为空 !" && exit 1 37 | protocol=$(cat ${CONF}|sed -n "1p") 38 | } 39 | do_start(){ 40 | check_running 41 | if [[ $? -eq 0 ]]; then 42 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 43 | else 44 | read_config 45 | cd ${FILE} 46 | echo -e "${Info} $NAME 启动中..." 47 | ulimit -n 51200 48 | servers_all="" 49 | for((integer = 1; integer <= ${user_all_num}; integer++)) 50 | do 51 | user_text=$(echo "${user_all}"|sed -n "${integer}p") 52 | port=$(echo "${user_text}"|awk '{print $1}') 53 | password=$(echo "${user_text}"|awk '{print $2}') 54 | servers_all="${servers_all}-l \":${port} ${password}\" " 55 | done 56 | #echo -e "nohup ./brook ${protocol} $(echo ${servers_all}) >> \"${LOG}\" 2>&1 &" 57 | eval nohup ./brook ${protocol} $(echo ${servers_all}) >> "${LOG}" 2>&1 & 58 | sleep 2s 59 | check_running 60 | if [[ $? -eq 0 ]]; then 61 | echo -e "${Info} $NAME 启动成功 !" 62 | else 63 | echo -e "${Error} $NAME 启动失败 !" 64 | fi 65 | fi 66 | } 67 | do_stop(){ 68 | check_running 69 | if [[ $? -eq 0 ]]; then 70 | kill -9 ${PID} 71 | RETVAL=$? 72 | if [[ $RETVAL -eq 0 ]]; then 73 | echo -e "${Info} $NAME 停止成功 !" 74 | else 75 | echo -e "${Error} $NAME 停止失败 !" 76 | fi 77 | else 78 | echo -e "${Info} $NAME 未运行" 79 | RETVAL=1 80 | fi 81 | } 82 | do_status(){ 83 | check_running 84 | if [[ $? -eq 0 ]]; then 85 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." 86 | else 87 | echo -e "${Info} $NAME 未运行 !" 88 | RETVAL=1 89 | fi 90 | } 91 | do_restart(){ 92 | do_stop 93 | do_start 94 | } 95 | case "$1" in 96 | start|stop|restart|status) 97 | do_$1 98 | ;; 99 | *) 100 | echo "使用方法: $0 { start | stop | restart | status }" 101 | RETVAL=1 102 | ;; 103 | esac 104 | exit $RETVAL -------------------------------------------------------------------------------- /service/dowsdns_debian: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ### BEGIN INIT INFO 4 | # Provides: DowsDNS 5 | # Required-Start: $network $local_fs $remote_fs 6 | # Required-Stop: $network $local_fs $remote_fs 7 | # Default-Start: 2 3 4 5 8 | # Default-Stop: 0 1 6 9 | # Short-Description: Lightweight DNS server 10 | # Description: Start or stop the DowsDNS server 11 | ### END INIT INFO 12 | 13 | 14 | NAME="DowsDNS" 15 | NAME_BIN="python start.py" 16 | BIN="/usr/local/dowsDNS" 17 | CONF="/usr/local/dowsDNS/conf/config.json" 18 | Info_font_prefix="\033[32m" && Error_font_prefix="\033[31m" && Info_background_prefix="\033[42;37m" && Error_background_prefix="\033[41;37m" && Font_suffix="\033[0m" 19 | RETVAL=0 20 | 21 | check_running(){ 22 | PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" |grep -v "init.d" |grep -v "service" |awk '{print $2}'` 23 | if [[ ! -z ${PID} ]]; then 24 | return 0 25 | else 26 | return 1 27 | fi 28 | } 29 | Read_config(){ 30 | [[ ! -e ${CONF} ]] && echo -e "${Error} DowsDNS 配置文件不存在 !" && exit 1 31 | local_dns_port=`cat ${CONF}|grep "Local_dns_port"|sed -r 's/.*:(.+),.*/\1/'` 32 | } 33 | View_dowsdns(){ 34 | Read_config 35 | if [[ ${local_dns_server} == "127.0.0.1" ]]; then 36 | ip="${local_dns_server} " 37 | else 38 | ip=`wget -qO- -t1 -T2 members.3322.org/dyndns/getip` 39 | [[ -z ${ip} ]] && ip="VPS_IP" 40 | fi 41 | clear && echo "————————————————" && echo 42 | echo -e " 请在你的设备中设置DNS服务器为: 43 | IP : ${Info_font_prefix}${ip}${Font_suffix} ,端口 : ${Info_font_prefix}${local_dns_port}${Font_suffix} 44 | 45 | 注意:如果设备中没有 DNS端口设置选项,那么就只能使用默认的 53 端口" 46 | echo && echo "————————————————" 47 | } 48 | do_start(){ 49 | check_running 50 | if [[ $? -eq 0 ]]; then 51 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME (PID $(echo ${PID})) 正在运行..." && exit 0 52 | else 53 | cd "${BIN}" 54 | nohup python start.py > /tmp/dowsdns.log 2>&1 & 55 | sleep 2s 56 | check_running 57 | if [[ $? -eq 0 ]]; then 58 | View_dowsdns 59 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME 启动成功 !" 60 | else 61 | echo -e "${Error_font_prefix}[错误]${Font_suffix} $NAME 启动失败 !" 62 | fi 63 | fi 64 | } 65 | do_stop(){ 66 | check_running 67 | if [[ $? -eq 0 ]]; then 68 | kill -9 ${PID} 69 | RETVAL=$? 70 | if [[ $RETVAL -eq 0 ]]; then 71 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME 停止成功 !" 72 | else 73 | echo -e "${Error_font_prefix}[错误]${Font_suffix}$NAME 停止失败 !" 74 | fi 75 | else 76 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME 未运行 !" 77 | RETVAL=1 78 | fi 79 | } 80 | do_status(){ 81 | check_running 82 | if [[ $? -eq 0 ]]; then 83 | View_dowsdns 84 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME (PID $(echo ${PID})) 正在运行..." 85 | else 86 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME 未运行 !" 87 | RETVAL=1 88 | fi 89 | } 90 | do_restart(){ 91 | do_stop 92 | do_start 93 | } 94 | case "$1" in 95 | start|stop|restart|status) 96 | do_$1 97 | ;; 98 | *) 99 | echo "使用方法: $0 { start | stop | restart | status }" 100 | RETVAL=1 101 | ;; 102 | esac 103 | exit $RETVAL -------------------------------------------------------------------------------- /service/dowsdns_centos: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # chkconfig: 2345 90 10 3 | # description: DowsDNS 4 | 5 | ### BEGIN INIT INFO 6 | # Provides: DowsDNS 7 | # Required-Start: $network $syslog 8 | # Required-Stop: $network 9 | # Default-Start: 2 3 4 5 10 | # Default-Stop: 0 1 6 11 | # Short-Description: Lightweight DNS server 12 | # Description: Start or stop the DowsDNS server 13 | ### END INIT INFO 14 | 15 | NAME="DowsDNS" 16 | NAME_BIN="python start.py" 17 | BIN="/usr/local/dowsDNS" 18 | CONF="/usr/local/dowsDNS/conf/config.json" 19 | Info_font_prefix="\033[32m" && Error_font_prefix="\033[31m" && Info_background_prefix="\033[42;37m" && Error_background_prefix="\033[41;37m" && Font_suffix="\033[0m" 20 | RETVAL=0 21 | 22 | check_running(){ 23 | PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" |grep -v "init.d" |grep -v "service" |awk '{print $2}'` 24 | if [[ ! -z ${PID} ]]; then 25 | return 0 26 | else 27 | return 1 28 | fi 29 | } 30 | Read_config(){ 31 | [[ ! -e ${CONF} ]] && echo -e "${Error} DowsDNS 配置文件不存在 !" && exit 1 32 | local_dns_port=`cat ${CONF}|grep "Local_dns_port"|sed -r 's/.*:(.+),.*/\1/'` 33 | } 34 | View_dowsdns(){ 35 | Read_config 36 | if [[ ${local_dns_server} == "127.0.0.1" ]]; then 37 | ip="${local_dns_server} " 38 | else 39 | ip=`wget -qO- -t1 -T2 members.3322.org/dyndns/getip` 40 | [[ -z ${ip} ]] && ip="VPS_IP" 41 | fi 42 | clear && echo "————————————————" && echo 43 | echo -e " 请在你的设备中设置DNS服务器为: 44 | IP : ${Info_font_prefix}${ip}${Font_suffix} ,端口 : ${Info_font_prefix}${local_dns_port}${Font_suffix} 45 | 46 | 注意:如果设备中没有 DNS端口设置选项,那么就只能使用默认的 53 端口" 47 | echo && echo "————————————————" 48 | } 49 | do_start(){ 50 | check_running 51 | if [[ $? -eq 0 ]]; then 52 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME (PID $(echo ${PID})) 正在运行..." && exit 0 53 | else 54 | cd "${BIN}" 55 | nohup python start.py > /tmp/dowsdns.log 2>&1 & 56 | sleep 2s 57 | check_running 58 | if [[ $? -eq 0 ]]; then 59 | View_dowsdns 60 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME 启动成功 !" 61 | else 62 | echo -e "${Error_font_prefix}[错误]${Font_suffix} $NAME 启动失败 !" 63 | fi 64 | fi 65 | } 66 | do_stop(){ 67 | check_running 68 | if [[ $? -eq 0 ]]; then 69 | kill -9 ${PID} 70 | RETVAL=$? 71 | if [[ $RETVAL -eq 0 ]]; then 72 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME 停止成功 !" 73 | else 74 | echo -e "${Error_font_prefix}[错误]${Font_suffix} $NAME 停止失败 !" 75 | fi 76 | else 77 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME 未运行" 78 | RETVAL=1 79 | fi 80 | } 81 | do_status(){ 82 | check_running 83 | if [[ $? -eq 0 ]]; then 84 | View_dowsdns 85 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME (PID $(echo ${PID})) 正在运行..." 86 | else 87 | echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME 未运行 !" 88 | RETVAL=1 89 | fi 90 | } 91 | do_restart(){ 92 | do_stop 93 | do_start 94 | } 95 | case "$1" in 96 | start|stop|restart|status) 97 | do_$1 98 | ;; 99 | *) 100 | echo -e "使用方法: $0 { start | stop | restart | status }" 101 | RETVAL=1 102 | ;; 103 | esac 104 | exit $RETVAL -------------------------------------------------------------------------------- /libsodium.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin 3 | export PATH 4 | 5 | #================================================= 6 | # System Required: CentOS/Debian/Ubuntu 7 | # Description: Libsodium Install 8 | # Version: 1.0.0 9 | # Author: Toyo 10 | # Blog: https://doub.io/shell-jc6/ 11 | #================================================= 12 | 13 | Libsodiumr_file="/usr/local/lib/libsodium.so" 14 | Libsodiumr_ver_backup="1.0.15" 15 | 16 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 17 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" && Error="${Red_font_prefix}[错误]${Font_color_suffix}" && Tip="${Green_font_prefix}[注意]${Font_color_suffix}" 18 | 19 | Check_Libsodium_ver(){ 20 | echo -e "${Info} 开始获取 libsodium 最新版本..." 21 | Libsodiumr_ver=$(wget -qO- "https://github.com/jedisct1/libsodium/tags"|grep "/jedisct1/libsodium/releases/tag/"|head -1|sed -r 's/.*tag\/(.+)\">.*/\1/') 22 | [[ -z ${Libsodiumr_ver} ]] && Libsodiumr_ver=${Libsodiumr_ver_backup} 23 | echo -e "${Info} libsodium 最新版本为 ${Green_font_prefix}[${Libsodiumr_ver}]${Font_color_suffix} !" 24 | } 25 | Install_Libsodium(){ 26 | if [[ -e ${Libsodiumr_file} ]]; then 27 | echo -e "${Error} libsodium 已安装 , 是否覆盖安装(或者更新)?[y/N]" 28 | read -e -p "(默认: n):" yn 29 | [[ -z ${yn} ]] && yn="n" 30 | if [[ ${yn} == [Nn] ]]; then 31 | echo "已取消..." && exit 1 32 | fi 33 | else 34 | echo -e "${Info} libsodium 未安装,开始安装..." 35 | fi 36 | Check_Libsodium_ver 37 | if [[ ${release} == "centos" ]]; then 38 | yum update 39 | echo -e "${Info} 安装依赖..." 40 | yum -y groupinstall "Development Tools" 41 | echo -e "${Info} 下载..." 42 | wget --no-check-certificate -N "https://github.com/jedisct1/libsodium/releases/download/${Libsodiumr_ver}/libsodium-${Libsodiumr_ver}.tar.gz" 43 | echo -e "${Info} 解压..." 44 | tar -xzf libsodium-${Libsodiumr_ver}.tar.gz 45 | cd libsodium-${Libsodiumr_ver} 46 | echo -e "${Info} 编译安装..." 47 | ./configure --disable-maintainer-mode 48 | make -j2 49 | make install 50 | echo /usr/local/lib > /etc/ld.so.conf.d/usr_local_lib.conf 51 | else 52 | apt-get update 53 | echo -e "${Info} 安装依赖..." 54 | apt-get install -y build-essential 55 | echo -e "${Info} 下载..." 56 | wget --no-check-certificate -N "https://github.com/jedisct1/libsodium/releases/download/${Libsodiumr_ver}/libsodium-${Libsodiumr_ver}.tar.gz" 57 | echo -e "${Info} 解压..." 58 | tar -xzf libsodium-${Libsodiumr_ver}.tar.gz 59 | cd libsodium-${Libsodiumr_ver} 60 | echo -e "${Info} 编译安装..." 61 | ./configure --disable-maintainer-mode 62 | make -j2 63 | make install 64 | fi 65 | ldconfig 66 | cd .. 67 | rm -rf libsodium-${Libsodiumr_ver}.tar.gz 68 | rm -rf libsodium-${Libsodiumr_ver} 69 | [[ ! -e ${Libsodiumr_file} ]] && echo -e "${Error} libsodium 安装失败 !" && exit 1 70 | echo && echo -e "${Info} libsodium 安装成功 !" && echo 71 | } 72 | action=$1 73 | [[ -z $1 ]] && action=install 74 | case "$action" in 75 | install) 76 | Install_Libsodium 77 | ;; 78 | *) 79 | echo "输入错误 !" 80 | echo "用法: [ install ]" 81 | ;; 82 | esac -------------------------------------------------------------------------------- /other/Aria2/aria2.conf: -------------------------------------------------------------------------------- 1 | ## '#'开头为注释内容, 选项都有相应的注释说明, 根据需要修改 ## 2 | ## 被注释的选项填写的是默认值, 建议在需要修改时再取消注释 ## 3 | 4 | ## 文件保存相关 ## 5 | 6 | # 文件的保存路径(可使用绝对路径或相对路径), 默认: 当前启动位置 7 | dir=/usr/local/caddy/www/aria2/Download 8 | # 启用磁盘缓存, 0为禁用缓存, 需1.16以上版本, 默认:16M 9 | #disk-cache=32M 10 | # 文件预分配方式, 能有效降低磁盘碎片, 默认:prealloc 11 | # 预分配所需时间: none < falloc ? trunc < prealloc 12 | # falloc和trunc则需要文件系统和内核支持 13 | # NTFS建议使用falloc, EXT3/4建议trunc, MAC 下需要注释此项 14 | # file-allocation=none 15 | # 断点续传 16 | continue=true 17 | 18 | ## 下载连接相关 ## 19 | 20 | # 最大同时下载任务数, 运行时可修改, 默认:5 21 | max-concurrent-downloads=10 22 | # 同一服务器连接数, 添加时可指定, 默认:1 23 | max-connection-per-server=5 24 | # 最小文件分片大小, 添加时可指定, 取值范围1M -1024M, 默认:20M 25 | # 假定size=10M, 文件为20MiB 则使用两个来源下载; 文件为15MiB 则使用一个来源下载 26 | min-split-size=10M 27 | # 单个任务最大线程数, 添加时可指定, 默认:5 28 | split=20 29 | # 整体下载速度限制, 运行时可修改, 默认:0 30 | #max-overall-download-limit=0 31 | # 单个任务下载速度限制, 默认:0 32 | #max-download-limit=0 33 | # 整体上传速度限制, 运行时可修改, 默认:0 34 | max-overall-upload-limit=1M 35 | # 单个任务上传速度限制, 默认:0 36 | #max-upload-limit=1000 37 | # 禁用IPv6, 默认:false 38 | disable-ipv6=false 39 | 40 | ## 进度保存相关 ## 41 | 42 | # 从会话文件中读取下载任务 43 | input-file=/root/.aria2/aria2.session 44 | # 在Aria2退出时保存`错误/未完成`的下载任务到会话文件 45 | save-session=/root/.aria2/aria2.session 46 | # 定时保存会话, 0为退出时才保存, 需1.16.1以上版本, 默认:0 47 | save-session-interval=60 48 | 49 | ## RPC相关设置 ## 50 | 51 | # 启用RPC, 默认:false 52 | enable-rpc=true 53 | # 允许所有来源, 默认:false 54 | rpc-allow-origin-all=true 55 | # 允许非外部访问, 默认:false 56 | rpc-listen-all=true 57 | # 事件轮询方式, 取值:[epoll, kqueue, port, poll, select], 不同系统默认值不同 58 | #event-poll=select 59 | # RPC监听端口, 端口被占用时可以修改, 默认:6800 60 | rpc-listen-port=6800 61 | # 设置的RPC授权令牌, v1.18.4新增功能, 取代 --rpc-user 和 --rpc-passwd 选项 62 | rpc-secret=DOUBIToyo 63 | # 设置的RPC访问用户名, 此选项新版已废弃, 建议改用 --rpc-secret 选项 64 | #rpc-user= 65 | # 设置的RPC访问密码, 此选项新版已废弃, 建议改用 --rpc-secret 选项 66 | #rpc-passwd= 67 | # 是否启用 RPC 服务的 SSL/TLS 加密, 68 | # 启用加密后 RPC 服务需要使用 https 或者 wss 协议连接 69 | #rpc-secure=true 70 | # 在 RPC 服务中启用 SSL/TLS 加密时的证书文件(.pem/.crt) 71 | #rpc-certificate=/root/xxx.pem 72 | # 在 RPC 服务中启用 SSL/TLS 加密时的私钥文件(.key) 73 | #rpc-private-key=/root/xxx.key 74 | 75 | ## BT/PT下载相关 ## 76 | 77 | # 当下载的是一个种子(以.torrent结尾)时, 自动开始BT任务, 默认:true 78 | follow-torrent=true 79 | # BT监听端口, 当端口被屏蔽时使用, 默认:6881-6999 80 | listen-port=51413 81 | # 单个种子最大连接数, 默认:55 82 | #bt-max-peers=55 83 | # 打开DHT功能, PT需要禁用, 默认:true 84 | enable-dht=true 85 | # 打开IPv6 DHT功能, PT需要禁用 86 | #enable-dht6=false 87 | # DHT网络监听端口, 默认:6881-6999 88 | #dht-listen-port=6881-6999 89 | # 本地节点查找, PT需要禁用, 默认:false 90 | #bt-enable-lpd=true 91 | # 种子交换, PT需要禁用, 默认:true 92 | enable-peer-exchange=true 93 | # 每个种子限速, 对少种的PT很有用, 默认:50K 94 | #bt-request-peer-speed-limit=50K 95 | # 客户端伪装, PT需要 96 | peer-id-prefix=-TR2770- 97 | user-agent=Transmission/2.77 98 | # 当种子的分享率达到这个数时, 自动停止做种, 0为一直做种, 默认:1.0 99 | seed-ratio=0.1 100 | # 强制保存会话, 即使任务已经完成, 默认:false 101 | # 较新的版本开启后会在任务完成后依然保留.aria2文件 102 | force-save=true 103 | # BT校验相关, 默认:true 104 | #bt-hash-check-seed=true 105 | # 继续之前的BT任务时, 无需再次校验, 默认:false 106 | bt-seed-unverified=true 107 | # 保存磁力链接元数据为种子文件(.torrent文件), 默认:false 108 | #bt-save-metadata=true 109 | -------------------------------------------------------------------------------- /service/pserver_debian: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ### BEGIN INIT INFO 4 | # Provides: Peerflix Server 5 | # Required-Start: $network $local_fs $remote_fs 6 | # Required-Stop: $network $local_fs $remote_fs 7 | # Default-Start: 2 3 4 5 8 | # Default-Stop: 0 1 6 9 | # Short-Description: Peerflix Server: a self-hosted remote torrent client 10 | # Description: Start or stop the Peerflix Server 11 | ### END INIT INFO 12 | 13 | NAME="Peerflix Server" 14 | NAME_BIN="peerflix-server" 15 | FILE="/etc/node/lib/node_modules/peerflix-server" 16 | CONF="/etc/peerflix-server/peerflix-server.conf" 17 | LOG="/tmp/peerflix-server.log" 18 | 19 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 20 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 21 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 22 | RETVAL=0 23 | 24 | check_running(){ 25 | PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" |grep -v "init.d" |grep -v "service" |awk '{print $2}'` 26 | if [[ ! -z ${PID} ]]; then 27 | return 0 28 | else 29 | return 1 30 | fi 31 | } 32 | read_config(){ 33 | [[ ! -e ${CONF} ]] && echo -e "${Error} ${NAME} 配置文件不存在 !" && exit 1 34 | port=`cat ${CONF}|grep "port = "|awk -F "port = " '{print $NF}'` 35 | } 36 | View_User(){ 37 | ip=$(wget -qO- -t1 -T2 ipinfo.io/ip) 38 | if [[ -z "${ip}" ]]; then 39 | ip=$(wget -qO- -t1 -T2 api.ip.sb/ip) 40 | if [[ -z "${ip}" ]]; then 41 | ip=$(wget -qO- -t1 -T2 members.3322.org/dyndns/getip) 42 | if [[ -z "${ip}" ]]; then 43 | ip="VPS_IP" 44 | fi 45 | fi 46 | fi 47 | clear && echo "————————————————" && echo 48 | echo -e " Peerflix Server 信息 :" && echo 49 | echo -e " 地址\t: ${Green_font_prefix}http://${ip}:${port}${Font_color_suffix}" 50 | echo && echo "————————————————" 51 | } 52 | do_start(){ 53 | check_running 54 | if [[ $? -eq 0 ]]; then 55 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 56 | else 57 | read_config 58 | echo -e "${Info} $NAME 启动中..." 59 | ulimit -n 51200 60 | PORT=${port} nohup node ${FILE} > "${LOG}" 2>&1 & 61 | sleep 2s 62 | check_running 63 | if [[ $? -eq 0 ]]; then 64 | echo -e "${Info} $NAME 启动成功 !" 65 | View_User 66 | else 67 | echo -e "${Error} $NAME 启动失败(请运行脚本查看日志错误输出) !" 68 | fi 69 | fi 70 | } 71 | do_stop(){ 72 | check_running 73 | if [[ $? -eq 0 ]]; then 74 | kill -9 ${PID} 75 | RETVAL=$? 76 | if [[ $RETVAL -eq 0 ]]; then 77 | echo -e "${Info} $NAME 停止成功 !" 78 | else 79 | echo -e "${Error} $NAME 停止失败 !" 80 | fi 81 | else 82 | echo -e "${Info} $NAME 未运行" 83 | RETVAL=1 84 | fi 85 | } 86 | do_status(){ 87 | check_running 88 | if [[ $? -eq 0 ]]; then 89 | read_config 90 | View_User 91 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." 92 | else 93 | echo -e "${Info} $NAME 未运行 !" 94 | RETVAL=1 95 | fi 96 | } 97 | do_restart(){ 98 | do_stop 99 | do_start 100 | } 101 | case "$1" in 102 | start|stop|restart|status) 103 | do_$1 104 | ;; 105 | *) 106 | echo "使用方法: $0 { start | stop | restart | status }" 107 | RETVAL=1 108 | ;; 109 | esac 110 | exit $RETVAL -------------------------------------------------------------------------------- /service/mtproxy_go_debian: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ### BEGIN INIT INFO 4 | # Provides: MTProxy Golang 5 | # Required-Start: $network $local_fs $remote_fs 6 | # Required-Stop: $network $local_fs $remote_fs 7 | # Default-Start: 2 3 4 5 8 | # Default-Stop: 0 1 6 9 | # Short-Description: Simple MT-Proto-go proxy 10 | # Description: Start or stop the MTProxy-go 11 | ### END INIT INFO 12 | 13 | NAME="MTProxy" 14 | NAME_BIN="./mtg " 15 | FILE="/usr/local/mtproxy-go" 16 | CONF="/usr/local/mtproxy-go/mtproxy.conf" 17 | LOG="/usr/local/mtproxy-go/mtproxy.log" 18 | 19 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 20 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 21 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 22 | RETVAL=0 23 | 24 | check_running(){ 25 | PID=$(ps -ef |grep "${NAME_BIN}" |grep -v "grep" |grep -v "init.d" |grep -v "service" |awk '{print $2}') 26 | if [[ ! -z ${PID} ]]; then 27 | return 0 28 | else 29 | return 1 30 | fi 31 | } 32 | read_config(){ 33 | [[ ! -e ${CONF} ]] && echo -e "${Error} $NAME 配置文件不存在 !" && exit 1 34 | port=$(cat ${CONF}|grep 'PORT = '|awk -F 'PORT = ' '{print $NF}') 35 | password=$(cat ${CONF}|grep 'PASSWORD = '|awk -F 'PASSWORD = ' '{print $NF}') 36 | tag=$(cat ${CONF}|grep 'TAG = '|awk -F 'TAG = ' '{print $NF}') 37 | nat_ipv4=$(cat ${CONF}|grep 'NAT-IPv4 = '|awk -F 'NAT-IPv4 = ' '{print $NF}') 38 | nat_ipv6=$(cat ${CONF}|grep 'NAT-IPv6 = '|awk -F 'NAT-IPv6 = ' '{print $NF}') 39 | secure=$(cat ${CONF}|grep 'SECURE = '|awk -F 'SECURE = ' '{print $NF}') 40 | [[ ! -z "${nat_ipv4}" ]] && nat_ipv4="-4 \"${nat_ipv4}\"" 41 | [[ ! -z "${nat_ipv6}" ]] && nat_ipv6="-6 \"${nat_ipv6}\"" 42 | if [[ "${secure}" == "YES" ]]; then 43 | secure="-s" 44 | else 45 | secure="" 46 | fi 47 | } 48 | do_start(){ 49 | check_running 50 | if [[ $? -eq 0 ]]; then 51 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 52 | else 53 | read_config 54 | cd ${FILE} 55 | echo -e "${Info} $NAME 启动中..." 56 | ulimit -n 51200 57 | eval nohup ./mtg -b 0.0.0.0 -p ${port} $(echo ${nat_ipv4}) $(echo ${nat_ipv6}) -q 65436 $(echo ${secure}) "${password}" "${tag}" >> "${LOG}" 2>&1 & 58 | sleep 2s 59 | check_running 60 | if [[ $? -eq 0 ]]; then 61 | echo -e "${Info} $NAME 启动成功 !" 62 | else 63 | echo -e "${Error} $NAME 启动失败 !请查看日志文件检查问题所在。" 64 | fi 65 | fi 66 | } 67 | do_stop(){ 68 | check_running 69 | if [[ $? -eq 0 ]]; then 70 | kill -9 ${PID} 71 | RETVAL=$? 72 | if [[ $RETVAL -eq 0 ]]; then 73 | echo -e "${Info} $NAME 停止成功 !" 74 | else 75 | echo -e "${Error} $NAME 停止失败 !" 76 | fi 77 | else 78 | echo -e "${Info} $NAME 未运行" 79 | RETVAL=1 80 | fi 81 | } 82 | do_status(){ 83 | check_running 84 | if [[ $? -eq 0 ]]; then 85 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." 86 | else 87 | echo -e "${Info} $NAME 未运行 !" 88 | RETVAL=1 89 | fi 90 | } 91 | do_restart(){ 92 | do_stop 93 | do_start 94 | } 95 | case "$1" in 96 | start|stop|restart|status) 97 | do_$1 98 | ;; 99 | *) 100 | echo "使用方法: $0 { start | stop | restart | status }" 101 | RETVAL=1 102 | ;; 103 | esac 104 | exit $RETVAL -------------------------------------------------------------------------------- /service/mtproxy_go_centos: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # chkconfig: 2345 90 10 3 | # description: MTProxy Golang 4 | 5 | ### BEGIN INIT INFO 6 | # Provides: MTProxy Golang 7 | # Required-Start: $network $syslog 8 | # Required-Stop: $network 9 | # Default-Start: 2 3 4 5 10 | # Default-Stop: 0 1 6 11 | # Short-Description: Simple MT-Proto-go proxy 12 | # Description: Start or stop the MTProxy-go 13 | ### END INIT INFO 14 | 15 | NAME="MTProxy" 16 | NAME_BIN="./mtg " 17 | FILE="/usr/local/mtproxy-go" 18 | CONF="/usr/local/mtproxy-go/mtproxy.conf" 19 | LOG="/usr/local/mtproxy-go/mtproxy.log" 20 | 21 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 22 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 23 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 24 | RETVAL=0 25 | 26 | check_running(){ 27 | PID=$(ps -ef |grep "${NAME_BIN}" |grep -v "grep" |grep -v "init.d" |grep -v "service" |awk '{print $2}') 28 | if [[ ! -z ${PID} ]]; then 29 | return 0 30 | else 31 | return 1 32 | fi 33 | } 34 | read_config(){ 35 | [[ ! -e ${CONF} ]] && echo -e "${Error} $NAME 配置文件不存在 !" && exit 1 36 | port=$(cat ${CONF}|grep 'PORT = '|awk -F 'PORT = ' '{print $NF}') 37 | password=$(cat ${CONF}|grep 'PASSWORD = '|awk -F 'PASSWORD = ' '{print $NF}') 38 | tag=$(cat ${CONF}|grep 'TAG = '|awk -F 'TAG = ' '{print $NF}') 39 | nat_ipv4=$(cat ${CONF}|grep 'NAT-IPv4 = '|awk -F 'NAT-IPv4 = ' '{print $NF}') 40 | nat_ipv6=$(cat ${CONF}|grep 'NAT-IPv6 = '|awk -F 'NAT-IPv6 = ' '{print $NF}') 41 | secure=$(cat ${CONF}|grep 'SECURE = '|awk -F 'SECURE = ' '{print $NF}') 42 | [[ ! -z "${nat_ipv4}" ]] && nat_ipv4="-4 \"${nat_ipv4}\"" 43 | [[ ! -z "${nat_ipv6}" ]] && nat_ipv6="-6 \"${nat_ipv6}\"" 44 | if [[ "${secure}" == "YES" ]]; then 45 | secure="-s" 46 | else 47 | secure="" 48 | fi 49 | } 50 | do_start(){ 51 | check_running 52 | if [[ $? -eq 0 ]]; then 53 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 54 | else 55 | read_config 56 | cd ${FILE} 57 | echo -e "${Info} $NAME 启动中..." 58 | ulimit -n 51200 59 | eval nohup ./mtg -b 0.0.0.0 -p ${port} $(echo ${nat_ipv4}) $(echo ${nat_ipv6}) -q 65436 $(echo ${secure}) "${password}" "${tag}" >> "${LOG}" 2>&1 & 60 | sleep 2s 61 | check_running 62 | if [[ $? -eq 0 ]]; then 63 | echo -e "${Info} $NAME 启动成功 !" 64 | else 65 | echo -e "${Error} $NAME 启动失败 !请查看日志文件检查问题所在。" 66 | fi 67 | fi 68 | } 69 | do_stop(){ 70 | check_running 71 | if [[ $? -eq 0 ]]; then 72 | kill -9 ${PID} 73 | RETVAL=$? 74 | if [[ $RETVAL -eq 0 ]]; then 75 | echo -e "${Info} $NAME 停止成功 !" 76 | else 77 | echo -e "${Error} $NAME 停止失败 !" 78 | fi 79 | else 80 | echo -e "${Info} $NAME 未运行" 81 | RETVAL=1 82 | fi 83 | } 84 | do_status(){ 85 | check_running 86 | if [[ $? -eq 0 ]]; then 87 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." 88 | else 89 | echo -e "${Info} $NAME 未运行 !" 90 | RETVAL=1 91 | fi 92 | } 93 | do_restart(){ 94 | do_stop 95 | do_start 96 | } 97 | case "$1" in 98 | start|stop|restart|status) 99 | do_$1 100 | ;; 101 | *) 102 | echo -e "使用方法: $0 { start | stop | restart | status }" 103 | RETVAL=1 104 | ;; 105 | esac 106 | exit $RETVAL -------------------------------------------------------------------------------- /service/pserver_centos: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # chkconfig: 2345 90 10 3 | # description: Peerflix Server: a self-hosted remote torrent client 4 | 5 | ### BEGIN INIT INFO 6 | # Provides: Peerflix Server 7 | # Required-Start: $network $syslog 8 | # Required-Stop: $network 9 | # Default-Start: 2 3 4 5 10 | # Default-Stop: 0 1 6 11 | # Short-Description: Peerflix Server: a self-hosted remote torrent client 12 | # Description: Start or stop the Peerflix Server 13 | ### END INIT INFO 14 | 15 | NAME="Peerflix Server" 16 | NAME_BIN="peerflix-server" 17 | FILE="/etc/node/lib/node_modules/peerflix-server" 18 | CONF="/etc/peerflix-server/peerflix-server.conf" 19 | LOG="/tmp/peerflix-server.log" 20 | 21 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 22 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 23 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 24 | RETVAL=0 25 | 26 | check_running(){ 27 | PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" |grep -v "init.d" |grep -v "service" |awk '{print $2}'` 28 | if [[ ! -z ${PID} ]]; then 29 | return 0 30 | else 31 | return 1 32 | fi 33 | } 34 | read_config(){ 35 | [[ ! -e ${CONF} ]] && echo -e "${Error} ${NAME} 配置文件不存在 !" && exit 1 36 | host=`cat ${CONF}|grep "host = "|awk -F "host = " '{print $NF}'` 37 | port=`cat ${CONF}|grep "port = "|awk -F "port = " '{print $NF}'` 38 | user=`cat ${CONF}|grep "user = "|awk -F "user = " '{print $NF}'` 39 | passwd=`cat ${CONF}|grep "passwd = "|awk -F "passwd = " '{print $NF}'` 40 | } 41 | View_User(){ 42 | ip=$(wget -qO- -t1 -T2 ipinfo.io/ip) 43 | if [[ -z "${ip}" ]]; then 44 | ip=$(wget -qO- -t1 -T2 api.ip.sb/ip) 45 | if [[ -z "${ip}" ]]; then 46 | ip=$(wget -qO- -t1 -T2 members.3322.org/dyndns/getip) 47 | if [[ -z "${ip}" ]]; then 48 | ip="VPS_IP" 49 | fi 50 | fi 51 | fi 52 | clear && echo "————————————————" && echo 53 | echo -e " Peerflix Server 信息 :" && echo 54 | echo -e " 地址\t: ${Green_font_prefix}http://${ip}:${port}${Font_color_suffix}" 55 | echo && echo "————————————————" 56 | } 57 | do_start(){ 58 | check_running 59 | if [[ $? -eq 0 ]]; then 60 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 61 | else 62 | read_config 63 | echo -e "${Info} $NAME 启动中..." 64 | ulimit -n 51200 65 | PORT=${port} nohup node ${FILE} > "${LOG}" 2>&1 & 66 | sleep 2s 67 | check_running 68 | if [[ $? -eq 0 ]]; then 69 | echo -e "${Info} $NAME 启动成功 !" 70 | View_User 71 | else 72 | echo -e "${Error} $NAME 启动失败(请运行脚本查看日志错误输出) !" 73 | fi 74 | fi 75 | } 76 | do_stop(){ 77 | check_running 78 | if [[ $? -eq 0 ]]; then 79 | kill -9 ${PID} 80 | RETVAL=$? 81 | if [[ $RETVAL -eq 0 ]]; then 82 | echo -e "${Info} $NAME 停止成功 !" 83 | else 84 | echo -e "${Error} $NAME 停止失败 !" 85 | fi 86 | else 87 | echo -e "${Info} $NAME 未运行" 88 | RETVAL=1 89 | fi 90 | } 91 | do_status(){ 92 | check_running 93 | if [[ $? -eq 0 ]]; then 94 | read_config 95 | View_User 96 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." 97 | else 98 | echo -e "${Info} $NAME 未运行 !" 99 | RETVAL=1 100 | fi 101 | } 102 | do_restart(){ 103 | do_stop 104 | do_start 105 | } 106 | case "$1" in 107 | start|stop|restart|status) 108 | do_$1 109 | ;; 110 | *) 111 | echo -e "使用方法: $0 { start | stop | restart | status }" 112 | RETVAL=1 113 | ;; 114 | esac 115 | exit $RETVAL -------------------------------------------------------------------------------- /pythonhttp.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin 3 | export PATH 4 | 5 | #================================================= 6 | # System Required: All 7 | # Description: Python HTTP Server 8 | # Version: 1.0.2 9 | # Author: Toyo 10 | # Blog: https://doub.io/wlzy-8/ 11 | #================================================= 12 | 13 | sethttp(){ 14 | #设置端口 15 | while true 16 | do 17 | echo -e "请输入要开放的HTTP服务端口 [1-65535]" 18 | read -e -p "(默认端口: 8000):" httpport 19 | [[ -z "$httpport" ]] && httpport="8000" 20 | expr ${httpport} + 0 &>/dev/null 21 | if [[ $? -eq 0 ]]; then 22 | if [[ ${httpport} -ge 1 ]] && [[ ${httpport} -le 65535 ]]; then 23 | echo 24 | echo -e " 端口 : \033[41;37m ${httpport} \033[0m" 25 | echo 26 | break 27 | else 28 | echo "输入错误, 请输入正确的端口。" 29 | fi 30 | else 31 | echo "输入错误, 请输入正确的端口。" 32 | fi 33 | done 34 | #设置目录 35 | echo "请输入要开放的目录(绝对路径)" 36 | read -e -p "(直接回车, 默认当前文件夹):" httpfile 37 | if [[ ! -z $httpfile ]]; then 38 | [[ ! -e $httpfile ]] && echo -e "\033[41;37m [错误] \033[0m 输入的目录不存在 或 当前用户无权限访问, 请检查!" && exit 1 39 | else 40 | httpfile=`echo $PWD` 41 | fi 42 | #最后确认 43 | echo 44 | echo "========================" 45 | echo " 请检查配置是否正确 !" 46 | echo 47 | echo -e " 端口 : \033[41;37m ${httpport} \033[0m" 48 | echo -e " 目录 : \033[41;37m ${httpfile} \033[0m" 49 | echo "========================" 50 | echo 51 | read -e -p "按任意键继续,如有错误,请使用 Ctrl + C 退出." var 52 | } 53 | iptables_add(){ 54 | iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport ${httpport} -j ACCEPT 55 | iptables -I INPUT -m state --state NEW -m udp -p udp --dport ${httpport} -j ACCEPT 56 | } 57 | iptables_del(){ 58 | iptables -D INPUT -m state --state NEW -m tcp -p tcp --dport ${port} -j ACCEPT 59 | iptables -D INPUT -m state --state NEW -m udp -p udp --dport ${port} -j ACCEPT 60 | } 61 | starthttp(){ 62 | PID=`ps -ef | grep SimpleHTTPServer | grep -v grep | awk '{print $2}'` 63 | [[ ! -z $PID ]] && echo -e "\033[41;37m [错误] \033[0m SimpleHTTPServer 正着运行,请检查 !" && exit 1 64 | sethttp 65 | iptables_add 66 | cd ${httpfile} 67 | nohup python -m SimpleHTTPServer $httpport >> httpserver.log 2>&1 & 68 | sleep 2s 69 | PID=`ps -ef | grep SimpleHTTPServer | grep -v grep | awk '{print $2}'` 70 | if [[ -z $PID ]]; then 71 | echo -e "\033[41;37m [错误] \033[0m SimpleHTTPServer 启动失败 !" && exit 1 72 | else 73 | ip=`curl -m 10 -s http://members.3322.org/dyndns/getip` 74 | [[ -z "$ip" ]] && ip="VPS_IP" 75 | echo 76 | echo "HTTP服务 已启动 !" 77 | echo -e "浏览器访问,地址: \033[41;37m http://${ip}:${httpport} \033[0m " 78 | echo 79 | fi 80 | } 81 | stophttp(){ 82 | PID=`ps -ef | grep SimpleHTTPServer | grep -v grep | awk '{print $2}'` 83 | [[ -z $PID ]] && echo -e "\033[41;37m [错误] \033[0m 没有发现 SimpleHTTPServer 进程运行,请检查 !" && exit 1 84 | port=`netstat -lntp | grep ${PID} | awk '{print $4}' | awk -F ":" '{print $2}'` 85 | iptables_del 86 | kill -9 ${PID} 87 | sleep 2s 88 | PID=`ps -ef | grep SimpleHTTPServer | grep -v grep | awk '{print $2}'` 89 | if [[ ! -z $PID ]]; then 90 | echo -e "\033[41;37m [错误] \033[0m SimpleHTTPServer 停止失败 !" && exit 1 91 | else 92 | echo 93 | echo "HTTP服务 已停止 !" 94 | echo 95 | fi 96 | } 97 | 98 | action=$1 99 | [[ -z $1 ]] && action=start 100 | case "$action" in 101 | start|stop) 102 | ${action}http 103 | ;; 104 | *) 105 | echo "输入错误 !" 106 | echo "用法: {start|stop}" 107 | ;; 108 | esac -------------------------------------------------------------------------------- /service/aria2_debian: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin 3 | export PATH 4 | 5 | ### BEGIN INIT INFO 6 | # Provides: aria2 is a lightweight multi-protocol & multi-source command-line download utility. 7 | # Required-Start: $network $local_fs $remote_fs 8 | # Required-Stop: $network $local_fs $remote_fs 9 | # Default-Start: 2 3 4 5 10 | # Default-Stop: 0 1 6 11 | # Short-Description: aria2 is a lightweight multi-protocol & multi-source command-line download utility. 12 | # Description: Start or stop the Aria2 13 | ### END INIT INFO 14 | 15 | NAME="Aria2" 16 | NAME_BIN="aria2c" 17 | CONFIG="/root/.aria2/aria2.conf" 18 | LOG="/root/.aria2/aria2.log" 19 | 20 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 21 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 22 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 23 | RETVAL=0 24 | 25 | check_running(){ 26 | PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" | grep -v "aria2.sh"| grep -v "init.d" |grep -v "service" |awk '{print $2}'` 27 | if [[ ! -z ${PID} ]]; then 28 | return 0 29 | else 30 | return 1 31 | fi 32 | } 33 | Read_config(){ 34 | [[ ! -e ${CONFIG} ]] && echo -e "${Error} ${NAME} 配置文件不存在 !" && exit 1 35 | Download_dir=$(cat ${CONFIG}|grep -v '#'|grep "dir=") 36 | [[ ! -z "${Download_dir}" ]] && Download_dir=$(echo "${Download_dir}"|awk -F '=' '{print $2}') 37 | RPC_listen_port=$(cat ${CONFIG}|grep -v '#'|grep "rpc-listen-port=") 38 | [[ ! -z "${RPC_listen_port}" ]] && RPC_listen_port=$(echo "${RPC_listen_port}"|awk -F '=' '{print $2}') 39 | RPC_secret=$(cat ${CONFIG}|grep -v '#'|grep "rpc-secret=") 40 | [[ ! -z "${RPC_secret}" ]] && RPC_secret=$(echo "${RPC_secret}"|awk -F '=' '{print $2}') 41 | } 42 | View_Config(){ 43 | Read_config 44 | ip=$(wget -qO- -t1 -T2 ipinfo.io/ip) 45 | if [[ -z "${ip}" ]]; then 46 | ip=$(wget -qO- -t1 -T2 api.ip.sb/ip) 47 | if [[ -z "${ip}" ]]; then 48 | ip=$(wget -qO- -t1 -T2 members.3322.org/dyndns/getip) 49 | if [[ -z "${ip}" ]]; then 50 | ip="VPS_IP(外网IP检测失败)" 51 | fi 52 | fi 53 | fi 54 | [[ -z "${Download_dir}" ]] && Download_dir="/usr/local/aria2/" 55 | [[ -z "${RPC_listen_port}" ]] && RPC_listen_port="6800" 56 | [[ -z "${RPC_secret}" ]] && RPC_secret="无令牌密码" 57 | clear 58 | echo -e "\nAria2 简单配置信息:\n 59 | 地址\t: ${Green_font_prefix}${ip}${Font_color_suffix} 60 | 端口\t: ${Green_font_prefix}${RPC_listen_port}${Font_color_suffix} 61 | 密码\t: ${Green_font_prefix}${RPC_secret}${Font_color_suffix} 62 | 目录\t: ${Green_font_prefix}${Download_dir}${Font_color_suffix}\n" 63 | } 64 | do_start(){ 65 | check_running 66 | if [[ $? -eq 0 ]]; then 67 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 68 | else 69 | echo -e "${Info} $NAME 启动中..." 70 | ulimit -n 51200 71 | nohup aria2c -c "${CONFIG}" >> "${LOG}" 2>&1 & 72 | sleep 2s 73 | check_running 74 | if [[ $? -eq 0 ]]; then 75 | View_Config 76 | echo -e "${Info} $NAME 启动成功 !" 77 | else 78 | echo -e "${Error} $NAME 启动失败 !" 79 | fi 80 | fi 81 | } 82 | do_stop(){ 83 | check_running 84 | if [[ $? -eq 0 ]]; then 85 | kill -9 ${PID} 86 | RETVAL=$? 87 | if [[ $RETVAL -eq 0 ]]; then 88 | echo -e "${Info} $NAME 停止成功 !" 89 | else 90 | echo -e "${Error} $NAME 停止失败 !" 91 | fi 92 | else 93 | echo -e "${Info} $NAME 未运行" 94 | RETVAL=1 95 | fi 96 | } 97 | do_status(){ 98 | check_running 99 | if [[ $? -eq 0 ]]; then 100 | View_Config 101 | echo -e "${Info} $NAME (PID $(echo ${PID})) 正在运行..." 102 | else 103 | echo -e "${Info} $NAME 未运行 !" 104 | RETVAL=1 105 | fi 106 | } 107 | do_restart(){ 108 | do_stop 109 | do_start 110 | } 111 | case "$1" in 112 | start|stop|restart|status) 113 | do_$1 114 | ;; 115 | *) 116 | echo "使用方法: $0 { start | stop | restart | status }" 117 | RETVAL=1 118 | ;; 119 | esac 120 | exit $RETVAL -------------------------------------------------------------------------------- /service/aria2_centos: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin 3 | export PATH 4 | # chkconfig: 2345 90 10 5 | # description: aria2 is a lightweight multi-protocol & multi-source command-line download utility. 6 | 7 | ### BEGIN INIT INFO 8 | # Provides: aria2 is a lightweight multi-protocol & multi-source command-line download utility. 9 | # Required-Start: $network $syslog 10 | # Required-Stop: $network 11 | # Default-Start: 2 3 4 5 12 | # Default-Stop: 0 1 6 13 | # Short-Description: aria2 is a lightweight multi-protocol & multi-source command-line download utility. 14 | # Description: Start or stop the Aria2 15 | ### END INIT INFO 16 | 17 | NAME="Aria2" 18 | NAME_BIN="aria2c" 19 | CONFIG="/root/.aria2/aria2.conf" 20 | LOG="/root/.aria2/aria2.log" 21 | 22 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 23 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 24 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 25 | RETVAL=0 26 | 27 | check_running(){ 28 | PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" | grep -v "aria2.sh"| grep -v "init.d" |grep -v "service" |awk '{print $2}'` 29 | if [[ ! -z ${PID} ]]; then 30 | return 0 31 | else 32 | return 1 33 | fi 34 | } 35 | Read_config(){ 36 | [[ ! -e ${CONFIG} ]] && echo -e "${Error} ${NAME} 配置文件不存在 !" && exit 1 37 | Download_dir=$(cat ${CONFIG}|grep -v '#'|grep "dir=") 38 | [[ ! -z "${Download_dir}" ]] && Download_dir=$(echo "${Download_dir}"|awk -F '=' '{print $2}') 39 | RPC_listen_port=$(cat ${CONFIG}|grep -v '#'|grep "rpc-listen-port=") 40 | [[ ! -z "${RPC_listen_port}" ]] && RPC_listen_port=$(echo "${RPC_listen_port}"|awk -F '=' '{print $2}') 41 | RPC_secret=$(cat ${CONFIG}|grep -v '#'|grep "rpc-secret=") 42 | [[ ! -z "${RPC_secret}" ]] && RPC_secret=$(echo "${RPC_secret}"|awk -F '=' '{print $2}') 43 | } 44 | View_Config(){ 45 | Read_config 46 | ip=$(wget -qO- -t1 -T2 ipinfo.io/ip) 47 | if [[ -z "${ip}" ]]; then 48 | ip=$(wget -qO- -t1 -T2 api.ip.sb/ip) 49 | if [[ -z "${ip}" ]]; then 50 | ip=$(wget -qO- -t1 -T2 members.3322.org/dyndns/getip) 51 | if [[ -z "${ip}" ]]; then 52 | ip="VPS_IP(外网IP检测失败)" 53 | fi 54 | fi 55 | fi 56 | [[ -z "${Download_dir}" ]] && Download_dir="/usr/local/aria2/" 57 | [[ -z "${RPC_listen_port}" ]] && RPC_listen_port="6800" 58 | [[ -z "${RPC_secret}" ]] && RPC_secret="无令牌密码" 59 | clear 60 | echo -e "\nAria2 简单配置信息:\n 61 | 地址\t: ${Green_font_prefix}${ip}${Font_color_suffix} 62 | 端口\t: ${Green_font_prefix}${RPC_listen_port}${Font_color_suffix} 63 | 密码\t: ${Green_font_prefix}${RPC_secret}${Font_color_suffix} 64 | 目录\t: ${Green_font_prefix}${Download_dir}${Font_color_suffix}\n" 65 | } 66 | do_start(){ 67 | check_running 68 | if [[ $? -eq 0 ]]; then 69 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 70 | else 71 | echo -e "${Info} $NAME 启动中..." 72 | ulimit -n 51200 73 | nohup aria2c -c "${CONFIG}" >> "${LOG}" 2>&1 & 74 | sleep 2s 75 | check_running 76 | if [[ $? -eq 0 ]]; then 77 | View_Config 78 | echo -e "${Info} $NAME 启动成功 !" 79 | else 80 | echo -e "${Error} $NAME 启动失败 !" 81 | fi 82 | fi 83 | } 84 | do_stop(){ 85 | check_running 86 | if [[ $? -eq 0 ]]; then 87 | kill -9 ${PID} 88 | RETVAL=$? 89 | if [[ $RETVAL -eq 0 ]]; then 90 | echo -e "${Info} $NAME 停止成功 !" 91 | else 92 | echo -e "${Error} $NAME 停止失败 !" 93 | fi 94 | else 95 | echo -e "${Info} $NAME 未运行" 96 | RETVAL=1 97 | fi 98 | } 99 | do_status(){ 100 | check_running 101 | if [[ $? -eq 0 ]]; then 102 | View_Config 103 | echo -e "${Info} $NAME (PID $(echo ${PID})) 正在运行..." 104 | else 105 | echo -e "${Info} $NAME 未运行 !" 106 | RETVAL=1 107 | fi 108 | } 109 | do_restart(){ 110 | do_stop 111 | do_start 112 | } 113 | case "$1" in 114 | start|stop|restart|status) 115 | do_$1 116 | ;; 117 | *) 118 | echo -e "使用方法: $0 { start | stop | restart | status }" 119 | RETVAL=1 120 | ;; 121 | esac 122 | exit $RETVAL -------------------------------------------------------------------------------- /service/cloudt_debian: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ### BEGIN INIT INFO 4 | # Provides: Cloud-Torrent 5 | # Required-Start: $network $local_fs $remote_fs 6 | # Required-Stop: $network $local_fs $remote_fs 7 | # Default-Start: 2 3 4 5 8 | # Default-Stop: 0 1 6 9 | # Short-Description: Cloud Torrent: a self-hosted remote torrent client 10 | # Description: Start or stop the Cloud Torrent 11 | ### END INIT INFO 12 | 13 | NAME="Cloud Torrent" 14 | NAME_BIN="cloud-torrent" 15 | FILE="/usr/local/cloudtorrent" 16 | BIN="${FILE}/cloud-torrent" 17 | CONFIG="${FILE}/cloud-torrent.json" 18 | CONF="${FILE}/cloud-torrent.conf" 19 | LOG="/tmp/ct.log" 20 | 21 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 22 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 23 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 24 | RETVAL=0 25 | 26 | check_running(){ 27 | PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" |grep -v "init.d" |grep -v "service" |awk '{print $2}'` 28 | if [[ ! -z ${PID} ]]; then 29 | return 0 30 | else 31 | return 1 32 | fi 33 | } 34 | read_config(){ 35 | [[ ! -e ${CONF} ]] && echo -e "${Error} ${NAME} 配置文件不存在 !" && exit 1 36 | host=`cat ${CONF}|grep "host = "|awk -F "host = " '{print $NF}'` 37 | port=`cat ${CONF}|grep "port = "|awk -F "port = " '{print $NF}'` 38 | user=`cat ${CONF}|grep "user = "|awk -F "user = " '{print $NF}'` 39 | passwd=`cat ${CONF}|grep "passwd = "|awk -F "passwd = " '{print $NF}'` 40 | } 41 | View_User(){ 42 | if [[ "${host}" == "0.0.0.0" ]]; then 43 | host=$(wget -qO- -t1 -T2 ipinfo.io/ip) 44 | if [[ -z "${host}" ]]; then 45 | host=$(wget -qO- -t1 -T2 api.ip.sb/ip) 46 | if [[ -z "${host}" ]]; then 47 | host=$(wget -qO- -t1 -T2 members.3322.org/dyndns/getip) 48 | if [[ -z "${host}" ]]; then 49 | host="VPS_IP" 50 | fi 51 | fi 52 | fi 53 | fi 54 | if [[ "${port}" == "80" ]]; then 55 | port="" 56 | else 57 | port=":${port}" 58 | fi 59 | if [[ -z ${user} ]]; then 60 | clear && echo "————————————————" && echo 61 | echo -e " 你的 Cloud Torrent 信息 :" && echo 62 | echo -e " 地址\t: ${Green_font_prefix}http://${host}${port}${Font_color_suffix}" 63 | echo && echo "————————————————" 64 | else 65 | clear && echo "————————————————" && echo 66 | echo -e " 你的 Cloud Torrent 信息 :" && echo 67 | echo -e " 地址\t: ${Green_font_prefix}http://${host}${port}${Font_color_suffix}" 68 | echo -e " 用户\t: ${Green_font_prefix}${user}${Font_color_suffix}" 69 | echo -e " 密码\t: ${Green_font_prefix}${passwd}${Font_color_suffix}" 70 | echo && echo "————————————————" 71 | fi 72 | } 73 | do_start(){ 74 | check_running 75 | if [[ $? -eq 0 ]]; then 76 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 77 | else 78 | read_config 79 | cd ${FILE} 80 | echo -e "${Info} $NAME 启动中..." 81 | ulimit -n 51200 82 | if [[ -z ${user} ]]; then 83 | ./cloud-torrent -t "Cloud Torrent - DOUBI" -h "${host}" -p ${port} -l >> "${LOG}" 2>&1 & 84 | else 85 | ./cloud-torrent -t "Cloud Torrent - DOUBI" -h "${host}" -p ${port} -l -a "${user}:${passwd}" >> "${LOG}" 2>&1 & 86 | fi 87 | sleep 2s 88 | check_running 89 | if [[ $? -eq 0 ]]; then 90 | echo -e "${Info} $NAME 启动成功 !" 91 | View_User 92 | else 93 | echo -e "${Error} $NAME 启动失败(请运行脚本查看日志错误输出) !" 94 | fi 95 | fi 96 | } 97 | do_stop(){ 98 | check_running 99 | if [[ $? -eq 0 ]]; then 100 | kill -9 ${PID} 101 | RETVAL=$? 102 | if [[ $RETVAL -eq 0 ]]; then 103 | echo -e "${Info} $NAME 停止成功 !" 104 | else 105 | echo -e "${Error} $NAME 停止失败 !" 106 | fi 107 | else 108 | echo -e "${Info} $NAME 未运行" 109 | RETVAL=1 110 | fi 111 | } 112 | do_status(){ 113 | check_running 114 | if [[ $? -eq 0 ]]; then 115 | read_config 116 | View_User 117 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." 118 | else 119 | echo -e "${Info} $NAME 未运行 !" 120 | RETVAL=1 121 | fi 122 | } 123 | do_restart(){ 124 | do_stop 125 | do_start 126 | } 127 | case "$1" in 128 | start|stop|restart|status) 129 | do_$1 130 | ;; 131 | *) 132 | echo "使用方法: $0 { start | stop | restart | status }" 133 | RETVAL=1 134 | ;; 135 | esac 136 | exit $RETVAL -------------------------------------------------------------------------------- /service/cloudt_centos: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # chkconfig: 2345 90 10 3 | # description: Cloud Torrent: a self-hosted remote torrent client 4 | 5 | ### BEGIN INIT INFO 6 | # Provides: Cloud-Torrent 7 | # Required-Start: $network $syslog 8 | # Required-Stop: $network 9 | # Default-Start: 2 3 4 5 10 | # Default-Stop: 0 1 6 11 | # Short-Description: Cloud Torrent: a self-hosted remote torrent client 12 | # Description: Start or stop the Cloud Torrent 13 | ### END INIT INFO 14 | 15 | NAME="Cloud Torrent" 16 | NAME_BIN="cloud-torrent" 17 | FILE="/usr/local/cloudtorrent" 18 | BIN="${FILE}/cloud-torrent" 19 | CONFIG="${FILE}/cloud-torrent.json" 20 | CONF="${FILE}/cloud-torrent.conf" 21 | LOG="/tmp/ct.log" 22 | 23 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 24 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 25 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 26 | RETVAL=0 27 | 28 | check_running(){ 29 | PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" |grep -v "init.d" |grep -v "service" |awk '{print $2}'` 30 | if [[ ! -z ${PID} ]]; then 31 | return 0 32 | else 33 | return 1 34 | fi 35 | } 36 | read_config(){ 37 | [[ ! -e ${CONF} ]] && echo -e "${Error} ${NAME} 配置文件不存在 !" && exit 1 38 | host=`cat ${CONF}|grep "host = "|awk -F "host = " '{print $NF}'` 39 | port=`cat ${CONF}|grep "port = "|awk -F "port = " '{print $NF}'` 40 | user=`cat ${CONF}|grep "user = "|awk -F "user = " '{print $NF}'` 41 | passwd=`cat ${CONF}|grep "passwd = "|awk -F "passwd = " '{print $NF}'` 42 | } 43 | View_User(){ 44 | if [[ "${host}" == "0.0.0.0" ]]; then 45 | host=$(wget -qO- -t1 -T2 ipinfo.io/ip) 46 | if [[ -z "${host}" ]]; then 47 | host=$(wget -qO- -t1 -T2 api.ip.sb/ip) 48 | if [[ -z "${host}" ]]; then 49 | host=$(wget -qO- -t1 -T2 members.3322.org/dyndns/getip) 50 | if [[ -z "${host}" ]]; then 51 | host="VPS_IP" 52 | fi 53 | fi 54 | fi 55 | fi 56 | if [[ "${port}" == "80" ]]; then 57 | port="" 58 | else 59 | port=":${port}" 60 | fi 61 | if [[ -z ${user} ]]; then 62 | clear && echo "————————————————" && echo 63 | echo -e " 你的 Cloud Torrent 信息 :" && echo 64 | echo -e " 地址\t: ${Green_font_prefix}http://${host}${port}${Font_color_suffix}" 65 | echo && echo "————————————————" 66 | else 67 | clear && echo "————————————————" && echo 68 | echo -e " 你的 Cloud Torrent 信息 :" && echo 69 | echo -e " 地址\t: ${Green_font_prefix}http://${host}${port}${Font_color_suffix}" 70 | echo -e " 用户\t: ${Green_font_prefix}${user}${Font_color_suffix}" 71 | echo -e " 密码\t: ${Green_font_prefix}${passwd}${Font_color_suffix}" 72 | echo && echo "————————————————" 73 | fi 74 | } 75 | do_start(){ 76 | check_running 77 | if [[ $? -eq 0 ]]; then 78 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." && exit 0 79 | else 80 | read_config 81 | cd ${FILE} 82 | echo -e "${Info} $NAME 启动中..." 83 | ulimit -n 51200 84 | if [[ -z ${user} ]]; then 85 | ./cloud-torrent -t "Cloud Torrent - DOUBI" -h "${host}" -p ${port} -l >> "${LOG}" 2>&1 & 86 | else 87 | ./cloud-torrent -t "Cloud Torrent - DOUBI" -h "${host}" -p ${port} -l -a "${user}:${passwd}" >> "${LOG}" 2>&1 & 88 | fi 89 | sleep 2s 90 | check_running 91 | if [[ $? -eq 0 ]]; then 92 | echo -e "${Info} $NAME 启动成功 !" 93 | View_User 94 | else 95 | echo -e "${Error} $NAME 启动失败(请运行脚本查看日志错误输出) !" 96 | fi 97 | fi 98 | } 99 | do_stop(){ 100 | check_running 101 | if [[ $? -eq 0 ]]; then 102 | kill -9 ${PID} 103 | RETVAL=$? 104 | if [[ $RETVAL -eq 0 ]]; then 105 | echo -e "${Info} $NAME 停止成功 !" 106 | else 107 | echo -e "${Error} $NAME 停止失败 !" 108 | fi 109 | else 110 | echo -e "${Info} $NAME 未运行" 111 | RETVAL=1 112 | fi 113 | } 114 | do_status(){ 115 | check_running 116 | if [[ $? -eq 0 ]]; then 117 | read_config 118 | View_User 119 | echo -e "${Info} $NAME (PID ${PID}) 正在运行..." 120 | else 121 | echo -e "${Info} $NAME 未运行 !" 122 | RETVAL=1 123 | fi 124 | } 125 | do_restart(){ 126 | do_stop 127 | do_start 128 | } 129 | case "$1" in 130 | start|stop|restart|status) 131 | do_$1 132 | ;; 133 | *) 134 | echo -e "使用方法: $0 { start | stop | restart | status }" 135 | RETVAL=1 136 | ;; 137 | esac 138 | exit $RETVAL -------------------------------------------------------------------------------- /service/brook-pf_debian: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ### BEGIN INIT INFO 4 | # Provides: Brook-pf 5 | # Required-Start: $network $local_fs $remote_fs 6 | # Required-Stop: $network $local_fs $remote_fs 7 | # Default-Start: 2 3 4 5 8 | # Default-Stop: 0 1 6 9 | # Short-Description: Lightweight port forwarding tool 10 | # Description: Start or stop the Brook-pf 11 | ### END INIT INFO 12 | 13 | NAME="Brook-pf" 14 | NAME_BIN="brook relays" 15 | FILE="/usr/local/brook-pf" 16 | CONF="${FILE}/brook.conf" 17 | LOG="${FILE}/brook.log" 18 | 19 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 20 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 21 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 22 | RETVAL=0 23 | 24 | check_running(){ 25 | PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" | grep -v ".sh"| grep -v "init.d" |grep -v "service" |awk '{print $2}'` 26 | if [[ ! -z ${PID} ]]; then 27 | return 0 28 | else 29 | return 1 30 | fi 31 | } 32 | read_config(){ 33 | [[ ! -e ${CONF} ]] && echo -e "${Error} Brook 配置文件不存在 !" && exit 1 34 | user_all=$(cat ${CONF}|sed '/^\s*$/d') 35 | user_all_num=$(echo "${user_all}"|wc -l) 36 | [[ -z ${user_all} ]] && echo -e "${Error} Brook 配置文件中用户配置为空 !" && exit 1 37 | } 38 | View_User(){ 39 | for((integer = 1; integer <= ${user_all_num}; integer++)) 40 | do 41 | user_port=$(echo "${user_all}"|sed -n "${integer}p"|awk '{print $1}') 42 | user_ip_pf=$(echo "${user_all}"|sed -n "${integer}p"|awk '{print $2}') 43 | user_port_pf=$(echo "${user_all}"|sed -n "${integer}p"|awk '{print $3}') 44 | user_Enabled_pf=$(echo "${user_all}"|sed -n "${integer}p"|awk '{print $4}') 45 | if [[ ${user_Enabled_pf} == "0" ]]; then 46 | user_Enabled_pf_1="${Red_font_prefix}禁用${Font_color_suffix}" 47 | else 48 | user_Enabled_pf_1="${Green_font_prefix}启用${Font_color_suffix}" 49 | fi 50 | user_list_all=${user_list_all}"本地监听端口: ${Green_font_prefix}"${user_port}"${Font_color_suffix}\t 被转发IP: ${Green_font_prefix}"${user_ip_pf}"${Font_color_suffix}\t 被转发端口: ${Green_font_prefix}"${user_port_pf}"${Font_color_suffix}\t 状态: ${user_Enabled_pf_1}\n" 51 | user_IP="" 52 | done 53 | ip=$(wget -qO- -t1 -T2 ipinfo.io/ip) 54 | if [[ -z "${ip}" ]]; then 55 | ip=$(wget -qO- -t1 -T2 api.ip.sb/ip) 56 | if [[ -z "${ip}" ]]; then 57 | ip=$(wget -qO- -t1 -T2 members.3322.org/dyndns/getip) 58 | if [[ -z "${ip}" ]]; then 59 | ip="VPS_IP" 60 | fi 61 | fi 62 | fi 63 | echo -e "当前端口转发总数: ${Green_background_prefix} "${user_all_num}" ${Font_color_suffix} 当前服务器IP: ${Green_background_prefix} "${ip}" ${Font_color_suffix}" 64 | echo -e "${user_list_all}" 65 | echo -e "========================\n" 66 | } 67 | do_start(){ 68 | check_running 69 | if [[ $? -eq 0 ]]; then 70 | echo -e "${Info} ${NAME} (PID ${PID}) 正在运行..." && exit 0 71 | else 72 | read_config 73 | cd ${FILE} 74 | echo -e "${Info} ${NAME} 启动中..." 75 | ulimit -n 51200 76 | servers_all="" 77 | for((integer = 1; integer <= ${user_all_num}; integer++)) 78 | do 79 | user_Enabled_pf=$(echo "${user_all}"|sed -n "${integer}p"|awk '{print $4}') 80 | if [[ ${user_Enabled_pf} == "0" ]]; then 81 | continue 82 | fi 83 | user_port=$(echo "${user_all}"|sed -n "${integer}p"|awk '{print $1}') 84 | user_ip_pf=$(echo "${user_all}"|sed -n "${integer}p"|awk '{print $2}') 85 | user_port_pf=$(echo "${user_all}"|sed -n "${integer}p"|awk '{print $3}') 86 | servers_all="${servers_all}-l \":${user_port} ${user_ip_pf}:${user_port_pf}\" " 87 | done 88 | eval nohup ./brook relays $(echo ${servers_all}) >> "${LOG}" 2>&1 & 89 | sleep 2s 90 | check_running 91 | if [[ $? -eq 0 ]]; then 92 | echo -e "${Info} ${NAME} 启动成功 !" 93 | View_User 94 | else 95 | echo -e "${Error} ${NAME} 启动失败 !" 96 | fi 97 | fi 98 | } 99 | do_stop(){ 100 | check_running 101 | if [[ $? -eq 0 ]]; then 102 | kill -9 ${PID} 103 | RETVAL=$? 104 | if [[ $RETVAL -eq 0 ]]; then 105 | echo -e "${Info} ${NAME} 停止成功 !" 106 | else 107 | echo -e "${Error} ${NAME} 停止失败 !" 108 | fi 109 | else 110 | echo -e "${Info} ${NAME} 未运行" 111 | RETVAL=1 112 | fi 113 | } 114 | do_status(){ 115 | check_running 116 | if [[ $? -eq 0 ]]; then 117 | read_config 118 | View_User 119 | echo -e "${Info} ${NAME} (PID ${PID}) 正在运行..." 120 | else 121 | echo -e "${Info} ${NAME} 未运行 !" 122 | RETVAL=1 123 | fi 124 | } 125 | do_restart(){ 126 | do_stop 127 | sleep 2s 128 | do_start 129 | } 130 | case "$1" in 131 | start|stop|restart|status) 132 | do_$1 133 | ;; 134 | *) 135 | echo -e "使用方法: $0 { start | stop | restart | status }" 136 | RETVAL=1 137 | ;; 138 | esac 139 | exit $RETVAL -------------------------------------------------------------------------------- /service/brook-pf_centos: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # chkconfig: 2345 90 10 3 | # description: Brook-pf 4 | 5 | ### BEGIN INIT INFO 6 | # Provides: Brook-pf 7 | # Required-Start: $network $syslog 8 | # Required-Stop: $network 9 | # Default-Start: 2 3 4 5 10 | # Default-Stop: 0 1 6 11 | # Short-Description: Lightweight port forwarding tool 12 | # Description: Start or stop the Brook-pf 13 | ### END INIT INFO 14 | 15 | NAME="Brook-pf" 16 | NAME_BIN="brook relays" 17 | FILE="/usr/local/brook-pf" 18 | CONF="${FILE}/brook.conf" 19 | LOG="${FILE}/brook.log" 20 | 21 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 22 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 23 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 24 | RETVAL=0 25 | 26 | check_running(){ 27 | PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" | grep -v ".sh"| grep -v "init.d" |grep -v "service" |awk '{print $2}'` 28 | if [[ ! -z ${PID} ]]; then 29 | return 0 30 | else 31 | return 1 32 | fi 33 | } 34 | read_config(){ 35 | [[ ! -e ${CONF} ]] && echo -e "${Error} Brook 配置文件不存在 !" && exit 1 36 | user_all=$(cat ${CONF}|sed '/^\s*$/d') 37 | user_all_num=$(echo "${user_all}"|wc -l) 38 | [[ -z ${user_all} ]] && echo -e "${Error} Brook 配置文件中用户配置为空 !" && exit 1 39 | } 40 | View_User(){ 41 | for((integer = 1; integer <= ${user_all_num}; integer++)) 42 | do 43 | user_port=$(echo "${user_all}"|sed -n "${integer}p"|awk '{print $1}') 44 | user_ip_pf=$(echo "${user_all}"|sed -n "${integer}p"|awk '{print $2}') 45 | user_port_pf=$(echo "${user_all}"|sed -n "${integer}p"|awk '{print $3}') 46 | user_Enabled_pf=$(echo "${user_all}"|sed -n "${integer}p"|awk '{print $4}') 47 | if [[ ${user_Enabled_pf} == "0" ]]; then 48 | user_Enabled_pf_1="${Red_font_prefix}禁用${Font_color_suffix}" 49 | else 50 | user_Enabled_pf_1="${Green_font_prefix}启用${Font_color_suffix}" 51 | fi 52 | user_list_all=${user_list_all}"本地监听端口: ${Green_font_prefix}"${user_port}"${Font_color_suffix}\t 被转发IP: ${Green_font_prefix}"${user_ip_pf}"${Font_color_suffix}\t 被转发端口: ${Green_font_prefix}"${user_port_pf}"${Font_color_suffix}\t 状态: ${user_Enabled_pf_1}\n" 53 | user_IP="" 54 | done 55 | ip=$(wget -qO- -t1 -T2 ipinfo.io/ip) 56 | if [[ -z "${ip}" ]]; then 57 | ip=$(wget -qO- -t1 -T2 api.ip.sb/ip) 58 | if [[ -z "${ip}" ]]; then 59 | ip=$(wget -qO- -t1 -T2 members.3322.org/dyndns/getip) 60 | if [[ -z "${ip}" ]]; then 61 | ip="VPS_IP" 62 | fi 63 | fi 64 | fi 65 | echo -e "当前端口转发总数: ${Green_background_prefix} "${user_all_num}" ${Font_color_suffix} 当前服务器IP: ${Green_background_prefix} "${ip}" ${Font_color_suffix}" 66 | echo -e "${user_list_all}" 67 | echo -e "========================\n" 68 | } 69 | do_start(){ 70 | check_running 71 | if [[ $? -eq 0 ]]; then 72 | echo -e "${Info} ${NAME} (PID ${PID}) 正在运行..." && exit 0 73 | else 74 | read_config 75 | cd ${FILE} 76 | echo -e "${Info} ${NAME} 启动中..." 77 | ulimit -n 51200 78 | servers_all="" 79 | for((integer = 1; integer <= ${user_all_num}; integer++)) 80 | do 81 | user_Enabled_pf=$(echo "${user_all}"|sed -n "${integer}p"|awk '{print $4}') 82 | if [[ ${user_Enabled_pf} == "0" ]]; then 83 | continue 84 | fi 85 | user_port=$(echo "${user_all}"|sed -n "${integer}p"|awk '{print $1}') 86 | user_ip_pf=$(echo "${user_all}"|sed -n "${integer}p"|awk '{print $2}') 87 | user_port_pf=$(echo "${user_all}"|sed -n "${integer}p"|awk '{print $3}') 88 | servers_all="${servers_all}-l \":${user_port} ${user_ip_pf}:${user_port_pf}\" " 89 | done 90 | eval nohup ./brook relays $(echo ${servers_all}) >> "${LOG}" 2>&1 & 91 | sleep 2s 92 | check_running 93 | if [[ $? -eq 0 ]]; then 94 | echo -e "${Info} ${NAME} 启动成功 !" 95 | View_User 96 | else 97 | echo -e "${Error} ${NAME} 启动失败 !" 98 | fi 99 | fi 100 | } 101 | do_stop(){ 102 | check_running 103 | if [[ $? -eq 0 ]]; then 104 | kill -9 ${PID} 105 | RETVAL=$? 106 | if [[ $RETVAL -eq 0 ]]; then 107 | echo -e "${Info} ${NAME} 停止成功 !" 108 | else 109 | echo -e "${Error} ${NAME} 停止失败 !" 110 | fi 111 | else 112 | echo -e "${Info} ${NAME} 未运行" 113 | RETVAL=1 114 | fi 115 | } 116 | do_status(){ 117 | check_running 118 | if [[ $? -eq 0 ]]; then 119 | read_config 120 | View_User 121 | echo -e "${Info} ${NAME} (PID ${PID}) 正在运行..." 122 | else 123 | echo -e "${Info} ${NAME} 未运行 !" 124 | RETVAL=1 125 | fi 126 | } 127 | do_restart(){ 128 | do_stop 129 | sleep 2s 130 | do_start 131 | } 132 | case "$1" in 133 | start|stop|restart|status) 134 | do_$1 135 | ;; 136 | *) 137 | echo -e "使用方法: $0 { start | stop | restart | status }" 138 | RETVAL=1 139 | ;; 140 | esac 141 | exit $RETVAL -------------------------------------------------------------------------------- /caddy_install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin 3 | export PATH 4 | #================================================= 5 | # System Required: CentOS/Debian/Ubuntu 6 | # Description: Caddy Install 7 | # Version: 1.0.8 8 | # Author: Toyo 9 | # Blog: https://doub.io/shell-jc1/ 10 | #================================================= 11 | file="/usr/local/caddy/" 12 | caddy_file="/usr/local/caddy/caddy" 13 | caddy_conf_file="/usr/local/caddy/Caddyfile" 14 | Info_font_prefix="\033[32m" && Error_font_prefix="\033[31m" && Info_background_prefix="\033[42;37m" && Error_background_prefix="\033[41;37m" && Font_suffix="\033[0m" 15 | 16 | check_root(){ 17 | [[ $EUID != 0 ]] && echo -e "${Error} 当前非ROOT账号(或没有ROOT权限),无法继续操作,请更换ROOT账号或使用 ${Green_background_prefix}sudo su${Font_color_suffix} 命令获取临时ROOT权限(执行后可能会提示输入当前账号的密码)。" && exit 1 18 | } 19 | check_sys(){ 20 | if [[ -f /etc/redhat-release ]]; then 21 | release="centos" 22 | elif cat /etc/issue | grep -q -E -i "debian"; then 23 | release="debian" 24 | elif cat /etc/issue | grep -q -E -i "ubuntu"; then 25 | release="ubuntu" 26 | elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat"; then 27 | release="centos" 28 | elif cat /proc/version | grep -q -E -i "debian"; then 29 | release="debian" 30 | elif cat /proc/version | grep -q -E -i "ubuntu"; then 31 | release="ubuntu" 32 | elif cat /proc/version | grep -q -E -i "centos|red hat|redhat"; then 33 | release="centos" 34 | fi 35 | bit=$(uname -m) 36 | } 37 | check_installed_status(){ 38 | [[ ! -e ${caddy_file} ]] && echo -e "${Error_font_prefix}[错误]${Font_suffix} Caddy 没有安装,请检查 !" && exit 1 39 | } 40 | Download_caddy(){ 41 | [[ ! -e ${file} ]] && mkdir "${file}" 42 | cd "${file}" 43 | PID=$(ps -ef |grep "caddy" |grep -v "grep" |grep -v "init.d" |grep -v "service" |grep -v "caddy_install" |awk '{print $2}') 44 | [[ ! -z ${PID} ]] && kill -9 ${PID} 45 | [[ -e "caddy_linux*.tar.gz" ]] && rm -rf "caddy_linux*.tar.gz" 46 | 47 | if [[ ! -z ${extension} ]]; then 48 | extension_all="?plugins=${extension}&license=personal" 49 | else 50 | extension_all="?license=personal" 51 | fi 52 | 53 | if [[ ${bit} == "x86_64" ]]; then 54 | wget --no-check-certificate -O "caddy_linux.tar.gz" "https://caddyserver.com/download/linux/amd64${extension_all}" 55 | elif [[ ${bit} == "i386" || ${bit} == "i686" ]]; then 56 | wget --no-check-certificate -O "caddy_linux.tar.gz" "https://caddyserver.com/download/linux/386${extension_all}" 57 | elif [[ ${bit} == "armv7l" ]]; then 58 | wget --no-check-certificate -O "caddy_linux.tar.gz" "https://caddyserver.com/download/linux/arm7${extension_all}" 59 | else 60 | echo -e "${Error_font_prefix}[错误]${Font_suffix} 不支持 [${bit}] ! 请向本站反馈[]中的名称,我会看看是否可以添加支持。" && exit 1 61 | fi 62 | [[ ! -e "caddy_linux.tar.gz" ]] && echo -e "${Error_font_prefix}[错误]${Font_suffix} Caddy 下载失败 !" && exit 1 63 | tar zxf "caddy_linux.tar.gz" 64 | rm -rf "caddy_linux.tar.gz" 65 | [[ ! -e ${caddy_file} ]] && echo -e "${Error_font_prefix}[错误]${Font_suffix} Caddy 解压失败或压缩文件错误 !" && exit 1 66 | rm -rf LICENSES.txt 67 | rm -rf README.txt 68 | rm -rf CHANGES.txt 69 | rm -rf "init/" 70 | chmod +x caddy 71 | } 72 | Service_caddy(){ 73 | if [[ ${release} = "centos" ]]; then 74 | if ! wget --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/service/caddy_centos -O /etc/init.d/caddy; then 75 | echo -e "${Error_font_prefix}[错误]${Font_suffix} Caddy服务 管理脚本下载失败 !" && exit 1 76 | fi 77 | chmod +x /etc/init.d/caddy 78 | chkconfig --add caddy 79 | chkconfig caddy on 80 | else 81 | if ! wget --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/service/caddy_debian -O /etc/init.d/caddy; then 82 | echo -e "${Error_font_prefix}[错误]${Font_suffix} Caddy服务 管理脚本下载失败 !" && exit 1 83 | fi 84 | chmod +x /etc/init.d/caddy 85 | update-rc.d -f caddy defaults 86 | fi 87 | } 88 | install_caddy(){ 89 | check_root 90 | if [[ -e ${caddy_file} ]]; then 91 | echo && echo -e "${Error_font_prefix}[信息]${Font_suffix} 检测到 Caddy 已安装,是否继续安装(覆盖更新)?[y/N]" 92 | read -e -p "(默认: n):" yn 93 | [[ -z ${yn} ]] && yn="n" 94 | if [[ ${yn} == [Nn] ]]; then 95 | echo && echo "已取消..." && exit 1 96 | fi 97 | fi 98 | Download_caddy 99 | Service_caddy 100 | echo && echo -e " Caddy 使用命令:${caddy_conf_file} 101 | 日志文件:cat /tmp/caddy.log 102 | 使用说明:service caddy start | stop | restart | status 103 | 或者使用:/etc/init.d/caddy start | stop | restart | status 104 | ${Info_font_prefix}[信息]${Font_suffix} Caddy 安装完成!" && echo 105 | } 106 | uninstall_caddy(){ 107 | check_installed_status 108 | echo && echo "确定要卸载 Caddy ? [y/N]" 109 | read -e -p "(默认: n):" unyn 110 | [[ -z ${unyn} ]] && unyn="n" 111 | if [[ ${unyn} == [Yy] ]]; then 112 | PID=`ps -ef |grep "caddy" |grep -v "grep" |grep -v "init.d" |grep -v "service" |grep -v "caddy_install" |awk '{print $2}'` 113 | [[ ! -z ${PID} ]] && kill -9 ${PID} 114 | if [[ ${release} = "centos" ]]; then 115 | chkconfig --del caddy 116 | else 117 | update-rc.d -f caddy remove 118 | fi 119 | [[ -s /tmp/caddy.log ]] && rm -rf /tmp/caddy.log 120 | rm -rf ${caddy_file} 121 | rm -rf ${caddy_conf_file} 122 | rm -rf /etc/init.d/caddy 123 | [[ ! -e ${caddy_file} ]] && echo && echo -e "${Info_font_prefix}[信息]${Font_suffix} Caddy 卸载完成 !" && echo && exit 1 124 | echo && echo -e "${Error_font_prefix}[错误]${Font_suffix} Caddy 卸载失败 !" && echo 125 | else 126 | echo && echo "卸载已取消..." && echo 127 | fi 128 | } 129 | check_sys 130 | action=$1 131 | extension=$2 132 | [[ -z $1 ]] && action=install 133 | case "$action" in 134 | install|uninstall) 135 | ${action}_caddy 136 | ;; 137 | *) 138 | echo "输入错误 !" 139 | echo "用法: {install | uninstall}" 140 | ;; 141 | esac -------------------------------------------------------------------------------- /adbyby.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin 3 | export PATH 4 | 5 | #================================================= 6 | # System Required: CentOS/Debian/Ubuntu 7 | # Description: ADbyby 8 | # Version: 1.0.1 9 | # Author: Toyo 10 | # Blog: https://doub.io/adbyby-jc2/ 11 | #================================================= 12 | 13 | file="/usr/local/adbyby" 14 | adbyby_file="/usr/local/adbyby/bin/adbyby" 15 | adbyby_conf="/usr/local/adbyby/bin/adhook.ini" 16 | 17 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 18 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 19 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 20 | Tip="${Green_font_prefix}[注意]${Font_color_suffix}" 21 | 22 | #检查系统 23 | check_sys(){ 24 | if [[ -f /etc/redhat-release ]]; then 25 | release="centos" 26 | elif cat /etc/issue | grep -q -E -i "debian"; then 27 | release="debian" 28 | elif cat /etc/issue | grep -q -E -i "ubuntu"; then 29 | release="ubuntu" 30 | elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat"; then 31 | release="centos" 32 | elif cat /proc/version | grep -q -E -i "debian"; then 33 | release="debian" 34 | elif cat /proc/version | grep -q -E -i "ubuntu"; then 35 | release="ubuntu" 36 | elif cat /proc/version | grep -q -E -i "centos|red hat|redhat"; then 37 | release="centos" 38 | fi 39 | bit=`uname -m` 40 | } 41 | check_installed_status(){ 42 | [[ ! -e ${adbyby_file} ]] && echo -e "${Error} ADbyby 没有安装,请检查 !" && exit 1 43 | } 44 | check_pid(){ 45 | PID=`ps -ef| grep "adbyby"| grep -v grep| grep -v "adbyby.sh"| grep -v "init.d"| grep -v "service"| awk '{print $2}'` 46 | } 47 | Download_adbyby(){ 48 | cd ${file} 49 | if [[ ${bit} == "x86_64" ]]; then 50 | wget --no-check-certificate -O "adbyby.tar.gz" "https://raw.githubusercontent.com/adbyby/Files/master/linux.64.tar.gz" 51 | else 52 | wget --no-check-certificate -O "adbyby.tar.gz" "https://raw.githubusercontent.com/adbyby/Files/master/linux.86.tar.gz" 53 | fi 54 | [[ ! -e "adbyby.tar.gz" ]] && echo -e "${Error} ADbyby 下载失败 !" && exit 1 55 | tar -xzf adbyby.tar.gz && rm -rf adbyby.tar.gz 56 | [[ ! -e "${adbyby_file}" ]] && echo -e "${Error} ADbyby 解压失败 !" && exit 1 57 | cd bin 58 | chmod 777 adbyby 59 | wget -N --no-check-certificate "https://raw.githubusercontent.com/P3TERX/doubi_backup/master/other/adhook.ini" 60 | } 61 | Service_adbyby(){ 62 | if [[ ${release} = "centos" ]]; then 63 | if ! wget --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/service/adbyby_centos -O /etc/init.d/adbyby; then 64 | echo -e "${Error} ADbyby服务 管理脚本下载失败 !" && exit 1 65 | fi 66 | chmod +x /etc/init.d/adbyby 67 | chkconfig --add adbyby 68 | chkconfig adbyby on 69 | else 70 | if ! wget --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/service/adbyby_debian -O /etc/init.d/adbyby; then 71 | echo -e "${Error} ADbyby服务 管理脚本下载失败 !" && exit 1 72 | fi 73 | chmod +x /etc/init.d/adbyby 74 | update-rc.d -f adbyby defaults 75 | fi 76 | echo -e "${Info} ADbyby服务 管理脚本下载完成 !" 77 | } 78 | Installation_dependency(){ 79 | if [[ ${release} = "centos" ]]; then 80 | yum update 81 | yum install -y vim 82 | else 83 | apt-get update 84 | apt-get install -y vim 85 | fi 86 | mkdir ${file} 87 | } 88 | Install_adbyby(){ 89 | [[ -e ${adbyby_file} ]] && echo -e "${Error} 检测到 ADbyby 已安装 !" && exit 1 90 | check_sys 91 | echo -e "${Info} 开始安装/配置 依赖..." 92 | Installation_dependency 93 | echo -e "${Info} 开始下载/安装..." 94 | Download_adbyby 95 | echo -e "${Info} 开始下载/安装 服务脚本(init)..." 96 | Service_adbyby 97 | echo -e "${Info} 开始设置 iptables防火墙..." 98 | Set_iptables 99 | echo -e "${Info} 开始添加 iptables防火墙规则..." 100 | Add_iptables 101 | echo -e "${Info} 开始保存 iptables防火墙规则..." 102 | Save_iptables 103 | echo -e "${Info} 所有步骤 安装完毕,开始启动..." 104 | Start_adbyby 105 | } 106 | Start_adbyby(){ 107 | check_installed_status 108 | check_pid 109 | [[ ! -z ${PID} ]] && echo -e "${Error} ADbyby 正在运行,请检查 !" && exit 1 110 | service adbyby start 111 | } 112 | Stop_adbyby(){ 113 | check_installed_status 114 | check_pid 115 | [[ -z ${PID} ]] && echo -e "${Error} ADbyby 没有运行,请检查 !" && exit 1 116 | service adbyby stop 117 | } 118 | Restart_adbyby(){ 119 | check_installed_status 120 | check_pid 121 | [[ ! -z ${PID} ]] && service adbyby stop 122 | service adbyby start 123 | } 124 | Set_adbyby(){ 125 | check_installed_status 126 | vi ${adbyby_conf} 127 | Restart_adbyby 128 | } 129 | Uninstall_adbyby(){ 130 | check_installed_status 131 | echo "确定要卸载 ADbyby ? (y/N)" 132 | echo 133 | read -e -p "(默认: n):" unyn 134 | [[ -z ${unyn} ]] && unyn="n" 135 | if [[ ${unyn} == [Yy] ]]; then 136 | check_pid 137 | [[ ! -z $PID ]] && kill -9 ${PID} 138 | Del_iptables 139 | Save_iptables 140 | rm -rf ${file} && rm -rf /etc/init.d/adbyby 141 | if [[ ${release} = "centos" ]]; then 142 | chkconfig --del adbyby 143 | else 144 | update-rc.d -f adbyby remove 145 | fi 146 | echo && echo "ADbyby 卸载完成 !" && echo 147 | else 148 | echo && echo "卸载已取消..." && echo 149 | fi 150 | } 151 | Add_iptables(){ 152 | iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8118 153 | } 154 | Del_iptables(){ 155 | iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8118 156 | } 157 | Save_iptables(){ 158 | if [[ ${release} == "centos" ]]; then 159 | service iptables save 160 | else 161 | iptables-save > /etc/iptables.up.rules 162 | fi 163 | } 164 | Set_iptables(){ 165 | echo -e "net.ipv4.ip_forward=1" >> /etc/sysctl.conf 166 | sysctl -p 167 | if [[ ${release} == "centos" ]]; then 168 | service iptables save 169 | chkconfig --level 2345 iptables on 170 | else 171 | iptables-save > /etc/iptables.up.rules 172 | echo -e '#!/bin/bash\n/sbin/iptables-restore < /etc/iptables.up.rules' > /etc/network/if-pre-up.d/iptables 173 | chmod +x /etc/network/if-pre-up.d/iptables 174 | fi 175 | } 176 | echo && echo -e "请输入一个数字来选择选项 177 | 178 | ${Green_font_prefix}1.${Font_color_suffix} 安装 ADbyby 179 | ${Green_font_prefix}2.${Font_color_suffix} 卸载 ADbyby 180 | ———————————— 181 | ${Green_font_prefix}3.${Font_color_suffix} 启动 ADbyby 182 | ${Green_font_prefix}4.${Font_color_suffix} 停止 ADbyby 183 | ${Green_font_prefix}5.${Font_color_suffix} 重启 ADbyby 184 | ———————————— 185 | ${Green_font_prefix}6.${Font_color_suffix} 修改 配置文件 186 | ————————————" && echo 187 | if [[ -e ${adbyby_file} ]]; then 188 | check_pid 189 | if [[ ! -z "${PID}" ]]; then 190 | echo -e " 当前状态: ${Green_font_prefix}已安装${Font_color_suffix} 并 ${Green_font_prefix}已启动${Font_color_suffix}" 191 | else 192 | echo -e " 当前状态: ${Green_font_prefix}已安装${Font_color_suffix} 但 ${Red_font_prefix}未启动${Font_color_suffix}" 193 | fi 194 | else 195 | echo -e " 当前状态: ${Red_font_prefix}未安装${Font_color_suffix}" 196 | fi 197 | echo 198 | read -e -p " 请输入数字 [1-8]:" num 199 | case "$num" in 200 | 1) 201 | Install_adbyby 202 | ;; 203 | 2) 204 | Uninstall_adbyby 205 | ;; 206 | 3) 207 | Start_adbyby 208 | ;; 209 | 4) 210 | Stop_adbyby 211 | ;; 212 | 5) 213 | Restart_adbyby 214 | ;; 215 | 6) 216 | Set_adbyby 217 | ;; 218 | *) 219 | echo "请输入正确数字 [1-8]" 220 | ;; 221 | esac -------------------------------------------------------------------------------- /ssh_port.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin 3 | export PATH 4 | 5 | #================================================= 6 | # System Required: Debian/Ubuntu 7 | # Description: SSH modify port 8 | # Version: 1.0.0 9 | # Author: Toyo 10 | # Blog: https://doub.io/linux-jc11/ 11 | #================================================= 12 | 13 | sh_ver="1.0.0" 14 | CONF="/etc/ssh/sshd_config" 15 | SSH_init_1="/etc/init.d/ssh" 16 | SSH_init_2="/etc/init.d/sshd" 17 | if [[ -e ${SSH_init_1} ]]; then 18 | SSH_init=${SSH_init_1} 19 | elif [[ -e ${SSH_init_2} ]]; then 20 | SSH_init=${SSH_init_2} 21 | else 22 | echo -e "${Error} 找不到 SSH 的服务脚本文件!" && exit 1 23 | fi 24 | bak_text="(可通过备份SSH配置文件复原:[ ${Green_font_prefix}rm -rf /etc/ssh/sshd_config && mv /etc/ssh/sshd_config.bak /etc/ssh/sshd_config && ${SSH_init} restart${Font_color_suffix} ])" 25 | over_text="${Tip} 当服务器存在外部防火墙时(如 阿里云、腾讯云、微软云、谷歌云、亚马逊云等),需要外部防火墙开放 新SSH端口TCP协议方可连接!(如使用途中出现任何问题均可通过该代码复原:[ ${Green_font_prefix}rm -rf /etc/ssh/sshd_config && mv /etc/ssh/sshd_config.bak /etc/ssh/sshd_config && ${SSH_init} restart${Font_color_suffix} ] )" 26 | 27 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 28 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" && Error="${Red_font_prefix}[错误]${Font_color_suffix}" && Tip="${Green_font_prefix}[注意]${Font_color_suffix}" 29 | filepath=$(cd "$(dirname "$0")"; pwd) 30 | file=$(echo -e "${filepath}"|awk -F "$0" '{print $1}') 31 | 32 | #检查系统 33 | check_sys(){ 34 | if [[ -f /etc/redhat-release ]]; then 35 | release="centos" 36 | elif cat /etc/issue | grep -q -E -i "debian"; then 37 | release="debian" 38 | elif cat /etc/issue | grep -q -E -i "ubuntu"; then 39 | release="ubuntu" 40 | elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat"; then 41 | release="centos" 42 | elif cat /proc/version | grep -q -E -i "debian"; then 43 | release="debian" 44 | elif cat /proc/version | grep -q -E -i "ubuntu"; then 45 | release="ubuntu" 46 | elif cat /proc/version | grep -q -E -i "centos|red hat|redhat"; then 47 | release="centos" 48 | fi 49 | #bit=`uname -m` 50 | } 51 | check_installed_status(){ 52 | [[ ! -e ${CONF} ]] && echo -e "${Error} SSH配置文件不存在[ ${CONF} ],请检查 !" && exit 1 53 | } 54 | check_pid(){ 55 | PID=$(ps -ef| grep '/usr/sbin/sshd'| grep -v grep| awk '{print $2}') 56 | } 57 | Read_config(){ 58 | port_all=$(cat ${CONF}|grep -v '#'|grep "Port "|awk '{print $2}') 59 | if [[ -z ${port_all} ]]; then 60 | port=22 61 | else 62 | port=${port_all} 63 | fi 64 | } 65 | Set_port(){ 66 | while true 67 | do 68 | echo -e "\n旧SSH端口:${Green_font_prefix}[${port}]${Font_color_suffix}" 69 | echo -e "请输入新的SSH端口 [1-65535]" 70 | read -e -p "(输入为空则取消):" new_port 71 | [[ -z "${new_port}" ]] && echo "取消..." && exit 1 72 | echo $((${new_port}+0)) &>/dev/null 73 | if [[ $? -eq 0 ]]; then 74 | if [[ ${new_port} -ge 1 ]] && [[ ${new_port} -le 65535 ]]; then 75 | if [[ ${new_port} == ${port} ]]; then 76 | echo -e "输入错误, 新端口与旧端口一致。" 77 | else 78 | echo && echo "=============================" 79 | echo -e " 新端口 : ${Red_background_prefix} ${new_port} ${Font_color_suffix}" 80 | echo "=============================" && echo 81 | break 82 | fi 83 | else 84 | echo -e "输入错误, 请输入正确的端口。" 85 | fi 86 | else 87 | echo -e "输入错误, 请输入正确的端口。" 88 | fi 89 | done 90 | } 91 | choose_the_way(){ 92 | echo -e "请选择SSH端口修改方式: 93 | 1. 直接修改(直接修改旧端口为新端口,并且防火墙禁止旧端口 开放新端口) 94 | 2. 保守修改(不删除旧端口,先添加新端口,然后手动断开SSH链接并使用新端口尝试链接,如果链接正常,那么再次执行脚本删除旧端口配置)\n 95 | 一般来说修改SSH端口不会出现什么问题,但保守起见,我做了两个修改方式。 96 | 如果不懂请选 ${Green_font_prefix}[2. 保守修改]${Font_color_suffix},避免因为未知问题而导致修改后无法通过 新端口和旧端口 链接服务器!\n 97 | ${over_text}\n" 98 | read -e -p "(默认: 2. 保守修改):" choose_the_way_num 99 | [[ -z "${choose_the_way_num}" ]] && choose_the_way_num="2" 100 | if [[ ${choose_the_way_num} == "1" ]]; then 101 | cp -f "${CONF}" "/etc/ssh/sshd_config.bak" 102 | Direct_modification 103 | elif [[ ${choose_the_way_num} == "2" ]]; then 104 | cp -f "${CONF}" "/etc/ssh/sshd_config.bak" 105 | Conservative_modifications 106 | else 107 | echo -e "${Error} 请输入正确的数字 [1-2]" && exit 1 108 | fi 109 | } 110 | Direct_modification(){ 111 | echo -e "${Info} 删除旧端口配置..." 112 | sed -i "/Port ${port}/d" "${CONF}" 113 | echo -e "${Info} 添加新端口配置..." 114 | echo -e "\nPort ${new_port}" >> "${CONF}" 115 | ${SSH_init} restart 116 | sleep 2s 117 | check_pid 118 | if [[ -z ${PID} ]]; then 119 | echo -e "${Error} SSH 启动失败 !${bak_text}" && exit 1 120 | else 121 | port_status=$(netstat -lntp|grep ssh|awk '{print $4}'|grep -w "${new_port}") 122 | if [[ -z ${port_status} ]]; then 123 | echo -e "${Error} SSH 端口修改失败 !${bak_text}" && exit 1 124 | else 125 | Del_iptables_ACCEPT 126 | Del_iptables_DROP 127 | Add_iptables_ACCEPT 128 | Add_iptables_DROP 129 | Set_iptables 130 | #rm -rf /etc/ssh/sshd_config.bak 131 | echo -e "${Info} SSH 端口修改成功!新端口:[${Green_font_prefix}${new_port}${Font_color_suffix}]" 132 | echo -e "${over_text}" 133 | fi 134 | fi 135 | } 136 | Conservative_modifications(){ 137 | if [[ $1 != "End" ]]; then 138 | echo -e "${Info} 添加新端口配置..." 139 | echo -e "\nPort ${new_port}" >> "${CONF}" 140 | ${SSH_init} restart 141 | sleep 2s 142 | check_pid 143 | if [[ -z ${PID} ]]; then 144 | echo -e "${Error} SSH 启动失败 !${bak_text}" && exit 1 145 | else 146 | port_status=$(netstat -lntp|grep ssh|awk '{print $4}'|grep -w "${new_port}") 147 | if [[ -z ${port_status} ]]; then 148 | echo -e "${Error} SSH 端口添加失败 !${bak_text}" && exit 1 149 | else 150 | Add_iptables_ACCEPT 151 | Set_iptables 152 | echo "${new_port}|${port}" > "${file}/ssh_port.conf" 153 | echo -e "${Info} SSH 端口添加成功 ! 154 | 请手动断开 SSH链接并使用新端口 ${Green_font_prefix}[${new_port}]${Font_color_suffix} 尝试链接,如无法链接 请通过旧端口 ${Green_font_prefix}[${port}]${Font_color_suffix} 链接,如链接正常 请链接后再次执行脚本${Green_font_prefix} [bash ${file}/ssh_port.sh end]${Font_color_suffix} 以删除旧端口配置!" 155 | echo -e "${over_text}" 156 | fi 157 | fi 158 | else 159 | [[ ! -e "${file}/ssh_port.conf" ]] && echo -e "${Error} ${file}/ssh_port.conf 文件缺失 !" && exit 1 160 | new_port=$(cat "${file}/ssh_port.conf"|awk -F '|' '{print $1}') 161 | port=$(cat "${file}/ssh_port.conf"|awk -F '|' '{print $2}') 162 | rm -rf "${file}/ssh_port.conf" 163 | echo -e "${Info} 删除旧端口配置..." 164 | sed -i "/Port ${port}/d" "${CONF}" 165 | ${SSH_init} restart 166 | sleep 2s 167 | check_pid 168 | if [[ -z ${PID} ]]; then 169 | echo -e "${Error} SSH 启动失败 !" && exit 1 170 | else 171 | Add_iptables_DROP 172 | Set_iptables 173 | #rm -rf /etc/ssh/sshd_config.bak 174 | echo -e "${Info} 所有配置完成!新端口:[${Green_font_prefix}${new_port}${Font_color_suffix}]" 175 | echo -e "${over_text}" 176 | fi 177 | fi 178 | } 179 | modify_ssh(){ 180 | Read_config 181 | Set_port 182 | choose_the_way 183 | } 184 | end_ssh(){ 185 | Conservative_modifications "End" 186 | } 187 | Add_iptables_ACCEPT(){ 188 | iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport ${new_port} -j ACCEPT 189 | } 190 | Del_iptables_ACCEPT(){ 191 | iptables -D INPUT -m state --state NEW -m tcp -p tcp --dport ${port} -j ACCEPT 192 | } 193 | Add_iptables_DROP(){ 194 | iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport ${port} -j DROP 195 | } 196 | Del_iptables_DROP(){ 197 | iptables -D INPUT -m state --state NEW -m tcp -p tcp --dport ${new_port} -j DROP 198 | } 199 | Set_iptables(){ 200 | iptables-save > /etc/iptables.up.rules 201 | echo -e '#!/bin/bash\n/sbin/iptables-restore < /etc/iptables.up.rules' > /etc/network/if-pre-up.d/iptables 202 | chmod +x /etc/network/if-pre-up.d/iptables 203 | } 204 | check_sys 205 | [[ ${release} != "debian" ]] && [[ ${release} != "ubuntu" ]] && echo -e "${Error} 本脚本不支持当前系统 ${release} !" && exit 1 206 | check_installed_status 207 | action=$1 208 | [[ -z $1 ]] && action=modify 209 | case "$action" in 210 | modify|end) 211 | ${action}_ssh 212 | ;; 213 | *) 214 | echo "输入错误 !" 215 | echo "用法: {modify|end}" 216 | ;; 217 | esac -------------------------------------------------------------------------------- /haproxy.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin 3 | export PATH 4 | 5 | #================================================= 6 | # System Required: CentOS/Debian/Ubuntu 7 | # Description: HaProxy 8 | # Version: 1.0.7 9 | # Author: Toyo 10 | # Blog: https://doub.io/wlzy-19/ 11 | #================================================= 12 | 13 | HaProxy_file="/etc/haproxy" 14 | HaProxy_cfg_file="/etc/haproxy/haproxy.cfg" 15 | 16 | #检查是否安装HaProxy 17 | check_HaProxy(){ 18 | HaProxy_exist=`haproxy -v` 19 | if [[ ${HaProxy_exist} = "" ]]; then 20 | echo -e "\033[41;37m [错误] \033[0m 没有安装HaProxy,请检查 !" && exit 1 21 | fi 22 | } 23 | #检查系统 24 | check_sys(){ 25 | if [[ -f /etc/redhat-release ]]; then 26 | release="centos" 27 | elif cat /etc/issue | grep -q -E -i "debian"; then 28 | release="debian" 29 | elif cat /etc/issue | grep -q -E -i "ubuntu"; then 30 | release="ubuntu" 31 | elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat"; then 32 | release="centos" 33 | elif cat /proc/version | grep -q -E -i "debian"; then 34 | release="debian" 35 | elif cat /proc/version | grep -q -E -i "ubuntu"; then 36 | release="ubuntu" 37 | elif cat /proc/version | grep -q -E -i "centos|red hat|redhat"; then 38 | release="centos" 39 | fi 40 | #bit=`uname -m` 41 | } 42 | # 设置 防火墙规则 43 | Save_iptables(){ 44 | if [[ ${release} == "centos" ]]; then 45 | service iptables save 46 | else 47 | iptables-save > /etc/iptables.up.rules 48 | fi 49 | } 50 | Set_iptables(){ 51 | if [[ ${release} == "centos" ]]; then 52 | service iptables save 53 | chkconfig --level 2345 iptables on 54 | else 55 | iptables-save > /etc/iptables.up.rules 56 | echo -e '#!/bin/bash\n/sbin/iptables-restore < /etc/iptables.up.rules' > /etc/network/if-pre-up.d/iptables 57 | chmod +x /etc/network/if-pre-up.d/iptables 58 | fi 59 | } 60 | # 安装HaProxy 61 | installHaProxy(){ 62 | HaProxy_exist=`haproxy -v` 63 | if [[ ${HaProxy_exist} != "" ]]; then 64 | echo -e "\033[41;37m [错误] \033[0m 已经安装HaProxy,请检查 !" && exit 1 65 | fi 66 | if [[ ${release} == "centos" ]]; then 67 | yum update && yum install -y vim haproxy 68 | else 69 | apt-get update && apt-get install -y vim haproxy 70 | fi 71 | chmod +x /etc/rc.local 72 | HaProxy_exist=`haproxy -v` 73 | if [[ ${HaProxy_exist} = "" ]]; then 74 | echo -e "\033[41;37m [错误] \033[0m 安装HaProxy失败,请检查 !" && exit 1 75 | else 76 | Set_iptables 77 | if [[ ${release} == "centos" ]]; then 78 | cat /etc/redhat-release |grep 7\..*|grep -i centos>/dev/null 79 | if [[ $? = 0 ]]; then 80 | systemctl enable haproxy.service 81 | else 82 | chmod +x /etc/init.d/haproxy 83 | chkconfig --add haproxy 84 | chkconfig haproxy on 85 | fi 86 | else 87 | chmod +x /etc/init.d/haproxy 88 | update-rc.d -f haproxy defaults 89 | fi 90 | setHaProxy 91 | fi 92 | } 93 | setHaProxy(){ 94 | check_HaProxy 95 | read -e -p "请输入 HaProxy 的 本地监听端口(转发端口) [1-65535](支持端口段: 2333-6666): " HaProxyport 96 | [[ -z "${HaProxyport}" ]] && echo "取消..." && exit 1 97 | read -e -p "请输入 HaProxy 欲转发的 IP:" HaProxyip 98 | [[ -z "${HaProxyip}" ]] && echo "取消..." && exit 1 99 | echo 100 | echo "——————————————————————————————" 101 | echo " 请检查 HaProxy 配置是否有误 !" 102 | echo 103 | echo -e " 本地监听端口 : \033[41;37m ${HaProxyport} \033[0m" 104 | echo -e " 欲转发 IP : \033[41;37m ${HaProxyip} \033[0m" 105 | echo "——————————————————————————————" 106 | echo 107 | read -e -p "请按任意键继续,如有配置错误请使用 Ctrl+C 退出。" var 108 | HaProxy_port_1=`cat ${HaProxy_cfg_file} | sed -n "12p" | cut -c 12-23 | grep "-"` 109 | HaProxy_port=`cat ${HaProxy_cfg_file} | sed -n "12p" | cut -c 12-23` 110 | if [[ ${HaProxy_port_1} = "" ]]; then 111 | iptables -D INPUT -p tcp --dport ${HaProxy_port} -j ACCEPT 112 | else 113 | HaProxy_port_1=`echo ${HaProxy_port_1} | sed 's/-/:/g'` 114 | iptables -D INPUT -p tcp --dport ${HaProxy_port_1} -j ACCEPT 115 | fi 116 | cat > ${HaProxy_cfg_file}<<-EOF 117 | global 118 | 119 | defaults 120 | log global 121 | mode tcp 122 | option dontlognull 123 | timeout connect 5000 124 | timeout client 50000 125 | timeout server 50000 126 | 127 | frontend ss-in1 128 | bind *:${HaProxyport} 129 | default_backend ss-out1 130 | 131 | backend ss-out1 132 | server server1 ${HaProxyip} maxconn 20480 133 | EOF 134 | restartHaProxy 135 | } 136 | # 查看HaProxy列表 137 | viewHaProxy(){ 138 | check_HaProxy 139 | HaProxy_port=`cat ${HaProxy_cfg_file} | sed -n "12p" | cut -c 12-23` 140 | HaProxy_ip=`cat ${HaProxy_cfg_file} | sed -n "16p" | awk '{print $3}'` 141 | ip=`wget -qO- -t1 -T2 ipinfo.io/ip` 142 | [[ -z $ip ]] && ip="VPS_IP" 143 | echo 144 | echo "——————————————————————————————" 145 | echo " HaProxy 配置信息: " 146 | echo 147 | echo -e " 本地 IP : \033[41;37m ${ip} \033[0m" 148 | echo -e " 本地监听端口 : \033[41;37m ${HaProxy_port} \033[0m" 149 | echo 150 | echo -e " 欲转发 IP : \033[41;37m ${HaProxy_ip} \033[0m" 151 | echo -e " 欲转发端口 : \033[41;37m ${HaProxy_port} \033[0m" 152 | echo "——————————————————————————————" 153 | echo 154 | } 155 | # 启动aProxy 156 | startHaProxy(){ 157 | check_HaProxy 158 | PID=`ps -ef | grep "haproxy" | grep -v grep | grep -v "haproxy.sh" | awk '{print $2}'` 159 | [[ ! -z $PID ]] && echo -e "\033[41;37m [错误] \033[0m 发现 HaProxy 正在运行,请检查 !" && exit 1 160 | if [[ ${release} == "centos" ]]; then 161 | cat /etc/redhat-release |grep 7\..*|grep -i centos>/dev/null 162 | if [[ $? = 0 ]]; then 163 | systemctl start haproxy.service 164 | else 165 | /etc/init.d/haproxy start 166 | fi 167 | else 168 | /etc/init.d/haproxy start 169 | fi 170 | sleep 2s 171 | PID=`ps -ef | grep "haproxy" | grep -v grep | grep -v "haproxy.sh" | awk '{print $2}'` 172 | [[ -z $PID ]] && echo -e "\033[41;37m [错误] \033[0m HaProxy 启动失败 !" && exit 1 173 | HaProxy_port_1=`cat ${HaProxy_cfg_file} | sed -n "12p" | cut -c 12-23 | grep "-"` 174 | HaProxy_port=`cat ${HaProxy_cfg_file} | sed -n "12p" | cut -c 12-23` 175 | if [[ ${HaProxy_port_1} = "" ]]; then 176 | iptables -I INPUT -p tcp --dport ${HaProxy_port} -j ACCEPT 177 | else 178 | HaProxy_port_1=`echo ${HaProxy_port_1} | sed 's/-/:/g'` 179 | iptables -I INPUT -p tcp --dport ${HaProxy_port_1} -j ACCEPT 180 | fi 181 | echo && echo "——————————————————————————————" && echo 182 | echo " HaProxy 已启动 !" 183 | Save_iptables 184 | viewHaProxy 185 | } 186 | # 停止aProxy 187 | stopHaProxy(){ 188 | check_HaProxy 189 | PID=`ps -ef | grep "haproxy" | grep -v grep | grep -v "haproxy.sh" | awk '{print $2}'` 190 | [[ -z $PID ]] && echo -e "\033[41;37m [错误] \033[0m 发现 HaProxy 没有运行,请检查 !" && exit 1 191 | if [[ ${release} == "centos" ]]; then 192 | cat /etc/redhat-release |grep 7\..*|grep -i centos>/dev/null 193 | if [[ $? = 0 ]]; then 194 | systemctl stop haproxy.service 195 | else 196 | /etc/init.d/haproxy stop 197 | fi 198 | else 199 | /etc/init.d/haproxy stop 200 | fi 201 | HaProxy_port_1=`cat ${HaProxy_cfg_file} | sed -n "12p" | cut -c 12-23 | grep "-"` 202 | HaProxy_port=`cat ${HaProxy_cfg_file} | sed -n "12p" | cut -c 12-23` 203 | if [[ ${HaProxy_port_1} = "" ]]; then 204 | iptables -D INPUT -p tcp --dport ${HaProxy_port} -j ACCEPT 205 | else 206 | HaProxy_port_1=`echo ${HaProxy_port_1} | sed 's/-/:/g'` 207 | iptables -D INPUT -p tcp --dport ${HaProxy_port_1} -j ACCEPT 208 | fi 209 | sleep 2s 210 | PID=`ps -ef | grep "haproxy" | grep -v grep | grep -v "haproxy.sh" | awk '{print $2}'` 211 | if [[ ! -z $PID ]]; then 212 | echo -e "\033[41;37m [错误] \033[0m HaProxy 停止失败 !" && exit 1 213 | else 214 | Save_iptables 215 | echo " HaProxy 已停止 !" 216 | fi 217 | } 218 | restartHaProxy(){ 219 | # 检查是否安装 220 | check_HaProxy 221 | PID=`ps -ef | grep "haproxy" | grep -v grep | grep -v "haproxy.sh" | awk '{print $2}'` 222 | if [[ ! -z $PID ]]; then 223 | stopHaProxy 224 | fi 225 | startHaProxy 226 | } 227 | statusHaProxy(){ 228 | check_HaProxy 229 | PID=`ps -ef | grep "haproxy" | grep -v grep | grep -v "haproxy.sh" | awk '{print $2}'` 230 | if [[ ! -z $PID ]]; then 231 | echo -e "\033[42;37m [信息] \033[0m HaProxy 正在运行,PID: ${PID} !" 232 | else 233 | echo -e "\033[42;37m [信息] \033[0m HaProxy 没有运行 !" 234 | fi 235 | } 236 | uninstallHaProxy(){ 237 | check_HaProxy 238 | echo "确定要卸载 HaProxy ? [y/N]" 239 | read -e -p "(默认: n):" unyn 240 | [[ -z ${unyn} ]] && unyn="n" 241 | if [[ ${unyn} == [Yy] ]]; then 242 | PID=`ps -ef | grep "haproxy" | grep -v grep | grep -v "haproxy.sh" | awk '{print $2}'` 243 | if [[ ! -z $PID ]]; then 244 | stopHaProxy 245 | fi 246 | if [[ ${release} == "centos" ]]; then 247 | yum remove haproxy -y 248 | else 249 | apt-get remove haproxy -y 250 | apt-get autoremove 251 | fi 252 | rm -rf ${HaProxy_file} 253 | HaProxy_exist=`haproxy -v` 254 | if [[ ${HaProxy_exist} != "" ]]; then 255 | echo -e "\033[41;37m [错误] \033[0m HaProxy卸载失败,请检查 !" && exit 1 256 | fi 257 | echo && echo " HaProxy 已卸载 !" && echo 258 | else 259 | echo && echo "卸载已取消..." && echo 260 | fi 261 | } 262 | check_sys 263 | action=$1 264 | [[ -z $1 ]] && action=install 265 | case "$action" in 266 | install|set|view|start|stop|restart|status|uninstall) 267 | ${action}HaProxy 268 | ;; 269 | *) 270 | echo "输入错误 !" 271 | echo "用法: { install | view | set | start | stop | restart | status | uninstall }" 272 | ;; 273 | esac -------------------------------------------------------------------------------- /bbr.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin 3 | export PATH 4 | 5 | #================================================= 6 | # System Required: Debian/Ubuntu 7 | # Description: TCP-BBR 8 | # Version: 1.0.22 9 | # Author: Toyo 10 | # Blog: https://doub.io/wlzy-16/ 11 | #================================================= 12 | 13 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 14 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 15 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 16 | Tip="${Green_font_prefix}[注意]${Font_color_suffix}" 17 | filepath=$(cd "$(dirname "$0")"; pwd) 18 | file=$(echo -e "${filepath}"|awk -F "$0" '{print $1}') 19 | 20 | check_root(){ 21 | [[ $EUID != 0 ]] && echo -e "${Error} 当前非ROOT账号(或没有ROOT权限),无法继续操作,请更换ROOT账号或使用 ${Green_background_prefix}sudo su${Font_color_suffix} 命令获取临时ROOT权限(执行后可能会提示输入当前账号的密码)。" && exit 1 22 | } 23 | #检查系统 24 | check_sys(){ 25 | if [[ -f /etc/redhat-release ]]; then 26 | release="centos" 27 | elif cat /etc/issue | grep -q -E -i "debian"; then 28 | release="debian" 29 | elif cat /etc/issue | grep -q -E -i "ubuntu"; then 30 | release="ubuntu" 31 | elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat"; then 32 | release="centos" 33 | elif cat /proc/version | grep -q -E -i "debian"; then 34 | release="debian" 35 | elif cat /proc/version | grep -q -E -i "ubuntu"; then 36 | release="ubuntu" 37 | elif cat /proc/version | grep -q -E -i "centos|red hat|redhat"; then 38 | release="centos" 39 | fi 40 | } 41 | Set_latest_new_version(){ 42 | echo -e "请输入 要下载安装的Linux内核版本(BBR) ${Green_font_prefix}[ 格式: x.xx.xx ,例如: 4.9.96 ]${Font_color_suffix} 43 | ${Tip} 内核版本列表请去这里获取:${Green_font_prefix}[ http://kernel.ubuntu.com/~kernel-ppa/mainline/ ]${Font_color_suffix} 44 | 建议使用${Green_font_prefix}稳定版本:4.9.XX ${Font_color_suffix},4.9 以上版本属于测试版,稳定版与测试版同步更新,BBR 加速效果无区别。" 45 | read -e -p "(直接回车,自动获取最新稳定版本):" latest_version 46 | [[ -z "${latest_version}" ]] && get_latest_new_version 47 | echo 48 | } 49 | # 本段获取最新版本的代码来源自: https://teddysun.com/489.html 50 | get_latest_new_version(){ 51 | echo -e "${Info} 检测稳定版内核最新版本中..." 52 | latest_version=$(wget -qO- -t1 -T2 "http://kernel.ubuntu.com/~kernel-ppa/mainline/" | awk -F'\"v' '/v4.9.*/{print $2}' |grep -v '\-rc'| cut -d/ -f1 | sort -V | tail -1) 53 | [[ -z ${latest_version} ]] && echo -e "${Error} 检测内核最新版本失败 !" && exit 1 54 | echo -e "${Info} 稳定版内核最新版本为 : ${latest_version}" 55 | } 56 | get_latest_version(){ 57 | Set_latest_new_version 58 | bit=`uname -m` 59 | if [[ ${bit} == "x86_64" ]]; then 60 | deb_name=$(wget -qO- http://kernel.ubuntu.com/~kernel-ppa/mainline/v${latest_version}/ | grep "linux-image" | grep "generic" | awk -F'\">' '/amd64.deb/{print $2}' | cut -d'<' -f1 | head -1 ) 61 | deb_kernel_url="http://kernel.ubuntu.com/~kernel-ppa/mainline/v${latest_version}/${deb_name}" 62 | deb_kernel_name="linux-image-${latest_version}-amd64.deb" 63 | else 64 | deb_name=$(wget -qO- http://kernel.ubuntu.com/~kernel-ppa/mainline/v${latest_version}/ | grep "linux-image" | grep "generic" | awk -F'\">' '/i386.deb/{print $2}' | cut -d'<' -f1 | head -1) 65 | deb_kernel_url="http://kernel.ubuntu.com/~kernel-ppa/mainline/v${latest_version}/${deb_name}" 66 | deb_kernel_name="linux-image-${latest_version}-i386.deb" 67 | fi 68 | } 69 | #检查内核是否满足 70 | check_deb_off(){ 71 | get_latest_new_version 72 | deb_ver=`dpkg -l|grep linux-image | awk '{print $2}' | awk -F '-' '{print $3}' | grep '[4-9].[0-9]*.'` 73 | latest_version_2=$(echo "${latest_version}"|grep -o '\.'|wc -l) 74 | if [[ "${latest_version_2}" == "1" ]]; then 75 | latest_version="${latest_version}.0" 76 | fi 77 | if [[ "${deb_ver}" != "" ]]; then 78 | if [[ "${deb_ver}" == "${latest_version}" ]]; then 79 | echo -e "${Info} 检测到当前内核版本[${deb_ver}] 已满足要求,继续..." 80 | else 81 | echo -e "${Tip} 检测到当前内核版本[${deb_ver}] 支持开启BBR 但不是最新内核版本,可以使用${Green_font_prefix} bash ${file}/bbr.sh ${Font_color_suffix}来升级内核 !(注意:并不是越新的内核越好,4.9 以上版本的内核 目前皆为测试版,不保证稳定性,旧版本如使用无问题 建议不要升级!)" 82 | fi 83 | else 84 | echo -e "${Error} 检测到当前内核版本[${deb_ver}] 不支持开启BBR,请使用${Green_font_prefix} bash ${file}/bbr.sh ${Font_color_suffix}来更换最新内核 !" && exit 1 85 | fi 86 | } 87 | # 删除其余内核 88 | del_deb(){ 89 | deb_total=`dpkg -l | grep linux-image | awk '{print $2}' | grep -v "${latest_version}" | wc -l` 90 | if [[ "${deb_total}" -ge "1" ]]; then 91 | echo -e "${Info} 检测到 ${deb_total} 个其余内核,开始卸载..." 92 | for((integer = 1; integer <= ${deb_total}; integer++)) 93 | do 94 | deb_del=`dpkg -l|grep linux-image | awk '{print $2}' | grep -v "${latest_version}" | head -${integer}` 95 | echo -e "${Info} 开始卸载 ${deb_del} 内核..." 96 | apt-get purge -y ${deb_del} 97 | echo -e "${Info} 卸载 ${deb_del} 内核卸载完成,继续..." 98 | done 99 | deb_total=`dpkg -l|grep linux-image | awk '{print $2}' | wc -l` 100 | if [[ "${deb_total}" = "1" ]]; then 101 | echo -e "${Info} 内核卸载完毕,继续..." 102 | else 103 | echo -e "${Error} 内核卸载异常,请检查 !" && exit 1 104 | fi 105 | else 106 | echo -e "${Info} 检测到除刚安装的内核以外已无多余内核,跳过卸载多余内核步骤 !" 107 | fi 108 | } 109 | del_deb_over(){ 110 | del_deb 111 | update-grub 112 | addsysctl 113 | echo -e "${Tip} 重启VPS后,请运行脚本查看 BBR 是否正常加载,运行命令: ${Green_background_prefix} bash ${file}/bbr.sh status ${Font_color_suffix}" 114 | read -e -p "需要重启VPS后,才能开启BBR,是否现在重启 ? [Y/n] :" yn 115 | [[ -z "${yn}" ]] && yn="y" 116 | if [[ $yn == [Yy] ]]; then 117 | echo -e "${Info} VPS 重启中..." 118 | reboot 119 | fi 120 | } 121 | # 安装BBR 122 | installbbr(){ 123 | check_root 124 | get_latest_version 125 | deb_ver=`dpkg -l|grep linux-image | awk '{print $2}' | awk -F '-' '{print $3}' | grep '[4-9].[0-9]*.'` 126 | latest_version_2=$(echo "${latest_version}"|grep -o '\.'|wc -l) 127 | if [[ "${latest_version_2}" == "1" ]]; then 128 | latest_version="${latest_version}.0" 129 | fi 130 | if [[ "${deb_ver}" != "" ]]; then 131 | if [[ "${deb_ver}" == "${latest_version}" ]]; then 132 | echo -e "${Info} 检测到当前内核版本[${deb_ver}] 已是最新版本,无需继续 !" 133 | deb_total=`dpkg -l|grep linux-image | awk '{print $2}' | grep -v "${latest_version}" | wc -l` 134 | if [[ "${deb_total}" != "0" ]]; then 135 | echo -e "${Info} 检测到内核数量异常,存在多余内核,开始删除..." 136 | del_deb_over 137 | else 138 | exit 1 139 | fi 140 | else 141 | echo -e "${Info} 检测到当前内核版本支持开启BBR 但不是最新内核版本,开始升级(或降级)内核..." 142 | fi 143 | else 144 | echo -e "${Info} 检测到当前内核版本不支持开启BBR,开始..." 145 | virt=`virt-what` 146 | if [[ -z ${virt} ]]; then 147 | apt-get update && apt-get install virt-what -y 148 | virt=`virt-what` 149 | fi 150 | if [[ ${virt} == "openvz" ]]; then 151 | echo -e "${Error} BBR 不支持 OpenVZ 虚拟化(不支持更换内核) !" && exit 1 152 | fi 153 | fi 154 | echo "nameserver 8.8.8.8" > /etc/resolv.conf 155 | echo "nameserver 8.8.4.4" >> /etc/resolv.conf 156 | 157 | wget -O "${deb_kernel_name}" "${deb_kernel_url}" 158 | if [[ -s ${deb_kernel_name} ]]; then 159 | echo -e "${Info} 内核安装包下载成功,开始安装内核..." 160 | dpkg -i ${deb_kernel_name} 161 | rm -rf ${deb_kernel_name} 162 | else 163 | echo -e "${Error} 内核安装包下载失败,请检查 !" && exit 1 164 | fi 165 | #判断内核是否安装成功 166 | deb_ver=`dpkg -l | grep linux-image | awk '{print $2}' | awk -F '-' '{print $3}' | grep "${latest_version}"` 167 | if [[ "${deb_ver}" != "" ]]; then 168 | echo -e "${Info} 检测到内核安装成功,开始卸载其余内核..." 169 | del_deb_over 170 | else 171 | echo -e "${Error} 检测到内核安装失败,请检查 !" && exit 1 172 | fi 173 | } 174 | bbrstatus(){ 175 | check_bbr_status_on=`sysctl net.ipv4.tcp_congestion_control | awk '{print $3}'` 176 | if [[ "${check_bbr_status_on}" = "bbr" ]]; then 177 | echo -e "${Info} 检测到 BBR 已开启 !" 178 | # 检查是否启动BBR 179 | check_bbr_status_off=`lsmod | grep bbr` 180 | if [[ "${check_bbr_status_off}" = "" ]]; then 181 | echo -e "${Error} 检测到 BBR 已开启但未正常启动,请尝试使用低版本内核(可能是存着兼容性问题,虽然内核配置中打开了BBR,但是内核加载BBR模块失败) !" 182 | else 183 | echo -e "${Info} 检测到 BBR 已开启并已正常启动 !" 184 | fi 185 | exit 1 186 | fi 187 | } 188 | addsysctl(){ 189 | sed -i '/net\.core\.default_qdisc=fq/d' /etc/sysctl.conf 190 | sed -i '/net\.ipv4\.tcp_congestion_control=bbr/d' /etc/sysctl.conf 191 | 192 | echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf 193 | echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf 194 | sysctl -p 195 | } 196 | startbbr(){ 197 | check_deb_off 198 | bbrstatus 199 | addsysctl 200 | sleep 1s 201 | bbrstatus 202 | } 203 | # 关闭BBR 204 | stopbbr(){ 205 | check_deb_off 206 | sed -i '/net\.core\.default_qdisc=fq/d' /etc/sysctl.conf 207 | sed -i '/net\.ipv4\.tcp_congestion_control=bbr/d' /etc/sysctl.conf 208 | sysctl -p 209 | sleep 1s 210 | 211 | read -e -p "需要重启VPS后,才能彻底停止BBR,是否现在重启 ? [Y/n] :" yn 212 | [[ -z "${yn}" ]] && yn="y" 213 | if [[ $yn == [Yy] ]]; then 214 | echo -e "${Info} VPS 重启中..." 215 | reboot 216 | fi 217 | } 218 | # 查看BBR状态 219 | statusbbr(){ 220 | check_deb_off 221 | bbrstatus 222 | echo -e "${Error} BBR 未开启 !" 223 | } 224 | check_sys 225 | [[ ${release} != "debian" ]] && [[ ${release} != "ubuntu" ]] && echo -e "${Error} 本脚本不支持当前系统 ${release} !" && exit 1 226 | action=$1 227 | [[ -z $1 ]] && action=install 228 | case "$action" in 229 | install|start|stop|status) 230 | ${action}bbr 231 | ;; 232 | *) 233 | echo "输入错误 !" 234 | echo "用法: { install | start | stop | status }" 235 | ;; 236 | esac -------------------------------------------------------------------------------- /other/ocserv.conf: -------------------------------------------------------------------------------- 1 | auth = "plain[passwd=/etc/ocserv/ocpasswd]" 2 | # listen-host = [IP|HOSTNAME] 3 | tcp-port = 443 4 | udp-port = 443 5 | run-as-user = nobody 6 | run-as-group = daemon 7 | socket-file = /var/run/ocserv-socket 8 | server-cert = /etc/ocserv/ssl/server-cert.pem 9 | server-key = /etc/ocserv/ssl/server-key.pem 10 | ca-cert = /etc/ocserv/ssl/ca-cert.pem 11 | isolate-workers = true 12 | banner = "Welcome DOUB.IO" 13 | max-clients = 0 14 | max-same-clients = 0 15 | rate-limit-ms = 0 16 | server-stats-reset-time = 604800 17 | keepalive = 32400 18 | dpd = 90 19 | mobile-dpd = 1800 20 | switch-to-tcp-timeout = 25 21 | try-mtu-discovery = false 22 | tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0" 23 | auth-timeout = 240 24 | idle-timeout = 86400 25 | mobile-idle-timeout = 86400 26 | min-reauth-time = 300 27 | max-ban-score = 80 28 | ban-reset-time = 1200 29 | cookie-timeout = 300 30 | deny-roaming = false 31 | rekey-time = 172800 32 | rekey-method = ssl 33 | use-occtl = true 34 | pid-file = /var/run/ocserv.pid 35 | net-priority = 6 36 | device = vpns 37 | predictable-ips = true 38 | default-domain = example.com 39 | 40 | ipv4-network = 192.168.1.0 41 | ipv4-netmask = 255.255.255.0 42 | # An alternative way of specifying the network: 43 | #ipv4-network = 192.168.1.0/24 44 | # The IPv6 subnet that leases will be given from. 45 | #ipv6-network = fda9:4efe:7e3b:03ea::/48 46 | # Specify the size of the network to provide to clients. It is 47 | # generally recommended to provide clients with a /64 network in 48 | # IPv6, but any subnet may be specified. To provide clients only 49 | # with a single IP use the prefix 128. 50 | #ipv6-subnet-prefix = 128 51 | #ipv6-subnet-prefix = 64 52 | 53 | # tunnel-all-dns = true 54 | dns = 8.8.8.8 55 | dns = 8.8.4.4 56 | ping-leases = false 57 | no-route = 1.0.0.0/255.192.0.0 58 | no-route = 1.64.0.0/255.224.0.0 59 | no-route = 1.112.0.0/255.248.0.0 60 | no-route = 1.176.0.0/255.240.0.0 61 | no-route = 1.192.0.0/255.240.0.0 62 | no-route = 14.0.0.0/255.224.0.0 63 | no-route = 14.96.0.0/255.224.0.0 64 | no-route = 14.128.0.0/255.224.0.0 65 | no-route = 14.192.0.0/255.224.0.0 66 | no-route = 27.0.0.0/255.192.0.0 67 | no-route = 27.96.0.0/255.224.0.0 68 | no-route = 27.128.0.0/255.224.0.0 69 | no-route = 27.176.0.0/255.240.0.0 70 | no-route = 27.192.0.0/255.224.0.0 71 | no-route = 27.224.0.0/255.252.0.0 72 | no-route = 36.0.0.0/255.192.0.0 73 | no-route = 36.96.0.0/255.224.0.0 74 | no-route = 36.128.0.0/255.192.0.0 75 | no-route = 36.192.0.0/255.224.0.0 76 | no-route = 36.240.0.0/255.240.0.0 77 | no-route = 39.0.0.0/255.255.0.0 78 | no-route = 39.64.0.0/255.224.0.0 79 | no-route = 39.96.0.0/255.240.0.0 80 | no-route = 39.128.0.0/255.192.0.0 81 | no-route = 40.72.0.0/255.254.0.0 82 | no-route = 40.124.0.0/255.252.0.0 83 | no-route = 42.0.0.0/255.248.0.0 84 | no-route = 42.48.0.0/255.240.0.0 85 | no-route = 42.80.0.0/255.240.0.0 86 | no-route = 42.96.0.0/255.224.0.0 87 | no-route = 42.128.0.0/255.128.0.0 88 | no-route = 43.224.0.0/255.224.0.0 89 | no-route = 45.65.16.0/255.255.240.0 90 | no-route = 45.112.0.0/255.240.0.0 91 | no-route = 45.248.0.0/255.248.0.0 92 | no-route = 47.92.0.0/255.252.0.0 93 | no-route = 47.96.0.0/255.224.0.0 94 | no-route = 49.0.0.0/255.128.0.0 95 | no-route = 49.128.0.0/255.224.0.0 96 | no-route = 49.192.0.0/255.192.0.0 97 | no-route = 52.80.0.0/255.252.0.0 98 | no-route = 54.222.0.0/255.254.0.0 99 | no-route = 58.0.0.0/255.128.0.0 100 | no-route = 58.128.0.0/255.224.0.0 101 | no-route = 58.192.0.0/255.224.0.0 102 | no-route = 58.240.0.0/255.240.0.0 103 | no-route = 59.32.0.0/255.224.0.0 104 | no-route = 59.64.0.0/255.224.0.0 105 | no-route = 59.96.0.0/255.240.0.0 106 | no-route = 59.144.0.0/255.240.0.0 107 | no-route = 59.160.0.0/255.224.0.0 108 | no-route = 59.192.0.0/255.192.0.0 109 | no-route = 60.0.0.0/255.224.0.0 110 | no-route = 60.48.0.0/255.240.0.0 111 | no-route = 60.160.0.0/255.224.0.0 112 | no-route = 60.192.0.0/255.192.0.0 113 | no-route = 61.0.0.0/255.192.0.0 114 | no-route = 61.80.0.0/255.248.0.0 115 | no-route = 61.128.0.0/255.192.0.0 116 | no-route = 61.224.0.0/255.224.0.0 117 | no-route = 91.234.36.0/255.255.255.0 118 | no-route = 101.0.0.0/255.128.0.0 119 | no-route = 101.128.0.0/255.224.0.0 120 | no-route = 101.192.0.0/255.240.0.0 121 | no-route = 101.224.0.0/255.224.0.0 122 | no-route = 103.0.0.0/255.0.0.0 123 | no-route = 106.0.0.0/255.128.0.0 124 | no-route = 106.224.0.0/255.240.0.0 125 | no-route = 110.0.0.0/255.128.0.0 126 | no-route = 110.144.0.0/255.240.0.0 127 | no-route = 110.160.0.0/255.224.0.0 128 | no-route = 110.192.0.0/255.192.0.0 129 | no-route = 111.0.0.0/255.192.0.0 130 | no-route = 111.64.0.0/255.224.0.0 131 | no-route = 111.112.0.0/255.240.0.0 132 | no-route = 111.128.0.0/255.192.0.0 133 | no-route = 111.192.0.0/255.224.0.0 134 | no-route = 111.224.0.0/255.240.0.0 135 | no-route = 112.0.0.0/255.128.0.0 136 | no-route = 112.128.0.0/255.240.0.0 137 | no-route = 112.192.0.0/255.252.0.0 138 | no-route = 112.224.0.0/255.224.0.0 139 | no-route = 113.0.0.0/255.128.0.0 140 | no-route = 113.128.0.0/255.240.0.0 141 | no-route = 113.192.0.0/255.192.0.0 142 | no-route = 114.16.0.0/255.240.0.0 143 | no-route = 114.48.0.0/255.240.0.0 144 | no-route = 114.64.0.0/255.192.0.0 145 | no-route = 114.128.0.0/255.240.0.0 146 | no-route = 114.192.0.0/255.192.0.0 147 | no-route = 115.0.0.0/255.0.0.0 148 | no-route = 116.0.0.0/255.0.0.0 149 | no-route = 117.0.0.0/255.128.0.0 150 | no-route = 117.128.0.0/255.192.0.0 151 | no-route = 118.16.0.0/255.240.0.0 152 | no-route = 118.64.0.0/255.192.0.0 153 | no-route = 118.128.0.0/255.128.0.0 154 | no-route = 119.0.0.0/255.128.0.0 155 | no-route = 119.128.0.0/255.192.0.0 156 | no-route = 119.224.0.0/255.224.0.0 157 | no-route = 120.0.0.0/255.192.0.0 158 | no-route = 120.64.0.0/255.224.0.0 159 | no-route = 120.128.0.0/255.240.0.0 160 | no-route = 120.192.0.0/255.192.0.0 161 | no-route = 121.0.0.0/255.128.0.0 162 | no-route = 121.192.0.0/255.192.0.0 163 | no-route = 122.0.0.0/254.0.0.0 164 | no-route = 124.0.0.0/255.0.0.0 165 | no-route = 125.0.0.0/255.128.0.0 166 | no-route = 125.160.0.0/255.224.0.0 167 | no-route = 125.192.0.0/255.192.0.0 168 | no-route = 137.59.59.0/255.255.255.0 169 | no-route = 137.59.88.0/255.255.252.0 170 | no-route = 139.0.0.0/255.224.0.0 171 | no-route = 139.128.0.0/255.128.0.0 172 | no-route = 140.64.0.0/255.240.0.0 173 | no-route = 140.128.0.0/255.240.0.0 174 | no-route = 140.192.0.0/255.192.0.0 175 | no-route = 144.0.0.0/255.248.0.0 176 | no-route = 144.12.0.0/255.255.0.0 177 | no-route = 144.48.0.0/255.248.0.0 178 | no-route = 144.123.0.0/255.255.0.0 179 | no-route = 144.255.0.0/255.255.0.0 180 | no-route = 146.196.0.0/255.255.128.0 181 | no-route = 150.0.0.0/255.255.0.0 182 | no-route = 150.96.0.0/255.224.0.0 183 | no-route = 150.128.0.0/255.240.0.0 184 | no-route = 150.192.0.0/255.192.0.0 185 | no-route = 152.104.128.0/255.255.128.0 186 | no-route = 153.0.0.0/255.192.0.0 187 | no-route = 153.96.0.0/255.224.0.0 188 | no-route = 157.0.0.0/255.255.0.0 189 | no-route = 157.18.0.0/255.255.0.0 190 | no-route = 157.61.0.0/255.255.0.0 191 | no-route = 157.112.0.0/255.240.0.0 192 | no-route = 157.144.0.0/255.240.0.0 193 | no-route = 157.255.0.0/255.255.0.0 194 | no-route = 159.226.0.0/255.255.0.0 195 | no-route = 160.19.0.0/255.255.0.0 196 | no-route = 160.20.48.0/255.255.252.0 197 | no-route = 160.202.0.0/255.255.0.0 198 | no-route = 160.238.64.0/255.255.252.0 199 | no-route = 161.207.0.0/255.255.0.0 200 | no-route = 162.105.0.0/255.255.0.0 201 | no-route = 163.0.0.0/255.192.0.0 202 | no-route = 163.96.0.0/255.224.0.0 203 | no-route = 163.128.0.0/255.192.0.0 204 | no-route = 163.192.0.0/255.224.0.0 205 | no-route = 164.52.0.0/255.255.128.0 206 | no-route = 166.111.0.0/255.255.0.0 207 | no-route = 167.139.0.0/255.255.0.0 208 | no-route = 167.189.0.0/255.255.0.0 209 | no-route = 167.220.244.0/255.255.252.0 210 | no-route = 168.160.0.0/255.255.0.0 211 | no-route = 170.179.0.0/255.255.0.0 212 | no-route = 171.0.0.0/255.128.0.0 213 | no-route = 171.192.0.0/255.224.0.0 214 | no-route = 175.0.0.0/255.128.0.0 215 | no-route = 175.128.0.0/255.192.0.0 216 | no-route = 180.64.0.0/255.192.0.0 217 | no-route = 180.128.0.0/255.128.0.0 218 | no-route = 182.0.0.0/255.0.0.0 219 | no-route = 183.0.0.0/255.192.0.0 220 | no-route = 183.64.0.0/255.224.0.0 221 | no-route = 183.128.0.0/255.128.0.0 222 | no-route = 192.124.154.0/255.255.255.0 223 | no-route = 192.140.128.0/255.255.128.0 224 | no-route = 195.78.82.0/255.255.254.0 225 | no-route = 202.0.0.0/255.128.0.0 226 | no-route = 202.128.0.0/255.192.0.0 227 | no-route = 202.192.0.0/255.224.0.0 228 | no-route = 203.0.0.0/255.0.0.0 229 | no-route = 210.0.0.0/255.192.0.0 230 | no-route = 210.64.0.0/255.224.0.0 231 | no-route = 210.160.0.0/255.224.0.0 232 | no-route = 210.192.0.0/255.224.0.0 233 | no-route = 211.64.0.0/255.248.0.0 234 | no-route = 211.80.0.0/255.240.0.0 235 | no-route = 211.96.0.0/255.248.0.0 236 | no-route = 211.136.0.0/255.248.0.0 237 | no-route = 211.144.0.0/255.240.0.0 238 | no-route = 211.160.0.0/255.248.0.0 239 | no-route = 216.250.108.0/255.255.252.0 240 | no-route = 218.0.0.0/255.128.0.0 241 | no-route = 218.160.0.0/255.224.0.0 242 | no-route = 218.192.0.0/255.192.0.0 243 | no-route = 219.64.0.0/255.224.0.0 244 | no-route = 219.128.0.0/255.224.0.0 245 | no-route = 219.192.0.0/255.192.0.0 246 | no-route = 220.96.0.0/255.224.0.0 247 | no-route = 220.128.0.0/255.128.0.0 248 | no-route = 221.0.0.0/255.224.0.0 249 | no-route = 221.96.0.0/255.224.0.0 250 | no-route = 221.128.0.0/255.128.0.0 251 | no-route = 222.0.0.0/255.0.0.0 252 | no-route = 223.0.0.0/255.224.0.0 253 | no-route = 223.64.0.0/255.192.0.0 254 | no-route = 223.128.0.0/255.128.0.0 255 | cisco-client-compat = true 256 | dtls-legacy = true 257 | -------------------------------------------------------------------------------- /aria2_old.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin 3 | export PATH 4 | 5 | #================================================= 6 | # System Required: CentOS/Debian/Ubuntu 7 | # Description: Aria2 8 | # Version: 1.0.4 9 | # Author: Toyo 10 | # Blog: https://doub.io/shell-jc4/ 11 | #================================================= 12 | sh_ver="1.0.4" 13 | file="/root/.aria2" 14 | aria2_conf="${file}/aria2.conf" 15 | aria2_log="/root/.aria2/aria2.log" 16 | aria2c="/usr/bin/aria2c" 17 | 18 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 19 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 20 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 21 | Tip="${Green_font_prefix}[注意]${Font_color_suffix}" 22 | 23 | #检查系统 24 | check_sys(){ 25 | if [[ -f /etc/redhat-release ]]; then 26 | release="centos" 27 | elif cat /etc/issue | grep -q -E -i "debian"; then 28 | release="debian" 29 | elif cat /etc/issue | grep -q -E -i "ubuntu"; then 30 | release="ubuntu" 31 | elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat"; then 32 | release="centos" 33 | elif cat /proc/version | grep -q -E -i "debian"; then 34 | release="debian" 35 | elif cat /proc/version | grep -q -E -i "ubuntu"; then 36 | release="ubuntu" 37 | elif cat /proc/version | grep -q -E -i "centos|red hat|redhat"; then 38 | release="centos" 39 | fi 40 | bit=`uname -m` 41 | } 42 | check_installed_status(){ 43 | [[ ! -e ${aria2c} ]] && echo -e "${Error} Aria2 没有安装,请检查 !" && exit 1 44 | [[ ! -e ${aria2_conf} ]] && echo -e "${Error} Aria2 配置文件不存在,请检查 !" && [[ $1 != "un" ]] && exit 1 45 | } 46 | check_pid(){ 47 | PID=`ps -ef| grep "aria2c"| grep -v grep| grep -v ".sh"| grep -v "init.d"| grep -v "service"| awk '{print $2}'` 48 | } 49 | Download_aria2(){ 50 | mkdir "${file}" && cd "${file}" 51 | wget --no-check-certificate -N "https://raw.githubusercontent.com/P3TERX/doubi_backup/master/other/Aria2/aria2.conf" 52 | [[ ! -s "aria2.conf" ]] && echo -e "${Error} Aria2 配置文件下载失败 !" && rm -rf "${file}" && exit 1 53 | wget --no-check-certificate -N "https://raw.githubusercontent.com/P3TERX/doubi_backup/master/other/Aria2/dht.dat" 54 | [[ ! -s "dht.dat" ]] && echo -e "${Error} Aria2 DHT文件下载失败 !" && rm -rf "${file}" && exit 1 55 | echo '' > aria2.session 56 | } 57 | Service_aria2(){ 58 | if [[ ${release} = "centos" ]]; then 59 | if ! wget --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/other/aria2_centos -O /etc/init.d/aria2; then 60 | echo -e "${Error} Aria2服务 管理脚本下载失败 !" && exit 1 61 | fi 62 | chmod +x /etc/init.d/aria2 63 | chkconfig --add aria2 64 | chkconfig aria2 on 65 | else 66 | if ! wget --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/other/aria2_debian -O /etc/init.d/aria2; then 67 | echo -e "${Error} Aria2服务 管理脚本下载失败 !" && exit 1 68 | fi 69 | chmod +x /etc/init.d/aria2 70 | update-rc.d -f aria2 defaults 71 | fi 72 | echo -e "${Info} Aria2服务 管理脚本下载完成 !" 73 | } 74 | Installation_dependency(){ 75 | if [[ ${release} = "centos" ]]; then 76 | cat /etc/redhat-release |grep 7\..*|grep -i centos>/dev/null 77 | if [[ $? = 1 ]]; then 78 | echo -e "${Error} CentOS6 系统不支持安装 Aria2(源没有Aria2包),请更换 CentOS7 或其他系统安装 !" && exit 1 79 | fi 80 | wget -N --no-check-certificate http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 81 | [[ ! -e "epel-release-latest-7.noarch.rpm" ]] && echo -e "${Error} CentOS7 EPEL 源下载失败 !" && exit 1 82 | rpm -ivh epel-release-latest-7.noarch.rpm 83 | rm -rf epel-release-latest-7.noarch.rpm 84 | yum update 85 | yum install aria2 curl unzip vim -y 86 | elif [[ ${release} = "debian" ]]; then 87 | mv /etc/apt/sources.list /etc/apt/sources.list.bak 88 | wget --no-check-certificate -O "/etc/apt/sources.list" "https://raw.githubusercontent.com/P3TERX/doubi_backup/master/sources/us.sources_stretch.list" 89 | apt-get update 90 | apt-get install aria2 curl unzip vim -y 91 | rm -rf /etc/apt/sources.list 92 | mv /etc/apt/sources.list.bak /etc/apt/sources.list 93 | apt-get update 94 | else 95 | apt-get update 96 | apt-get install aria2 curl unzip vim -y 97 | fi 98 | [[ ! -e ${aria2c} ]] && echo -e "${Error} Aria2 安装失败,请检查 !" && exit 1 99 | } 100 | Install_aria2(){ 101 | [[ -e ${aria2c} ]] && echo -e "${Error} Aria2 已安装,请检查 !" && exit 1 102 | check_sys 103 | echo -e "${Info} 开始安装/配置 依赖..." 104 | Installation_dependency 105 | echo -e "${Info} 开始下载/安装 配置文件..." 106 | Download_aria2 107 | echo -e "${Info} 开始下载/安装 服务脚本(init)..." 108 | Service_aria2 109 | Read_config 110 | echo -e "${Info} 开始设置 iptables防火墙..." 111 | Set_iptables 112 | echo -e "${Info} 开始添加 iptables防火墙规则..." 113 | Add_iptables 114 | echo -e "${Info} 开始保存 iptables防火墙规则..." 115 | Save_iptables 116 | echo -e "${Info} 所有步骤 安装完毕,开始启动..." 117 | Start_aria2 118 | } 119 | Start_aria2(){ 120 | check_installed_status 121 | check_pid 122 | [[ ! -z ${PID} ]] && echo -e "${Error} Aria2 正在运行,请检查 !" && exit 1 123 | /etc/init.d/aria2 start 124 | } 125 | Stop_aria2(){ 126 | check_installed_status 127 | check_pid 128 | [[ -z ${PID} ]] && echo -e "${Error} Aria2 没有运行,请检查 !" && exit 1 129 | /etc/init.d/aria2 stop 130 | } 131 | Restart_aria2(){ 132 | check_installed_status 133 | check_pid 134 | [[ ! -z ${PID} ]] && /etc/init.d/aria2 stop 135 | /etc/init.d/aria2 start 136 | } 137 | Set_aria2(){ 138 | check_installed_status 139 | vim ${aria2_conf} 140 | Restart_aria2 141 | } 142 | Read_config(){ 143 | [[ ! -e ${aria2_conf} ]] && echo -e "${Error} Aria2 配置文件不存在 !" && exit 1 144 | conf_text=$(cat ${aria2_conf}|grep -v '#') 145 | aria2_dir=$(echo -e "${conf_text}"|grep "dir="|awk -F "=" '{print $NF}') 146 | aria2_rpc_port=$(echo -e "${conf_text}"|grep "rpc-listen-port="|awk -F "=" '{print $NF}') 147 | aria2_rpc_secret=$(echo -e "${conf_text}"|grep "rpc-secret="|awk -F "=" '{print $NF}') 148 | } 149 | View_Log(){ 150 | [[ ! -e ${aria2_log} ]] && echo -e "${Error} Aria2 日志文件不存在 !" && exit 1 151 | echo && echo -e "${Tip} 按 ${Red_font_prefix}Ctrl+C${Font_color_suffix} 终止查看日志" && echo 152 | tail -f ${aria2_log} 153 | } 154 | Uninstall_aria2(){ 155 | check_installed_status "un" 156 | echo "确定要卸载 Aria2 ? (y/N)" 157 | echo 158 | stty erase '^H' && read -p "(默认: n):" unyn 159 | [[ -z ${unyn} ]] && unyn="n" 160 | if [[ ${unyn} == [Yy] ]]; then 161 | check_pid 162 | [[ ! -z $PID ]] && kill -9 ${PID} 163 | Read_config 164 | Del_iptables 165 | Save_iptables 166 | if [[ ${release} = "centos" ]]; then 167 | chkconfig --del aria2 168 | yum remove aria2 -y 169 | else 170 | update-rc.d -f aria2 remove 171 | apt-get remove --purge aria2 -y 172 | fi 173 | rm -rf ${file} 174 | echo && echo "Aria2 卸载完成 !" && echo 175 | else 176 | echo && echo "卸载已取消..." && echo 177 | fi 178 | } 179 | Add_iptables(){ 180 | iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport ${aria2_rpc_port} -j ACCEPT 181 | iptables -I INPUT -m state --state NEW -m udp -p udp --dport ${aria2_rpc_port} -j ACCEPT 182 | } 183 | Del_iptables(){ 184 | iptables -D INPUT -m state --state NEW -m tcp -p tcp --dport ${aria2_rpc_port} -j ACCEPT 185 | iptables -D INPUT -m state --state NEW -m udp -p udp --dport ${aria2_rpc_port} -j ACCEPT 186 | } 187 | Save_iptables(){ 188 | if [[ ${release} == "centos" ]]; then 189 | service iptables save 190 | else 191 | iptables-save > /etc/iptables.up.rules 192 | fi 193 | } 194 | Set_iptables(){ 195 | if [[ ${release} == "centos" ]]; then 196 | service iptables save 197 | chkconfig --level 2345 iptables on 198 | else 199 | iptables-save > /etc/iptables.up.rules 200 | echo -e '#!/bin/bash\n/sbin/iptables-restore < /etc/iptables.up.rules' > /etc/network/if-pre-up.d/iptables 201 | chmod +x /etc/network/if-pre-up.d/iptables 202 | fi 203 | } 204 | Update_Shell(){ 205 | echo -e "当前版本为 [ ${sh_ver} ],开始检测最新版本..." 206 | sh_new_ver=$(wget --no-check-certificate -qO- "https://raw.githubusercontent.com/P3TERX/doubi_backup/master/aria2.sh"|grep 'sh_ver="'|awk -F "=" '{print $NF}'|sed 's/\"//g'|head -1) 207 | [[ -z ${sh_new_ver} ]] && echo -e "${Error} 检测最新版本失败 !" && exit 0 208 | if [[ ${sh_new_ver} != ${sh_ver} ]]; then 209 | echo -e "发现新版本[ ${sh_new_ver} ],是否更新?[Y/n]" 210 | stty erase '^H' && read -p "(默认: y):" yn 211 | [[ -z "${yn}" ]] && yn="y" 212 | if [[ ${yn} == [Yy] ]]; then 213 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/aria2.sh && chmod +x aria2.sh 214 | echo -e "脚本已更新为最新版本[ ${sh_new_ver} ] !" 215 | else 216 | echo && echo " 已取消..." && echo 217 | fi 218 | else 219 | echo -e "当前已是最新版本[ ${sh_new_ver} ] !" 220 | fi 221 | } 222 | echo && echo -e " Aria2 一键安装管理脚本 ${Red_font_prefix}[v${sh_ver}]${Font_color_suffix} 223 | -- Toyo | doub.io/shell-jc4 -- 224 | 225 | ${Green_font_prefix}0.${Font_color_suffix} 升级脚本 226 | ———————————— 227 | ${Green_font_prefix}1.${Font_color_suffix} 安装 Aria2 228 | ${Green_font_prefix}2.${Font_color_suffix} 卸载 Aria2 229 | ———————————— 230 | ${Green_font_prefix}3.${Font_color_suffix} 启动 Aria2 231 | ${Green_font_prefix}4.${Font_color_suffix} 停止 Aria2 232 | ${Green_font_prefix}5.${Font_color_suffix} 重启 Aria2 233 | ———————————— 234 | ${Green_font_prefix}6.${Font_color_suffix} 修改 配置文件 235 | ${Green_font_prefix}7.${Font_color_suffix} 查看 日志信息 236 | ————————————" && echo 237 | if [[ -e ${aria2c} ]]; then 238 | check_pid 239 | if [[ ! -z "${PID}" ]]; then 240 | echo -e " 当前状态: ${Green_font_prefix}已安装${Font_color_suffix} 并 ${Green_font_prefix}已启动${Font_color_suffix}" 241 | else 242 | echo -e " 当前状态: ${Green_font_prefix}已安装${Font_color_suffix} 但 ${Red_font_prefix}未启动${Font_color_suffix}" 243 | fi 244 | else 245 | echo -e " 当前状态: ${Red_font_prefix}未安装${Font_color_suffix}" 246 | fi 247 | echo 248 | stty erase '^H' && read -p " 请输入数字 [0-7]:" num 249 | case "$num" in 250 | 0) 251 | Update_Shell 252 | ;; 253 | 1) 254 | Install_aria2 255 | ;; 256 | 2) 257 | Uninstall_aria2 258 | ;; 259 | 3) 260 | Start_aria2 261 | ;; 262 | 4) 263 | Stop_aria2 264 | ;; 265 | 5) 266 | Restart_aria2 267 | ;; 268 | 6) 269 | Set_aria2 270 | ;; 271 | 7) 272 | View_Log 273 | ;; 274 | *) 275 | echo "请输入正确数字 [0-7]" 276 | ;; 277 | esac -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 一个逗比写的逗比脚本 2 | 3 | ![GitHub](https://img.shields.io/github/license/mashape/apistatus.svg) 4 | [![GitHub stars](https://img.shields.io/github/stars/P3TERX/doubi_backup.svg?style=popout&label=Stars)](https://github.com/P3TERX/doubi_backup/stargazers) 5 | [![GitHub forks](https://img.shields.io/github/forks/P3TERX/doubi_backup.svg?style=popout&label=Fork)](https://github.com/P3TERX/doubi_backup/fork) 6 | ## 脚本索引 7 | 8 | * [***代理相关***](#代理相关) 9 | * [ss-go.sh](#ss_gosh) 10 | * [brook.sh](#brooksh) 11 | * [goflyway.sh](#goflywaysh) 12 | * [daze.sh](#dazesh) 13 | * [lightsocks.sh](#lightsockssh) 14 | * [mtproxy.sh](#mtproxysh) 15 | * [mtproxy_go.sh](#mtproxy_gosh) 16 | * [***中转相关***](#中转相关) 17 | * [iptables-pf.sh](#iptables-pfsh) 18 | * [brook-pf.sh](#brook-pfsh) 19 | * [haproxy.sh](#haproxysh) 20 | * [socat.sh](#socatsh) 21 | * [tinymapper.sh](#tinymappersh) 22 | * [***BT下载相关***](#bt下载相关) 23 | * [aria2.sh](#aria2sh) 24 | * [cloudt.sh](#cloudtsh) 25 | * [pserver.sh](#pserversh) 26 | * [***服务器相关***](#服务器相关) 27 | * [bbr.sh](#bbrsh) 28 | * [ban_iptables.sh](#ban_iptablessh) 29 | * [ssh_port.sh](#ssh_portsh) 30 | * [***VPN 相关***](#vpn相关) 31 | * [ocserv.sh](#ocservsh) 32 | * [***DNS 相关***](#dns相关) 33 | * [dowsdns.sh](#dowsdnssh) 34 | * [***HTTP 相关***](#http相关) 35 | * [caddy_install.sh](#caddy_installsh) 36 | * [pythonhttp.sh](#pythonhttpsh) 37 | * [***其他***](#其他) 38 | * [adbyby.sh](#adbybysh) 39 | * [gfw_push.sh](#gfw_pushsh) 40 | * [libsodium.sh](#libsodiumsh) 41 | 42 | --- 43 | 44 | ## 代理相关 45 | 46 | ## ss_go.sh 47 | 48 | - 脚本说明: Shadowsocks 一键安装管理脚本 49 | - 系统支持: CentOS6+ / Debian6+ / Ubuntu14+ 50 | - 使用方法: https://doub.io/ss-jc67/ 51 | - 项目地址: https://github.com/shadowsocks/go-shadowsocks2 52 | 53 | #### 脚本特点: 54 | 目前网上的各个Shadowsocks脚本基本都是只有 安装/启动/重启 等基础功能,对于小白来说还是不够简单方便。既然是一键脚本,那么就要尽可能地简单,小白更容易接受使用! 55 | 56 | #### 下载安装: 57 | ``` bash 58 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/ss-go.sh && chmod +x ss-go.sh && bash ss-go.sh 59 | ``` 60 | 61 | --- 62 | ## brook.sh 63 | 64 | - 脚本说明: Brook 一键安装管理脚本 65 | - 系统支持: CentOS6+ / Debian7+ / Ubuntu14+ 66 | - 使用方法: https://doub.io/brook-jc3/ 67 | 68 | #### 下载安装: 69 | ``` bash 70 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/brook.sh && chmod +x brook.sh && bash brook.sh 71 | ``` 72 | 73 | --- 74 | ## goflyway.sh 75 | 76 | - 脚本说明: GoFlyway 一键安装管理脚本 77 | - 系统支持: CentOS6+ / Debian7+ / Ubuntu14+ 78 | - 使用方法: https://doub.io/goflyway-jc2/ 79 | 80 | #### 下载安装: 81 | ``` bash 82 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/goflyway.sh && chmod +x goflyway.sh && bash goflyway.sh 83 | ``` 84 | 85 | --- 86 | ## lightsocks.sh 87 | 88 | - 脚本说明: LightSocks 一键安装管理脚本 89 | - 系统支持: CentOS6+ / Debian7+ / Ubuntu14+ 90 | - 使用方法: https://doub.io/lightsocks-jc1/ 91 | 92 | #### 下载安装: 93 | ``` bash 94 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/lightsocks.sh && chmod +x lightsocks.sh && bash lightsocks.sh 95 | ``` 96 | 97 | --- 98 | ## daze.sh 99 | 100 | - 脚本说明: DAZE 一键安装管理脚本 101 | - 系统支持: CentOS6+ / Debian7+ / Ubuntu14+ 102 | - 使用方法: https://doub.io/daze-jc3/ 103 | 104 | #### 下载安装: 105 | ``` bash 106 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/daze.sh && chmod +x daze.sh && bash daze.sh 107 | ``` 108 | 109 | --- 110 | ## mtproxy.sh 111 | 112 | - 脚本说明: Mtproto Proxy 一键安装管理脚本 113 | - 系统支持: CentOS7 / Debian7+ / Ubuntu14+ 114 | - 使用方法: https://doub.io/shell-jc7/ 115 | 116 | #### 下载安装: 117 | ``` bash 118 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/mtproxy.sh && chmod +x mtproxy.sh && bash mtproxy.sh 119 | ``` 120 | 121 | --- 122 | ## mtproxy_go.sh 123 | 124 | - 脚本说明: Mtproto Proxy Go版 一键安装管理脚本 125 | - 系统支持: CentOS6+ / Debian7+ / Ubuntu14+ 126 | - 使用方法: https://doub.io/shell-jc9/ 127 | 128 | #### 下载安装: 129 | ``` bash 130 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/mtproxy_go.sh && chmod +x mtproxy_go.sh && bash mtproxy_go.sh 131 | ``` 132 | 133 | --- 134 | 135 | ## 中转相关 136 | 137 | ## iptables-pf.sh 138 | 139 | - 脚本说明: iptables 端口转发 一键安装管理脚本 140 | - 系统支持: CentOS6+ / Debian6+ / Ubuntu14+ 141 | - 使用方法: https://doub.io/wlzy-20/ 142 | 143 | #### 下载安装: 144 | ``` bash 145 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/iptables-pf.sh && chmod +x iptables-pf.sh && bash iptables-pf.sh 146 | ``` 147 | 148 | --- 149 | ## brook-pf.sh 150 | 151 | - 脚本说明: Brook 端口转发 一键安装管理脚本 152 | - 系统支持: CentOS6+ / Debian6+ / Ubuntu14+ 153 | - 使用方法: https://doub.io/wlzy-37/ 154 | 155 | #### 下载安装: 156 | ``` bash 157 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/brook-pf.sh && chmod +x brook-pf.sh && bash brook-pf.sh 158 | ``` 159 | 160 | --- 161 | ## haproxy.sh 162 | 163 | - 脚本说明: HaProxy 一键安装管理脚本 164 | - 系统支持: CentOS6+ / Debian6+ / Ubuntu14+ 165 | - 使用方法: https://doub.io/wlzy-19/ 166 | 167 | #### 下载安装: 168 | ``` bash 169 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/haproxy.sh && chmod +x haproxy.sh && bash haproxy.sh 170 | ``` 171 | 172 | --- 173 | ## socat.sh 174 | 175 | - 脚本说明: Socat 一键安装管理脚本 176 | - 系统支持: CentOS6+ / Debian6+ / Ubuntu14+ 177 | - 使用方法: https://doub.io/wlzy-18/ 178 | 179 | #### 下载安装: 180 | ``` bash 181 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/socat.sh && chmod +x socat.sh && bash socat.sh 182 | ``` 183 | 184 | --- 185 | ## tinymapper.sh 186 | 187 | - 脚本说明: tinyPortMapper 一键安装管理脚本 188 | - 系统支持: CentOS6+ / Debian6+ / Ubuntu14+ 189 | - 使用方法: https://doub.io/wlzy-36/ 190 | 191 | #### 下载安装: 192 | ``` bash 193 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/tinymapper.sh && chmod +x tinymapper.sh && bash tinymapper.sh 194 | ``` 195 | 196 | --- 197 | 198 | ## BT下载相关 199 | 200 | ## aria2.sh 201 | 202 | - 脚本说明: Aria2 一键安装管理脚本 203 | - 系统支持: CentOS6+ / Debian6+ / Ubuntu14+ 204 | - 使用方法: https://doub.io/shell-jc4/ 205 | 206 | #### 下载安装: 207 | ``` bash 208 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/aria2.sh && chmod +x aria2.sh && bash aria2.sh 209 | ``` 210 | 211 | --- 212 | ## cloudt.sh 213 | 214 | - 脚本说明: Cloud Torrent 一键安装管理脚本 215 | - 系统支持: CentOS6+ / Debian6+ / Ubuntu14+ 216 | - 使用方法: https://doub.io/wlzy-12/ 217 | - 项目地址: https://github.com/jpillora/cloud-torrent 218 | 219 | #### 下载安装: 220 | ``` bash 221 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/cloudt.sh && chmod +x cloudt.sh && bash cloudt.sh 222 | ``` 223 | 224 | --- 225 | ## pserver.sh 226 | 227 | - 脚本说明: Peerflix Server 一键安装管理脚本 228 | - 系统支持: CentOS6+ / Debian6+ / Ubuntu14+ 229 | - 使用方法: https://doub.io/wlzy-13/ 230 | - 项目地址: https://github.com/asapach/peerflix-server 231 | 232 | #### 下载安装: 233 | ``` bash 234 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/pserver.sh && chmod +x pserver.sh && bash pserver.sh 235 | ``` 236 | 237 | --- 238 | 239 | ## 服务器相关 240 | 241 | ## bbr.sh 242 | 243 | - 脚本说明: BBR 一键安装管理脚本 244 | - 系统支持: Debian6+ / Ubuntu14+ 245 | - 使用方法: https://doub.io/wlzy-16/ 246 | 247 | #### 下载安装: 248 | ``` bash 249 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/bbr.sh && chmod +x bbr.sh && bash bbr.sh 250 | ``` 251 | 252 | --- 253 | ## ban_iptables.sh 254 | 255 | - 脚本说明: iptables 垃圾邮件(SPAM)/BT/PT 一键封禁脚本 256 | - 系统支持: CentOS6+ / Debian6+ / Ubuntu14+ 257 | - 使用方法: https://doub.io/shell-jc2/ 258 | 259 | #### 下载安装: 260 | ``` bash 261 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/ban_iptables.sh && chmod +x ban_iptables.sh && bash ban_iptables.sh 262 | ``` 263 | 264 | --- 265 | ## ssh_port.sh 266 | 267 | - 脚本说明: SSH 一键修改端口脚本 268 | - 系统支持: Debian6+ / Ubuntu14+ 269 | - 使用方法: https://doub.io/linux-jc11/ 270 | 271 | #### 下载安装: 272 | ``` bash 273 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/ssh_port.sh && chmod +x ssh_port.sh && bash ssh_port.sh 274 | ``` 275 | 276 | --- 277 | 278 | ## VPN相关 279 | 280 | ## ocserv.sh 281 | 282 | - 脚本说明: Ocserv AnyConnect 一键安装管理脚本 283 | - 系统支持: Debian7+ / Ubuntu14+ 284 | - 使用方法: https://doub.io/vpnzy-7/ 285 | 286 | #### 下载安装: 287 | ``` bash 288 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/ocserv.sh && chmod +x ocserv.sh && bash ocserv.sh 289 | ``` 290 | 291 | --- 292 | 293 | ## DNS相关 294 | 295 | ## dowsdns.sh 296 | 297 | - 脚本说明: DowsDNS 一键安装管理脚本 298 | - 系统支持: CentOS7 / Debian7+ / Ubuntu14+ 299 | - 使用方法: https://doub.io/dowsdns-jc3/ 300 | 301 | #### 下载安装: 302 | ``` bash 303 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/dowsdns.sh && chmod +x dowsdns.sh && bash dowsdns.sh 304 | ``` 305 | 306 | --- 307 | 308 | ## HTTP相关 309 | 310 | ## caddy_install.sh 311 | 312 | - 脚本说明: Caddy 一键安装脚本 313 | - 系统支持: CentOS6+ / Debian7+ / Ubuntu14+ 314 | - 使用方法: https://doub.io/shell-jc1 315 | 316 | #### 下载安装: 317 | ``` bash 318 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh 319 | ``` 320 | #### 安装插件: 321 | ``` 322 | bash caddy_install.sh install xxx,xxx 323 | ``` 324 | 例如同时安装 `http.filemanager` 和 `http.webdav` 插件: 325 | ``` 326 | bash caddy_install.sh install http.filemanager,http.webdav 327 | ``` 328 | 插件和Caddy是集成在一起的(单个二进制文件),多个插件必须同时安装。 329 | #### 卸载命令: 330 | ``` 331 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/caddy_install.sh && chmod +x caddy_install.sh && caddy_install.sh uninstall 332 | ``` 333 | 334 | --- 335 | ## pythonhttp.sh 336 | 337 | - 脚本说明: SimpleHTTPServer 一键安装管理脚本 338 | - 系统支持: CentOS6+ / Debian6+ / Ubuntu14+ 339 | - 使用方法: https://doub.io/wlzy-8/ 340 | 341 | #### 下载安装: 342 | ``` bash 343 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/pythonhttp.sh && chmod +x pythonhttp.sh && bash pythonhttp.sh 344 | ``` 345 | 346 | --- 347 | 348 | ## 其他 349 | 350 | ## adbyby.sh 351 | 352 | - 脚本说明: ADbyby 一键安装管理脚本 353 | - 系统支持: CentOS6+ / Debian6+ / Ubuntu14+ 354 | - 使用方法: https://doub.io/adbyby-jc2/ 355 | 356 | #### 下载安装: 357 | ``` bash 358 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/adbyby.sh && chmod +x adbyby.sh && bash adbyby.sh 359 | ``` 360 | 361 | ## gfw_push.sh 362 | 363 | - 脚本说明: 监测服务器IP是否被墙并推送至 Telegram 一键脚本 364 | - 系统支持: CentOS6+ / Debian6+ / Ubuntu14+ 365 | - 使用方法: https://doub.io/shell-jc8/ 366 | 367 | #### 下载安装: 368 | ``` bash 369 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/gfw_push.sh && chmod +x gfw_push.sh && bash gfw_push.sh 370 | ``` 371 | 372 | --- 373 | ## libsodium.sh 374 | 375 | - 脚本说明: libsodium 一键安装管理脚本 376 | - 系统支持: CentOS6+ / Debian6+ / Ubuntu14+ 377 | - 使用方法: https://doub.io/shell-jc6/ 378 | 379 | #### 下载安装: 380 | ``` bash 381 | wget -N --no-check-certificate https://raw.githubusercontent.com/P3TERX/doubi_backup/master/libsodium.sh && chmod +x libsodium.sh && bash libsodium.sh 382 | ``` 383 | 384 | --- 385 | Copyright (C) 2016-2018 Toyo 386 | 387 | Backup&Fix by [P3TERX](https://p3terx.com/) - 2018.11.20 -------------------------------------------------------------------------------- /iptables-pf.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin 3 | export PATH 4 | 5 | #================================================= 6 | # System Required: CentOS/Debian/Ubuntu 7 | # Description: iptables Port forwarding 8 | # Version: 1.1.1 9 | # Author: Toyo 10 | # Blog: https://doub.io/wlzy-20/ 11 | #================================================= 12 | sh_ver="1.1.1" 13 | 14 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 15 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 16 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 17 | Tip="${Green_font_prefix}[注意]${Font_color_suffix}" 18 | 19 | check_iptables(){ 20 | iptables_exist=$(iptables -V) 21 | [[ ${iptables_exist} = "" ]] && echo -e "${Error} 没有安装iptables,请检查 !" && exit 1 22 | } 23 | check_sys(){ 24 | if [[ -f /etc/redhat-release ]]; then 25 | release="centos" 26 | elif cat /etc/issue | grep -q -E -i "debian"; then 27 | release="debian" 28 | elif cat /etc/issue | grep -q -E -i "ubuntu"; then 29 | release="ubuntu" 30 | elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat"; then 31 | release="centos" 32 | elif cat /proc/version | grep -q -E -i "debian"; then 33 | release="debian" 34 | elif cat /proc/version | grep -q -E -i "ubuntu"; then 35 | release="ubuntu" 36 | elif cat /proc/version | grep -q -E -i "centos|red hat|redhat"; then 37 | release="centos" 38 | fi 39 | #bit=`uname -m` 40 | } 41 | install_iptables(){ 42 | iptables_exist=$(iptables -V) 43 | if [[ ${iptables_exist} != "" ]]; then 44 | echo -e "${Info} 已经安装iptables,继续..." 45 | else 46 | echo -e "${Info} 检测到未安装 iptables,开始安装..." 47 | if [[ ${release} == "centos" ]]; then 48 | yum update 49 | yum install -y iptables 50 | else 51 | apt-get update 52 | apt-get install -y iptables 53 | fi 54 | iptables_exist=$(iptables -V) 55 | if [[ ${iptables_exist} = "" ]]; then 56 | echo -e "${Error} 安装iptables失败,请检查 !" && exit 1 57 | else 58 | echo -e "${Info} iptables 安装完成 !" 59 | fi 60 | fi 61 | echo -e "${Info} 开始配置 iptables !" 62 | Set_iptables 63 | echo -e "${Info} iptables 配置完毕 !" 64 | } 65 | Set_forwarding_port(){ 66 | read -e -p "请输入 iptables 欲转发至的 远程端口 [1-65535] (支持端口段 如 2333-6666, 被转发服务器):" forwarding_port 67 | [[ -z "${forwarding_port}" ]] && echo "取消..." && exit 1 68 | echo && echo -e " 欲转发端口 : ${Red_font_prefix}${forwarding_port}${Font_color_suffix}" && echo 69 | } 70 | Set_forwarding_ip(){ 71 | read -e -p "请输入 iptables 欲转发至的 远程IP(被转发服务器):" forwarding_ip 72 | [[ -z "${forwarding_ip}" ]] && echo "取消..." && exit 1 73 | echo && echo -e " 欲转发服务器IP : ${Red_font_prefix}${forwarding_ip}${Font_color_suffix}" && echo 74 | } 75 | Set_local_port(){ 76 | echo -e "请输入 iptables 本地监听端口 [1-65535] (支持端口段 如 2333-6666)" 77 | read -e -p "(默认端口: ${forwarding_port}):" local_port 78 | [[ -z "${local_port}" ]] && local_port="${forwarding_port}" 79 | echo && echo -e " 本地监听端口 : ${Red_font_prefix}${local_port}${Font_color_suffix}" && echo 80 | } 81 | Set_local_ip(){ 82 | read -e -p "请输入 本服务器的 网卡IP(注意是网卡绑定的IP,而不仅仅是公网IP,回车自动检测外网IP):" local_ip 83 | if [[ -z "${local_ip}" ]]; then 84 | local_ip=$(wget -qO- -t1 -T2 ipinfo.io/ip) 85 | if [[ -z "${local_ip}" ]]; then 86 | echo "${Error} 无法检测到本服务器的公网IP,请手动输入" 87 | read -e -p "请输入 本服务器的 网卡IP(注意是网卡绑定的IP,而不仅仅是公网IP):" local_ip 88 | [[ -z "${local_ip}" ]] && echo "取消..." && exit 1 89 | fi 90 | fi 91 | echo && echo -e " 本服务器IP : ${Red_font_prefix}${local_ip}${Font_color_suffix}" && echo 92 | } 93 | Set_forwarding_type(){ 94 | echo -e "请输入数字 来选择 iptables 转发类型: 95 | 1. TCP 96 | 2. UDP 97 | 3. TCP+UDP\n" 98 | read -e -p "(默认: TCP+UDP):" forwarding_type_num 99 | [[ -z "${forwarding_type_num}" ]] && forwarding_type_num="3" 100 | if [[ ${forwarding_type_num} == "1" ]]; then 101 | forwarding_type="TCP" 102 | elif [[ ${forwarding_type_num} == "2" ]]; then 103 | forwarding_type="UDP" 104 | elif [[ ${forwarding_type_num} == "3" ]]; then 105 | forwarding_type="TCP+UDP" 106 | else 107 | forwarding_type="TCP+UDP" 108 | fi 109 | } 110 | Set_Config(){ 111 | Set_forwarding_port 112 | Set_forwarding_ip 113 | Set_local_port 114 | Set_local_ip 115 | Set_forwarding_type 116 | echo && echo -e "—————————————————————————————— 117 | 请检查 iptables 端口转发规则配置是否有误 !\n 118 | 本地监听端口 : ${Green_font_prefix}${local_port}${Font_color_suffix} 119 | 服务器 IP\t: ${Green_font_prefix}${local_ip}${Font_color_suffix}\n 120 | 欲转发的端口 : ${Green_font_prefix}${forwarding_port}${Font_color_suffix} 121 | 欲转发 IP\t: ${Green_font_prefix}${forwarding_ip}${Font_color_suffix} 122 | 转发类型\t: ${Green_font_prefix}${forwarding_type}${Font_color_suffix} 123 | ——————————————————————————————\n" 124 | read -e -p "请按任意键继续,如有配置错误请使用 Ctrl+C 退出。" var 125 | } 126 | Add_forwarding(){ 127 | check_iptables 128 | Set_Config 129 | local_port=$(echo ${local_port} | sed 's/-/:/g') 130 | forwarding_port_1=$(echo ${forwarding_port} | sed 's/-/:/g') 131 | if [[ ${forwarding_type} == "TCP" ]]; then 132 | Add_iptables "tcp" 133 | elif [[ ${forwarding_type} == "UDP" ]]; then 134 | Add_iptables "udp" 135 | elif [[ ${forwarding_type} == "TCP+UDP" ]]; then 136 | Add_iptables "tcp" 137 | Add_iptables "udp" 138 | fi 139 | Save_iptables 140 | clear && echo && echo -e "—————————————————————————————— 141 | iptables 端口转发规则配置完成 !\n 142 | 本地监听端口 : ${Green_font_prefix}${local_port}${Font_color_suffix} 143 | 服务器 IP\t: ${Green_font_prefix}${local_ip}${Font_color_suffix}\n 144 | 欲转发的端口 : ${Green_font_prefix}${forwarding_port_1}${Font_color_suffix} 145 | 欲转发 IP\t: ${Green_font_prefix}${forwarding_ip}${Font_color_suffix} 146 | 转发类型\t: ${Green_font_prefix}${forwarding_type}${Font_color_suffix} 147 | ——————————————————————————————\n" 148 | } 149 | View_forwarding(){ 150 | check_iptables 151 | forwarding_text=$(iptables -t nat -vnL PREROUTING|tail -n +3) 152 | [[ -z ${forwarding_text} ]] && echo -e "${Error} 没有发现 iptables 端口转发规则,请检查 !" && exit 1 153 | forwarding_total=$(echo -e "${forwarding_text}"|wc -l) 154 | forwarding_list_all="" 155 | for((integer = 1; integer <= ${forwarding_total}; integer++)) 156 | do 157 | forwarding_type=$(echo -e "${forwarding_text}"|awk '{print $4}'|sed -n "${integer}p") 158 | forwarding_listen=$(echo -e "${forwarding_text}"|awk '{print $11}'|sed -n "${integer}p"|awk -F "dpt:" '{print $2}') 159 | [[ -z ${forwarding_listen} ]] && forwarding_listen=$(echo -e "${forwarding_text}"| awk '{print $11}'|sed -n "${integer}p"|awk -F "dpts:" '{print $2}') 160 | forwarding_fork=$(echo -e "${forwarding_text}"| awk '{print $12}'|sed -n "${integer}p"|awk -F "to:" '{print $2}') 161 | forwarding_list_all=${forwarding_list_all}"${Green_font_prefix}"${integer}".${Font_color_suffix} 类型: ${Green_font_prefix}"${forwarding_type}"${Font_color_suffix} 监听端口: ${Red_font_prefix}"${forwarding_listen}"${Font_color_suffix} 转发IP和端口: ${Red_font_prefix}"${forwarding_fork}"${Font_color_suffix}\n" 162 | done 163 | echo && echo -e "当前有 ${Green_background_prefix} "${forwarding_total}" ${Font_color_suffix} 个 iptables 端口转发规则。" 164 | echo -e ${forwarding_list_all} 165 | } 166 | Del_forwarding(){ 167 | check_iptables 168 | while true 169 | do 170 | View_forwarding 171 | read -e -p "请输入数字 来选择要删除的 iptables 端口转发规则(默认回车取消):" Del_forwarding_num 172 | [[ -z "${Del_forwarding_num}" ]] && Del_forwarding_num="0" 173 | echo $((${Del_forwarding_num}+0)) &>/dev/null 174 | if [[ $? -eq 0 ]]; then 175 | if [[ ${Del_forwarding_num} -ge 1 ]] && [[ ${Del_forwarding_num} -le ${forwarding_total} ]]; then 176 | forwarding_type=$(echo -e "${forwarding_text}"| awk '{print $4}' | sed -n "${Del_forwarding_num}p") 177 | forwarding_listen=$(echo -e "${forwarding_text}"| awk '{print $11}' | sed -n "${Del_forwarding_num}p" | awk -F "dpt:" '{print $2}' | sed 's/-/:/g') 178 | [[ -z ${forwarding_listen} ]] && forwarding_listen=$(echo -e "${forwarding_text}"| awk '{print $11}' |sed -n "${Del_forwarding_num}p" | awk -F "dpts:" '{print $2}') 179 | Del_iptables "${forwarding_type}" "${Del_forwarding_num}" 180 | Save_iptables 181 | echo && echo -e "${Info} iptables 端口转发规则删除完成 !" && echo 182 | else 183 | echo -e "${Error} 请输入正确的数字 !" 184 | fi 185 | else 186 | break && echo "取消..." 187 | fi 188 | done 189 | } 190 | Uninstall_forwarding(){ 191 | check_iptables 192 | echo -e "确定要清空 iptables 所有端口转发规则 ? [y/N]" 193 | read -e -p "(默认: n):" unyn 194 | [[ -z ${unyn} ]] && unyn="n" 195 | if [[ ${unyn} == [Yy] ]]; then 196 | forwarding_text=$(iptables -t nat -vnL PREROUTING|tail -n +3) 197 | [[ -z ${forwarding_text} ]] && echo -e "${Error} 没有发现 iptables 端口转发规则,请检查 !" && exit 1 198 | forwarding_total=$(echo -e "${forwarding_text}"|wc -l) 199 | for((integer = 1; integer <= ${forwarding_total}; integer++)) 200 | do 201 | forwarding_type=$(echo -e "${forwarding_text}"|awk '{print $4}'|sed -n "${integer}p") 202 | forwarding_listen=$(echo -e "${forwarding_text}"|awk '{print $11}'|sed -n "${integer}p"|awk -F "dpt:" '{print $2}') 203 | [[ -z ${forwarding_listen} ]] && forwarding_listen=$(echo -e "${forwarding_text}"| awk '{print $11}'|sed -n "${integer}p"|awk -F "dpts:" '{print $2}') 204 | # echo -e "${forwarding_text} ${forwarding_type} ${forwarding_listen}" 205 | Del_iptables "${forwarding_type}" "${integer}" 206 | done 207 | Save_iptables 208 | echo && echo -e "${Info} iptables 已清空 所有端口转发规则 !" && echo 209 | else 210 | echo && echo "清空已取消..." && echo 211 | fi 212 | } 213 | Add_iptables(){ 214 | iptables -t nat -A PREROUTING -p "$1" --dport "${local_port}" -j DNAT --to-destination "${forwarding_ip}":"${forwarding_port}" 215 | iptables -t nat -A POSTROUTING -p "$1" -d "${forwarding_ip}" --dport "${forwarding_port_1}" -j SNAT --to-source "${local_ip}" 216 | echo "iptables -t nat -A PREROUTING -p $1 --dport ${local_port} -j DNAT --to-destination ${forwarding_ip}:${forwarding_port}" 217 | echo "iptables -t nat -A POSTROUTING -p $1 -d ${forwarding_ip} --dport ${forwarding_port_1} -j SNAT --to-source ${local_ip}" 218 | echo "${local_port}" 219 | iptables -I INPUT -m state --state NEW -m "$1" -p "$1" --dport "${local_port}" -j ACCEPT 220 | } 221 | Del_iptables(){ 222 | iptables -t nat -D POSTROUTING "$2" 223 | iptables -t nat -D PREROUTING "$2" 224 | iptables -D INPUT -m state --state NEW -m "$1" -p "$1" --dport "${forwarding_listen}" -j ACCEPT 225 | } 226 | Save_iptables(){ 227 | if [[ ${release} == "centos" ]]; then 228 | service iptables save 229 | else 230 | iptables-save > /etc/iptables.up.rules 231 | fi 232 | } 233 | Set_iptables(){ 234 | echo -e "net.ipv4.ip_forward=1" >> /etc/sysctl.conf 235 | sysctl -p 236 | if [[ ${release} == "centos" ]]; then 237 | service iptables save 238 | chkconfig --level 2345 iptables on 239 | else 240 | iptables-save > /etc/iptables.up.rules 241 | echo -e '#!/bin/bash\n/sbin/iptables-restore < /etc/iptables.up.rules' > /etc/network/if-pre-up.d/iptables 242 | chmod +x /etc/network/if-pre-up.d/iptables 243 | fi 244 | } 245 | Update_Shell(){ 246 | sh_new_ver=$(wget --no-check-certificate -qO- -t1 -T3 "https://raw.githubusercontent.com/P3TERX/doubi_backup/master/iptables-pf.sh"|grep 'sh_ver="'|awk -F "=" '{print $NF}'|sed 's/\"//g'|head -1) 247 | [[ -z ${sh_new_ver} ]] && echo -e "${Error} 无法链接到 Github !" && exit 0 248 | wget -N --no-check-certificate "https://raw.githubusercontent.com/P3TERX/doubi_backup/master/iptables-pf.sh" && chmod +x iptables-pf.sh 249 | echo -e "脚本已更新为最新版本[ ${sh_new_ver} ] !(注意:因为更新方式为直接覆盖当前运行的脚本,所以可能下面会提示一些报错,无视即可)" && exit 0 250 | } 251 | check_sys 252 | echo && echo -e " iptables 端口转发一键管理脚本 ${Red_font_prefix}[v${sh_ver}]${Font_color_suffix} 253 | -- Toyo | doub.io/wlzy-20 -- 254 | 255 | ${Green_font_prefix}0.${Font_color_suffix} 升级脚本 256 | ———————————— 257 | ${Green_font_prefix}1.${Font_color_suffix} 安装 iptables 258 | ${Green_font_prefix}2.${Font_color_suffix} 清空 iptables 端口转发 259 | ———————————— 260 | ${Green_font_prefix}3.${Font_color_suffix} 查看 iptables 端口转发 261 | ${Green_font_prefix}4.${Font_color_suffix} 添加 iptables 端口转发 262 | ${Green_font_prefix}5.${Font_color_suffix} 删除 iptables 端口转发 263 | ———————————— 264 | 注意:初次使用前请请务必执行 ${Green_font_prefix}1. 安装 iptables${Font_color_suffix}(不仅仅是安装)" && echo 265 | read -e -p " 请输入数字 [0-5]:" num 266 | case "$num" in 267 | 0) 268 | Update_Shell 269 | ;; 270 | 1) 271 | install_iptables 272 | ;; 273 | 2) 274 | Uninstall_forwarding 275 | ;; 276 | 3) 277 | View_forwarding 278 | ;; 279 | 4) 280 | Add_forwarding 281 | ;; 282 | 5) 283 | Del_forwarding 284 | ;; 285 | *) 286 | echo "请输入正确数字 [0-5]" 287 | ;; 288 | esac -------------------------------------------------------------------------------- /pserver.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin 3 | export PATH 4 | 5 | #================================================= 6 | # System Required: CentOS/Debian/Ubuntu 7 | # Description: Peerflix Server 8 | # Version: 1.1.0 9 | # Author: Toyo 10 | # Blog: https://doub.io/wlzy-13/ 11 | #================================================= 12 | 13 | sh_ver="1.1.0" 14 | node_ver="v8.11.3" 15 | node_file="/etc/node" 16 | ps_file="/etc/node/lib/node_modules/peerflix-server" 17 | conf_file="/etc/peerflix-server" 18 | ps_conf="/etc/peerflix-server/peerflix-server.conf" 19 | ps_log="/tmp/peerflix-server.log" 20 | bt_port="6881" 21 | 22 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 23 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" 24 | Error="${Red_font_prefix}[错误]${Font_color_suffix}" 25 | Tip="${Green_font_prefix}[注意]${Font_color_suffix}" 26 | 27 | check_root(){ 28 | [[ $EUID != 0 ]] && echo -e "${Error} 当前非ROOT账号(或没有ROOT权限),无法继续操作,请更换ROOT账号或使用 ${Green_background_prefix}sudo su${Font_color_suffix} 命令获取临时ROOT权限(执行后可能会提示输入当前账号的密码)。" && exit 1 29 | } 30 | #检查系统 31 | check_sys(){ 32 | if [[ -f /etc/redhat-release ]]; then 33 | release="centos" 34 | elif cat /etc/issue | grep -q -E -i "debian"; then 35 | release="debian" 36 | elif cat /etc/issue | grep -q -E -i "ubuntu"; then 37 | release="ubuntu" 38 | elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat"; then 39 | release="centos" 40 | elif cat /proc/version | grep -q -E -i "debian"; then 41 | release="debian" 42 | elif cat /proc/version | grep -q -E -i "ubuntu"; then 43 | release="ubuntu" 44 | elif cat /proc/version | grep -q -E -i "centos|red hat|redhat"; then 45 | release="centos" 46 | fi 47 | bit=$(uname -m) 48 | } 49 | check_installed_status(){ 50 | [[ ! -e ${ps_file} ]] && echo -e "${Error} Peerflix Server 没有安装,请检查 !" && exit 1 51 | } 52 | check_pid(){ 53 | PID=$(ps -ef | grep peerflix-server | grep -v grep |grep -v "init.d" |grep -v "service" |awk '{print $2}') 54 | } 55 | Download_ps(){ 56 | echo -e "${Info} 开始安装 node-js ..." 57 | if [[ ! -e ${node_file} ]]; then 58 | cd /tmp 59 | if [[ ${bit} == "x86_64" ]]; then 60 | node_name="node-${node_ver}-linux-x64" 61 | wget --no-check-certificate -O node.tar.xz "https://nodejs.org/dist/${node_ver}/node-${node_ver}-linux-x64.tar.xz" 62 | else 63 | node_name="node-${node_ver}-linux-x86" 64 | wget --no-check-certificate -O node.tar.xz "https://nodejs.org/dist/${node_ver}/node-${node_ver}-linux-x86.tar.xz" 65 | fi 66 | [[ ! -e "node.tar.xz" ]] && echo -e "${Error} Peerflix Server 压缩包下载失败 !" && Download_shanhou 0 67 | xz -d node.tar.xz 68 | [[ ! -e "node.tar" ]] && echo -e "${Error} Peerflix Server 解压失败(可能是 压缩包损坏 或者 没有安装 XZ) !" && Download_shanhou 1 69 | tar -xvf "node.tar" -C "/etc" 70 | [[ ! -e "node.tar" ]] && echo -e "${Error} Peerflix Server 解压失败(可能是 压缩包损坏 或者 没有安装 Tar) !" && Download_shanhou 2 71 | mv "/etc/${node_name}" ${node_file} 72 | [[ ! -e "${node_file}" ]] && echo -e "${Error} Peerflix Server 文件夹重命名失败!" && Download_shanhou 4 73 | rm -rf "/tmp/node.tar.xz" 74 | rm -rf "/tmp/node.tar" 75 | ln -s ${node_file}/bin/node /usr/local/bin/node 76 | ln -s ${node_file}/bin/npm /usr/local/bin/npm 77 | echo -e "${Info} node-js 安装完成,开始安装 peerflix-server ..." 78 | else 79 | echo -e "${Info} node-js 已安装,开始安装 peerflix-server ..." 80 | fi 81 | 82 | npm install -g peerflix-server 83 | if [[ ! -e ${ps_file} ]]; then 84 | echo -e "${Error} Peerflix Server 安装失败,请检查 !" && exit 1 85 | else 86 | echo -e "${Info} Peerflix Server 安装成功,继续..." 87 | fi 88 | } 89 | Download_shanhou(){ 90 | if [[ $1 == 0 ]]; then 91 | rm -rf ${conf_file} 92 | elif [[ $1 == 1 ]]; then 93 | rm -rf ${conf_file} 94 | rm -rf "/tmp/node.tar.xz" 95 | elif [[ $1 == 2 ]]; then 96 | rm -rf ${conf_file} 97 | rm -rf "/tmp/node.tar.xz" 98 | rm -rf "/tmp/node.tar" 99 | elif [[ $1 == 3 ]]; then 100 | rm -rf ${conf_file} 101 | rm -rf "/tmp/node.tar.xz" 102 | rm -rf "/tmp/node.tar" 103 | rm -rf "/etc/node-${node_ver}-linux-x64" 104 | elif [[ $1 == 4 ]]; then 105 | rm -rf ${conf_file} 106 | rm -rf "/tmp/node.tar.xz" 107 | rm -rf "/tmp/node.tar" 108 | rm -rf "/etc/node-${node_ver}-linux-x86" 109 | fi 110 | exit 1 111 | } 112 | Service_ps(){ 113 | if [[ ${release} = "centos" ]]; then 114 | if ! wget --no-check-certificate "https://raw.githubusercontent.com/P3TERX/doubi_backup/master/service/pserver_centos" -O /etc/init.d/pserver; then 115 | echo -e "${Error} Peerflix Server服务 管理脚本下载失败 !" && exit 1 116 | fi 117 | chmod +x /etc/init.d/pserver 118 | chkconfig --add pserver 119 | chkconfig pserver on 120 | else 121 | if ! wget --no-check-certificate "https://raw.githubusercontent.com/P3TERX/doubi_backup/master/service/pserver_debian" -O /etc/init.d/pserver; then 122 | echo -e "${Error} Peerflix Server服务 管理脚本下载失败 !" && exit 1 123 | fi 124 | chmod +x /etc/init.d/pserver 125 | update-rc.d -f pserver defaults 126 | fi 127 | echo -e "${Info} Peerflix Server服务 管理脚本下载完成 !" 128 | } 129 | Installation_dependency(){ 130 | xz_ver=$(xz -V) 131 | tar_ver=$(tar --version) 132 | [[ -z ${xz_ver} ]] && pack_name="xz " 133 | [[ -z ${tar_ver} ]] && pack_name="${pack_name}tar" 134 | if [[ ! -z ${pack_name} ]]; then 135 | if [[ ${release} == "centos" ]]; then 136 | yum update 137 | yum install -y ${pack_name} 138 | else 139 | apt-get update 140 | apt-get install -y ${pack_name} 141 | fi 142 | fi 143 | mkdir "${conf_file}" 144 | } 145 | Write_config(){ 146 | echo -e "port = ${ps_port}" > ${ps_conf} 147 | } 148 | Read_config(){ 149 | [[ ! -e ${ps_conf} ]] && echo -e "${Error} Peerflix Server 配置文件不存在 !" && exit 1 150 | port=`cat ${ps_conf}|grep "port = "|awk -F "port = " '{print $NF}'` 151 | } 152 | Set_port(){ 153 | while true 154 | do 155 | echo -e "请输入 Peerflix Server 监听端口 [1-65535](如果是绑定的域名,那么建议80端口)" 156 | read -e -p "(默认端口: 9000):" ps_port 157 | [[ -z "${ps_port}" ]] && ps_port="9000" 158 | echo $((${ps_port}+0)) &>/dev/null 159 | if [[ $? -eq 0 ]]; then 160 | if [[ ${ps_port} -ge 1 ]] && [[ ${ps_port} -le 65535 ]]; then 161 | echo && echo "========================" 162 | echo -e " 端口 : ${Red_background_prefix} ${ps_port} ${Font_color_suffix}" 163 | echo "========================" && echo 164 | break 165 | else 166 | echo "输入错误, 请输入正确的端口。" 167 | fi 168 | else 169 | echo "输入错误, 请输入正确的端口。" 170 | fi 171 | done 172 | } 173 | Set_ps(){ 174 | check_installed_status 175 | Set_port 176 | Read_config 177 | Del_iptables 178 | Write_config 179 | Add_iptables 180 | Save_iptables 181 | Restart_ps 182 | } 183 | Install_ps(){ 184 | check_root 185 | [[ -e ${ps_file} ]] && echo -e "${Error} 检测到 Peerflix Server 已安装 !" && exit 1 186 | check_sys 187 | echo -e "${Info} 开始设置 用户配置..." 188 | Set_port 189 | echo -e "${Info} 开始安装/配置 依赖..." 190 | Installation_dependency 191 | echo -e "${Info} 开始下载/安装..." 192 | Download_ps 193 | echo -e "${Info} 开始下载/安装 服务脚本(init)..." 194 | Service_ps 195 | echo -e "${Info} 开始写入 配置文件..." 196 | Write_config 197 | echo -e "${Info} 开始设置 iptables防火墙..." 198 | Set_iptables 199 | echo -e "${Info} 开始添加 iptables防火墙规则..." 200 | Add_iptables 201 | echo -e "${Info} 开始保存 iptables防火墙规则..." 202 | Save_iptables 203 | echo -e "${Info} 所有步骤 安装完毕,开始启动..." 204 | Start_ps 205 | } 206 | Start_ps(){ 207 | check_installed_status 208 | check_pid 209 | [[ ! -z ${PID} ]] && echo -e "${Error} Peerflix Server 正在运行,请检查 !" && exit 1 210 | /etc/init.d/pserver start 211 | } 212 | Stop_ps(){ 213 | check_installed_status 214 | check_pid 215 | [[ -z ${PID} ]] && echo -e "${Error} Peerflix Server 没有运行,请检查 !" && exit 1 216 | /etc/init.d/pserver stop 217 | } 218 | Restart_ps(){ 219 | check_installed_status 220 | check_pid 221 | [[ ! -z ${PID} ]] && /etc/init.d/pserver stop 222 | /etc/init.d/pserver start 223 | } 224 | Log_ps(){ 225 | [[ ! -e "${ps_log}" ]] && echo -e "${Error} Peerflix Server 日志文件不存在 !" && exit 1 226 | echo && echo -e "${Tip} 按 ${Red_font_prefix}Ctrl+C${Font_color_suffix} 终止查看日志" && echo -e "如果需要查看完整日志内容,请用 ${Red_font_prefix}cat ${ps_log}${Font_color_suffix} 命令。" && echo 227 | tail -f "${ps_log}" 228 | } 229 | Uninstall_ps(){ 230 | check_installed_status 231 | echo "确定要卸载 Peerflix Server ? (y/N)" 232 | echo 233 | read -e -p "(默认: n):" unyn 234 | [[ -z ${unyn} ]] && unyn="n" 235 | if [[ ${unyn} == [Yy] ]]; then 236 | check_pid 237 | [[ ! -z $PID ]] && kill -9 ${PID} 238 | port=`cat ${ps_conf}|grep "port = "|awk -F "port = " '{print $NF}'` 239 | Del_iptables 240 | 241 | rm -rf /usr/local/bin/node 242 | rm -rf /usr/local/bin/npm 243 | rm -rf ${node_file} 244 | rm -rf ${conf_file} 245 | rm -rf /etc/init.d/pserver 246 | if [[ ${release} = "centos" ]]; then 247 | chkconfig --del pserver 248 | else 249 | update-rc.d -f pserver remove 250 | fi 251 | echo && echo "Peerflix Server 卸载完成 !" && echo 252 | else 253 | echo && echo "卸载已取消..." && echo 254 | fi 255 | } 256 | View_ps(){ 257 | check_installed_status 258 | Read_config 259 | ip=$(wget -qO- -t1 -T2 ipinfo.io/ip) 260 | if [[ -z "${ip}" ]]; then 261 | ip=$(wget -qO- -t1 -T2 api.ip.sb/ip) 262 | if [[ -z "${ip}" ]]; then 263 | ip=$(wget -qO- -t1 -T2 members.3322.org/dyndns/getip) 264 | if [[ -z "${ip}" ]]; then 265 | ip="VPS_IP" 266 | fi 267 | fi 268 | fi 269 | clear && echo "————————————————" && echo 270 | echo -e " Peerflix Server 信息 :" && echo 271 | echo -e " 地址\t: ${Green_font_prefix}http://${ip}:${port}${Font_color_suffix}" 272 | echo && echo "————————————————" 273 | } 274 | Add_iptables(){ 275 | iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport ${ps_port} -j ACCEPT 276 | iptables -I INPUT -m state --state NEW -m udp -p udp --dport ${ps_port} -j ACCEPT 277 | iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport ${bt_port} -j ACCEPT 278 | iptables -I INPUT -m state --state NEW -m udp -p udp --dport ${bt_port} -j ACCEPT 279 | iptables -I OUTPUT -m state --state NEW -m tcp -p tcp --dport ${bt_port} -j ACCEPT 280 | iptables -I OUTPUT -m state --state NEW -m udp -p udp --dport ${bt_port} -j ACCEPT 281 | } 282 | Del_iptables(){ 283 | iptables -D INPUT -m state --state NEW -m tcp -p tcp --dport ${port} -j ACCEPT 284 | iptables -D INPUT -m state --state NEW -m udp -p udp --dport ${port} -j ACCEPT 285 | iptables -D INPUT -m state --state NEW -m tcp -p tcp --dport ${bt_port} -j ACCEPT 286 | iptables -D INPUT -m state --state NEW -m udp -p udp --dport ${bt_port} -j ACCEPT 287 | iptables -D OUTPUT -m state --state NEW -m tcp -p tcp --dport ${bt_port} -j ACCEPT 288 | iptables -D OUTPUT -m state --state NEW -m udp -p udp --dport ${bt_port} -j ACCEPT 289 | } 290 | Save_iptables(){ 291 | if [[ ${release} == "centos" ]]; then 292 | service iptables save 293 | else 294 | iptables-save > /etc/iptables.up.rules 295 | fi 296 | } 297 | Set_iptables(){ 298 | if [[ ${release} == "centos" ]]; then 299 | service iptables save 300 | chkconfig --level 2345 iptables on 301 | else 302 | iptables-save > /etc/iptables.up.rules 303 | echo -e '#!/bin/bash\n/sbin/iptables-restore < /etc/iptables.up.rules' > /etc/network/if-pre-up.d/iptables 304 | chmod +x /etc/network/if-pre-up.d/iptables 305 | fi 306 | } 307 | Update_Shell(){ 308 | sh_new_ver=$(wget --no-check-certificate -qO- -t1 -T3 "https://raw.githubusercontent.com/P3TERX/doubi_backup/master/pserver.sh"|grep 'sh_ver="'|awk -F "=" '{print $NF}'|sed 's/\"//g'|head -1) && sh_new_type="github" 309 | [[ -z ${sh_new_ver} ]] && echo -e "${Error} 无法链接到 Github !" && exit 0 310 | if [[ -e "/etc/init.d/pserver" ]]; then 311 | rm -rf /etc/init.d/pserver 312 | Service_ps 313 | fi 314 | wget -N --no-check-certificate "https://raw.githubusercontent.com/P3TERX/doubi_backup/master/pserver.sh" && chmod +x pserver.sh 315 | echo -e "脚本已更新为最新版本[ ${sh_new_ver} ] !(注意:因为更新方式为直接覆盖当前运行的脚本,所以可能下面会提示一些报错,无视即可)" && exit 0 316 | } 317 | echo && echo -e " Peerflix Server 一键管理脚本 ${Red_font_prefix}[v${sh_ver}]${Font_color_suffix} 318 | ---- Toyo | doub.io/wlzy-13/ ---- 319 | 320 | ${Green_font_prefix}0.${Font_color_suffix} 升级脚本 321 | 322 | ${Green_font_prefix}1.${Font_color_suffix} 安装 Peerflix Server 323 | ${Green_font_prefix}2.${Font_color_suffix} 卸载 Peerflix Server 324 | ———————————— 325 | ${Green_font_prefix}3.${Font_color_suffix} 启动 Peerflix Server 326 | ${Green_font_prefix}4.${Font_color_suffix} 停止 Peerflix Server 327 | ${Green_font_prefix}5.${Font_color_suffix} 重启 Peerflix Server 328 | ———————————— 329 | ${Green_font_prefix}6.${Font_color_suffix} 设置 Peerflix Server 端口 330 | ${Green_font_prefix}7.${Font_color_suffix} 查看 Peerflix Server 信息 331 | ${Green_font_prefix}8.${Font_color_suffix} 查看 Peerflix Server 日志 332 | ————————————" && echo 333 | if [[ -e ${ps_file} ]]; then 334 | check_pid 335 | if [[ ! -z "${PID}" ]]; then 336 | echo -e " 当前状态: ${Green_font_prefix}已安装${Font_color_suffix} 并 ${Green_font_prefix}已启动${Font_color_suffix}" 337 | else 338 | echo -e " 当前状态: ${Green_font_prefix}已安装${Font_color_suffix} 但 ${Red_font_prefix}未启动${Font_color_suffix}" 339 | fi 340 | else 341 | echo -e " 当前状态: ${Red_font_prefix}未安装${Font_color_suffix}" 342 | fi 343 | echo 344 | read -e -p " 请输入数字 [0-8]:" num 345 | case "$num" in 346 | 0) 347 | Update_Shell 348 | ;; 349 | 1) 350 | Install_ps 351 | ;; 352 | 2) 353 | Uninstall_ps 354 | ;; 355 | 3) 356 | Start_ps 357 | ;; 358 | 4) 359 | Stop_ps 360 | ;; 361 | 5) 362 | Restart_ps 363 | ;; 364 | 6) 365 | Set_ps 366 | ;; 367 | 7) 368 | View_ps 369 | ;; 370 | 8) 371 | Log_ps 372 | ;; 373 | *) 374 | echo "请输入正确数字 [0-8]" 375 | ;; 376 | esac -------------------------------------------------------------------------------- /socat.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin 3 | export PATH 4 | 5 | #================================================= 6 | # System Required: Debian/Ubuntu 7 | # Description: Socat 8 | # Version: 1.0.5 9 | # Author: Toyo 10 | # Blog: https://doub.io/wlzy-18/ 11 | #================================================= 12 | 13 | sh_ver="1.0.5" 14 | socat_file="/usr/bin/socat" 15 | socat_log_file="/tmp/socat.log" 16 | 17 | Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m" 18 | Info="${Green_font_prefix}[信息]${Font_color_suffix}" && Error="${Red_font_prefix}[错误]${Font_color_suffix}" && Tip="${Green_font_prefix}[注意]${Font_color_suffix}" 19 | 20 | Save_iptables(){ 21 | iptables-save > /etc/iptables.up.rules 22 | } 23 | Set_iptables(){ 24 | iptables-save > /etc/iptables.up.rules 25 | echo -e '#!/bin/bash\n/sbin/iptables-restore < /etc/iptables.up.rules' > /etc/network/if-pre-up.d/iptables 26 | chmod +x /etc/network/if-pre-up.d/iptables 27 | } 28 | check_socat(){ 29 | [[ ! -e ${socat_file} ]] && echo -e "${Error} 没有安装Socat,请检查 !" && exit 1 30 | } 31 | check_sys(){ 32 | if [[ -f /etc/redhat-release ]]; then 33 | release="centos" 34 | elif cat /etc/issue | grep -q -E -i "debian"; then 35 | release="debian" 36 | elif cat /etc/issue | grep -q -E -i "ubuntu"; then 37 | release="ubuntu" 38 | elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat"; then 39 | release="centos" 40 | elif cat /proc/version | grep -q -E -i "debian"; then 41 | release="debian" 42 | elif cat /proc/version | grep -q -E -i "ubuntu"; then 43 | release="ubuntu" 44 | elif cat /proc/version | grep -q -E -i "centos|red hat|redhat"; then 45 | release="centos" 46 | fi 47 | #bit=`uname -m` 48 | } 49 | installSocat(){ 50 | [[ -e ${socat_file} ]] && echo -e "${Error} 已经安装Socat,请检查 !" && exit 1 51 | apt-get update 52 | apt-get install -y socat 53 | Set_iptables 54 | chmod +x /etc/rc.local 55 | # echo "nameserver 8.8.8.8" > /etc/resolv.conf 56 | # echo "nameserver 8.8.4.4" >> /etc/resolv.conf 57 | socat_exist=`socat -h` 58 | if [[ ! -e ${socat_file} ]]; then 59 | echo -e "${Error} 安装Socat失败,请检查 !" && exit 1 60 | else 61 | echo -e "${Info} Socat 安装完成 !" 62 | fi 63 | } 64 | addSocat(){ 65 | # 判断是否安装Socat 66 | check_socat 67 | # 设置本地监听端口 68 | while true 69 | do 70 | echo -e "请输入 Socat 的 本地监听端口 [1-65535]" 71 | read -e -p "(默认端口: 23333):" Socatport 72 | [[ -z "$Socatport" ]] && Socatport="23333" 73 | echo $((${Socatport}+0)) &>/dev/null 74 | if [[ $? -eq 0 ]]; then 75 | if [[ ${Socatport} -ge 1 ]] && [[ ${Socatport} -le 65535 ]]; then 76 | echo 77 | echo "——————————————————————————————" 78 | echo -e " 本地监听端口 : ${Red_background_prefix} ${Socatport} ${Font_color_suffix}" 79 | echo "——————————————————————————————" 80 | echo 81 | break 82 | else 83 | echo -e "${Error} 请输入正确的数字 !" 84 | fi 85 | else 86 | echo -e "${Error} 请输入正确的数字 !" 87 | fi 88 | done 89 | # 设置欲转发端口 90 | while true 91 | do 92 | echo -e "请输入 Socat 远程被转发 端口 [1-65535]" 93 | read -e -p "(默认端口: ${Socatport}):" Socatport1 94 | [[ -z "$Socatport1" ]] && Socatport1=${Socatport} 95 | echo $((${Socatport1}+0)) &>/dev/null 96 | if [[ $? -eq 0 ]]; then 97 | if [[ ${Socatport1} -ge 1 ]] && [[ ${Socatport1} -le 65535 ]]; then 98 | echo 99 | echo "——————————————————————————————" 100 | echo -e " 远程转发端口 : ${Red_background_prefix} ${Socatport1} ${Font_color_suffix}" 101 | echo "——————————————————————————————" 102 | echo 103 | break 104 | else 105 | echo -e "${Error} 请输入正确的数字 !" 106 | fi 107 | else 108 | echo -e "${Error} 请输入正确的数字 !" 109 | fi 110 | done 111 | # 设置欲转发 IP 112 | read -e -p "请输入 Socat 远程被转发 IP:" socatip 113 | [[ -z "${socatip}" ]] && echo "取消..." && exit 1 114 | echo 115 | echo "——————————————————————————————" 116 | echo -e " 远程转发 IP : ${Red_background_prefix} ${socatip} ${Font_color_suffix}" 117 | echo "——————————————————————————————" 118 | echo 119 | #设置 转发类型 120 | echo "请输入数字 来选择 Socat 转发类型:" 121 | echo "1. TCP" 122 | echo "2. UDP" 123 | echo "3. TCP+UDP" 124 | echo 125 | read -e -p "(默认: TCP+UDP):" socattype_num 126 | [[ -z "${socattype_num}" ]] && socattype_num="3" 127 | if [[ ${socattype_num} = "1" ]]; then 128 | socattype="TCP" 129 | elif [[ ${socattype_num} = "2" ]]; then 130 | socattype="UDP" 131 | elif [[ ${socattype_num} = "3" ]]; then 132 | socattype="TCP+UDP" 133 | else 134 | socattype="TCP+UDP" 135 | fi 136 | #最后确认 137 | echo 138 | echo "——————————————————————————————" 139 | echo " 请检查 Socat 配置是否有误 !" 140 | echo 141 | echo -e " 本地监听端口\t : ${Red_background_prefix} ${Socatport} ${Font_color_suffix}" 142 | echo -e " 远程转发 IP\t : ${Red_background_prefix} ${socatip} ${Font_color_suffix}" 143 | echo -e " 远程转发端口\t : ${Red_background_prefix} ${Socatport1} ${Font_color_suffix}" 144 | echo -e " 转发类型\t : ${Red_background_prefix} ${socattype} ${Font_color_suffix}" 145 | echo "——————————————————————————————" 146 | echo 147 | read -e -p "请按任意键继续,如有配置错误请使用 Ctrl+C 退出。" var 148 | startSocat 149 | # 获取IP 150 | ip=`wget -qO- -t1 -T2 ipinfo.io/ip` 151 | [[ -z $ip ]] && ip="ip" 152 | clear 153 | echo 154 | echo "——————————————————————————————" 155 | echo " Socat 已启动 !" 156 | echo 157 | echo -e " 本地监听 IP\t : ${Red_background_prefix} ${ip} ${Font_color_suffix}" 158 | echo -e " 本地监听端口\t : ${Red_background_prefix} ${Socatport} ${Font_color_suffix}" 159 | echo 160 | echo -e " 远程转发 IP\t : ${Red_background_prefix} ${socatip} ${Font_color_suffix}" 161 | echo -e " 远程转发端口\t : ${Red_background_prefix} ${Socatport1} ${Font_color_suffix}" 162 | echo -e " 转发类型\t : ${Red_background_prefix} ${socattype} ${Font_color_suffix}" 163 | echo "——————————————————————————————" 164 | echo 165 | } 166 | startSocat(){ 167 | if [[ ${socattype} = "TCP" ]]; then 168 | runSocat "TCP4" 169 | sleep 2s 170 | PID=`ps -ef | grep "socat TCP4-LISTEN:${Socatport}" | grep -v grep | awk '{print $2}'` 171 | [[ -z $PID ]] && echo -e "${Error} Socat TCP 启动失败 !" && exit 1 172 | addLocal "TCP4" 173 | iptables -I INPUT -p tcp --dport ${Socatport} -j ACCEPT 174 | elif [[ ${socattype} = "UDP" ]]; then 175 | runSocat "UDP4" 176 | sleep 2s 177 | PID=`ps -ef | grep "socat UDP4-LISTEN:${Socatport}" | grep -v grep | awk '{print $2}'` 178 | [[ -z $PID ]] && echo -e "${Error} Socat UDP 启动失败 !" && exit 1 179 | addLocal "UDP4" 180 | iptables -I INPUT -p udp --dport ${Socatport} -j ACCEPT 181 | elif [[ ${socattype} = "TCP+UDP" ]]; then 182 | runSocat "TCP4" 183 | runSocat "UDP4" 184 | sleep 2s 185 | PID=`ps -ef | grep "socat TCP4-LISTEN:${Socatport}" | grep -v grep | awk '{print $2}'` 186 | PID1=`ps -ef | grep "socat UDP4-LISTEN:${Socatport}" | grep -v grep | awk '{print $2}'` 187 | if [[ -z $PID ]]; then 188 | echo -e "${Error} Socat TCP 启动失败 !" && exit 1 189 | else 190 | [[ -z $PID1 ]] && echo -e "${Error} Socat TCP 启动成功,但 UDP 启动失败 !" 191 | addLocal "TCP4" 192 | addLocal "UDP4" 193 | iptables -I INPUT -p tcp --dport ${Socatport} -j ACCEPT 194 | iptables -I INPUT -p udp --dport ${Socatport} -j ACCEPT 195 | fi 196 | fi 197 | Save_iptables 198 | } 199 | runSocat(){ 200 | nohup socat $1-LISTEN:${Socatport},reuseaddr,fork $1:${socatip}:${Socatport1} >> ${socat_log_file} 2>&1 & 201 | } 202 | addLocal(){ 203 | sed -i '/exit 0/d' /etc/rc.local 204 | echo -e "nohup socat $1-LISTEN:${Socatport},reuseaddr,fork $1:${socatip}:${Socatport1} >> ${socat_log_file} 2>&1 &" >> /etc/rc.local 205 | [[ ${release} == "debian" ]] && echo -e "exit 0" >> /etc/rc.local 206 | } 207 | # 查看Socat列表 208 | listSocat(){ 209 | # 检查是否安装 210 | check_socat 211 | socat_total=`ps -ef | grep socat | grep -v grep | grep -v "socat.sh" | wc -l` 212 | if [[ ${socat_total} = "0" ]]; then 213 | echo -e "${Error} 没有发现 Socat 进程运行,请检查 !" && exit 1 214 | fi 215 | socat_list_all="" 216 | for((integer = 1; integer <= ${socat_total}; integer++)) 217 | do 218 | socat_all=`ps -ef | grep socat | grep -v grep | grep -v "socat.sh"` 219 | socat_type=`echo -e "${socat_all}" | awk '{print $9}' | sed -n "${integer}p" | cut -c 1-4` 220 | socat_listen=`echo -e "${socat_all}" | awk '{print $9}' | sed -n "${integer}p" | sed -r 's/.*LISTEN:(.+),reuseaddr.*/\1/'` 221 | socat_fork=`echo -e "${socat_all}" | awk '{print $10}' | sed -n "${integer}p" | cut -c 6-26` 222 | socat_pid=`echo -e "${socat_all}" | awk '{print $2}' | sed -n "${integer}p"` 223 | socat_list_all=${socat_list_all}"${Green_font_prefix}"${integer}". ${Font_color_suffix}进程PID: ${Red_font_prefix}"${socat_pid}"${Font_color_suffix} 类型: ${Red_font_prefix}"${socat_type}"${Font_color_suffix} 监听端口: ${Green_font_prefix}"${socat_listen}"${Font_color_suffix} 转发IP和端口: ${Green_font_prefix}"${socat_fork}"${Font_color_suffix}\n" 224 | done 225 | echo 226 | echo -e "当前有${Green_background_prefix}" ${socat_total} "${Font_color_suffix}个Socat转发进程。" 227 | echo -e ${socat_list_all} 228 | } 229 | delSocat(){ 230 | # 检查是否安装 231 | check_socat 232 | # 判断进程是否存在 233 | PID=`ps -ef | grep socat | grep -v grep | grep -v "socat.sh" | awk '{print $2}'` 234 | if [[ -z $PID ]]; then 235 | echo -e "${Error} 没有发现 Socat 进程运行,请检查 !" && exit 1 236 | fi 237 | 238 | while true 239 | do 240 | # 列出 Socat 241 | listSocat 242 | read -e -p "请输入数字 来选择要终止的 Socat 进程:" stopsocat 243 | [[ -z "${stopsocat}" ]] && stopsocat="0" 244 | echo $((${stopsocat}+0)) &>/dev/null 245 | if [[ $? -eq 0 ]]; then 246 | if [[ ${stopsocat} -ge 1 ]] && [[ ${stopsocat} -le ${socat_total} ]]; then 247 | # 删除开机启动 248 | socat_del_rc1=`ps -ef | grep socat | grep -v grep | grep -v "socat.sh" | awk '{print $8}' | sed -n "${stopsocat}p"` 249 | socat_del_rc2=`ps -ef | grep socat | grep -v grep | grep -v "socat.sh" | awk '{print $9}' | sed -n "${stopsocat}p"` 250 | socat_del_rc3=`ps -ef | grep socat | grep -v grep | grep -v "socat.sh" | awk '{print $10}' | sed -n "${stopsocat}p"` 251 | socat_del_rc4=${socat_del_rc1}" "${socat_del_rc2}" "${socat_del_rc3} 252 | #echo ${socat_del_rc4} 253 | sed -i "/${socat_del_rc4}/d" /etc/rc.local 254 | # 删除防火墙规则 255 | socat_listen=`ps -ef | grep socat | grep -v grep | grep -v "socat.sh" | awk '{print $9}' | sed -n "${stopsocat}p" | sed -r 's/.*LISTEN:(.+),reuseaddr.*/\1/'` 256 | socat_type=`ps -ef | grep socat | grep -v grep | grep -v "socat.sh" | awk '{print $9}' | sed -n "${stopsocat}p" | cut -c 1-4` 257 | if [[ ${socat_type} = "TCP4" ]]; then 258 | iptables -D INPUT -p tcp --dport ${socat_listen} -j ACCEPT 259 | else 260 | iptables -D INPUT -p udp --dport ${socat_listen} -j ACCEPT 261 | fi 262 | Save_iptables 263 | socat_total=`ps -ef | grep socat | grep -v grep | grep -v "socat.sh" | wc -l` 264 | PID=`ps -ef | grep socat | grep -v grep | grep -v "socat.sh" | awk '{print $2}' | sed -n "${stopsocat}p"` 265 | kill -2 ${PID} 266 | sleep 2s 267 | socat_total1=$((${socat_total}-1)) 268 | socat_total=`ps -ef | grep socat | grep -v grep | grep -v "socat.sh" | wc -l` 269 | if [[ ${socat_total} != ${socat_total1} ]]; then 270 | echo -e "${Error} Socat 停止失败 !" && exit 1 271 | else 272 | echo && echo " Socat 已停止 !" && echo 273 | fi 274 | break 275 | else 276 | echo -e "${Error} 请输入正确的数字 !" 277 | fi 278 | else 279 | echo "取消..." && exit 1 280 | fi 281 | done 282 | } 283 | # 查看日志 284 | tailSocat(){ 285 | [[ ! -e ${socat_log_file} ]] && echo -e "${Error} Socat 日志文件不存在 !" && exit 1 286 | echo && echo -e "${Tip} 按 ${Red_font_prefix}Ctrl+C${Font_color_suffix} 终止查看日志" && echo -e "如果需要查看完整日志内容,请用 ${Red_font_prefix}cat ${socat_log_file}${Font_color_suffix} 命令。" && echo 287 | tail -f ${socat_log_file} 288 | } 289 | uninstallSocat(){ 290 | check_socat 291 | echo "确定要卸载 Socat ? [y/N]" 292 | read -e -p "(默认: n):" unyn 293 | [[ -z ${unyn} ]] && unyn="n" 294 | if [[ ${unyn} == [Yy] ]]; then 295 | PID=$(ps -ef | grep "socat" | grep -v grep | grep -v ".sh" |awk '{print $2}') 296 | [[ ! -z "${PID}" ]] && kill -9 "${PID}" 297 | apt-get remove --purge socat -y 298 | sed -i "/socat/d" /etc/rc.local 299 | [[ -e ${socat_file} ]] && echo -e "${Error} Socat 卸载失败,请检查 !" && exit 1 300 | echo && echo -e "${Info} Socat 已卸载 !" && echo 301 | else 302 | echo && echo "卸载已取消..." && echo 303 | fi 304 | } 305 | Update_Shell(){ 306 | sh_new_ver=$(wget --no-check-certificate -qO- -t1 -T3 "https://raw.githubusercontent.com/P3TERX/doubi_backup/master/socat.sh"|grep 'sh_ver="'|awk -F "=" '{print $NF}'|sed 's/\"//g'|head -1) && sh_new_type="github" 307 | [[ -z ${sh_new_ver} ]] && echo -e "${Error} 无法链接到 Github !" && exit 0 308 | wget -N --no-check-certificate "https://raw.githubusercontent.com/P3TERX/doubi_backup/master/socat.sh" && chmod +x socat.sh 309 | echo -e "脚本已更新为最新版本[ ${sh_new_ver} ] !(注意:因为更新方式为直接覆盖当前运行的脚本,所以可能下面会提示一些报错,无视即可)" && exit 0 310 | } 311 | check_sys 312 | [[ ${release} != "debian" ]] && [[ ${release} != "ubuntu" ]] && echo -e "${Error} 本脚本不支持当前系统 ${release} !" && exit 1 313 | echo && echo -e " SoCat 一键管理脚本 ${Red_font_prefix}[v${sh_ver}]${Font_color_suffix} 314 | -- Toyo | doub.io/wlzy-18 -- 315 | 316 | ${Green_font_prefix}0.${Font_color_suffix} 升级脚本 317 | ———————————— 318 | ${Green_font_prefix}1.${Font_color_suffix} 安装 SoCat 319 | ${Green_font_prefix}2.${Font_color_suffix} 卸载 SoCat 320 | ———————————— 321 | ${Green_font_prefix}3.${Font_color_suffix} 新增 SoCat 322 | ${Green_font_prefix}4.${Font_color_suffix} 删除 SoCat 323 | ———————————— 324 | ${Green_font_prefix}5.${Font_color_suffix} 查看 SoCat 信息 325 | ${Green_font_prefix}6.${Font_color_suffix} 查看 SoCat 日志 326 | ————————————" && echo 327 | if [[ -e ${socat_file} ]]; then 328 | echo -e " 当前状态: ${Green_font_prefix}已安装${Font_color_suffix}" 329 | else 330 | echo -e " 当前状态: ${Red_font_prefix}未安装${Font_color_suffix}" 331 | fi 332 | echo 333 | read -e -p " 请输入数字 [0-9]:" num 334 | case "$num" in 335 | 0) 336 | Update_Shell 337 | ;; 338 | 1) 339 | installSocat 340 | ;; 341 | 2) 342 | uninstallSocat 343 | ;; 344 | 3) 345 | addSocat 346 | ;; 347 | 4) 348 | delSocat 349 | ;; 350 | 5) 351 | listSocat 352 | ;; 353 | 6) 354 | tailSocat 355 | ;; 356 | *) 357 | echo "请输入正确数字 [0-6]" 358 | ;; 359 | esac --------------------------------------------------------------------------------