From 65b84c227c3541786c4f00e625d84438d449af24 Mon Sep 17 00:00:00 2001 From: lcb815 <54450486+lcb815@users.noreply.github.com> Date: Thu, 29 Aug 2019 19:46:16 +0800 Subject: [PATCH] Add files via upload --- tcp.sh | 677 ++++++++++++++++++++++++++++++++ v2ray.sh | 1122 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1799 insertions(+) create mode 100644 tcp.sh create mode 100644 v2ray.sh diff --git a/tcp.sh b/tcp.sh new file mode 100644 index 0000000..e67380e --- /dev/null +++ b/tcp.sh @@ -0,0 +1,677 @@ +#!/usr/bin/env bash +PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin +export PATH + +#================================================= +# System Required: CentOS 6/7,Debian 8/9,Ubuntu 16+ +# Description: BBR+BBR魔改版+BBRplus+Lotserver +# Version: 1.3.2 +# Author: 千影,cx9208 +# Blog: https://www.94ish.me/ +#================================================= + +sh_ver="1.3.2" +github="raw.githubusercontent.com/chiakge/Linux-NetSpeed/master" + +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" +Info="${Green_font_prefix}[信息]${Font_color_suffix}" +Error="${Red_font_prefix}[错误]${Font_color_suffix}" +Tip="${Green_font_prefix}[注意]${Font_color_suffix}" + +#安装BBR内核 +installbbr(){ + kernel_version="4.11.8" + if [[ "${release}" == "centos" ]]; then + rpm --import http://${github}/bbr/${release}/RPM-GPG-KEY-elrepo.org + yum install -y http://${github}/bbr/${release}/${version}/${bit}/kernel-ml-${kernel_version}.rpm + yum remove -y kernel-headers + yum install -y http://${github}/bbr/${release}/${version}/${bit}/kernel-ml-headers-${kernel_version}.rpm + yum install -y http://${github}/bbr/${release}/${version}/${bit}/kernel-ml-devel-${kernel_version}.rpm + elif [[ "${release}" == "debian" || "${release}" == "ubuntu" ]]; then + mkdir bbr && cd bbr + wget http://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.0.0_1.0.1t-1+deb8u10_amd64.deb + wget -N --no-check-certificate http://${github}/bbr/debian-ubuntu/linux-headers-${kernel_version}-all.deb + wget -N --no-check-certificate http://${github}/bbr/debian-ubuntu/${bit}/linux-headers-${kernel_version}.deb + wget -N --no-check-certificate http://${github}/bbr/debian-ubuntu/${bit}/linux-image-${kernel_version}.deb + + dpkg -i libssl1.0.0_1.0.1t-1+deb8u10_amd64.deb + dpkg -i linux-headers-${kernel_version}-all.deb + dpkg -i linux-headers-${kernel_version}.deb + dpkg -i linux-image-${kernel_version}.deb + cd .. && rm -rf bbr + fi + detele_kernel + BBR_grub + echo -e "${Tip} 重启VPS后,请重新运行脚本开启${Red_font_prefix}BBR/BBR魔改版${Font_color_suffix}" + stty erase '^H' && read -p "需要重启VPS后,才能开启BBR/BBR魔改版,是否现在重启 ? [Y/n] :" yn + [ -z "${yn}" ] && yn="y" + if [[ $yn == [Yy] ]]; then + echo -e "${Info} VPS 重启中..." + reboot + fi +} + +#安装BBRplus内核 +installbbrplus(){ + kernel_version="4.14.129-bbrplus" + if [[ "${release}" == "centos" ]]; then + wget -N --no-check-certificate https://${github}/bbrplus/${release}/${version}/kernel-${kernel_version}.rpm + yum install -y kernel-${kernel_version}.rpm + rm -f kernel-${kernel_version}.rpm + kernel_version="4.14.129_bbrplus" #fix a bug + elif [[ "${release}" == "debian" || "${release}" == "ubuntu" ]]; then + mkdir bbrplus && cd bbrplus + wget -N --no-check-certificate http://${github}/bbrplus/debian-ubuntu/${bit}/linux-headers-${kernel_version}.deb + wget -N --no-check-certificate http://${github}/bbrplus/debian-ubuntu/${bit}/linux-image-${kernel_version}.deb + dpkg -i linux-headers-${kernel_version}.deb + dpkg -i linux-image-${kernel_version}.deb + cd .. && rm -rf bbrplus + fi + detele_kernel + BBR_grub + echo -e "${Tip} 重启VPS后,请重新运行脚本开启${Red_font_prefix}BBRplus${Font_color_suffix}" + stty erase '^H' && read -p "需要重启VPS后,才能开启BBRplus,是否现在重启 ? [Y/n] :" yn + [ -z "${yn}" ] && yn="y" + if [[ $yn == [Yy] ]]; then + echo -e "${Info} VPS 重启中..." + reboot + fi +} + +#安装Lotserver内核 +installlot(){ + if [[ "${release}" == "centos" ]]; then + rpm --import http://${github}/lotserver/${release}/RPM-GPG-KEY-elrepo.org + yum remove -y kernel-firmware + yum install -y http://${github}/lotserver/${release}/${version}/${bit}/kernel-firmware-${kernel_version}.rpm + yum install -y http://${github}/lotserver/${release}/${version}/${bit}/kernel-${kernel_version}.rpm + yum remove -y kernel-headers + yum install -y http://${github}/lotserver/${release}/${version}/${bit}/kernel-headers-${kernel_version}.rpm + yum install -y http://${github}/lotserver/${release}/${version}/${bit}/kernel-devel-${kernel_version}.rpm + elif [[ "${release}" == "ubuntu" ]]; then + bash <(wget --no-check-certificate -qO- "http://${github}/Debian_Kernel.sh") + elif [[ "${release}" == "debian" ]]; then + bash <(wget --no-check-certificate -qO- "http://${github}/Debian_Kernel.sh") + fi + detele_kernel + BBR_grub + echo -e "${Tip} 重启VPS后,请重新运行脚本开启${Red_font_prefix}Lotserver${Font_color_suffix}" + stty erase '^H' && read -p "需要重启VPS后,才能开启Lotserver,是否现在重启 ? [Y/n] :" yn + [ -z "${yn}" ] && yn="y" + if [[ $yn == [Yy] ]]; then + echo -e "${Info} VPS 重启中..." + reboot + fi +} + +#启用BBR +startbbr(){ + remove_all + echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf + echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf + sysctl -p + echo -e "${Info}BBR启动成功!" +} + +#启用BBRplus +startbbrplus(){ + remove_all + echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf + echo "net.ipv4.tcp_congestion_control=bbrplus" >> /etc/sysctl.conf + sysctl -p + echo -e "${Info}BBRplus启动成功!" +} + +#编译并启用BBR魔改 +startbbrmod(){ + remove_all + if [[ "${release}" == "centos" ]]; then + yum install -y make gcc + mkdir bbrmod && cd bbrmod + wget -N --no-check-certificate http://${github}/bbr/tcp_tsunami.c + echo "obj-m:=tcp_tsunami.o" > Makefile + make -C /lib/modules/$(uname -r)/build M=`pwd` modules CC=/usr/bin/gcc + chmod +x ./tcp_tsunami.ko + cp -rf ./tcp_tsunami.ko /lib/modules/$(uname -r)/kernel/net/ipv4 + insmod tcp_tsunami.ko + depmod -a + else + apt-get update + if [[ "${release}" == "ubuntu" && "${version}" = "14" ]]; then + apt-get -y install build-essential + apt-get -y install software-properties-common + add-apt-repository ppa:ubuntu-toolchain-r/test -y + apt-get update + fi + apt-get -y install make gcc + mkdir bbrmod && cd bbrmod + wget -N --no-check-certificate http://${github}/bbr/tcp_tsunami.c + echo "obj-m:=tcp_tsunami.o" > Makefile + ln -s /usr/bin/gcc /usr/bin/gcc-4.9 + make -C /lib/modules/$(uname -r)/build M=`pwd` modules CC=/usr/bin/gcc-4.9 + install tcp_tsunami.ko /lib/modules/$(uname -r)/kernel + cp -rf ./tcp_tsunami.ko /lib/modules/$(uname -r)/kernel/net/ipv4 + depmod -a + fi + + + echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf + echo "net.ipv4.tcp_congestion_control=tsunami" >> /etc/sysctl.conf + sysctl -p + cd .. && rm -rf bbrmod + echo -e "${Info}魔改版BBR启动成功!" +} + +#编译并启用BBR魔改 +startbbrmod_nanqinlang(){ + remove_all + if [[ "${release}" == "centos" ]]; then + yum install -y make gcc + mkdir bbrmod && cd bbrmod + wget -N --no-check-certificate https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/bbr/centos/tcp_nanqinlang.c + echo "obj-m := tcp_nanqinlang.o" > Makefile + make -C /lib/modules/$(uname -r)/build M=`pwd` modules CC=/usr/bin/gcc + chmod +x ./tcp_nanqinlang.ko + cp -rf ./tcp_nanqinlang.ko /lib/modules/$(uname -r)/kernel/net/ipv4 + insmod tcp_nanqinlang.ko + depmod -a + else + apt-get update + if [[ "${release}" == "ubuntu" && "${version}" = "14" ]]; then + apt-get -y install build-essential + apt-get -y install software-properties-common + add-apt-repository ppa:ubuntu-toolchain-r/test -y + apt-get update + fi + apt-get -y install make gcc-4.9 + mkdir bbrmod && cd bbrmod + wget -N --no-check-certificate https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/bbr/tcp_nanqinlang.c + echo "obj-m := tcp_nanqinlang.o" > Makefile + make -C /lib/modules/$(uname -r)/build M=`pwd` modules CC=/usr/bin/gcc-4.9 + install tcp_nanqinlang.ko /lib/modules/$(uname -r)/kernel + cp -rf ./tcp_nanqinlang.ko /lib/modules/$(uname -r)/kernel/net/ipv4 + depmod -a + fi + + + echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf + echo "net.ipv4.tcp_congestion_control=nanqinlang" >> /etc/sysctl.conf + sysctl -p + echo -e "${Info}魔改版BBR启动成功!" +} + +#启用Lotserver +startlotserver(){ + remove_all + if [[ "${release}" == "centos" ]]; then + yum install ethtool + else + apt-get update + apt-get install ethtool + fi + bash <(wget --no-check-certificate -qO- https://raw.githubusercontent.com/chiakge/lotServer/master/Install.sh) install + sed -i '/advinacc/d' /appex/etc/config + sed -i '/maxmode/d' /appex/etc/config + echo -e "advinacc=\"1\" +maxmode=\"1\"">>/appex/etc/config + /appex/bin/lotServer.sh restart + start_menu +} + +#卸载全部加速 +remove_all(){ + rm -rf bbrmod + sed -i '/net.core.default_qdisc/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_congestion_control/d' /etc/sysctl.conf + sed -i '/fs.file-max/d' /etc/sysctl.conf + sed -i '/net.core.rmem_max/d' /etc/sysctl.conf + sed -i '/net.core.wmem_max/d' /etc/sysctl.conf + sed -i '/net.core.rmem_default/d' /etc/sysctl.conf + sed -i '/net.core.wmem_default/d' /etc/sysctl.conf + sed -i '/net.core.netdev_max_backlog/d' /etc/sysctl.conf + sed -i '/net.core.somaxconn/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_tw_reuse/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_tw_recycle/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_fin_timeout/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_keepalive_time/d' /etc/sysctl.conf + sed -i '/net.ipv4.ip_local_port_range/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_max_syn_backlog/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_max_tw_buckets/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_rmem/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_wmem/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_mtu_probing/d' /etc/sysctl.conf + sed -i '/net.ipv4.ip_forward/d' /etc/sysctl.conf + sed -i '/fs.inotify.max_user_instances/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_fin_timeout/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_tw_reuse/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_max_syn_backlog/d' /etc/sysctl.conf + sed -i '/net.ipv4.ip_local_port_range/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_max_tw_buckets/d' /etc/sysctl.conf + sed -i '/net.ipv4.route.gc_timeout/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_synack_retries/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_syn_retries/d' /etc/sysctl.conf + sed -i '/net.core.somaxconn/d' /etc/sysctl.conf + sed -i '/net.core.netdev_max_backlog/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_timestamps/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_max_orphans/d' /etc/sysctl.conf + if [[ -e /appex/bin/lotServer.sh ]]; then + bash <(wget --no-check-certificate -qO- https://github.com/MoeClub/lotServer/raw/master/Install.sh) uninstall + fi + clear + echo -e "${Info}:清除加速完成。" + sleep 1s +} + +#优化系统配置 +optimizing_system(){ + sed -i '/fs.file-max/d' /etc/sysctl.conf + sed -i '/fs.inotify.max_user_instances/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_fin_timeout/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_tw_reuse/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_max_syn_backlog/d' /etc/sysctl.conf + sed -i '/net.ipv4.ip_local_port_range/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_max_tw_buckets/d' /etc/sysctl.conf + sed -i '/net.ipv4.route.gc_timeout/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_synack_retries/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_syn_retries/d' /etc/sysctl.conf + sed -i '/net.core.somaxconn/d' /etc/sysctl.conf + sed -i '/net.core.netdev_max_backlog/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_timestamps/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_max_orphans/d' /etc/sysctl.conf + sed -i '/net.ipv4.ip_forward/d' /etc/sysctl.conf + echo "fs.file-max = 1000000 +fs.inotify.max_user_instances = 8192 +net.ipv4.tcp_syncookies = 1 +net.ipv4.tcp_fin_timeout = 30 +net.ipv4.tcp_tw_reuse = 1 +net.ipv4.ip_local_port_range = 1024 65000 +net.ipv4.tcp_max_syn_backlog = 16384 +net.ipv4.tcp_max_tw_buckets = 6000 +net.ipv4.route.gc_timeout = 100 +net.ipv4.tcp_syn_retries = 1 +net.ipv4.tcp_synack_retries = 1 +net.core.somaxconn = 32768 +net.core.netdev_max_backlog = 32768 +net.ipv4.tcp_timestamps = 0 +net.ipv4.tcp_max_orphans = 32768 +# forward ipv4 +net.ipv4.ip_forward = 1">>/etc/sysctl.conf + sysctl -p + echo "* soft nofile 1000000 +* hard nofile 1000000">/etc/security/limits.conf + echo "ulimit -SHn 1000000">>/etc/profile + read -p "需要重启VPS后,才能生效系统优化配置,是否现在重启 ? [Y/n] :" yn + [ -z "${yn}" ] && yn="y" + if [[ $yn == [Yy] ]]; then + echo -e "${Info} VPS 重启中..." + reboot + fi +} +#更新脚本 +Update_Shell(){ + echo -e "当前版本为 [ ${sh_ver} ],开始检测最新版本..." + sh_new_ver=$(wget --no-check-certificate -qO- "http://${github}/tcp.sh"|grep 'sh_ver="'|awk -F "=" '{print $NF}'|sed 's/\"//g'|head -1) + [[ -z ${sh_new_ver} ]] && echo -e "${Error} 检测最新版本失败 !" && start_menu + if [[ ${sh_new_ver} != ${sh_ver} ]]; then + echo -e "发现新版本[ ${sh_new_ver} ],是否更新?[Y/n]" + read -p "(默认: y):" yn + [[ -z "${yn}" ]] && yn="y" + if [[ ${yn} == [Yy] ]]; then + wget -N --no-check-certificate http://${github}/tcp.sh && chmod +x tcp.sh + echo -e "脚本已更新为最新版本[ ${sh_new_ver} ] !" + else + echo && echo " 已取消..." && echo + fi + else + echo -e "当前已是最新版本[ ${sh_new_ver} ] !" + sleep 5s + fi +} + +#开始菜单 +start_menu(){ +clear +echo && echo -e " TCP加速 一键安装管理脚本 ${Red_font_prefix}[v${sh_ver}]${Font_color_suffix} + -- 就是爱生活 | 94ish.me -- + + ${Green_font_prefix}0.${Font_color_suffix} 升级脚本 +————————————内核管理———————————— + ${Green_font_prefix}1.${Font_color_suffix} 安装 BBR/BBR魔改版内核 + ${Green_font_prefix}2.${Font_color_suffix} 安装 BBRplus版内核 + ${Green_font_prefix}3.${Font_color_suffix} 安装 Lotserver(锐速)内核 +————————————加速管理———————————— + ${Green_font_prefix}4.${Font_color_suffix} 使用BBR加速 + ${Green_font_prefix}5.${Font_color_suffix} 使用BBR魔改版加速 + ${Green_font_prefix}6.${Font_color_suffix} 使用暴力BBR魔改版加速(不支持部分系统) + ${Green_font_prefix}7.${Font_color_suffix} 使用BBRplus版加速 + ${Green_font_prefix}8.${Font_color_suffix} 使用Lotserver(锐速)加速 +————————————杂项管理———————————— + ${Green_font_prefix}9.${Font_color_suffix} 卸载全部加速 + ${Green_font_prefix}10.${Font_color_suffix} 系统配置优化 + ${Green_font_prefix}11.${Font_color_suffix} 退出脚本 +————————————————————————————————" && echo + + check_status + if [[ ${kernel_status} == "noinstall" ]]; then + echo -e " 当前状态: ${Green_font_prefix}未安装${Font_color_suffix} 加速内核 ${Red_font_prefix}请先安装内核${Font_color_suffix}" + else + echo -e " 当前状态: ${Green_font_prefix}已安装${Font_color_suffix} ${_font_prefix}${kernel_status}${Font_color_suffix} 加速内核 , ${Green_font_prefix}${run_status}${Font_color_suffix}" + + fi +echo +read -p " 请输入数字 [0-11]:" num +case "$num" in + 0) + Update_Shell + ;; + 1) + check_sys_bbr + ;; + 2) + check_sys_bbrplus + ;; + 3) + check_sys_Lotsever + ;; + 4) + startbbr + ;; + 5) + startbbrmod + ;; + 6) + startbbrmod_nanqinlang + ;; + 7) + startbbrplus + ;; + 8) + startlotserver + ;; + 9) + remove_all + ;; + 10) + optimizing_system + ;; + 11) + exit 1 + ;; + *) + clear + echo -e "${Error}:请输入正确数字 [0-11]" + sleep 5s + start_menu + ;; +esac +} +#############内核管理组件############# + +#删除多余内核 +detele_kernel(){ + if [[ "${release}" == "centos" ]]; then + rpm_total=`rpm -qa | grep kernel | grep -v "${kernel_version}" | grep -v "noarch" | wc -l` + if [ "${rpm_total}" > "1" ]; then + echo -e "检测到 ${rpm_total} 个其余内核,开始卸载..." + for((integer = 1; integer <= ${rpm_total}; integer++)); do + rpm_del=`rpm -qa | grep kernel | grep -v "${kernel_version}" | grep -v "noarch" | head -${integer}` + echo -e "开始卸载 ${rpm_del} 内核..." + rpm --nodeps -e ${rpm_del} + echo -e "卸载 ${rpm_del} 内核卸载完成,继续..." + done + echo --nodeps -e "内核卸载完毕,继续..." + else + echo -e " 检测到 内核 数量不正确,请检查 !" && exit 1 + fi + elif [[ "${release}" == "debian" || "${release}" == "ubuntu" ]]; then + deb_total=`dpkg -l | grep linux-image | awk '{print $2}' | grep -v "${kernel_version}" | wc -l` + if [ "${deb_total}" > "1" ]; then + echo -e "检测到 ${deb_total} 个其余内核,开始卸载..." + for((integer = 1; integer <= ${deb_total}; integer++)); do + deb_del=`dpkg -l|grep linux-image | awk '{print $2}' | grep -v "${kernel_version}" | head -${integer}` + echo -e "开始卸载 ${deb_del} 内核..." + apt-get purge -y ${deb_del} + echo -e "卸载 ${deb_del} 内核卸载完成,继续..." + done + echo -e "内核卸载完毕,继续..." + else + echo -e " 检测到 内核 数量不正确,请检查 !" && exit 1 + fi + fi +} + +#更新引导 +BBR_grub(){ + if [[ "${release}" == "centos" ]]; then + if [[ ${version} = "6" ]]; then + if [ ! -f "/boot/grub/grub.conf" ]; then + echo -e "${Error} /boot/grub/grub.conf 找不到,请检查." + exit 1 + fi + sed -i 's/^default=.*/default=0/g' /boot/grub/grub.conf + elif [[ ${version} = "7" ]]; then + if [ ! -f "/boot/grub2/grub.cfg" ]; then + echo -e "${Error} /boot/grub2/grub.cfg 找不到,请检查." + exit 1 + fi + grub2-set-default 0 + fi + elif [[ "${release}" == "debian" || "${release}" == "ubuntu" ]]; then + /usr/sbin/update-grub + fi +} + +#############内核管理组件############# + + + +#############系统检测组件############# + +#检查系统 +check_sys(){ + if [[ -f /etc/redhat-release ]]; then + release="centos" + elif cat /etc/issue | grep -q -E -i "debian"; then + release="debian" + elif cat /etc/issue | grep -q -E -i "ubuntu"; then + release="ubuntu" + elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat"; then + release="centos" + elif cat /proc/version | grep -q -E -i "debian"; then + release="debian" + elif cat /proc/version | grep -q -E -i "ubuntu"; then + release="ubuntu" + elif cat /proc/version | grep -q -E -i "centos|red hat|redhat"; then + release="centos" + fi +} + +#检查Linux版本 +check_version(){ + if [[ -s /etc/redhat-release ]]; then + version=`grep -oE "[0-9.]+" /etc/redhat-release | cut -d . -f 1` + else + version=`grep -oE "[0-9.]+" /etc/issue | cut -d . -f 1` + fi + bit=`uname -m` + if [[ ${bit} = "x86_64" ]]; then + bit="x64" + else + bit="x32" + fi +} + +#检查安装bbr的系统要求 +check_sys_bbr(){ + check_version + if [[ "${release}" == "centos" ]]; then + if [[ ${version} -ge "6" ]]; then + installbbr + else + echo -e "${Error} BBR内核不支持当前系统 ${release} ${version} ${bit} !" && exit 1 + fi + elif [[ "${release}" == "debian" ]]; then + if [[ ${version} -ge "8" ]]; then + installbbr + else + echo -e "${Error} BBR内核不支持当前系统 ${release} ${version} ${bit} !" && exit 1 + fi + elif [[ "${release}" == "ubuntu" ]]; then + if [[ ${version} -ge "14" ]]; then + installbbr + else + echo -e "${Error} BBR内核不支持当前系统 ${release} ${version} ${bit} !" && exit 1 + fi + else + echo -e "${Error} BBR内核不支持当前系统 ${release} ${version} ${bit} !" && exit 1 + fi +} + +check_sys_bbrplus(){ + check_version + if [[ "${release}" == "centos" ]]; then + if [[ ${version} -ge "6" ]]; then + installbbrplus + else + echo -e "${Error} BBRplus内核不支持当前系统 ${release} ${version} ${bit} !" && exit 1 + fi + elif [[ "${release}" == "debian" ]]; then + if [[ ${version} -ge "8" ]]; then + installbbrplus + else + echo -e "${Error} BBRplus内核不支持当前系统 ${release} ${version} ${bit} !" && exit 1 + fi + elif [[ "${release}" == "ubuntu" ]]; then + if [[ ${version} -ge "14" ]]; then + installbbrplus + else + echo -e "${Error} BBRplus内核不支持当前系统 ${release} ${version} ${bit} !" && exit 1 + fi + else + echo -e "${Error} BBRplus内核不支持当前系统 ${release} ${version} ${bit} !" && exit 1 + fi +} + + +#检查安装Lotsever的系统要求 +check_sys_Lotsever(){ + check_version + if [[ "${release}" == "centos" ]]; then + if [[ ${version} == "6" ]]; then + kernel_version="2.6.32-504" + installlot + elif [[ ${version} == "7" ]]; then + yum -y install net-tools + kernel_version="3.10.0-327" + installlot + else + echo -e "${Error} Lotsever不支持当前系统 ${release} ${version} ${bit} !" && exit 1 + fi + elif [[ "${release}" == "debian" ]]; then + if [[ ${version} = "7" || ${version} = "8" ]]; then + if [[ ${bit} == "x64" ]]; then + kernel_version="3.16.0-4" + installlot + elif [[ ${bit} == "x32" ]]; then + kernel_version="3.2.0-4" + installlot + fi + elif [[ ${version} = "9" ]]; then + if [[ ${bit} == "x64" ]]; then + kernel_version="4.9.0-4" + installlot + fi + else + echo -e "${Error} Lotsever不支持当前系统 ${release} ${version} ${bit} !" && exit 1 + fi + elif [[ "${release}" == "ubuntu" ]]; then + if [[ ${version} -ge "12" ]]; then + if [[ ${bit} == "x64" ]]; then + kernel_version="4.4.0-47" + installlot + elif [[ ${bit} == "x32" ]]; then + kernel_version="3.13.0-29" + installlot + fi + else + echo -e "${Error} Lotsever不支持当前系统 ${release} ${version} ${bit} !" && exit 1 + fi + else + echo -e "${Error} Lotsever不支持当前系统 ${release} ${version} ${bit} !" && exit 1 + fi +} + +check_status(){ + kernel_version=`uname -r | awk -F "-" '{print $1}'` + kernel_version_full=`uname -r` + if [[ ${kernel_version_full} = "4.14.129-bbrplus" ]]; then + kernel_status="BBRplus" + elif [[ ${kernel_version} = "3.10.0" || ${kernel_version} = "3.16.0" || ${kernel_version} = "3.2.0" || ${kernel_version} = "4.4.0" || ${kernel_version} = "3.13.0" || ${kernel_version} = "2.6.32" || ${kernel_version} = "4.9.0" ]]; then + kernel_status="Lotserver" + elif [[ `echo ${kernel_version} | awk -F'.' '{print $1}'` == "4" ]] && [[ `echo ${kernel_version} | awk -F'.' '{print $2}'` -ge 9 ]] || [[ `echo ${kernel_version} | awk -F'.' '{print $1}'` == "5" ]]; then + kernel_status="BBR" + else + kernel_status="noinstall" + fi + + if [[ ${kernel_status} == "Lotserver" ]]; then + if [[ -e /appex/bin/lotServer.sh ]]; then + run_status=`bash /appex/bin/lotServer.sh status | grep "LotServer" | awk '{print $3}'` + if [[ ${run_status} = "running!" ]]; then + run_status="启动成功" + else + run_status="启动失败" + fi + else + run_status="未安装加速模块" + fi + elif [[ ${kernel_status} == "BBR" ]]; then + run_status=`grep "net.ipv4.tcp_congestion_control" /etc/sysctl.conf | awk -F "=" '{print $2}'` + if [[ ${run_status} == "bbr" ]]; then + run_status=`lsmod | grep "bbr" | awk '{print $1}'` + if [[ ${run_status} == "tcp_bbr" ]]; then + run_status="BBR启动成功" + else + run_status="BBR启动失败" + fi + elif [[ ${run_status} == "tsunami" ]]; then + run_status=`lsmod | grep "tsunami" | awk '{print $1}'` + if [[ ${run_status} == "tcp_tsunami" ]]; then + run_status="BBR魔改版启动成功" + else + run_status="BBR魔改版启动失败" + fi + elif [[ ${run_status} == "nanqinlang" ]]; then + run_status=`lsmod | grep "nanqinlang" | awk '{print $1}'` + if [[ ${run_status} == "tcp_nanqinlang" ]]; then + run_status="暴力BBR魔改版启动成功" + else + run_status="暴力BBR魔改版启动失败" + fi + else + run_status="未安装加速模块" + fi + elif [[ ${kernel_status} == "BBRplus" ]]; then + run_status=`grep "net.ipv4.tcp_congestion_control" /etc/sysctl.conf | awk -F "=" '{print $2}'` + if [[ ${run_status} == "bbrplus" ]]; then + run_status=`lsmod | grep "bbrplus" | awk '{print $1}'` + if [[ ${run_status} == "tcp_bbrplus" ]]; then + run_status="BBRplus启动成功" + else + run_status="BBRplus启动失败" + fi + else + run_status="未安装加速模块" + fi + fi +} + +#############系统检测组件############# +check_sys +check_version +[[ ${release} != "debian" ]] && [[ ${release} != "ubuntu" ]] && [[ ${release} != "centos" ]] && echo -e "${Error} 本脚本不支持当前系统 ${release} !" && exit 1 +start_menu + diff --git a/v2ray.sh b/v2ray.sh new file mode 100644 index 0000000..05e1c2c --- /dev/null +++ b/v2ray.sh @@ -0,0 +1,1122 @@ +#!/bin/bash + +red='\e[91m' +green='\e[92m' +yellow='\e[93m' +magenta='\e[95m' +cyan='\e[96m' +none='\e[0m' +_red() { echo -e ${red}$*${none}; } +_green() { echo -e ${green}$*${none}; } +_yellow() { echo -e ${yellow}$*${none}; } +_magenta() { echo -e ${magenta}$*${none}; } +_cyan() { echo -e ${cyan}$*${none}; } + +# Root +[[ $(id -u) != 0 ]] && echo -e "\n 哎呀……请使用 ${red}root ${none}用户运行 ${yellow}~(^_^) ${none}\n" && exit 1 + +cmd="apt-get" + +sys_bit=$(uname -m) + +case $sys_bit in +i[36]86) + v2ray_bit="32" + caddy_arch="386" + ;; +x86_64) + v2ray_bit="64" + caddy_arch="amd64" + ;; +*armv6*) + v2ray_bit="arm" + caddy_arch="arm6" + ;; +*armv7*) + v2ray_bit="arm" + caddy_arch="arm7" + ;; +*aarch64* | *armv8*) + v2ray_bit="arm64" + caddy_arch="arm64" + ;; +*) + echo -e " + 哈哈……这个 ${red}辣鸡脚本${none} 不支持你的系统。 ${yellow}(-_-) ${none} + + 备注: 仅支持 Ubuntu 16+ / Debian 8+ / CentOS 7+ 系统 + " && exit 1 + ;; +esac + +# 笨笨的检测方法 +if [[ $(command -v apt-get) || $(command -v yum) ]] && [[ $(command -v systemctl) ]]; then + + if [[ $(command -v yum) ]]; then + + cmd="yum" + + fi + +else + + echo -e " + 哈哈……这个 ${red}辣鸡脚本${none} 不支持你的系统。 ${yellow}(-_-) ${none} + + 备注: 仅支持 Ubuntu 16+ / Debian 8+ / CentOS 7+ 系统 + " && exit 1 + +fi + +uuid=$(cat /proc/sys/kernel/random/uuid) +old_id="e55c8d17-2cf3-b21a-bcf1-eeacb011ed79" +v2ray_server_config="/etc/v2ray/config.json" +v2ray_client_config="/etc/v2ray/233blog_v2ray_config.json" +backup="/etc/v2ray/233blog_v2ray_backup.conf" +_v2ray_sh="/usr/local/sbin/v2ray" +systemd=true +# _test=true + +transport=( + TCP + TCP_HTTP + WebSocket + "WebSocket + TLS" + HTTP/2 + mKCP + mKCP_utp + mKCP_srtp + mKCP_wechat-video + mKCP_dtls + mKCP_wireguard + QUIC + QUIC_utp + QUIC_srtp + QUIC_wechat-video + QUIC_dtls + QUIC_wireguard + TCP_dynamicPort + TCP_HTTP_dynamicPort + WebSocket_dynamicPort + mKCP_dynamicPort + mKCP_utp_dynamicPort + mKCP_srtp_dynamicPort + mKCP_wechat-video_dynamicPort + mKCP_dtls_dynamicPort + mKCP_wireguard_dynamicPort + QUIC_dynamicPort + QUIC_utp_dynamicPort + QUIC_srtp_dynamicPort + QUIC_wechat-video_dynamicPort + QUIC_dtls_dynamicPort + QUIC_wireguard_dynamicPort +) + +ciphers=( + aes-128-cfb + aes-256-cfb + chacha20 + chacha20-ietf + aes-128-gcm + aes-256-gcm + chacha20-ietf-poly1305 +) + +_load() { + local _dir="/etc/v2ray/233boy/v2ray/src/" + . "${_dir}$@" +} +_sys_timezone() { + IS_OPENVZ= + if hostnamectl status | grep -q openvz; then + IS_OPENVZ=1 + fi + + echo + timedatectl set-timezone Asia/Shanghai + timedatectl set-ntp true + echo "已将你的主机设置为Asia/Shanghai时区并通过systemd-timesyncd自动同步时间。" + echo + + if [[ $IS_OPENVZ ]]; then + echo + echo -e "你的主机环境为 ${yellow}Openvz${none} ,建议使用${yellow}v2ray mkcp${none}系列协议。" + echo -e "注意:${yellow}Openvz${none} 系统时间无法由虚拟机内程序控制同步。" + echo -e "如果主机时间跟实际相差${yellow}超过90秒${none},v2ray将无法正常通信,请发ticket联系vps主机商调整。" + fi +} + +_sys_time() { + echo -e "\n主机时间:${yellow}" + timedatectl status | sed -n '1p;4p' + echo -e "${none}" + [[ $IS_OPENV ]] && pause +} +v2ray_config() { + # clear + echo + while :; do + echo -e "请选择 "$yellow"V2Ray"$none" 传输协议 [${magenta}1-${#transport[*]}$none]" + echo + for ((i = 1; i <= ${#transport[*]}; i++)); do + Stream="${transport[$i - 1]}" + if [[ "$i" -le 9 ]]; then + # echo + echo -e "$yellow $i. $none${Stream}" + else + # echo + echo -e "$yellow $i. $none${Stream}" + fi + done + echo + echo "备注1: 含有 [dynamicPort] 的即启用动态端口.." + echo "备注2: [utp | srtp | wechat-video | dtls | wireguard] 分别伪装成 [BT下载 | 视频通话 | 微信视频通话 | DTLS 1.2 数据包 | WireGuard 数据包]" + echo + read -p "$(echo -e "(默认协议: ${cyan}TCP$none)"):" v2ray_transport + [ -z "$v2ray_transport" ] && v2ray_transport=1 + case $v2ray_transport in + [1-9] | [1-2][0-9] | 3[0-2]) + echo + echo + echo -e "$yellow V2Ray 传输协议 = $cyan${transport[$v2ray_transport - 1]}$none" + echo "----------------------------------------------------------------" + echo + break + ;; + *) + error + ;; + esac + done + v2ray_port_config +} +v2ray_port_config() { + case $v2ray_transport in + 4 | 5) + tls_config + ;; + *) + local random=$(shuf -i20001-65535 -n1) + while :; do + echo -e "请输入 "$yellow"V2Ray"$none" 端口 ["$magenta"1-65535"$none"]" + read -p "$(echo -e "(默认端口: ${cyan}${random}$none):")" v2ray_port + [ -z "$v2ray_port" ] && v2ray_port=$random + case $v2ray_port in + [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5]) + echo + echo + echo -e "$yellow V2Ray 端口 = $cyan$v2ray_port$none" + echo "----------------------------------------------------------------" + echo + break + ;; + *) + error + ;; + esac + done + if [[ $v2ray_transport -ge 18 ]]; then + v2ray_dynamic_port_start + fi + ;; + esac +} + +v2ray_dynamic_port_start() { + + while :; do + echo -e "请输入 "$yellow"V2Ray 动态端口开始 "$none"范围 ["$magenta"1-65535"$none"]" + read -p "$(echo -e "(默认开始端口: ${cyan}10000$none):")" v2ray_dynamic_port_start_input + [ -z $v2ray_dynamic_port_start_input ] && v2ray_dynamic_port_start_input=10000 + case $v2ray_dynamic_port_start_input in + $v2ray_port) + echo + echo " 不能和 V2Ray 端口一毛一样...." + echo + echo -e " 当前 V2Ray 端口:${cyan}$v2ray_port${none}" + error + ;; + [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5]) + echo + echo + echo -e "$yellow V2Ray 动态端口开始 = $cyan$v2ray_dynamic_port_start_input$none" + echo "----------------------------------------------------------------" + echo + break + ;; + *) + error + ;; + esac + + done + + if [[ $v2ray_dynamic_port_start_input -lt $v2ray_port ]]; then + lt_v2ray_port=true + fi + + v2ray_dynamic_port_end +} +v2ray_dynamic_port_end() { + + while :; do + echo -e "请输入 "$yellow"V2Ray 动态端口结束 "$none"范围 ["$magenta"1-65535"$none"]" + read -p "$(echo -e "(默认结束端口: ${cyan}20000$none):")" v2ray_dynamic_port_end_input + [ -z $v2ray_dynamic_port_end_input ] && v2ray_dynamic_port_end_input=20000 + case $v2ray_dynamic_port_end_input in + [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5]) + + if [[ $v2ray_dynamic_port_end_input -le $v2ray_dynamic_port_start_input ]]; then + echo + echo " 不能小于或等于 V2Ray 动态端口开始范围" + echo + echo -e " 当前 V2Ray 动态端口开始:${cyan}$v2ray_dynamic_port_start_input${none}" + error + elif [ $lt_v2ray_port ] && [[ ${v2ray_dynamic_port_end_input} -ge $v2ray_port ]]; then + echo + echo " V2Ray 动态端口结束范围 不能包括 V2Ray 端口..." + echo + echo -e " 当前 V2Ray 端口:${cyan}$v2ray_port${none}" + error + else + echo + echo + echo -e "$yellow V2Ray 动态端口结束 = $cyan$v2ray_dynamic_port_end_input$none" + echo "----------------------------------------------------------------" + echo + break + fi + ;; + *) + error + ;; + esac + + done + +} + +tls_config() { + + echo + local random=$(shuf -i20001-65535 -n1) + while :; do + echo -e "请输入 "$yellow"V2Ray"$none" 端口 ["$magenta"1-65535"$none"],不能选择 "$magenta"80"$none" 或 "$magenta"443"$none" 端口" + read -p "$(echo -e "(默认端口: ${cyan}${random}$none):")" v2ray_port + [ -z "$v2ray_port" ] && v2ray_port=$random + case $v2ray_port in + 80) + echo + echo " ...都说了不能选择 80 端口了咯....." + error + ;; + 443) + echo + echo " ..都说了不能选择 443 端口了咯....." + error + ;; + [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5]) + echo + echo + echo -e "$yellow V2Ray 端口 = $cyan$v2ray_port$none" + echo "----------------------------------------------------------------" + echo + break + ;; + *) + error + ;; + esac + done + + while :; do + echo + echo -e "请输入一个 $magenta正确的域名$none,一定一定一定要正确,不!能!出!错!" + read -p "(例如:233blog.com): " domain + [ -z "$domain" ] && error && continue + echo + echo + echo -e "$yellow 你的域名 = $cyan$domain$none" + echo "----------------------------------------------------------------" + break + done + get_ip + echo + echo + echo -e "$yellow 请将 $magenta$domain$none $yellow解析到: $cyan$ip$none" + echo + echo -e "$yellow 请将 $magenta$domain$none $yellow解析到: $cyan$ip$none" + echo + echo -e "$yellow 请将 $magenta$domain$none $yellow解析到: $cyan$ip$none" + echo "----------------------------------------------------------------" + echo + + while :; do + + read -p "$(echo -e "(是否已经正确解析: [${magenta}Y$none]):") " record + if [[ -z "$record" ]]; then + error + else + if [[ "$record" == [Yy] ]]; then + domain_check + echo + echo + echo -e "$yellow 域名解析 = ${cyan}我确定已经有解析了$none" + echo "----------------------------------------------------------------" + echo + break + else + error + fi + fi + + done + + if [[ $v2ray_transport -ne 5 ]]; then + auto_tls_config + else + caddy=true + install_caddy_info="打开" + fi + + if [[ $caddy ]]; then + path_config_ask + fi +} +auto_tls_config() { + echo -e " + + 安装 Caddy 来实现 自动配置 TLS + + 如果你已经安装 Nginx 或 Caddy + + $yellow并且..自己能搞定配置 TLS$none + + 那么就不需要 打开自动配置 TLS + " + echo "----------------------------------------------------------------" + echo + + while :; do + + read -p "$(echo -e "(是否自动配置 TLS: [${magenta}Y/N$none]):") " auto_install_caddy + if [[ -z "$auto_install_caddy" ]]; then + error + else + if [[ "$auto_install_caddy" == [Yy] ]]; then + caddy=true + install_caddy_info="打开" + echo + echo + echo -e "$yellow 自动配置 TLS = $cyan$install_caddy_info$none" + echo "----------------------------------------------------------------" + echo + break + elif [[ "$auto_install_caddy" == [Nn] ]]; then + install_caddy_info="关闭" + echo + echo + echo -e "$yellow 自动配置 TLS = $cyan$install_caddy_info$none" + echo "----------------------------------------------------------------" + echo + break + else + error + fi + fi + + done +} +path_config_ask() { + echo + while :; do + echo -e "是否开启 网站伪装 和 路径分流 [${magenta}Y/N$none]" + read -p "$(echo -e "(默认: [${cyan}N$none]):")" path_ask + [[ -z $path_ask ]] && path_ask="n" + + case $path_ask in + Y | y) + path_config + break + ;; + N | n) + echo + echo + echo -e "$yellow 网站伪装 和 路径分流 = $cyan不想配置$none" + echo "----------------------------------------------------------------" + echo + break + ;; + *) + error + ;; + esac + done +} +path_config() { + echo + while :; do + echo -e "请输入想要 ${magenta}用来分流的路径$none , 例如 /233blog , 那么只需要输入 233blog 即可" + read -p "$(echo -e "(默认: [${cyan}233blog$none]):")" path + [[ -z $path ]] && path="233blog" + + case $path in + *[/$]*) + echo + echo -e " 由于这个脚本太辣鸡了..所以分流的路径不能包含$red / $none或$red $ $none这两个符号.... " + echo + error + ;; + *) + echo + echo + echo -e "$yellow 分流的路径 = ${cyan}/${path}$none" + echo "----------------------------------------------------------------" + echo + break + ;; + esac + done + is_path=true + proxy_site_config +} +proxy_site_config() { + echo + while :; do + echo -e "请输入 ${magenta}一个正确的$none ${cyan}网址$none 用来作为 ${cyan}网站的伪装$none , 例如 https://liyafly.com" + echo -e "举例...你当前的域名是 $green$domain$none , 伪装的网址的是 https://liyafly.com" + echo -e "然后打开你的域名时候...显示出来的内容就是来自 https://liyafly.com 的内容" + echo -e "其实就是一个反代...明白就好..." + echo -e "如果不能伪装成功...可以使用 v2ray config 修改伪装的网址" + read -p "$(echo -e "(默认: [${cyan}https://liyafly.com$none]):")" proxy_site + [[ -z $proxy_site ]] && proxy_site="https://liyafly.com" + + case $proxy_site in + *[#$]*) + echo + echo -e " 由于这个脚本太辣鸡了..所以伪装的网址不能包含$red # $none或$red $ $none这两个符号.... " + echo + error + ;; + *) + echo + echo + echo -e "$yellow 伪装的网址 = ${cyan}${proxy_site}$none" + echo "----------------------------------------------------------------" + echo + break + ;; + esac + done +} + +blocked_hosts() { + echo + while :; do + echo -e "是否开启广告拦截(会影响性能) [${magenta}Y/N$none]" + read -p "$(echo -e "(默认 [${cyan}N$none]):")" blocked_ad + [[ -z $blocked_ad ]] && blocked_ad="n" + + case $blocked_ad in + Y | y) + blocked_ad_info="开启" + ban_ad=true + echo + echo + echo -e "$yellow 广告拦截 = $cyan开启$none" + echo "----------------------------------------------------------------" + echo + break + ;; + N | n) + blocked_ad_info="关闭" + echo + echo + echo -e "$yellow 广告拦截 = $cyan关闭$none" + echo "----------------------------------------------------------------" + echo + break + ;; + *) + error + ;; + esac + done +} +shadowsocks_config() { + + echo + + while :; do + echo -e "是否配置 ${yellow}Shadowsocks${none} [${magenta}Y/N$none]" + read -p "$(echo -e "(默认 [${cyan}N$none]):") " install_shadowsocks + [[ -z "$install_shadowsocks" ]] && install_shadowsocks="n" + if [[ "$install_shadowsocks" == [Yy] ]]; then + echo + shadowsocks=true + shadowsocks_port_config + break + elif [[ "$install_shadowsocks" == [Nn] ]]; then + break + else + error + fi + + done + +} + +shadowsocks_port_config() { + local random=$(shuf -i20001-65535 -n1) + while :; do + echo -e "请输入 "$yellow"Shadowsocks"$none" 端口 ["$magenta"1-65535"$none"],不能和 "$yellow"V2Ray"$none" 端口相同" + read -p "$(echo -e "(默认端口: ${cyan}${random}$none):") " ssport + [ -z "$ssport" ] && ssport=$random + case $ssport in + $v2ray_port) + echo + echo " 不能和 V2Ray 端口一毛一样...." + error + ;; + [1-9] | [1-9][0-9] | [1-9][0-9][0-9] | [1-9][0-9][0-9][0-9] | [1-5][0-9][0-9][0-9][0-9] | 6[0-4][0-9][0-9][0-9] | 65[0-4][0-9][0-9] | 655[0-3][0-5]) + if [[ $v2ray_transport == [45] ]]; then + local tls=ture + fi + if [[ $tls && $ssport == "80" ]] || [[ $tls && $ssport == "443" ]]; then + echo + echo -e "由于你已选择了 "$green"WebSocket + TLS $none或$green HTTP/2"$none" 传输协议." + echo + echo -e "所以不能选择 "$magenta"80"$none" 或 "$magenta"443"$none" 端口" + error + elif [[ $v2ray_dynamic_port_start_input == $ssport || $v2ray_dynamic_port_end_input == $ssport ]]; then + local multi_port="${v2ray_dynamic_port_start_input} - ${v2ray_dynamic_port_end_input}" + echo + echo " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:$multi_port" + error + elif [[ $v2ray_dynamic_port_start_input -lt $ssport && $ssport -le $v2ray_dynamic_port_end_input ]]; then + local multi_port="${v2ray_dynamic_port_start_input} - ${v2ray_dynamic_port_end_input}" + echo + echo " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:$multi_port" + error + else + echo + echo + echo -e "$yellow Shadowsocks 端口 = $cyan$ssport$none" + echo "----------------------------------------------------------------" + echo + break + fi + ;; + *) + error + ;; + esac + + done + + shadowsocks_password_config +} +shadowsocks_password_config() { + + while :; do + echo -e "请输入 "$yellow"Shadowsocks"$none" 密码" + read -p "$(echo -e "(默认密码: ${cyan}233blog.com$none)"): " sspass + [ -z "$sspass" ] && sspass="233blog.com" + case $sspass in + *[/$]*) + echo + echo -e " 由于这个脚本太辣鸡了..所以密码不能包含$red / $none或$red $ $none这两个符号.... " + echo + error + ;; + *) + echo + echo + echo -e "$yellow Shadowsocks 密码 = $cyan$sspass$none" + echo "----------------------------------------------------------------" + echo + break + ;; + esac + + done + + shadowsocks_ciphers_config +} +shadowsocks_ciphers_config() { + + while :; do + echo -e "请选择 "$yellow"Shadowsocks"$none" 加密协议 [${magenta}1-${#ciphers[*]}$none]" + for ((i = 1; i <= ${#ciphers[*]}; i++)); do + ciphers_show="${ciphers[$i - 1]}" + echo + echo -e "$yellow $i. $none${ciphers_show}" + done + echo + read -p "$(echo -e "(默认加密协议: ${cyan}${ciphers[6]}$none)"):" ssciphers_opt + [ -z "$ssciphers_opt" ] && ssciphers_opt=7 + case $ssciphers_opt in + [1-7]) + ssciphers=${ciphers[$ssciphers_opt - 1]} + echo + echo + echo -e "$yellow Shadowsocks 加密协议 = $cyan${ssciphers}$none" + echo "----------------------------------------------------------------" + echo + break + ;; + *) + error + ;; + esac + + done + pause +} + +install_info() { + clear + echo + echo " ....准备安装了咯..看看有毛有配置正确了..." + echo + echo "---------- 安装信息 -------------" + echo + echo -e "$yellow V2Ray 传输协议 = $cyan${transport[$v2ray_transport - 1]}$none" + + if [[ $v2ray_transport == [45] ]]; then + echo + echo -e "$yellow V2Ray 端口 = $cyan$v2ray_port$none" + echo + echo -e "$yellow 你的域名 = $cyan$domain$none" + echo + echo -e "$yellow 域名解析 = ${cyan}我确定已经有解析了$none" + echo + echo -e "$yellow 自动配置 TLS = $cyan$install_caddy_info$none" + + if [[ $ban_ad ]]; then + echo + echo -e "$yellow 广告拦截 = $cyan$blocked_ad_info$none" + fi + if [[ $is_path ]]; then + echo + echo -e "$yellow 路径分流 = ${cyan}/${path}$none" + fi + elif [[ $v2ray_transport -ge 18 ]]; then + echo + echo -e "$yellow V2Ray 端口 = $cyan$v2ray_port$none" + echo + echo -e "$yellow V2Ray 动态端口范围 = $cyan${v2ray_dynamic_port_start_input} - ${v2ray_dynamic_port_end_input}$none" + + if [[ $ban_ad ]]; then + echo + echo -e "$yellow 广告拦截 = $cyan$blocked_ad_info$none" + fi + else + echo + echo -e "$yellow V2Ray 端口 = $cyan$v2ray_port$none" + + if [[ $ban_ad ]]; then + echo + echo -e "$yellow 广告拦截 = $cyan$blocked_ad_info$none" + fi + fi + if [ $shadowsocks ]; then + echo + echo -e "$yellow Shadowsocks 端口 = $cyan$ssport$none" + echo + echo -e "$yellow Shadowsocks 密码 = $cyan$sspass$none" + echo + echo -e "$yellow Shadowsocks 加密协议 = $cyan${ssciphers}$none" + else + echo + echo -e "$yellow 是否配置 Shadowsocks = ${cyan}未配置${none}" + fi + echo + echo "---------- END -------------" + echo + pause + echo +} + +domain_check() { + # if [[ $cmd == "yum" ]]; then + # yum install bind-utils -y + # else + # $cmd install dnsutils -y + # fi + # test_domain=$(dig $domain +short) + test_domain=$(ping $domain -c 1 | grep -oE -m1 "([0-9]{1,3}\.){3}[0-9]{1,3}") + if [[ $test_domain != $ip ]]; then + echo + echo -e "$red 检测域名解析错误....$none" + echo + echo -e " 你的域名: $yellow$domain$none 未解析到: $cyan$ip$none" + echo + echo -e " 你的域名当前解析到: $cyan$test_domain$none" + echo + echo "备注...如果你的域名是使用 Cloudflare 解析的话..在 Status 那里点一下那图标..让它变灰" + echo + exit 1 + fi +} + +install_caddy() { + # download caddy file then install + _load download-caddy.sh + _download_caddy_file + _install_caddy_service + caddy_config + +} +caddy_config() { + # local email=$(shuf -i1-10000000000 -n1) + _load caddy-config.sh + + # systemctl restart caddy + do_service restart caddy +} + +install_v2ray() { + $cmd update -y + if [[ $cmd == "apt-get" ]]; then + $cmd install -y lrzsz git zip unzip curl wget qrencode libcap2-bin dbus + else + # $cmd install -y lrzsz git zip unzip curl wget qrencode libcap iptables-services + $cmd install -y lrzsz git zip unzip curl wget qrencode libcap + fi + ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime + [ -d /etc/v2ray ] && rm -rf /etc/v2ray + # date -s "$(curl -sI g.cn | grep Date | cut -d' ' -f3-6)Z" + _sys_timezone + _sys_time + + if [[ $local_install ]]; then + if [[ ! -d $(pwd)/config ]]; then + echo + echo -e "$red 哎呀呀...安装失败了咯...$none" + echo + echo -e " 请确保你有完整的上传 233v2.com 的 V2Ray 一键安装脚本 & 管理脚本到当前 ${green}$(pwd) $none目录下" + echo + exit 1 + fi + mkdir -p /etc/v2ray/233boy/v2ray + cp -rf $(pwd)/* /etc/v2ray/233boy/v2ray + else + pushd /tmp + git clone https://github.com/233boy/v2ray -b "$_gitbranch" /etc/v2ray/233boy/v2ray --depth=1 + popd + + fi + + if [[ ! -d /etc/v2ray/233boy/v2ray ]]; then + echo + echo -e "$red 哎呀呀...克隆脚本仓库出错了...$none" + echo + echo -e " 温馨提示..... 请尝试自行安装 Git: ${green}$cmd install -y git $none 之后再安装此脚本" + echo + exit 1 + fi + + # download v2ray file then install + _load download-v2ray.sh + _download_v2ray_file + _install_v2ray_service + _mkdir_dir +} + +open_port() { + if [[ $cmd == "apt-get" ]]; then + if [[ $1 != "multiport" ]]; then + + iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport $1 -j ACCEPT + iptables -I INPUT -m state --state NEW -m udp -p udp --dport $1 -j ACCEPT + ip6tables -I INPUT -m state --state NEW -m tcp -p tcp --dport $1 -j ACCEPT + ip6tables -I INPUT -m state --state NEW -m udp -p udp --dport $1 -j ACCEPT + + # firewall-cmd --permanent --zone=public --add-port=$1/tcp + # firewall-cmd --permanent --zone=public --add-port=$1/udp + # firewall-cmd --reload + + else + + local multiport="${v2ray_dynamic_port_start_input}:${v2ray_dynamic_port_end_input}" + iptables -I INPUT -p tcp --match multiport --dports $multiport -j ACCEPT + iptables -I INPUT -p udp --match multiport --dports $multiport -j ACCEPT + ip6tables -I INPUT -p tcp --match multiport --dports $multiport -j ACCEPT + ip6tables -I INPUT -p udp --match multiport --dports $multiport -j ACCEPT + + # local multi_port="${v2ray_dynamic_port_start_input}-${v2ray_dynamic_port_end_input}" + # firewall-cmd --permanent --zone=public --add-port=$multi_port/tcp + # firewall-cmd --permanent --zone=public --add-port=$multi_port/udp + # firewall-cmd --reload + + fi + iptables-save >/etc/iptables.rules.v4 + ip6tables-save >/etc/iptables.rules.v6 + # else + # service iptables save >/dev/null 2>&1 + # service ip6tables save >/dev/null 2>&1 + fi +} +del_port() { + if [[ $cmd == "apt-get" ]]; then + if [[ $1 != "multiport" ]]; then + # if [[ $cmd == "apt-get" ]]; then + iptables -D INPUT -m state --state NEW -m tcp -p tcp --dport $1 -j ACCEPT + iptables -D INPUT -m state --state NEW -m udp -p udp --dport $1 -j ACCEPT + ip6tables -D INPUT -m state --state NEW -m tcp -p tcp --dport $1 -j ACCEPT + ip6tables -D INPUT -m state --state NEW -m udp -p udp --dport $1 -j ACCEPT + # else + # firewall-cmd --permanent --zone=public --remove-port=$1/tcp + # firewall-cmd --permanent --zone=public --remove-port=$1/udp + # fi + else + # if [[ $cmd == "apt-get" ]]; then + local ports="${v2ray_dynamicPort_start}:${v2ray_dynamicPort_end}" + iptables -D INPUT -p tcp --match multiport --dports $ports -j ACCEPT + iptables -D INPUT -p udp --match multiport --dports $ports -j ACCEPT + ip6tables -D INPUT -p tcp --match multiport --dports $ports -j ACCEPT + ip6tables -D INPUT -p udp --match multiport --dports $ports -j ACCEPT + # else + # local ports="${v2ray_dynamicPort_start}-${v2ray_dynamicPort_end}" + # firewall-cmd --permanent --zone=public --remove-port=$ports/tcp + # firewall-cmd --permanent --zone=public --remove-port=$ports/udp + # fi + fi + iptables-save >/etc/iptables.rules.v4 + ip6tables-save >/etc/iptables.rules.v6 + # else + # service iptables save >/dev/null 2>&1 + # service ip6tables save >/dev/null 2>&1 + fi + +} + +config() { + cp -f /etc/v2ray/233boy/v2ray/config/backup.conf $backup + cp -f /etc/v2ray/233boy/v2ray/v2ray.sh $_v2ray_sh + chmod +x $_v2ray_sh + + v2ray_id=$uuid + alterId=233 + ban_bt=true + if [[ $v2ray_transport -ge 18 ]]; then + v2ray_dynamicPort_start=${v2ray_dynamic_port_start_input} + v2ray_dynamicPort_end=${v2ray_dynamic_port_end_input} + fi + _load config.sh + + if [[ $cmd == "apt-get" ]]; then + cat >/etc/network/if-pre-up.d/iptables <<-EOF + #!/bin/sh + /sbin/iptables-restore < /etc/iptables.rules.v4 + /sbin/ip6tables-restore < /etc/iptables.rules.v6 + EOF + chmod +x /etc/network/if-pre-up.d/iptables + # else + # [ $(pgrep "firewall") ] && systemctl stop firewalld + # systemctl mask firewalld + # systemctl disable firewalld + # systemctl enable iptables + # systemctl enable ip6tables + # systemctl start iptables + # systemctl start ip6tables + fi + + [[ $shadowsocks ]] && open_port $ssport + if [[ $v2ray_transport == [45] ]]; then + open_port "80" + open_port "443" + open_port $v2ray_port + elif [[ $v2ray_transport -ge 18 ]]; then + open_port $v2ray_port + open_port "multiport" + else + open_port $v2ray_port + fi + # systemctl restart v2ray + do_service restart v2ray + backup_config + +} + +backup_config() { + sed -i "18s/=1/=$v2ray_transport/; 21s/=2333/=$v2ray_port/; 24s/=$old_id/=$uuid/" $backup + if [[ $v2ray_transport -ge 18 ]]; then + sed -i "30s/=10000/=$v2ray_dynamic_port_start_input/; 33s/=20000/=$v2ray_dynamic_port_end_input/" $backup + fi + if [[ $shadowsocks ]]; then + sed -i "42s/=/=true/; 45s/=6666/=$ssport/; 48s/=233blog.com/=$sspass/; 51s/=chacha20-ietf/=$ssciphers/" $backup + fi + [[ $v2ray_transport == [45] ]] && sed -i "36s/=233blog.com/=$domain/" $backup + [[ $caddy ]] && sed -i "39s/=/=true/" $backup + [[ $ban_ad ]] && sed -i "54s/=/=true/" $backup + if [[ $is_path ]]; then + sed -i "57s/=/=true/; 60s/=233blog/=$path/" $backup + sed -i "63s#=https://liyafly.com#=$proxy_site#" $backup + fi +} + +get_ip() { + ip=$(curl -s https://ipinfo.io/ip) + [[ -z $ip ]] && ip=$(curl -s https://api.ip.sb/ip) + [[ -z $ip ]] && ip=$(curl -s https://api.ipify.org) + [[ -z $ip ]] && ip=$(curl -s https://ip.seeip.org) + [[ -z $ip ]] && ip=$(curl -s https://ifconfig.co/ip) + [[ -z $ip ]] && ip=$(curl -s https://api.myip.com | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}") + [[ -z $ip ]] && ip=$(curl -s icanhazip.com) + [[ -z $ip ]] && ip=$(curl -s myip.ipip.net | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}") + [[ -z $ip ]] && echo -e "\n$red 这垃圾小鸡扔了吧!$none\n" && exit +} + +error() { + + echo -e "\n$red 输入错误!$none\n" + +} + +pause() { + + read -rsp "$(echo -e "按$green Enter 回车键 $none继续....或按$red Ctrl + C $none取消.")" -d $'\n' + echo +} +do_service() { + if [[ $systemd ]]; then + systemctl $1 $2 + else + service $2 $1 + fi +} +show_config_info() { + clear + _load v2ray-info.sh + _v2_args + _v2_info + _load ss-info.sh + +} + +install() { + if [[ -f /usr/bin/v2ray/v2ray && -f /etc/v2ray/config.json ]] && [[ -f $backup && -d /etc/v2ray/233boy/v2ray ]]; then + echo + echo " 大佬...你已经安装 V2Ray 啦...无需重新安装" + echo + echo -e " $yellow输入 ${cyan}v2ray${none} $yellow即可管理 V2Ray${none}" + echo + exit 1 + elif [[ -f /usr/bin/v2ray/v2ray && -f /etc/v2ray/config.json ]] && [[ -f /etc/v2ray/233blog_v2ray_backup.txt && -d /etc/v2ray/233boy/v2ray ]]; then + echo + echo " 如果你需要继续安装.. 请先卸载旧版本" + echo + echo -e " $yellow输入 ${cyan}v2ray uninstall${none} $yellow即可卸载${none}" + echo + exit 1 + fi + v2ray_config + blocked_hosts + shadowsocks_config + install_info + # [[ $caddy ]] && domain_check + install_v2ray + if [[ $caddy || $v2ray_port == "80" ]]; then + if [[ $cmd == "yum" ]]; then + [[ $(pgrep "httpd") ]] && systemctl stop httpd + [[ $(command -v httpd) ]] && yum remove httpd -y + else + [[ $(pgrep "apache2") ]] && service apache2 stop + [[ $(command -v apache2) ]] && apt-get remove apache2* -y + fi + fi + [[ $caddy ]] && install_caddy + + ## bbr + _load bbr.sh + _try_enable_bbr + + get_ip + config + show_config_info +} +uninstall() { + + if [[ -f /usr/bin/v2ray/v2ray && -f /etc/v2ray/config.json ]] && [[ -f $backup && -d /etc/v2ray/233boy/v2ray ]]; then + . $backup + if [[ $mark ]]; then + _load uninstall.sh + else + echo + echo -e " $yellow输入 ${cyan}v2ray uninstall${none} $yellow即可卸载${none}" + echo + fi + + elif [[ -f /usr/bin/v2ray/v2ray && -f /etc/v2ray/config.json ]] && [[ -f /etc/v2ray/233blog_v2ray_backup.txt && -d /etc/v2ray/233boy/v2ray ]]; then + echo + echo -e " $yellow输入 ${cyan}v2ray uninstall${none} $yellow即可卸载${none}" + echo + else + echo -e " + $red 大胸弟...你貌似毛有安装 V2Ray ....卸载个鸡鸡哦...$none + + 备注...仅支持卸载使用我 (233v2.com) 提供的 V2Ray 一键安装脚本 + " && exit 1 + fi + +} + +args=$1 +_gitbranch=$2 +[ -z $1 ] && args="online" +case $args in +online) + #hello world + [[ -z $_gitbranch ]] && _gitbranch="master" + ;; +local) + local_install=true + ;; +*) + echo + echo -e " 你输入的这个参数 <$red $args $none> ...这个是什么鬼啊...脚本不认识它哇" + echo + echo -e " 这个辣鸡脚本仅支持输入$green local / online $none参数" + echo + echo -e " 输入$yellow local $none即是使用本地安装" + echo + echo -e " 输入$yellow online $none即是使用在线安装 (默认)" + echo + exit 1 + ;; +esac + +clear +while :; do + echo + echo "........... V2Ray 一键安装脚本 & 管理脚本 by 233v2.com .........." + echo + echo "帮助说明: https://233v2.com/post/1/" + echo + echo "搭建教程: https://233v2.com/post/2/" + echo + echo " 1. 安装" + echo + echo " 2. 卸载" + echo + if [[ $local_install ]]; then + echo -e "$yellow 温馨提示.. 本地安装已启用 ..$none" + echo + fi + read -p "$(echo -e "请选择 [${magenta}1-2$none]:")" choose + case $choose in + 1) + install + break + ;; + 2) + uninstall + break + ;; + *) + error + ;; + esac +done