MENU

v2ray.sh

January 31, 2021 • Read: 1091 • 应用搭建

#!/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"
    ;;
'amd64' | x86_64)
    v2ray_bit="64"
    caddy_arch="amd64"
    ;;
*armv6*)
    v2ray_bit="arm32-v6"
    caddy_arch="arm6"
    ;;
*armv7*)
    v2ray_bit="arm32-v7a"
    caddy_arch="arm7"
    ;;
*aarch64* | *armv8*)
    v2ray_bit="arm64-v8a"
    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
    VLESS_WebSocket_TLS
)

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-3])
            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 | 33)
        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 && $v2ray_transport -ne 33 ]]; 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 -eq 4 ]]; 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] || $v2ray_transport == 33 ]]; 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 && $v2ray_transport -ne 33 ]]; 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 -4 | grep -oE -m1 "([0-9]{1,3}\.){3}[0-9]{1,3}")
    # test_domain=$(wget -qO- --header='accept: application/dns-json' "https://cloudflare-dns.com/dns-query?name=$domain&type=A" | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" | head -1)
    test_domain=$(curl -sH 'accept: application/dns-json' "https://cloudflare-dns.com/dns-query?name=$domain&type=A" | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" | head -1)
    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
}

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=0
    ban_bt=true
    if [[ $v2ray_transport -ge 18 && $v2ray_transport -ne 33 ]]; 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
    
    # 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 && $v2ray_transport -ne 33 ]]; 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] || $v2ray_transport == 33 ]] && 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

兼总条贯 知至知终

Leave a Comment

评论列表
  1. Candice
    您的评论正等待审核!

    Various sector leaders as well as staff members ⲟf the travel market have
    actuɑlly affirmed tһat the new guidelines ɗo not really reduce tһe documents fоr organization traveling.