You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3068 lines
75 KiB
3068 lines
75 KiB
#!/bin/bash |
|
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin |
|
|
|
red='\e[91m' |
|
green='\e[92m' |
|
yellow='\e[93m' |
|
magenta='\e[95m' |
|
cyan='\e[96m' |
|
none='\e[0m' |
|
|
|
author=233boy |
|
# Root |
|
[[ $(id -u) != 0 ]] && echo -e " 哎呀……请使用 ${red}root ${none}用户运行 ${yellow}~(^_^) ${none}" && exit 1 |
|
|
|
_version="v3.09" |
|
|
|
cmd="apt-get" |
|
|
|
sys_bit=$(uname -m) |
|
|
|
if [[ $sys_bit == "i386" || $sys_bit == "i686" ]]; then |
|
v2ray_bit="32" |
|
v2arch="386" |
|
elif [[ $sys_bit == "x86_64" ]]; then |
|
v2ray_bit="64" |
|
v2arch="amd64" |
|
else |
|
echo -e " 哈哈……这个 ${red}辣鸡脚本${none} 不支持你的系统。 ${yellow}(-_-) ${none}" && exit 1 |
|
fi |
|
|
|
if [[ -f /usr/bin/yum ]]; then |
|
|
|
cmd="yum" |
|
|
|
fi |
|
|
|
backup="/etc/v2ray/233blog_v2ray_backup.conf" |
|
ssraybackup="/etc/v2ray/233blog_ssray_backup.conf" |
|
|
|
if [[ -f /usr/bin/v2ray/v2ray && -f /etc/v2ray/config.json ]] && [[ -f $backup && -d /etc/v2ray/233boy/v2ray ]]; then |
|
|
|
. $backup |
|
|
|
elif [[ -f /usr/bin/v2ray/v2ray && -f /etc/v2ray/config.json ]] && [[ -f /etc/v2ray/233blog_v2ray_backup.txt && -d /etc/v2ray/233boy/v2ray ]]; then |
|
|
|
. /etc/v2ray/233boy/v2ray/tools/v1xx_to_v3xx.sh |
|
|
|
else |
|
echo -e " 哎呀哎呀…… ${red}出错咯...请重新安装V2Ray${none} ${yellow}~(^_^) ${none}" && exit 1 |
|
fi |
|
|
|
if [[ $mark != "v3" ]]; then |
|
. /etc/v2ray/233boy/v2ray/tools/v3.sh |
|
fi |
|
if [[ $v2ray_transport -ge 18 ]]; then |
|
dynamicPort=true |
|
port_range="${v2ray_dynamicPort_start}-${v2ray_dynamicPort_end}" |
|
fi |
|
if [[ $path_status ]]; then |
|
is_path=true |
|
fi |
|
|
|
[[ -f $ssraybackup ]] && source $ssraybackup |
|
|
|
uuid=$(cat /proc/sys/kernel/random/uuid) |
|
v2ray_server_config="/etc/v2ray/config.json" |
|
v2ray_client_config="/etc/v2ray/233blog_v2ray_config.json" |
|
v2ray_pid=$(pgrep -f /usr/bin/v2ray/v2ray) |
|
caddy_pid=$(pgrep -f /usr/local/bin/caddy) |
|
_v2ray_sh="/usr/local/sbin/v2ray" |
|
v2ray_ver="$(/usr/bin/v2ray/v2ray -version | head -n 1 | cut -d " " -f2)" |
|
. /etc/v2ray/233boy/v2ray/src/init.sh |
|
systemd=true |
|
# _test=true |
|
|
|
# site |
|
_site="dduck.xyz" |
|
|
|
if [[ $v2ray_ver != v* ]]; then |
|
v2ray_ver="v$v2ray_ver" |
|
fi |
|
|
|
if [[ ! -f $_v2ray_sh ]]; then |
|
[[ -f /usr/local/bin/v2ray ]] && rm -f /usr/local/bin/v2ray |
|
ln -s /etc/v2ray/233boy/v2ray/v2ray.sh $_v2ray_sh |
|
echo -e "\n $yellow 警告: 请重新登录 SSH 以避免出现 v2ray 命令未找到的情况。$none \n" && exit 1 |
|
fi |
|
|
|
if [[ ! -L $_v2ray_sh ]]; then |
|
rm -f $_v2ray_sh |
|
ln -s /etc/v2ray/233boy/v2ray/v2ray.sh $_v2ray_sh |
|
fi |
|
|
|
if [ $v2ray_pid ]; then |
|
v2ray_status="$green正在运行$none" |
|
else |
|
v2ray_status="$red未在运行$none" |
|
fi |
|
if [[ $v2ray_transport == [45] && $caddy ]] && [[ $caddy_pid ]]; then |
|
caddy_run_status="$green正在运行$none" |
|
else |
|
caddy_run_status="$red未在运行$none" |
|
fi |
|
|
|
ssray_transports=( |
|
"HTTP (Websocket)" |
|
"HTTPS (Websocket TLS)" |
|
"QUIC (udp)" |
|
) |
|
|
|
_load transport.sh |
|
ciphers=( |
|
aes-128-cfb |
|
aes-256-cfb |
|
chacha20 |
|
chacha20-ietf |
|
aes-128-gcm |
|
aes-256-gcm |
|
chacha20-ietf-poly1305 |
|
) |
|
|
|
get_transport_args() { |
|
_load v2ray-info.sh |
|
_v2_args |
|
} |
|
create_vmess_URL_config() { |
|
|
|
[[ -z $net ]] && get_transport_args |
|
|
|
if [[ $v2ray_transport == [45] ]]; then |
|
cat >/etc/v2ray/vmess_qr.json <<-EOF |
|
{ |
|
"v": "2", |
|
"ps": "${_site}_${domain}", |
|
"add": "${domain}", |
|
"port": "443", |
|
"id": "${v2ray_id}", |
|
"aid": "${alterId}", |
|
"net": "${net}", |
|
"type": "none", |
|
"host": "${domain}", |
|
"path": "$_path", |
|
"tls": "tls" |
|
} |
|
EOF |
|
else |
|
[[ -z $ip ]] && get_ip |
|
cat >/etc/v2ray/vmess_qr.json <<-EOF |
|
{ |
|
"v": "2", |
|
"ps": "${_site}_${ip}", |
|
"add": "${ip}", |
|
"port": "${v2ray_port}", |
|
"id": "${v2ray_id}", |
|
"aid": "${alterId}", |
|
"net": "${net}", |
|
"type": "${header}", |
|
"host": "${host}", |
|
"path": "", |
|
"tls": "" |
|
} |
|
EOF |
|
if [[ $v6ip ]]; then |
|
cat >/etc/v2ray/vmess_qrv6.json <<-EOF |
|
{ |
|
"v": "2", |
|
"ps": "${_site}_${v6ip}", |
|
"add": "${ip}", |
|
"port": "${v2ray_port}", |
|
"id": "${v2ray_id}", |
|
"aid": "${alterId}", |
|
"net": "${net}", |
|
"type": "${header}", |
|
"host": "${host}", |
|
"path": "", |
|
"tls": "" |
|
} |
|
EOF |
|
fi |
|
fi |
|
} |
|
view_v2ray_traffic() { |
|
_load v2ray-traffic.sh |
|
echo |
|
echo |
|
v2_query_all |
|
echo |
|
} |
|
view_v2ray_config_info() { |
|
|
|
_load v2ray-info.sh |
|
_v2_args |
|
_v2_info |
|
} |
|
get_shadowsocks_config() { |
|
if [[ $shadowsocks ]]; then |
|
|
|
while :; do |
|
echo |
|
echo -e "$yellow 1. $none查看 Shadowsocks 配置信息" |
|
echo |
|
echo -e "$yellow 2. $none生成二维码链接" |
|
echo |
|
read -p "$(echo -e "请选择 [${magenta}1-2$none]:")" _opt |
|
if [[ -z $_opt ]]; then |
|
error |
|
else |
|
case $_opt in |
|
1) |
|
view_shadowsocks_config_info |
|
break |
|
;; |
|
2) |
|
get_shadowsocks_config_qr_link |
|
break |
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
fi |
|
|
|
done |
|
else |
|
shadowsocks_config |
|
fi |
|
} |
|
view_shadowsocks_config_info() { |
|
if [[ $shadowsocks ]]; then |
|
_load ss-info.sh |
|
else |
|
shadowsocks_config |
|
fi |
|
} |
|
get_shadowsocks_config_qr_link() { |
|
if [[ $shadowsocks ]]; then |
|
get_ip |
|
_load qr.sh |
|
_ss_qr |
|
else |
|
shadowsocks_config |
|
fi |
|
|
|
} |
|
|
|
change_shadowsocks_config() { |
|
if [[ $shadowsocks ]]; then |
|
|
|
while :; do |
|
echo |
|
echo -e "$yellow 1. $none修改 Shadowsocks 端口" |
|
echo |
|
echo -e "$yellow 2. $none修改 Shadowsocks 密码" |
|
echo |
|
echo -e "$yellow 3. $none修改 Shadowsocks 加密协议" |
|
echo |
|
echo -e "$yellow 4. $none修改 Shadowsocks - V2rayPlugin 配置" |
|
echo |
|
echo -e "$yellow 5. $none关闭 Shadowsocks" |
|
echo |
|
read -p "$(echo -e "请选择 [${magenta}1-5$none]:")" _opt |
|
if [[ -z $_opt ]]; then |
|
error |
|
else |
|
case $_opt in |
|
1) |
|
change_shadowsocks_port |
|
break |
|
;; |
|
2) |
|
change_shadowsocks_password |
|
break |
|
;; |
|
3) |
|
change_shadowsocks_ciphers |
|
break |
|
;; |
|
4) |
|
change_ssray_config |
|
break |
|
;; |
|
5) |
|
disable_shadowsocks |
|
break |
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
fi |
|
|
|
done |
|
else |
|
|
|
shadowsocks_config |
|
fi |
|
} |
|
shadowsocks_config() { |
|
echo |
|
echo |
|
echo -e " $red大佬...你没有配置 Shadowsocks $none...不过现在想要配置的话也是可以的 ^_^" |
|
echo |
|
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 |
|
shadowsocks_password_config |
|
shadowsocks_ciphers_config |
|
pause |
|
open_port $new_ssport |
|
backup_config +ss |
|
ssport=$new_ssport |
|
sspass=$new_sspass |
|
ssciphers=$new_ssciphers |
|
config |
|
clear |
|
view_shadowsocks_config_info |
|
break |
|
elif [[ "$install_shadowsocks" == [Nn] ]]; then |
|
echo |
|
echo -e " $green已取消配置 Shadowsocks ....$none" |
|
echo |
|
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):") " new_ssport |
|
[ -z "$new_ssport" ] && new_ssport=$random |
|
case $new_ssport in |
|
$v2ray_port) |
|
echo |
|
echo -e " 不能和$cyan V2Ray 端口 $none一毛一样...." |
|
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]) |
|
if [[ $v2ray_transport == [45] ]]; then |
|
local tls=true |
|
fi |
|
if [[ $tls && $new_ssport == "80" ]] || [[ $tls && $new_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 [[ $dynamicPort ]] && [[ $v2ray_dynamicPort_start == $new_ssport || $v2ray_dynamicPort_end == $new_ssport ]]; then |
|
echo |
|
echo -e " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:${cyan}$port_range${none}" |
|
error |
|
elif [[ $dynamicPort ]] && [[ $v2ray_dynamicPort_start -lt $new_ssport && $new_ssport -le $v2ray_dynamicPort_end ]]; then |
|
echo |
|
echo -e " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:${cyan}$port_range${none}" |
|
error |
|
elif [[ $socks && $new_ssport == $socks_port ]]; then |
|
echo |
|
echo -e "抱歉, 此端口跟 Socks 端口冲突...当前 Socks 端口: ${cyan}$socks_port$none" |
|
error |
|
elif [[ $mtproto && $new_ssport == $mtproto_port ]]; then |
|
echo |
|
echo -e "抱歉, 此端口跟 MTProto 端口冲突...当前 MTProto 端口: ${cyan}$mtproto_port$none" |
|
error |
|
else |
|
echo |
|
echo |
|
echo -e "$yellow Shadowsocks 端口 = $cyan$new_ssport$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
break |
|
fi |
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
|
|
done |
|
|
|
} |
|
|
|
shadowsocks_password_config() { |
|
|
|
while :; do |
|
echo -e "请输入 "$yellow"Shadowsocks"$none" 密码" |
|
read -p "$(echo -e "(默认密码: ${cyan}233blog.com$none)"): " new_sspass |
|
[ -z "$new_sspass" ] && new_sspass="233blog.com" |
|
case $new_sspass in |
|
*[/$]*) |
|
echo |
|
echo -e " 由于这个脚本太辣鸡了..所以密码不能包含$red / $none或$red $ $none这两个符号.... " |
|
echo |
|
error |
|
;; |
|
*) |
|
echo |
|
echo |
|
echo -e "$yellow Shadowsocks 密码 = $cyan$new_sspass$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
break |
|
;; |
|
esac |
|
|
|
done |
|
|
|
} |
|
|
|
shadowsocks_ciphers_config() { |
|
|
|
while :; do |
|
echo -e "请选择 "$yellow"Shadowsocks"$none" 加密协议 [${magenta}1-7$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]) |
|
new_ssciphers=${ciphers[$ssciphers_opt - 1]} |
|
echo |
|
echo |
|
echo -e "$yellow Shadowsocks 加密协议 = $cyan${new_ssciphers}$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
break |
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
|
|
done |
|
} |
|
|
|
change_shadowsocks_port() { |
|
echo |
|
while :; do |
|
echo -e "请输入 "$yellow"Shadowsocks"$none" 端口 ["$magenta"1-65535"$none"]" |
|
read -p "$(echo -e "(当前端口: ${cyan}$ssport$none):") " new_ssport |
|
[ -z "$new_ssport" ] && error && continue |
|
case $new_ssport in |
|
$ssport) |
|
echo |
|
echo " 跟当前端口一毛一样....修改个鸡鸡哦" |
|
error |
|
;; |
|
$v2ray_port) |
|
echo |
|
echo -e " 不能和$cyan V2Ray 端口 $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]) |
|
if [[ $v2ray_transport == [45] ]]; then |
|
local tls=true |
|
fi |
|
if [[ $tls && $new_ssport == "80" ]] || [[ $tls && $new_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 [[ $dynamicPort ]] && [[ $v2ray_dynamicPort_start == $new_ssport || $v2ray_dynamicPort_end == $new_ssport ]]; then |
|
echo |
|
echo -e " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:${cyan}$port_range${none}" |
|
error |
|
elif [[ $dynamicPort ]] && [[ $v2ray_dynamicPort_start -lt $new_ssport && $new_ssport -le $v2ray_dynamicPort_end ]]; then |
|
echo |
|
echo -e " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:${cyan}$port_range${none}" |
|
error |
|
elif [[ $socks && $new_ssport == $socks_port ]]; then |
|
echo |
|
echo -e "抱歉, 此端口跟 Socks 端口冲突...当前 Socks 端口: ${cyan}$socks_port$none" |
|
error |
|
elif [[ $mtproto && $new_ssport == $mtproto_port ]]; then |
|
echo |
|
echo -e "抱歉, 此端口跟 MTProto 端口冲突...当前 MTProto 端口: ${cyan}$mtproto_port$none" |
|
error |
|
else |
|
echo |
|
echo |
|
echo -e "$yellow Shadowsocks 端口 = $cyan$new_ssport$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
pause |
|
backup_config ssport |
|
del_port $ssport |
|
open_port $new_ssport |
|
ssport=$new_ssport |
|
config |
|
clear |
|
view_shadowsocks_config_info |
|
break |
|
fi |
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
|
|
done |
|
} |
|
change_shadowsocks_password() { |
|
echo |
|
while :; do |
|
echo -e "请输入 "$yellow"Shadowsocks"$none" 密码" |
|
read -p "$(echo -e "(当前密码:${cyan}$sspass$none)"): " new_sspass |
|
[ -z "$new_sspass" ] && error && continue |
|
case $new_sspass in |
|
$sspass) |
|
echo |
|
echo " 跟当前密码一毛一样....修改个鸡鸡哦" |
|
error |
|
;; |
|
*[/$]*) |
|
echo |
|
echo -e " 由于这个脚本太辣鸡了..所以密码不能包含$red / $none或$red $ $none这两个符号.... " |
|
echo |
|
error |
|
;; |
|
*) |
|
echo |
|
echo |
|
echo -e "$yellow Shadowsocks 密码 = $cyan$new_sspass$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
pause |
|
backup_config sspass |
|
sspass=$new_sspass |
|
config |
|
clear |
|
view_shadowsocks_config_info |
|
break |
|
;; |
|
esac |
|
|
|
done |
|
|
|
} |
|
|
|
change_shadowsocks_ciphers() { |
|
echo |
|
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}${ssciphers}$none)"):" ssciphers_opt |
|
[ -z "$ssciphers_opt" ] && error && continue |
|
case $ssciphers_opt in |
|
[1-7]) |
|
new_ssciphers=${ciphers[$ssciphers_opt - 1]} |
|
if [[ $new_ssciphers == $ssciphers ]]; then |
|
echo |
|
echo " 跟当前加密协议一毛一样....修改个鸡鸡哦" |
|
error && continue |
|
fi |
|
echo |
|
echo |
|
echo -e "$yellow Shadowsocks 加密协议 = $cyan${new_ssciphers}$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
pause |
|
backup_config ssciphers |
|
ssciphers=$new_ssciphers |
|
config |
|
clear |
|
view_shadowsocks_config_info |
|
break |
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
|
|
done |
|
|
|
} |
|
disable_shadowsocks() { |
|
echo |
|
|
|
while :; do |
|
echo -e "是否关闭 ${yellow}Shadowsocks${none} [${magenta}Y/N$none]" |
|
read -p "$(echo -e "(默认 [${cyan}N$none]):") " y_n |
|
[[ -z "$y_n" ]] && y_n="n" |
|
if [[ "$y_n" == [Yy] ]]; then |
|
echo |
|
echo |
|
echo -e "$yellow 关闭 Shadowsocks = $cyan是$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
pause |
|
backup_config -ss |
|
del_port $ssport |
|
shadowsocks='' |
|
config |
|
# clear |
|
echo |
|
echo |
|
echo |
|
echo -e "$green Shadowsocks 已关闭...不过你也可以随时重新启用 Shadowsocks ...只要你喜欢$none" |
|
echo |
|
break |
|
elif [[ "$y_n" == [Nn] ]]; then |
|
echo |
|
echo -e " $green已取消关闭 Shadowsocks ....$none" |
|
echo |
|
break |
|
else |
|
error |
|
fi |
|
|
|
done |
|
} |
|
|
|
ssray_config() { |
|
echo |
|
echo |
|
echo -e " $red大佬...你没有配置 Shadowsocks - V2ray - Plugin $none...不过现在想要配置的话也是可以的 ^_^" |
|
echo |
|
echo |
|
|
|
while :; do |
|
echo -e "是否配置 ${yellow}Shadowsocks - V2ray Plugin ${none} [${magenta}Y/N$none]" |
|
echo |
|
echo |
|
echo -e "${yellow}注:v2ray-plugin 跟v2ray 是互相独立的程序,眉有关系。${none}" |
|
echo |
|
echo -e "${yellow} v2ray-plugin 跟原版shadowsocks同时服务 ${none}" |
|
echo |
|
echo |
|
read -p "$(echo -e "(默认 [${cyan}N$none]):") " install_ssray |
|
[[ -z "$install_ssray" ]] && install_ssray="n" |
|
if [[ "$install_ssray" == [Yy] ]]; then |
|
echo |
|
ssray=true |
|
ssray_port_config |
|
ssray_proto_config |
|
break |
|
elif [[ "$install_ssray" == [Nn] ]]; then |
|
break |
|
else |
|
error |
|
fi |
|
|
|
done |
|
|
|
_download_ssray_file |
|
ssray_apply_config |
|
ssray_save_config |
|
_load ss-info.sh |
|
} |
|
|
|
ssray_port_config() { |
|
local random=$(shuf -i20001-65535 -n1) |
|
while :; do |
|
echo -e "请输入 "$yellow"Shadowsocks - v2ray-plugin"$none" 端口 ["$magenta"1-65535"$none"],不能和 "$yellow"V2Ray / shadowsocks "$none" 端口相同" |
|
read -p "$(echo -e "(默认端口: ${cyan}${random}$none):") " ssrayport |
|
[ -z "$ssrayport" ] && ssrayport=$random |
|
case $ssrayport in |
|
$ssport) |
|
echo |
|
echo " 不能和 Shadowsocks 端口一毛一样...." |
|
error |
|
;; |
|
$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 [[ $tls && $ssrayport == "80" ]] || [[ $tls && $ssrayport == "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 == $ssrayport || $v2ray_dynamic_port_end_input == $ssrayport ]]; 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 $ssrayport && $ssrayport -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 v2ray-plugin 端口 = $cyan$ssrayport$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
break |
|
fi |
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
|
|
done |
|
} |
|
|
|
ssray_proto_config() { |
|
|
|
echo |
|
while :; do |
|
echo -e "请选择 "$yellow"V2Ray-Plugin"$none" 传输协议 [${magenta}1-${#transport[*]}$none]" |
|
echo |
|
for ((i = 1; i <= ${#ssray_transports[*]}; i++)); do |
|
Stream="${ssray_transports[$i - 1]}" |
|
echo -e "$yellow $i. $none${Stream}" |
|
done |
|
echo |
|
echo -e "$yellow 备注: 2.HTTPS 3.QUIC 均要求严格验证【域名】与【证书】,需要解析至本机的公共域名 $none" |
|
echo |
|
read -p "$(echo -e "(默认协议: ${cyan}http$none)"):" ssray_transport |
|
[ -z "$ssray_transport" ] && ssray_transport=1 |
|
echo -e "$yellow V2Ray-Plugin 传输协议 = $cyan${ssray_transports[$ssray_transport - 1]}$none" |
|
echo |
|
echo |
|
echo "----------------------------------------------------------------" |
|
get_ip |
|
case $ssray_transport in |
|
1) |
|
ssrayopt="server" |
|
ssray_domain=$ip |
|
break |
|
;; |
|
[2-3]) |
|
while :; do |
|
echo |
|
echo -e "请输入一个 $magenta正确的域名$none,一定一定一定要正确,不!能!出!错!" |
|
read -p "(例如:233blog.com): " ssray_domain |
|
[ -z "$ssray_domain" ] && error && continue |
|
echo |
|
echo |
|
echo -e "$yellow 你的域名 = $cyan$ssray_domain$none" |
|
echo "----------------------------------------------------------------" |
|
break |
|
done |
|
echo |
|
echo |
|
echo -e "$yellow 请将 $magenta$ssray_domain$none $yellow解析到: $cyan$ip$none" |
|
echo |
|
echo -e "$yellow 请将 $magenta$ssray_domain$none $yellow解析到: $cyan$ip$none" |
|
echo |
|
echo -e "$yellow 请将 $magenta$ssray_domain$none $yellow解析到: $cyan$ip$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
case $ssray_transport in |
|
2) |
|
ssrayopt="server;tls;host=${ssray_domain}" |
|
break |
|
;; |
|
3) |
|
ssrayopt="server;mode=quic;host=${ssray_domain}" |
|
break |
|
;; |
|
esac |
|
break |
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
done |
|
echo |
|
echo |
|
echo |
|
if [[ $ssray_transport -gt 1 && $ssray_domain ]]; then |
|
if [[ -f /root/.acme.sh/$ssray_domain/fullchain.cer && -f /root/.acme.sh/$ssray_domain/$ssray_domain.key ]]; then |
|
echo -e "$yellow 噫!好像已经有证书了! 皮皮虾咋们走! $none" |
|
else |
|
echo -e "$yellow 开始安装acme.sh $none" |
|
if ! command -v socat; then |
|
echo -e "$red 需要安装socat $none" |
|
exit 1 |
|
fi |
|
curl https://get.acme.sh | bash |
|
|
|
echo -e "$yellow 开始申请 $ssray_domain 的证书,如果有正在使用80端口的程序先让它们退下~... $none" |
|
pkill caddy |
|
pkill httpd |
|
pkill nginx |
|
sleep 3 |
|
|
|
if /root/.acme.sh/acme.sh --issue --standalone -d $ssray_domain; then |
|
echo -e "$yellow 好了搞定了。$none" |
|
else |
|
echo -e "$yellow 不知道什么鬼,上面的出错提示截图找人问吧!$none" |
|
exit 1 |
|
fi |
|
fi |
|
fi |
|
} |
|
|
|
change_ssray_config() { |
|
|
|
_load download-ssray.sh |
|
|
|
if [[ $ssray ]]; then |
|
|
|
while :; do |
|
echo |
|
echo -e "$yellow 1. $none修改 Shadowsocks - V2ray插件 端口" |
|
echo |
|
echo -e "$yellow 2. $none修改 Shadowsocks - V2ray插件 协议" |
|
echo |
|
echo -e "$yellow 3. $none升级 Shadowsocks - V2ray插件" |
|
echo |
|
echo -e "$yellow 4. $none关闭 Shadowsocks - V2ray" |
|
echo |
|
read -p "$(echo -e "请选择 [${magenta}1-3$none]:")" _opt |
|
if [[ -z $_opt ]]; then |
|
error |
|
else |
|
case $_opt in |
|
1) |
|
local oldssrayport=$ssrayport |
|
ssray_port_config |
|
ssray_save_config |
|
ssray_apply_config |
|
del_port $oldssrayport |
|
open_port $ssrayport |
|
_load ss-info.sh |
|
break |
|
;; |
|
2) |
|
ssray_proto_config |
|
ssray_save_config |
|
ssray_apply_config |
|
_load ss-info.sh |
|
break |
|
;; |
|
3) |
|
_update_ssray_version |
|
ssray_save_config |
|
break |
|
;; |
|
4) |
|
del_port $ssrayport |
|
_uninstall_ssray |
|
ssray= |
|
install_ssray=n |
|
rm -f $ssraybackup |
|
break |
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
fi |
|
|
|
done |
|
|
|
else |
|
ssray_config |
|
fi |
|
} |
|
|
|
ssray_save_config() { |
|
cat >$ssraybackup <<EOF |
|
install_ssray=${install_ssray} |
|
ssray_ver="$ssray_latest_ver" |
|
ssray=${ssray} |
|
ssray_transport=${ssray_transport} |
|
ssrayport=${ssrayport} |
|
ssray_domain="${ssray_domain}" |
|
ssrayopt="${ssrayopt}" |
|
EOF |
|
} |
|
|
|
ssray_apply_config() { |
|
_install_ssray_service |
|
open_port $ssrayport |
|
do_service restart ssray |
|
} |
|
|
|
change_v2ray_config() { |
|
local _menu=( |
|
"修改 V2Ray 端口" |
|
"修改 V2Ray 传输协议" |
|
"修改 V2Ray 动态端口 (如果可以)" |
|
"修改 用户ID ( UUID )" |
|
"修改 TLS 域名 (如果可以)" |
|
"修改 分流的路径 (如果可以)" |
|
"修改 伪装的网址 (如果可以)" |
|
"关闭 网站伪装 和 路径分流 (如果可以)" |
|
"开启 / 关闭 广告拦截" |
|
"增加 V2ray 用户" |
|
) |
|
while :; do |
|
for ((i = 1; i <= ${#_menu[*]}; i++)); do |
|
if [[ "$i" -le 9 ]]; then |
|
echo |
|
echo -e "$yellow $i. $none${_menu[$i - 1]}" |
|
else |
|
echo |
|
echo -e "$yellow $i. $none${_menu[$i - 1]}" |
|
fi |
|
done |
|
echo |
|
read -p "$(echo -e "请选择 [${magenta}1-${#_menu[*]}$none]:")" _opt |
|
if [[ -z $_opt ]]; then |
|
error |
|
else |
|
case $_opt in |
|
1) |
|
change_v2ray_port |
|
break |
|
;; |
|
2) |
|
change_v2ray_transport |
|
break |
|
;; |
|
3) |
|
change_v2ray_dynamicport |
|
break |
|
;; |
|
4) |
|
change_v2ray_id |
|
break |
|
;; |
|
5) |
|
change_domain |
|
break |
|
;; |
|
6) |
|
change_path_config |
|
break |
|
;; |
|
7) |
|
change_proxy_site_config |
|
break |
|
;; |
|
8) |
|
disable_path |
|
break |
|
;; |
|
9) |
|
blocked_hosts |
|
break |
|
;; |
|
10) |
|
change_vmess_user |
|
break |
|
;; |
|
[aA][Ii][aA][Ii] | [Dd][Dd]) |
|
custom_uuid |
|
break |
|
;; |
|
[Dd] | [Aa][Ii] | 233 | 233[Bb][Ll][Oo][Gg] | 233[Bb][Ll][Oo][Gg].[Cc][Oo][Mm] | 233[Bb][Oo][Yy] | [Aa][Ll][Tt][Ee][Rr][Ii][Dd]) |
|
change_v2ray_alterId |
|
break |
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
fi |
|
done |
|
} |
|
|
|
change_vmess_user() { |
|
echo |
|
echo |
|
|
|
local uuid=$(cat /proc/sys/kernel/random/uuid) |
|
local randomemail=${3:-${uuid:30}@233.com} |
|
while :; do |
|
echo -e "请输入 "$yellow"新用户AlterId$none (0~65535 整数)" |
|
read -p "[默认:64]" new_alterId |
|
[[ -z $new_alterId ]] && new_alterId=64 |
|
if [[ $new_alterId =~ ^[0-9]+$ ]]; then |
|
break |
|
else |
|
_red "$new_alterId 是啥???" |
|
fi |
|
done |
|
|
|
echo -e "请输入 "$yellow"新用户 Email"$none"(任意字符,仅作统计识别)" |
|
read -p "[默认:${randomemail}]" new_email |
|
[[ -z $new_email ]] && new_email=$randomemail |
|
|
|
echo |
|
echo |
|
_load jqcmd.sh |
|
jq_gen_jsonpatch |
|
jq_vmess_adduser $uuid $new_alterId $new_email |
|
jq_printvmess $ip "[233]" |
|
[[ $v6ip ]] && jq_printvmess $v6ip "[233]" |
|
jq_patchback |
|
jq_clear_tmp |
|
echo |
|
echo |
|
_yellow " ---- 搞定了。" |
|
restart_v2ray |
|
_yellow " ---- 翻查多用户的vmess link请用v2ray murl查看。" |
|
_yellow " ---- 翻查各个用户的流量,可用v2ray traffic查看(重启v2ray后会清空)。" |
|
echo |
|
|
|
} |
|
|
|
change_v2ray_port() { |
|
if [[ $v2ray_transport == 4 ]]; then |
|
echo |
|
echo -e " 由于你目前使用的是$yellow WebSocket + TLS $none传输协议...所以修不修改 V2Ray 端口没有什么不一样的" |
|
echo |
|
echo " 如果你想要使用其他端口...可以先修改 V2Ray 的传输协议..之后再修改 V2Ray 端口" |
|
echo |
|
change_v2ray_transport_ask |
|
elif [[ $v2ray_transport == 5 ]]; then |
|
echo |
|
echo -e " 由于你目前使用的是$yellow HTTP/2 $none传输协议...所以修不修改 V2Ray 端口没有什么不一样的" |
|
echo |
|
echo " 如果你想要使用其他端口...可以先修改 V2Ray 的传输协议..之后再修改 V2Ray 端口" |
|
echo |
|
change_v2ray_transport_ask |
|
else |
|
echo |
|
while :; do |
|
echo -e "请输入 "$yellow"V2Ray"$none" 端口 ["$magenta"1-65535"$none"]" |
|
read -p "$(echo -e "(当前端口: ${cyan}${v2ray_port}$none):")" new_v2ray_port |
|
[[ -z $new_v2ray_port ]] && error && continue |
|
case $new_v2ray_port in |
|
$v2ray_port) |
|
echo |
|
echo " 哎呀...跟当前端口一毛一样呀...修改个鸡鸡哦" |
|
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 [[ $dynamicPort ]] && [[ $v2ray_dynamicPort_start == $new_v2ray_port || $v2ray_dynamicPort_end == $new_v2ray_port ]]; then |
|
echo |
|
echo -e " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:${cyan}$port_range${none}" |
|
error |
|
elif [[ $dynamicPort ]] && [[ $v2ray_dynamicPort_start -lt $new_v2ray_port && $new_v2ray_port -le $v2ray_dynamicPort_end ]]; then |
|
echo |
|
echo -e " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:${cyan}$port_range${none}" |
|
error |
|
elif [[ $shadowsocks && $new_v2ray_port == $ssport ]]; then |
|
echo |
|
echo -e "抱歉, 此端口跟 Shadowsocks 端口冲突...当前 Shadowsocks 端口: ${cyan}$ssport$none" |
|
error |
|
elif [[ $socks && $new_v2ray_port == $socks_port ]]; then |
|
echo |
|
echo -e "抱歉, 此端口跟 Socks 端口冲突...当前 Socks 端口: ${cyan}$socks_port$none" |
|
error |
|
elif [[ $mtproto && $new_v2ray_port == $mtproto_port ]]; then |
|
echo |
|
echo -e "抱歉, 此端口跟 MTProto 端口冲突...当前 MTProto 端口: ${cyan}$mtproto_port$none" |
|
error |
|
else |
|
echo |
|
echo |
|
echo -e "$yellow V2Ray 端口 = $cyan$new_v2ray_port$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
pause |
|
backup_config v2ray_port |
|
del_port $v2ray_port |
|
open_port $new_v2ray_port |
|
v2ray_port=$new_v2ray_port |
|
config |
|
clear |
|
view_v2ray_config_info |
|
break |
|
fi |
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
|
|
done |
|
fi |
|
|
|
} |
|
change_v2ray_transport_ask() { |
|
echo |
|
while :; do |
|
echo -e "是否需要修改$yellow V2Ray $none传输协议 [${magenta}Y/N$none]" |
|
read -p "$(echo -e "默认 [${cyan}N$none]:")" y_n |
|
[ -z $y_n ] && break |
|
if [[ $y_n == [Yy] ]]; then |
|
change_v2ray_transport |
|
break |
|
elif [[ $y_n == [Nn] ]]; then |
|
break |
|
else |
|
error |
|
fi |
|
done |
|
} |
|
change_v2ray_transport() { |
|
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}${transport[$v2ray_transport - 1]}$none)"):" new_v2ray_transport |
|
if [ -z "$new_v2ray_transport" ]; then |
|
error |
|
else |
|
case $new_v2ray_transport in |
|
$v2ray_transport) |
|
echo |
|
echo " 哎呀...跟当前传输协议一毛一样呀...修改个鸡鸡哦" |
|
error |
|
;; |
|
4 | 5) |
|
if [[ $v2ray_port == "80" || $v2ray_port == "443" ]]; then |
|
echo |
|
echo -e " 抱歉...如果你想要使用${cyan} ${transport[$new_v2ray_transport - 1]} $none传输协议.. ${red}V2Ray 端口不能为 80 或者 443 ...$none" |
|
echo |
|
echo -e " 当前 V2Ray 端口: ${cyan}$v2ray_port$none" |
|
error |
|
elif [[ $shadowsocks ]] && [[ $ssport == "80" || $ssport == "443" ]]; then |
|
echo |
|
echo -e " 抱歉...如果你想要使用${cyan} ${transport[$new_v2ray_transport - 1]} $none传输协议.. ${red}Shadowsocks 端口不能为 80 或者 443 ...$none" |
|
echo |
|
echo -e " 当前 Shadowsocks 端口: ${cyan}$ssport$none" |
|
error |
|
elif [[ $socks ]] && [[ $socks_port == "80" || $socks_port == "443" ]]; then |
|
echo |
|
echo -e " 抱歉...如果你想要使用${cyan} ${transport[$new_v2ray_transport - 1]} $none传输协议.. ${red}Socks 端口不能为 80 或者 443 ...$none" |
|
echo |
|
echo -e " 当前 Socks 端口: ${cyan}$socks_port$none" |
|
error |
|
elif [[ $mtproto ]] && [[ $mtproto_port == "80" || $mtproto_port == "443" ]]; then |
|
echo |
|
echo -e " 抱歉...如果你想要使用${cyan} ${transport[$new_v2ray_transport - 1]} $none传输协议.. ${red}MTProto 端口不能为 80 或者 443 ...$none" |
|
echo |
|
echo -e " 当前 MTProto 端口: ${cyan}$mtproto_port$none" |
|
error |
|
else |
|
echo |
|
echo |
|
echo -e "$yellow V2Ray 传输协议 = $cyan${transport[$new_v2ray_transport - 1]}$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
break |
|
fi |
|
;; |
|
[1-9] | [1-2][0-9] | 3[0-2]) |
|
echo |
|
echo |
|
echo -e "$yellow V2Ray 传输协议 = $cyan${transport[$new_v2ray_transport - 1]}$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
break |
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
fi |
|
|
|
done |
|
pause |
|
|
|
if [[ $new_v2ray_transport == [45] ]]; then |
|
tls_config |
|
elif [[ $new_v2ray_transport -ge 18 ]]; then |
|
v2ray_dynamic_port_start |
|
v2ray_dynamic_port_end |
|
pause |
|
old_transport |
|
open_port "multiport" |
|
backup_config v2ray_transport v2ray_dynamicPort_start v2ray_dynamicPort_end |
|
port_range="${v2ray_dynamic_port_start_input}-${v2ray_dynamic_port_end_input}" |
|
v2ray_transport=$new_v2ray_transport |
|
config |
|
clear |
|
view_v2ray_config_info |
|
else |
|
old_transport |
|
backup_config v2ray_transport |
|
v2ray_transport=$new_v2ray_transport |
|
config |
|
clear |
|
view_v2ray_config_info |
|
fi |
|
|
|
} |
|
old_transport() { |
|
if [[ $v2ray_transport == [45] ]]; then |
|
del_port "80" |
|
del_port "443" |
|
if [[ $caddy && $caddy_pid ]]; then |
|
do_service stop caddy |
|
if [[ $systemd ]]; then |
|
systemctl disable caddy >/dev/null 2>&1 |
|
else |
|
update-rc.d -f caddy remove >/dev/null 2>&1 |
|
fi |
|
elif [[ $caddy ]]; then |
|
if [[ $systemd ]]; then |
|
systemctl disable caddy >/dev/null 2>&1 |
|
else |
|
update-rc.d -f caddy remove >/dev/null 2>&1 |
|
fi |
|
fi |
|
if [[ $is_path ]]; then |
|
backup_config -path |
|
fi |
|
elif [[ $v2ray_transport -ge 18 ]]; then |
|
del_port "multiport" |
|
fi |
|
} |
|
|
|
tls_config() { |
|
while :; do |
|
echo |
|
echo |
|
echo |
|
echo -e "请输入一个 $magenta正确的域名$none,一定一定一定要正确,不!能!出!错!" |
|
read -p "(例如:233blog.com): " new_domain |
|
[ -z "$new_domain" ] && error && continue |
|
echo |
|
echo |
|
echo -e "$yellow 你的域名 = $cyan$new_domain$none" |
|
echo "----------------------------------------------------------------" |
|
break |
|
done |
|
get_ip |
|
echo |
|
echo |
|
echo -e "$yellow 请将 $magenta$new_domain$none $yellow解析到: $cyan$ip$none" |
|
echo |
|
echo -e "$yellow 请将 $magenta$new_domain$none $yellow解析到: $cyan$ip$none" |
|
echo |
|
echo -e "$yellow 请将 $magenta$new_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 [[ $caddy ]]; then |
|
path_config_ask |
|
pause |
|
# domain_check |
|
backup_config v2ray_transport domain |
|
if [[ $new_path ]]; then |
|
backup_config +path |
|
path=$new_path |
|
proxy_site=$new_proxy_site |
|
is_path=true |
|
fi |
|
|
|
if [[ $v2ray_transport -ge 18 ]]; then |
|
del_port "multiport" |
|
fi |
|
domain=$new_domain |
|
|
|
open_port "80" |
|
open_port "443" |
|
if [[ $systemd ]]; then |
|
systemctl enable caddy >/dev/null 2>&1 |
|
else |
|
update-rc.d -f caddy defaults >/dev/null 2>&1 |
|
fi |
|
v2ray_transport=$new_v2ray_transport |
|
caddy_config |
|
config |
|
clear |
|
view_v2ray_config_info |
|
else |
|
if [[ $new_v2ray_transport == 5 ]]; then |
|
path_config_ask |
|
pause |
|
domain_check |
|
backup_config v2ray_transport domain caddy |
|
if [[ $new_path ]]; then |
|
backup_config +path |
|
path=$new_path |
|
proxy_site=$new_proxy_site |
|
is_path=true |
|
fi |
|
if [[ $v2ray_transport -ge 18 ]]; then |
|
del_port "multiport" |
|
fi |
|
domain=$new_domain |
|
install_caddy |
|
open_port "80" |
|
open_port "443" |
|
v2ray_transport=$new_v2ray_transport |
|
caddy_config |
|
config |
|
caddy=true |
|
clear |
|
view_v2ray_config_info |
|
else |
|
auto_tls_config |
|
fi |
|
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 |
|
echo |
|
echo |
|
echo -e "$yellow 自动配置 TLS = $cyan打开$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
path_config_ask |
|
pause |
|
domain_check |
|
backup_config v2ray_transport domain caddy |
|
if [[ $new_path ]]; then |
|
backup_config +path |
|
path=$new_path |
|
proxy_site=$new_proxy_site |
|
is_path=true |
|
fi |
|
if [[ $v2ray_transport -ge 18 ]]; then |
|
del_port "multiport" |
|
fi |
|
domain=$new_domain |
|
install_caddy |
|
open_port "80" |
|
open_port "443" |
|
v2ray_transport=$new_v2ray_transport |
|
caddy_config |
|
config |
|
caddy=true |
|
clear |
|
view_v2ray_config_info |
|
break |
|
elif [[ "$auto_install_caddy" == [Nn] ]]; then |
|
echo |
|
echo |
|
echo -e "$yellow 自动配置 TLS = $cyan关闭$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
pause |
|
domain_check |
|
backup_config v2ray_transport domain |
|
if [[ $v2ray_transport -ge 18 ]]; then |
|
del_port "multiport" |
|
fi |
|
domain=$new_domain |
|
open_port "80" |
|
open_port "443" |
|
v2ray_transport=$new_v2ray_transport |
|
config |
|
clear |
|
view_v2ray_config_info |
|
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]):")" new_path |
|
[[ -z $new_path ]] && new_path="233blog" |
|
|
|
case $new_path in |
|
*[/$]*) |
|
echo |
|
echo -e " 由于这个脚本太辣鸡了..所以分流的路径不能包含$red / $none或$red $ $none这两个符号.... " |
|
echo |
|
error |
|
;; |
|
*) |
|
echo |
|
echo |
|
echo -e "$yellow 分流的路径 = ${cyan}/${new_path}$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
break |
|
;; |
|
esac |
|
done |
|
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]):")" new_proxy_site |
|
[[ -z $new_proxy_site ]] && new_proxy_site="https://liyafly.com" |
|
|
|
case $new_proxy_site in |
|
*[#$]*) |
|
echo |
|
echo -e " 由于这个脚本太辣鸡了..所以伪装的网址不能包含$red # $none或$red $ $none这两个符号.... " |
|
echo |
|
error |
|
;; |
|
*) |
|
echo |
|
echo |
|
echo -e "$yellow 伪装的网址 = ${cyan}${new_proxy_site}$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
break |
|
;; |
|
esac |
|
done |
|
} |
|
|
|
install_caddy() { |
|
_load download-caddy.sh |
|
_download_caddy_file |
|
_install_caddy_service |
|
|
|
} |
|
caddy_config() { |
|
# local email=$(shuf -i1-10000000000 -n1) |
|
_load caddy-config.sh |
|
# systemctl restart caddy |
|
do_service restart caddy |
|
} |
|
v2ray_dynamic_port_start() { |
|
echo |
|
echo |
|
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]) |
|
if [[ $shadowsocks && $v2ray_dynamic_port_start_input == $ssport ]]; then |
|
echo |
|
echo -e "抱歉, 此端口跟 Shadowsocks 端口冲突...当前 Shadowsocks 端口: ${cyan}$ssport$none" |
|
error |
|
elif [[ $socks && $v2ray_dynamic_port_start_input == $socks_port ]]; then |
|
echo |
|
echo -e "抱歉, 此端口跟 Socks 端口冲突...当前 Socks 端口: ${cyan}$socks_port$none" |
|
error |
|
elif [[ $mtproto && $v2ray_dynamic_port_start_input == $mtproto_port ]]; then |
|
echo |
|
echo -e "抱歉, 此端口跟 MTProto 端口冲突...当前 MTProto 端口: ${cyan}$mtproto_port$none" |
|
error |
|
else |
|
echo |
|
echo |
|
echo -e "$yellow V2Ray 动态端口开始 = $cyan$v2ray_dynamic_port_start_input$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
break |
|
fi |
|
|
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
|
|
done |
|
|
|
if [[ $v2ray_dynamic_port_start_input -lt $v2ray_port ]]; then |
|
lt_v2ray_port=true |
|
fi |
|
if [[ $shadowsocks ]] && [[ $v2ray_dynamic_port_start_input -lt $ssport ]]; then |
|
lt_ssport=true |
|
fi |
|
if [[ $socks ]] && [[ $v2ray_dynamic_port_start_input -lt $socks_port ]]; then |
|
lt_socks_port=true |
|
fi |
|
if [[ $mtproto ]] && [[ $v2ray_dynamic_port_start_input -lt $mtproto_port ]]; then |
|
lt_mtproto_port=true |
|
fi |
|
|
|
} |
|
|
|
v2ray_dynamic_port_end() { |
|
echo |
|
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 |
|
elif [ $lt_ssport ] && [[ ${v2ray_dynamic_port_end_input} -ge $ssport ]]; then |
|
echo |
|
echo " V2Ray 动态端口结束范围 不能包括 Shadowsocks 端口..." |
|
echo |
|
echo -e " 当前 Shadowsocks 端口: ${cyan}$ssport$none" |
|
error |
|
elif [ $lt_socks_port ] && [[ ${v2ray_dynamic_port_end_input} -ge $socks_port ]]; then |
|
echo |
|
echo " V2Ray 动态端口结束范围 不能包括 Socks 端口..." |
|
echo |
|
echo -e " 当前 Socks 端口: ${cyan}$socks_port$none" |
|
error |
|
elif [ $lt_mtproto_port ] && [[ ${v2ray_dynamic_port_end_input} -ge $mtproto_port ]]; then |
|
echo |
|
echo " V2Ray 动态端口结束范围 不能包括 MTProto 端口..." |
|
echo |
|
echo -e " 当前 MTProto 端口: ${cyan}$mtproto_port$none" |
|
error |
|
else |
|
echo |
|
echo |
|
echo -e "$yellow V2Ray 动态端口结束 = $cyan$v2ray_dynamic_port_end_input$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
break |
|
fi |
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
|
|
done |
|
|
|
} |
|
change_v2ray_dynamicport() { |
|
if [[ $v2ray_transport -ge 18 ]]; then |
|
change_v2ray_dynamic_port_start |
|
change_v2ray_dynamic_port_end |
|
pause |
|
del_port "multiport" |
|
open_port "multiport" |
|
backup_config v2ray_dynamicPort_start v2ray_dynamicPort_end |
|
port_range="${v2ray_dynamic_port_start_input}-${v2ray_dynamic_port_end_input}" |
|
config |
|
# clear |
|
echo |
|
echo -e "$green 动态端口修改成功啦...你不需要修改 V2Ray 客户端配置...保持原有的配置即可...$none" |
|
echo |
|
else |
|
echo |
|
echo -e "$red ...当前传输协议木有启用动态端口...$none" |
|
echo |
|
while :; do |
|
echo -e "是否需要修改传输协议 [${magenta}Y/N$none]" |
|
read -p "$(echo -e "默认 [${cyan}N$none]:")" y_n |
|
if [[ -z $y_n ]]; then |
|
echo |
|
echo -e "$green 已取消修改传输协议...$none" |
|
echo |
|
break |
|
else |
|
if [[ $y_n == [Yy] ]]; then |
|
change_v2ray_transport |
|
break |
|
elif [[ $y_n == [Nn] ]]; then |
|
echo |
|
echo -e "$green 已取消修改传输协议...$none" |
|
echo |
|
break |
|
else |
|
error |
|
fi |
|
fi |
|
done |
|
|
|
fi |
|
} |
|
change_v2ray_dynamic_port_start() { |
|
echo |
|
echo |
|
while :; do |
|
echo -e "请输入 "$yellow"V2Ray 动态端口开始 "$none"范围 ["$magenta"1-65535"$none"]" |
|
read -p "$(echo -e "(当前动态开始端口: ${cyan}$v2ray_dynamicPort_start$none):")" v2ray_dynamic_port_start_input |
|
[ -z $v2ray_dynamic_port_start_input ] && error && continue |
|
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]) |
|
if [[ $shadowsocks && $v2ray_dynamic_port_start_input == $ssport ]]; then |
|
echo |
|
echo -e "抱歉, 此端口跟 Shadowsocks 端口冲突...当前 Shadowsocks 端口: ${cyan}$ssport$none" |
|
error |
|
elif [[ $socks && $v2ray_dynamic_port_start_input == $socks_port ]]; then |
|
echo |
|
echo -e "抱歉, 此端口跟 Socks 端口冲突...当前 Socks 端口: ${cyan}$socks_port$none" |
|
error |
|
elif [[ $mtproto && $v2ray_dynamic_port_start_input == $mtproto_port ]]; then |
|
echo |
|
echo -e "抱歉, 此端口跟 MTProto 端口冲突...当前 MTProto 端口: ${cyan}$mtproto_port$none" |
|
error |
|
else |
|
echo |
|
echo |
|
echo -e "$yellow V2Ray 动态端口开始 = $cyan$v2ray_dynamic_port_start_input$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
break |
|
fi |
|
|
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
|
|
done |
|
|
|
if [[ $v2ray_dynamic_port_start_input -lt $v2ray_port ]]; then |
|
lt_v2ray_port=true |
|
fi |
|
if [[ $shadowsocks ]] && [[ $v2ray_dynamic_port_start_input -lt $ssport ]]; then |
|
lt_ssport=true |
|
fi |
|
if [[ $socks ]] && [[ $v2ray_dynamic_port_start_input -lt $socks_port ]]; then |
|
lt_socks_port=true |
|
fi |
|
if [[ $mtproto ]] && [[ $v2ray_dynamic_port_start_input -lt $mtproto_port ]]; then |
|
lt_mtproto_port=true |
|
fi |
|
} |
|
|
|
change_v2ray_dynamic_port_end() { |
|
echo |
|
while :; do |
|
echo -e "请输入 "$yellow"V2Ray 动态端口结束 "$none"范围 ["$magenta"1-65535"$none"]" |
|
read -p "$(echo -e "(当前动态结束端口: ${cyan}$v2ray_dynamicPort_end$none):")" v2ray_dynamic_port_end_input |
|
[ -z $v2ray_dynamic_port_end_input ] && error && continue |
|
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 |
|
elif [ $lt_ssport ] && [[ ${v2ray_dynamic_port_end_input} -ge $ssport ]]; then |
|
echo |
|
echo " V2Ray 动态端口结束范围 不能包括 Shadowsocks 端口..." |
|
echo |
|
echo -e " 当前 Shadowsocks 端口: ${cyan}$ssport$none" |
|
error |
|
elif [ $lt_socks_port ] && [[ ${v2ray_dynamic_port_end_input} -ge $socks_port ]]; then |
|
echo |
|
echo " V2Ray 动态端口结束范围 不能包括 Socks 端口..." |
|
echo |
|
echo -e " 当前 Socks 端口: ${cyan}$socks_port$none" |
|
error |
|
elif [ $lt_mtproto_port ] && [[ ${v2ray_dynamic_port_end_input} -ge $mtproto_port ]]; then |
|
echo |
|
echo " V2Ray 动态端口结束范围 不能包括 MTProto 端口..." |
|
echo |
|
echo -e " 当前 MTProto 端口: ${cyan}$mtproto_port$none" |
|
error |
|
else |
|
echo |
|
echo |
|
echo -e "$yellow V2Ray 动态端口结束 = $cyan$v2ray_dynamic_port_end_input$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
break |
|
fi |
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
|
|
done |
|
|
|
} |
|
change_v2ray_id() { |
|
echo |
|
while :; do |
|
echo -e "是否确定要修改用户ID [${magenta}Y/N$none]" |
|
read -p "$(echo -e "默认 [${cyan}N$none]:")" y_n |
|
if [[ -z $y_n ]]; then |
|
echo |
|
echo -e "$green 已取消修改用户ID...$none" |
|
echo |
|
break |
|
else |
|
if [[ $y_n == [Yy] ]]; then |
|
echo |
|
echo |
|
echo -e "$yellow 修改用户ID = $cyan确定$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
pause |
|
backup_config uuid |
|
v2ray_id=$uuid |
|
config |
|
clear |
|
view_v2ray_config_info |
|
break |
|
elif [[ $y_n == [Nn] ]]; then |
|
echo |
|
echo -e "$green 已取消修改用户ID...$none" |
|
echo |
|
break |
|
else |
|
error |
|
fi |
|
fi |
|
done |
|
} |
|
change_domain() { |
|
if [[ $v2ray_transport == [45] ]] && [[ $caddy ]]; then |
|
while :; do |
|
echo |
|
echo -e "请输入一个 $magenta正确的域名$none,一定一定一定要正确,不!能!出!错!" |
|
read -p "$(echo -e "(当前域名: ${cyan}$domain$none):") " new_domain |
|
[ -z "$new_domain" ] && error && continue |
|
if [[ $new_domain == $domain ]]; then |
|
echo |
|
echo -e " 跟当前域名一毛一样啊...修改个鸡鸡哦" |
|
echo |
|
error && continue |
|
fi |
|
echo |
|
echo |
|
echo -e "$yellow 你的域名 = $cyan$new_domain$none" |
|
echo "----------------------------------------------------------------" |
|
break |
|
done |
|
get_ip |
|
echo |
|
echo |
|
echo -e "$yellow 请将 $magenta$new_domain$none $yellow解析到: $cyan$ip$none" |
|
echo |
|
echo -e "$yellow 请将 $magenta$new_domain$none $yellow解析到: $cyan$ip$none" |
|
echo |
|
echo -e "$yellow 请将 $magenta$new_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 |
|
pause |
|
# domain_check |
|
backup_config domain |
|
domain=$new_domain |
|
caddy_config |
|
config |
|
clear |
|
view_v2ray_config_info |
|
break |
|
else |
|
error |
|
fi |
|
fi |
|
|
|
done |
|
else |
|
echo |
|
echo -e "$red 抱歉...不支持修改...$none" |
|
echo |
|
echo -e " 备注..修改 TLS 域名仅支持传输协议为 ${yellow}WebSocket + TLS$none 或 ${yellow}HTTP/2$none 并且$yellow 自动配置 TLS = 打开$none" |
|
echo |
|
echo -e " 当前传输协议为: ${cyan}${transport[$v2ray_transport - 1]}${none}" |
|
echo |
|
if [[ $caddy ]]; then |
|
echo -e " 自动配置 TLS = ${cyan}打开$none" |
|
else |
|
echo -e " 自动配置 TLS = $red关闭$none" |
|
fi |
|
echo |
|
fi |
|
} |
|
change_path_config() { |
|
if [[ $v2ray_transport == [45] ]] && [[ $caddy && $is_path ]]; then |
|
echo |
|
while :; do |
|
echo -e "请输入想要 ${magenta}用来分流的路径$none , 例如 /233blog , 那么只需要输入 233blog 即可" |
|
read -p "$(echo -e "(当前分流的路径: [${cyan}/${path}$none]):")" new_path |
|
[[ -z $new_path ]] && error && continue |
|
|
|
case $new_path in |
|
$path) |
|
echo |
|
echo -e " 大佬...跟 当前分流的路径 一毛一样啊...修改个鸡鸡哦 " |
|
echo |
|
error |
|
;; |
|
*[/$]*) |
|
echo |
|
echo -e " 由于这个脚本太辣鸡了..所以分流的路径不能包含$red / $none或$red $ $none这两个符号.... " |
|
echo |
|
error |
|
;; |
|
*) |
|
echo |
|
echo |
|
echo -e "$yellow 分流的路径 = ${cyan}/${new_path}$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
break |
|
;; |
|
esac |
|
done |
|
pause |
|
backup_config path |
|
path=$new_path |
|
caddy_config |
|
config |
|
clear |
|
view_v2ray_config_info |
|
elif [[ $v2ray_transport == [45] ]] && [[ $caddy ]]; then |
|
path_config_ask |
|
if [[ $new_path ]]; then |
|
backup_config +path |
|
path=$new_path |
|
proxy_site=$new_proxy_site |
|
is_path=true |
|
caddy_config |
|
config |
|
clear |
|
view_v2ray_config_info |
|
else |
|
echo |
|
echo |
|
echo " 给大佬点赞....好果断的放弃配置 网站伪装 和 路径分流" |
|
echo |
|
echo |
|
fi |
|
else |
|
echo |
|
echo -e "$red 抱歉...不支持修改...$none" |
|
echo |
|
echo -e " 备注..修改 分流的路径 仅支持传输协议为 ${yellow}WebSocket + TLS$none 或 ${yellow}HTTP/2$none 并且$yellow 自动配置 TLS = 打开$none" |
|
echo |
|
echo -e " 当前传输协议为: ${cyan}${transport[$v2ray_transport - 1]}${none}" |
|
echo |
|
if [[ $caddy ]]; then |
|
echo -e " 自动配置 TLS = ${cyan}打开$none" |
|
else |
|
echo -e " 自动配置 TLS = $red关闭$none" |
|
fi |
|
echo |
|
change_v2ray_transport_ask |
|
fi |
|
|
|
} |
|
change_proxy_site_config() { |
|
if [[ $v2ray_transport == [45] ]] && [[ $caddy && $is_path ]]; then |
|
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}${proxy_site}$none]):")" new_proxy_site |
|
[[ -z $new_proxy_site ]] && error && continue |
|
|
|
case $new_proxy_site in |
|
*[#$]*) |
|
echo |
|
echo -e " 由于这个脚本太辣鸡了..所以伪装的网址不能包含$red # $none或$red $ $none这两个符号.... " |
|
echo |
|
error |
|
;; |
|
*) |
|
echo |
|
echo |
|
echo -e "$yellow 伪装的网址 = ${cyan}${new_proxy_site}$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
break |
|
;; |
|
esac |
|
done |
|
pause |
|
backup_config proxy_site |
|
proxy_site=$new_proxy_site |
|
caddy_config |
|
echo |
|
echo |
|
echo " 哎哟...好像是修改成功了..." |
|
echo |
|
echo -e " 赶紧打开你的域名 ${cyan}https://${domain}$none 检查一下看看" |
|
echo |
|
echo |
|
elif [[ $v2ray_transport == [45] ]] && [[ $caddy ]]; then |
|
path_config_ask |
|
if [[ $new_path ]]; then |
|
backup_config +path |
|
path=$new_path |
|
proxy_site=$new_proxy_site |
|
is_path=true |
|
caddy_config |
|
config |
|
clear |
|
view_v2ray_config_info |
|
else |
|
echo |
|
echo |
|
echo " 给大佬点赞....好果断的放弃配置 网站伪装 和 路径分流" |
|
echo |
|
echo |
|
fi |
|
else |
|
echo |
|
echo -e "$red 抱歉...不支持修改...$none" |
|
echo |
|
echo -e " 备注..修改 伪装的网址 仅支持传输协议为 ${yellow}WebSocket + TLS$none 或 ${yellow}HTTP/2$none 并且$yellow 自动配置 TLS = 打开$none" |
|
echo |
|
echo -e " 当前传输协议为: ${cyan}${transport[$v2ray_transport - 1]}${none}" |
|
echo |
|
if [[ $caddy ]]; then |
|
echo -e " 自动配置 TLS = ${cyan}打开$none" |
|
else |
|
echo -e " 自动配置 TLS = $red关闭$none" |
|
fi |
|
echo |
|
change_v2ray_transport_ask |
|
fi |
|
|
|
} |
|
domain_check() { |
|
# test_domain=$(dig $new_domain +short) |
|
test_domain=$(ping $new_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$new_domain$none 未解析到: $cyan$ip$none" |
|
echo |
|
echo -e " 你的域名当前解析到: $cyan$test_domain$none" |
|
echo |
|
echo "备注...如果你的域名是使用 Cloudflare 解析的话..在 Status 那里点一下那图标..让它变灰" |
|
echo |
|
exit 1 |
|
fi |
|
} |
|
disable_path() { |
|
if [[ $v2ray_transport == [45] ]] && [[ $caddy && $is_path ]]; then |
|
echo |
|
|
|
while :; do |
|
echo -e "是否关闭 ${yellow}网站伪装 和 路径分流${none} [${magenta}Y/N$none]" |
|
read -p "$(echo -e "(默认 [${cyan}N$none]):") " y_n |
|
[[ -z "$y_n" ]] && y_n="n" |
|
if [[ "$y_n" == [Yy] ]]; then |
|
echo |
|
echo |
|
echo -e "$yellow 关闭 网站伪装 和 路径分流 = $cyan是$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
pause |
|
backup_config -path |
|
is_path='' |
|
caddy_config |
|
config |
|
clear |
|
view_v2ray_config_info |
|
break |
|
elif [[ "$y_n" == [Nn] ]]; then |
|
echo |
|
echo -e " $green已取消关闭 网站伪装 和 路径分流 ....$none" |
|
echo |
|
break |
|
else |
|
error |
|
fi |
|
|
|
done |
|
else |
|
echo |
|
echo -e "$red 抱歉...不支持修改...$none" |
|
echo |
|
echo -e " 当前传输协议为: ${cyan}${transport[$v2ray_transport - 1]}${none}" |
|
echo |
|
if [[ $caddy ]]; then |
|
echo -e " 自动配置 TLS = ${cyan}打开$none" |
|
else |
|
echo -e " 自动配置 TLS = $red关闭$none" |
|
fi |
|
echo |
|
if [[ $is_path ]]; then |
|
echo -e " 路径分流 = ${cyan}打开$none" |
|
else |
|
echo -e " 路径分流 = $red关闭$none" |
|
fi |
|
echo |
|
echo -e " 必须为 WebSocket + TLS 或 HTTP/2 传输协议, 自动配置 TLS = ${cyan}打开$none, 路径分流 = ${cyan}打开$none, 才能修改" |
|
echo |
|
|
|
fi |
|
} |
|
blocked_hosts() { |
|
if [[ $ban_ad ]]; then |
|
local _info="$green已开启$none" |
|
else |
|
local _info="$red已关闭$none" |
|
fi |
|
_opt='' |
|
while :; do |
|
echo |
|
echo -e "$yellow 1. $none开启 广告拦截" |
|
echo |
|
echo -e "$yellow 2. $none关闭 广告拦截" |
|
echo |
|
echo "备注: 广告拦截是基于 域名 拦截的..所以也许会造成浏览网页的时候出现部分元素留白..或者其他问题" |
|
echo |
|
echo "反馈问题或请求拦截更多域名: https://github.com/233boy/v2ray/issues" |
|
echo |
|
echo -e "当前广告拦截状态: $_info" |
|
echo |
|
read -p "$(echo -e "请选择 [${magenta}1-2$none]:")" _opt |
|
if [[ -z $_opt ]]; then |
|
error |
|
else |
|
case $_opt in |
|
1) |
|
if [[ $ban_ad ]]; then |
|
echo |
|
echo -e " 大胸弟...难不成你没有看到 (当前广告拦截状态: $_info) 这个帅帅的提示么.....还开启个鸡鸡哦" |
|
echo |
|
else |
|
echo |
|
echo |
|
echo -e "$yellow 广告拦截 = $cyan开启$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
pause |
|
backup_config +ad |
|
ban_ad=true |
|
config |
|
echo |
|
echo |
|
echo -e "$green 广告拦截已开启...如果出现异常..那就关闭它咯$none" |
|
echo |
|
fi |
|
break |
|
;; |
|
2) |
|
if [[ $ban_ad ]]; then |
|
echo |
|
echo |
|
echo -e "$yellow 广告拦截 = $cyan关闭$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
pause |
|
backup_config -ad |
|
ban_ad='' |
|
config |
|
echo |
|
echo |
|
echo -e "$red 广告拦截已关闭...不过你也可以随时重新开启 ...只要你喜欢$none" |
|
echo |
|
else |
|
echo |
|
echo -e " 大胸弟...难不成你没有看到 (当前广告拦截状态: $_info) 这个帅帅的提示么.....还关闭个鸡鸡哦" |
|
echo |
|
fi |
|
break |
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
fi |
|
done |
|
|
|
} |
|
change_v2ray_alterId() { |
|
echo |
|
while :; do |
|
echo -e "请输入 ${yellow}alterId${none} 的数值 [${magenta}0-65535$none]" |
|
read -p "$(echo -e "(当前数值是: ${cyan}$alterId$none):") " new_alterId |
|
[[ -z $new_alterId ]] && error && continue |
|
case $new_alterId in |
|
$alterId) |
|
echo |
|
echo -e " 大佬...跟 当前 alterId 一毛一样啊...修改个鸡鸡哦 " |
|
echo |
|
error |
|
;; |
|
[0-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 alterId = $cyan$new_alterId$none" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
pause |
|
backup_config alterId |
|
alterId=$new_alterId |
|
config |
|
clear |
|
view_v2ray_config_info |
|
break |
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
done |
|
} |
|
|
|
custom_uuid() { |
|
echo |
|
while :; do |
|
echo -e "请输入$yello自定义的 UUID$none...(${cyan}UUID 格式一定要对!!!$none)" |
|
read -p "$(echo -e "(当前 UUID: ${cyan}${v2ray_id}$none)"): " myuuid |
|
[ -z "$myuuid" ] && error && continue |
|
case $myuuid in |
|
$v2ray_id) |
|
echo |
|
echo -e " 大佬...跟 当前 UUID 一毛一样啊...修改个鸡鸡哦 " |
|
echo |
|
error |
|
;; |
|
*[/$]* | *\&*) |
|
echo |
|
echo -e " 由于这个脚本太辣鸡了..所以 UUID 不能包含$red / $none或$red $ $none或$red & $none这三个符号.... " |
|
echo |
|
error |
|
;; |
|
*) |
|
echo |
|
echo |
|
echo -e "$yellow UUID = $cyan$myuuid$none" |
|
echo |
|
echo -e " 如果 UUID 格式不正确.. V2Ray 会跪...使用$cyan v2ray reuuid$none 复活" |
|
echo "----------------------------------------------------------------" |
|
echo |
|
pause |
|
uuid=$myuuid |
|
backup_config uuid |
|
v2ray_id=$uuid |
|
config |
|
clear |
|
view_v2ray_config_info |
|
break |
|
;; |
|
esac |
|
done |
|
} |
|
v2ray_service() { |
|
while :; do |
|
echo |
|
echo -e "$yellow 1. $none启动 V2Ray" |
|
echo |
|
echo -e "$yellow 2. $none停止 V2Ray" |
|
echo |
|
echo -e "$yellow 3. $none重启 V2Ray" |
|
echo |
|
echo -e "$yellow 4. $none查看访问日志" |
|
echo |
|
echo -e "$yellow 5. $none查看错误日志" |
|
echo |
|
read -p "$(echo -e "请选择 [${magenta}1-5$none]:")" _opt |
|
if [[ -z $_opt ]]; then |
|
error |
|
else |
|
case $_opt in |
|
1) |
|
start_v2ray |
|
break |
|
;; |
|
2) |
|
stop_v2ray |
|
break |
|
;; |
|
3) |
|
restart_v2ray |
|
break |
|
;; |
|
4) |
|
view_v2ray_log |
|
break |
|
;; |
|
5) |
|
view_v2ray_error_log |
|
break |
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
fi |
|
done |
|
} |
|
start_v2ray() { |
|
if [[ $v2ray_pid ]] || [[ $v2ray_transport == [45] && $caddy ]] && [[ $caddy_pid ]]; then |
|
echo |
|
echo -e "${green} V2Ray 正在运行...无需再启动$none" |
|
echo |
|
else |
|
systemctl start v2ray |
|
if [[ $v2ray_transport == [45] && $caddy ]] && [[ ! $caddy_pid ]]; then |
|
systemctl start caddy |
|
fi |
|
echo |
|
echo '正在启动....' |
|
echo |
|
_load status.sh |
|
_check_status |
|
echo |
|
_green " V2Ray 启动成功!!!!" |
|
echo |
|
|
|
fi |
|
|
|
} |
|
stop_v2ray() { |
|
if [[ $v2ray_pid ]]; then |
|
systemctl stop v2ray |
|
echo |
|
echo -e "${green} V2Ray 已停止$none" |
|
echo |
|
else |
|
echo |
|
echo -e "${red} V2Ray 没有在运行$none" |
|
echo |
|
fi |
|
} |
|
restart_v2ray() { |
|
systemctl restart v2ray |
|
[[ $v2ray_transport == [45] && $caddy ]] && systemctl restart caddy |
|
echo |
|
echo '正在重启....' |
|
echo |
|
_load status.sh |
|
_check_status |
|
echo |
|
_green " V2Ray 重启成功!!!!" |
|
echo |
|
|
|
} |
|
view_v2ray_log() { |
|
echo |
|
echo -e "$green 按 Ctrl + C 即可退出...$none" |
|
echo |
|
tail -f /var/log/v2ray/access.log |
|
} |
|
view_v2ray_error_log() { |
|
echo |
|
echo -e "$green 按 Ctrl + C 即可退出...$none" |
|
echo |
|
tail -f /var/log/v2ray/error.log |
|
} |
|
download_v2ray_config() { |
|
while :; do |
|
echo |
|
echo -e "$yellow 1. $none直接下载 V2Ray 客户端配置文件(仅支持 Xshell)" |
|
echo |
|
echo -e "$yellow 2. $none生成 V2Ray 客户端配置文件下载链接" |
|
echo |
|
echo -e "$yellow 3. $none生成 V2Ray 配置信息链接" |
|
echo |
|
echo -e "$yellow 4. $none生成 V2Ray 配置二维码链接" |
|
echo |
|
read -p "$(echo -e "请选择 [${magenta}1-4$none]:")" other_opt |
|
if [[ -z $other_opt ]]; then |
|
error |
|
else |
|
case $other_opt in |
|
1) |
|
get_v2ray_config |
|
break |
|
;; |
|
2) |
|
get_v2ray_config_link |
|
break |
|
;; |
|
3) |
|
get_v2ray_config_info_link |
|
break |
|
;; |
|
4) |
|
get_v2ray_config_qr_link |
|
break |
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
fi |
|
done |
|
} |
|
get_v2ray_config() { |
|
config |
|
echo |
|
echo " 如果你当前使用的 SSH 客户端不是 Xshell 的话...下载 V2Ray 客户端配置文件将会出现卡死情况" |
|
echo |
|
while :; do |
|
read -p "$(echo -e "不要BB...哥就是在使用 Xshell [${magenta}Y$none]:")" is_xshell |
|
if [[ -z $is_xshell ]]; then |
|
error |
|
else |
|
if [[ $is_xshell == [yY] ]]; then |
|
echo |
|
echo "开始下载....请选择 V2Ray 客户端配置文件保存位置" |
|
echo |
|
# sz /etc/v2ray/233blog_v2ray.zip |
|
local tmpfile="/tmp/233blog_v2ray_config_$RANDOM.json" |
|
cp -f $v2ray_client_config $tmpfile |
|
sz $tmpfile |
|
echo |
|
echo |
|
echo -e "$green 下载完成咯...$none" |
|
echo |
|
# echo -e "$yellow 解压密码 = ${cyan}233blog.com$none" |
|
# echo |
|
echo -e "$yellow SOCKS 监听端口 = ${cyan}2333${none}" |
|
echo |
|
echo -e "${yellow} HTTP 监听端口 = ${cyan}6666$none" |
|
echo |
|
echo "V2Ray 客户端使用教程: https://${_site}/post/4/" |
|
echo |
|
break |
|
else |
|
error |
|
fi |
|
fi |
|
done |
|
[[ -f $tmpfile ]] && rm -rf $tmpfile |
|
|
|
} |
|
get_v2ray_config_link() { |
|
_load client_file.sh |
|
_get_client_file |
|
} |
|
create_v2ray_config_text() { |
|
|
|
get_transport_args |
|
|
|
echo |
|
echo |
|
echo "---------- V2Ray 配置信息 -------------" |
|
if [[ $v2ray_transport == [45] ]]; then |
|
if [[ ! $caddy ]]; then |
|
echo |
|
echo " 警告!请自行配置 TLS...教程: https://${_site}/post/3/" |
|
fi |
|
echo |
|
echo "地址 (Address) = ${domain}" |
|
echo |
|
echo "端口 (Port) = 443" |
|
echo |
|
echo "用户ID (User ID / UUID) = ${v2ray_id}" |
|
echo |
|
echo "额外ID (Alter Id) = ${alterId}" |
|
echo |
|
echo "传输协议 (Network) = ${net}" |
|
echo |
|
echo "伪装类型 (header type) = ${header}" |
|
echo |
|
echo "伪装域名 (host) = ${domain}" |
|
echo |
|
echo "路径 (path) = ${_path}" |
|
echo |
|
echo "TLS (Enable TLS) = 打开" |
|
echo |
|
if [[ $ban_ad ]]; then |
|
echo " 备注: 广告拦截已开启.." |
|
echo |
|
fi |
|
else |
|
[[ -z $ip ]] && get_ip |
|
echo |
|
echo "地址 (Address) = ${ip}" |
|
echo |
|
echo "端口 (Port) = $v2ray_port" |
|
echo |
|
echo "用户ID (User ID / UUID) = ${v2ray_id}" |
|
echo |
|
echo "额外ID (Alter Id) = ${alterId}" |
|
echo |
|
echo "传输协议 (Network) = ${net}" |
|
echo |
|
echo "伪装类型 (header type) = ${header}" |
|
echo |
|
fi |
|
if [[ $v2ray_transport -ge 18 ]] && [[ $ban_ad ]]; then |
|
echo "备注: 动态端口已启用...广告拦截已开启..." |
|
echo |
|
elif [[ $v2ray_transport -ge 18 ]]; then |
|
echo "备注: 动态端口已启用..." |
|
echo |
|
elif [[ $ban_ad ]]; then |
|
echo "备注: 广告拦截已开启.." |
|
echo |
|
fi |
|
echo "---------- END -------------" |
|
echo |
|
echo "V2Ray 客户端使用教程: https://${_site}/post/4/" |
|
echo |
|
} |
|
get_v2ray_config_info_link() { |
|
echo |
|
echo -e "$green 正在生成链接.... 稍等片刻即可....$none" |
|
echo |
|
create_v2ray_config_text >/tmp/233blog_v2ray.txt |
|
local random=$(echo $RANDOM-$RANDOM-$RANDOM | base64 -w 0) |
|
local link=$(curl -s --upload-file /tmp/233blog_v2ray.txt "https://transfer.sh/${random}_233v2_v2ray.txt") |
|
if [[ $link ]]; then |
|
echo |
|
echo "---------- V2Ray 配置信息链接-------------" |
|
echo |
|
echo -e "$yellow 链接 = $cyan$link$none" |
|
echo |
|
echo -e " V2Ray 客户端使用教程: https://${_site}/post/4/" |
|
echo |
|
echo "备注...链接将在 14 天后失效..." |
|
echo |
|
echo "提醒...请不要把链接分享出去...除非你有特别的理由...." |
|
echo |
|
else |
|
echo |
|
echo -e "$red 哎呀呀呀...出错咯...请重试$none" |
|
echo |
|
fi |
|
rm -rf /tmp/233blog_v2ray.txt |
|
} |
|
get_v2ray_config_qr_link() { |
|
|
|
create_vmess_URL_config |
|
|
|
_load qr.sh |
|
_qr_create |
|
} |
|
|
|
get_v2ray_multi_vmess_URL_QR() { |
|
|
|
_load status.sh |
|
_get_status 1 |
|
echo "---------- V2Ray vmess URL / V2RayNG v0.4.1+ / V2RayN v2.1+ / 仅适合部分客户端 -------------" |
|
get_ip |
|
_load jqcmd.sh |
|
jq_gen_json |
|
jq_printvmess $ip "[233]" |
|
[[ $v6ip ]] && jq_printvmess $v6ip "[233]" |
|
|
|
return |
|
} |
|
|
|
get_v2ray_vmess_URL_link() { |
|
|
|
_load status.sh |
|
_get_status 1 |
|
echo |
|
echo "---------- V2Ray vmess URL / V2RayNG v0.4.1+ / V2RayN v2.1+ / 仅适合部分客户端 -------------" |
|
get_ip |
|
_load jqcmd.sh |
|
jq_gen_json |
|
jq_printvmess $ip "[233]" |
|
[[ $v6ip ]] && jq_printvmess $v6ip "[233]" |
|
|
|
return |
|
|
|
create_vmess_URL_config |
|
local vmess="vmess://$(cat /etc/v2ray/vmess_qr.json | base64 -w 0)" |
|
echo |
|
echo "---------- V2Ray vmess URL / V2RayNG v0.4.1+ / V2RayN v2.1+ / 仅适合部分客户端 -------------" |
|
echo |
|
echo -e ${cyan}$vmess${none} |
|
echo |
|
if [[ -f /etc/v2ray/vmess_qrv6.json ]]; then |
|
local vmessv6="vmess://$(cat /etc/v2ray/vmess_qrv6.json | base64 -w 0)" |
|
echo "IPv6:地址直链:" |
|
echo -e ${cyan}$vmessv6${none} |
|
fi |
|
rm -f /etc/v2ray/vmess_qr.json /etc/v2ray/vmess_qrv6.json |
|
} |
|
other() { |
|
while :; do |
|
echo |
|
echo -e "$yellow 1. $none安装 BBR" |
|
echo |
|
echo -e "$yellow 2. $none安装 LotServer(锐速)" |
|
echo |
|
echo -e "$yellow 3. $none卸载 LotServer(锐速)" |
|
echo |
|
read -p "$(echo -e "请选择 [${magenta}1-3$none]:")" _opt |
|
if [[ -z $_opt ]]; then |
|
error |
|
else |
|
case $_opt in |
|
1) |
|
install_bbr |
|
break |
|
;; |
|
2) |
|
install_lotserver |
|
break |
|
;; |
|
3) |
|
uninstall_lotserver |
|
break |
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
fi |
|
done |
|
} |
|
install_bbr() { |
|
local test1=$(sed -n '/net.ipv4.tcp_congestion_control/p' /etc/sysctl.conf) |
|
local test2=$(sed -n '/net.core.default_qdisc/p' /etc/sysctl.conf) |
|
if [[ $test1 == "net.ipv4.tcp_congestion_control = bbr" && $test2 == "net.core.default_qdisc = fq" ]]; then |
|
echo |
|
echo -e "$green BBR 已经启用啦...无需再安装$none" |
|
echo |
|
else |
|
_load bbr.sh |
|
_try_enable_bbr |
|
[[ ! $enable_bbr ]] && bash <(curl -s -L https://github.com/teddysun/across/raw/master/bbr.sh) |
|
fi |
|
} |
|
install_lotserver() { |
|
# https://moeclub.org/2017/03/08/14/ |
|
wget --no-check-certificate -qO /tmp/appex.sh "https://raw.githubusercontent.com/0oVicero0/serverSpeeder_Install/master/appex.sh" |
|
bash /tmp/appex.sh 'install' |
|
rm -rf /tmp/appex.sh |
|
} |
|
uninstall_lotserver() { |
|
# https://moeclub.org/2017/03/08/14/ |
|
wget --no-check-certificate -qO /tmp/appex.sh "https://raw.githubusercontent.com/0oVicero0/serverSpeeder_Install/master/appex.sh" |
|
bash /tmp/appex.sh 'uninstall' |
|
rm -rf /tmp/appex.sh |
|
} |
|
|
|
open_port() { |
|
_load iptables.sh |
|
_iptables_add $1 |
|
} |
|
del_port() { |
|
_load iptables.sh |
|
_iptables_del $1 |
|
} |
|
update() { |
|
while :; do |
|
echo |
|
echo -e "$yellow 1. $none更新 V2Ray 主程序" |
|
echo |
|
echo -e "$yellow 2. $none更新 V2Ray 管理脚本" |
|
echo |
|
read -p "$(echo -e "请选择 [${magenta}1-2$none]:")" _opt |
|
if [[ -z $_opt ]]; then |
|
error |
|
else |
|
case $_opt in |
|
1) |
|
update_v2ray |
|
break |
|
;; |
|
2) |
|
update_v2ray.sh |
|
exit |
|
break |
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
fi |
|
done |
|
} |
|
update_v2ray() { |
|
_load download-v2ray.sh |
|
_update_v2ray_version |
|
|
|
if [[ $ssray ]]; then |
|
_load download-ssray.sh |
|
_update_ssray_version |
|
ssray_save_config |
|
fi |
|
} |
|
update_v2ray.sh() { |
|
if [[ $_test ]]; then |
|
local latest_version=$(curl -H 'Cache-Control: no-cache' -s -L "https://raw.githubusercontent.com/233boy/v2ray/test/v2ray.sh" | grep '_version' -m1 | cut -d\" -f2) |
|
else |
|
local latest_version=$(curl -H 'Cache-Control: no-cache' -s -L "https://raw.githubusercontent.com/233boy/v2ray/master/v2ray.sh" | grep '_version' -m1 | cut -d\" -f2) |
|
fi |
|
|
|
if [[ ! $latest_version ]]; then |
|
echo |
|
echo -e " $red获取 V2Ray 最新版本失败!!!$none" |
|
echo |
|
echo -e " 请尝试执行如下命令: $green echo 'nameserver 8.8.8.8' >/etc/resolv.conf $none" |
|
echo |
|
echo " 然后再继续...." |
|
echo |
|
exit 1 |
|
fi |
|
|
|
if [[ $latest_version == $_version ]]; then |
|
echo |
|
echo -e "$green 木有发现新版本 $none" |
|
echo |
|
else |
|
echo |
|
echo -e " $green 咦...发现新版本耶....正在拼命更新.......$none" |
|
echo |
|
cd /etc/v2ray/233boy/v2ray |
|
git pull |
|
cp -f /etc/v2ray/233boy/v2ray/v2ray.sh $_v2ray_sh |
|
chmod +x $_v2ray_sh |
|
echo |
|
echo -e "$green 更新成功啦...当前 V2Ray 管理脚本 版本: ${cyan}$latest_version$none" |
|
echo |
|
fi |
|
|
|
} |
|
uninstall_v2ray() { |
|
_load uninstall.sh |
|
} |
|
config() { |
|
_load config.sh |
|
|
|
if [[ $v2ray_port == "80" ]]; then |
|
if [[ $cmd == "yum" ]]; then |
|
[[ $(pgrep "httpd") ]] && systemctl stop httpd >/dev/null 2>&1 |
|
[[ $(command -v httpd) ]] && yum remove httpd -y >/dev/null 2>&1 |
|
else |
|
[[ $(pgrep "apache2") ]] && service apache2 stop >/dev/null 2>&1 |
|
[[ $(command -v apache2) ]] && apt-get remove apache2* -y >/dev/null 2>&1 |
|
fi |
|
fi |
|
systemctl restart v2ray |
|
|
|
## check status |
|
_load status.sh |
|
_check_status |
|
} |
|
backup_config() { |
|
_load backup.sh |
|
_backup "$@" |
|
|
|
} |
|
|
|
do_service() { |
|
if [[ $systemd ]]; then |
|
systemctl $1 $2 |
|
else |
|
service $2 $1 |
|
fi |
|
} |
|
_help() { |
|
echo |
|
echo "........... V2Ray 管理脚本帮助信息 by $author .........." |
|
echo -e " |
|
${green}v2ray menu $none管理 V2Ray (同等于直接输入 v2ray) |
|
|
|
${green}v2ray info $none查看 V2Ray 配置信息 |
|
|
|
${green}v2ray config $none修改 V2Ray 配置 |
|
|
|
${green}v2ray link $none生成 V2Ray 客户端配置文件链接 |
|
|
|
${green}v2ray textlink $none生成 V2Ray 配置信息链接 |
|
|
|
${green}v2ray qr $none生成 V2Ray 配置二维码链接 |
|
|
|
${green}v2ray ss $none修改 Shadowsocks 配置 |
|
|
|
${green}v2ray ssinfo $none查看 Shadowsocks 配置信息 |
|
|
|
${green}v2ray ssqr $none生成 Shadowsocks 配置二维码链接 |
|
|
|
${green}v2ray status $none查看 V2Ray 运行状态 |
|
|
|
${green}v2ray start $none启动 V2Ray |
|
|
|
${green}v2ray stop $none停止 V2Ray |
|
|
|
${green}v2ray restart $none重启 V2Ray |
|
|
|
${green}v2ray log $none查看 V2Ray 运行日志 |
|
|
|
${green}v2ray update $none更新 V2Ray |
|
|
|
${green}v2ray traffic $none查看 V2Ray 流量 |
|
|
|
${green}v2ray update.sh $none更新 V2Ray 管理脚本 |
|
|
|
${green}v2ray uninstall $none卸载 V2Ray |
|
" |
|
} |
|
menu() { |
|
local _lists=( |
|
"查看 V2Ray 配置" |
|
"修改 V2Ray 配置" |
|
"下载 V2Ray 配置 / 生成配置信息链接 / 生成二维码链接" |
|
"查看 Shadowsocks 配置 / 生成二维码链接" |
|
"修改 Shadowsocks 配置" |
|
"查看 MTProto 配置 / 修改 MTProto 配置" |
|
"查看 Socks5 配置 / 修改 Socks5 配置" |
|
"启动 / 停止 / 重启 / 查看日志" |
|
"更新 V2Ray / 更新 V2Ray 管理脚本" |
|
"卸载 V2Ray" |
|
"其他" |
|
"查看 V2ray 流量统计" |
|
) |
|
clear |
|
while :; do |
|
echo |
|
echo "........... V2Ray 管理脚本 $_version by $author .........." |
|
echo |
|
echo -e "## V2Ray 版本: $cyan$v2ray_ver$none / V2Ray 状态: $v2ray_status ##" |
|
echo |
|
echo "帮助说明: https://${_site}/post/1/" |
|
echo |
|
echo "反馈问题: https://github.com/233boy/v2ray/issues" |
|
echo |
|
echo "TG 群组: https://t.me/blog233" |
|
echo |
|
echo "捐赠脚本作者: https://${_site}/donate/" |
|
echo |
|
echo "捐助 V2Ray: https://www.v2ray.com/chapter_00/02_donate.html" |
|
for ((i = 1; i <= ${#_lists[*]}; i++)); do |
|
if [[ "$i" -le 9 ]]; then |
|
echo |
|
echo -e "$yellow $i. $none${_lists[$i - 1]}" |
|
else |
|
echo |
|
echo -e "$yellow $i. $none${_lists[$i - 1]}" |
|
fi |
|
done |
|
echo |
|
echo |
|
echo -e "注意: 如果主机时间跟实际相差${yellow}超过90秒${none},v2ray将无法正常通信。" |
|
_load sys-info.sh |
|
_sys_time |
|
echo |
|
echo -e "温馨提示...如果你不想执行选项...按$yellow Ctrl + C $none即可退出" |
|
echo |
|
read -p "$(echo -e "请选择菜单 [${magenta}1-${#_lists[*]}$none]:")" choose |
|
if [[ -z $choose ]]; then |
|
exit 1 |
|
else |
|
case $choose in |
|
1) |
|
view_v2ray_config_info |
|
_yellow " ---- 翻查多用户的vmess link请用v2ray murl查看。" |
|
break |
|
;; |
|
2) |
|
change_v2ray_config |
|
break |
|
;; |
|
3) |
|
download_v2ray_config |
|
break |
|
;; |
|
4) |
|
get_shadowsocks_config |
|
break |
|
;; |
|
5) |
|
change_shadowsocks_config |
|
break |
|
;; |
|
6) |
|
_load mtproto.sh |
|
_mtproto_main |
|
break |
|
;; |
|
7) |
|
_load socks.sh |
|
_socks_main |
|
break |
|
;; |
|
8) |
|
v2ray_service |
|
break |
|
;; |
|
9) |
|
update |
|
break |
|
;; |
|
10) |
|
uninstall_v2ray |
|
break |
|
;; |
|
11) |
|
other |
|
break |
|
;; |
|
12) |
|
view_v2ray_traffic |
|
break |
|
;; |
|
*) |
|
error |
|
;; |
|
esac |
|
fi |
|
done |
|
} |
|
args=$1 |
|
[ -z $1 ] && args="menu" |
|
case $args in |
|
menu) |
|
menu |
|
;; |
|
i | info) |
|
view_v2ray_config_info |
|
_yellow " ---- 翻查多用户的vmess link请用v2ray murl查看。" |
|
echo |
|
;; |
|
c | config) |
|
change_v2ray_config |
|
;; |
|
l | link) |
|
get_v2ray_config_link |
|
;; |
|
L | infolink) |
|
get_v2ray_config_info_link |
|
;; |
|
q | qr) |
|
get_v2ray_config_qr_link |
|
;; |
|
s | ss) |
|
change_shadowsocks_config |
|
;; |
|
S | ssinfo) |
|
view_shadowsocks_config_info |
|
;; |
|
Q | ssqr) |
|
get_shadowsocks_config_qr_link |
|
;; |
|
socks) |
|
_load socks.sh |
|
_socks_main |
|
;; |
|
socksinfo) |
|
_load socks.sh |
|
_view_socks_info |
|
;; |
|
tg) |
|
_load mtproto.sh |
|
_mtproto_main |
|
;; |
|
tginfo) |
|
_load mtproto.sh |
|
_view_mtproto_info |
|
;; |
|
bt) |
|
_load bt.sh |
|
_ban_bt_main |
|
;; |
|
status) |
|
echo |
|
if [[ $v2ray_transport == [45] && $caddy ]]; then |
|
echo -e " V2Ray 状态: $v2ray_status / Caddy 状态: $caddy_run_status" |
|
else |
|
echo -e " V2Ray 状态: $v2ray_status" |
|
fi |
|
echo |
|
;; |
|
start) |
|
start_v2ray |
|
;; |
|
stop) |
|
stop_v2ray |
|
;; |
|
restart) |
|
restart_v2ray |
|
;; |
|
reload) |
|
[[ $v2ray_transport == [45] && $caddy ]] && caddy_config |
|
config |
|
echo |
|
_green " V2Ray 加载成功!!! 如需查看 V2Ray 配置请使用 v2ray info" |
|
echo |
|
|
|
;; |
|
time) |
|
_load sys-info.sh |
|
_sys_timezone |
|
date --utc -s "$(curl -sI g.cn | grep Date | cut -d' ' -f3-6)Z" |
|
_sys_time |
|
;; |
|
log) |
|
view_v2ray_log |
|
;; |
|
url | URL) |
|
get_v2ray_vmess_URL_link |
|
;; |
|
murl | MURL | mqr | MQR) |
|
get_v2ray_multi_vmess_URL_QR |
|
;; |
|
u | update) |
|
update_v2ray |
|
;; |
|
U | update.sh) |
|
update_v2ray.sh |
|
exit |
|
;; |
|
un | uninstall) |
|
uninstall_v2ray |
|
;; |
|
reinstall) |
|
uninstall_v2ray |
|
if [[ $is_uninstall_v2ray ]]; then |
|
cd |
|
cd - >/dev/null 2>&1 |
|
bash <(curl -s -L https://git.io/v2ray.sh) |
|
fi |
|
;; |
|
[aA][Ii] | [Dd]) |
|
change_v2ray_alterId |
|
;; |
|
[aA][Ii][aA][Ii] | [Dd][Dd]) |
|
custom_uuid |
|
;; |
|
reuuid) |
|
backup_config uuid |
|
v2ray_id=$uuid |
|
config |
|
clear |
|
view_v2ray_config_info |
|
;; |
|
v | version) |
|
echo |
|
echo -e " 当前 V2Ray 版本: ${green}$v2ray_ver$none / 当前 V2Ray 管理脚本版本: ${cyan}$_version$none" |
|
echo |
|
;; |
|
bbr) |
|
other |
|
;; |
|
traffic) |
|
view_v2ray_traffic |
|
;; |
|
help | *) |
|
_help |
|
;; |
|
esac
|
|
|