IPv6 Only VPS
IPv6-only VPS可用的V2ray和SS脚本
一键安装
1bash <(curl -sL https://scaleya.netlify.com/share/v2ray233_6.sh)
Ubuntu刷新dns缓存
1sudo systemd-resolve --flush-caches
vultr特别版
tcp
1#!/bin/bash
2# tcp
3# 9184
4apt-get update
5echo "1
6
7
8
9
10
11
12
13
14
15
16"|bash <(curl -sL https://scaleya.netlify.com/share/v2ray233_6.sh)
kcp
1#!/bin/bash
2# mkcp
3# 9184
4apt-get update
5echo "1
66
7
8
9
10
11
12
13
14
15
16"|bash <(curl -sL https://scaleya.netlify.com/share/v2ray233_6.sh)
ss + tcp v2ray
1#!/bin/bash
2# ss tcp v2ray
3# 9184
4apt-get update
5echo "1
6
7
8
9y
10
11
12
13
14
15
16
17
18"|bash <(curl -sL https://scaleya.netlify.com/share/v2ray233_6.sh)
19
ss + mkcp v2ray
1#!/bin/bash
2# ss mkcp v2ray
3# 9184
4apt-get update
5echo "1
66
7
8
9y
10
11
12
13
14
15
16
17
18"|bash <(curl -sL https://scaleya.netlify.com/share/v2ray233_6.sh)
19
content install.sh
1#!/bin/bash
2
3red='\e[91m'
4green='\e[92m'
5yellow='\e[93m'
6magenta='\e[95m'
7cyan='\e[96m'
8none='\e[0m'
9_red() { echo -e ${red}$*${none}; }
10_green() { echo -e ${green}$*${none}; }
11_yellow() { echo -e ${yellow}$*${none}; }
12_magenta() { echo -e ${magenta}$*${none}; }
13_cyan() { echo -e ${cyan}$*${none}; }
14
15# Root
16[[ $(id -u) != 0 ]] && echo -e "\n 哎呀……请使用 ${red}root ${none}用户运行 ${yellow}~(^_^) ${none}\n" && exit 1
17
18cmd="apt-get"
19
20sys_bit=$(uname -m)
21
22case $sys_bit in
23i[36]86)
24 v2ray_bit="32"
25 caddy_arch="386"
26 ;;
27x86_64)
28 v2ray_bit="64"
29 caddy_arch="amd64"
30 ;;
31*armv6*)
32 v2ray_bit="arm"
33 caddy_arch="arm6"
34 ;;
35*armv7*)
36 v2ray_bit="arm"
37 caddy_arch="arm7"
38 ;;
39*aarch64* | *armv8*)
40 v2ray_bit="arm64"
41 caddy_arch="arm64"
42 ;;
43*)
44 echo -e "
45 哈哈……这个 ${red}辣鸡脚本${none} 不支持你的系统。 ${yellow}(-_-) ${none}
46
47 备注: 仅支持 Ubuntu 16+ / Debian 8+ / CentOS 7+ 系统
48 " && exit 1
49 ;;
50esac
51
52# 笨笨的检测方法
53if [[ $(command -v apt-get) || $(command -v yum) ]] && [[ $(command -v systemctl) ]]; then
54
55 if [[ $(command -v yum) ]]; then
56
57 cmd="yum"
58
59 fi
60
61else
62
63 echo -e "
64 哈哈……这个 ${red}辣鸡脚本${none} 不支持你的系统。 ${yellow}(-_-) ${none}
65
66 备注: 仅支持 Ubuntu 16+ / Debian 8+ / CentOS 7+ 系统
67 " && exit 1
68
69fi
70
71uuid=$(cat /proc/sys/kernel/random/uuid)
72old_id="e55c8d17-2cf3-b21a-bcf1-eeacb011ed79"
73v2ray_server_config="/etc/v2ray/config.json"
74v2ray_client_config="/etc/v2ray/233blog_v2ray_config.json"
75backup="/etc/v2ray/233blog_v2ray_backup.conf"
76_v2ray_sh="/usr/local/sbin/v2ray"
77systemd=true
78# _test=true
79
80transport=(
81 TCP
82 TCP_HTTP
83 WebSocket
84 "WebSocket + TLS"
85 HTTP/2
86 mKCP
87 mKCP_utp
88 mKCP_srtp
89 mKCP_wechat-video
90 mKCP_dtls
91 mKCP_wireguard
92 QUIC
93 QUIC_utp
94 QUIC_srtp
95 QUIC_wechat-video
96 QUIC_dtls
97 QUIC_wireguard
98 TCP_dynamicPort
99 TCP_HTTP_dynamicPort
100 WebSocket_dynamicPort
101 mKCP_dynamicPort
102 mKCP_utp_dynamicPort
103 mKCP_srtp_dynamicPort
104 mKCP_wechat-video_dynamicPort
105 mKCP_dtls_dynamicPort
106 mKCP_wireguard_dynamicPort
107 QUIC_dynamicPort
108 QUIC_utp_dynamicPort
109 QUIC_srtp_dynamicPort
110 QUIC_wechat-video_dynamicPort
111 QUIC_dtls_dynamicPort
112 QUIC_wireguard_dynamicPort
113)
114
115ciphers=(
116 aes-128-cfb
117 aes-256-cfb
118 chacha20
119 chacha20-ietf
120 aes-128-gcm
121 aes-256-gcm
122 chacha20-ietf-poly1305
123)
124
125_load() {
126 local _dir="/etc/v2ray/233boy/v2ray/src/"
127 . "${_dir}$@"
128}
129_sys_timezone() {
130 IS_OPENVZ=
131 if hostnamectl status | grep -q openvz; then
132 IS_OPENVZ=1
133 fi
134
135 echo
136 timedatectl set-timezone Asia/Shanghai
137 timedatectl set-ntp true
138 echo "已将你的主机设置为Asia/Shanghai时区并通过systemd-timesyncd自动同步时间。"
139 echo
140
141 if [[ $IS_OPENVZ ]]; then
142 echo
143 echo -e "你的主机环境为 ${yellow}Openvz${none} ,建议使用${yellow}v2ray mkcp${none}系列协议。"
144 echo -e "注意:${yellow}Openvz${none} 系统时间无法由虚拟机内程序控制同步。"
145 echo -e "如果主机时间跟实际相差${yellow}超过90秒${none},v2ray将无法正常通信,请发ticket联系vps主机商调整。"
146 fi
147}
148
149_sys_time() {
150 echo -e "\n主机时间:${yellow}"
151 timedatectl status | sed -n '1p;4p'
152 echo -e "${none}"
153 [[ $IS_OPENV ]] && pause
154}
155v2ray_config() {
156 # clear
157 echo
158 while :; do
159 echo -e "请选择 "$yellow"V2Ray"$none" 传输协议 [${magenta}1-${#transport[*]}$none]"
160 echo
161 for ((i = 1; i <= ${#transport[*]}; i++)); do
162 Stream="${transport[$i - 1]}"
163 if [[ "$i" -le 9 ]]; then
164 # echo
165 echo -e "$yellow $i. $none${Stream}"
166 else
167 # echo
168 echo -e "$yellow $i. $none${Stream}"
169 fi
170 done
171 echo
172 echo "备注1: 含有 [dynamicPort] 的即启用动态端口.."
173 echo "备注2: [utp | srtp | wechat-video | dtls | wireguard] 分别伪装成 [BT下载 | 视频通话 | 微信视频通话 | DTLS 1.2 数据包 | WireGuard 数据包]"
174 echo
175 read -p "$(echo -e "(默认协议: ${cyan}TCP$none)"):" v2ray_transport
176 [ -z "$v2ray_transport" ] && v2ray_transport=1
177 case $v2ray_transport in
178 [1-9] | [1-2][0-9] | 3[0-2])
179 echo
180 echo
181 echo -e "$yellow V2Ray 传输协议 = $cyan${transport[$v2ray_transport - 1]}$none"
182 echo "----------------------------------------------------------------"
183 echo
184 break
185 ;;
186 *)
187 error
188 ;;
189 esac
190 done
191 v2ray_port_config
192}
193v2ray_port_config() {
194 case $v2ray_transport in
195 4 | 5)
196 tls_config
197 ;;
198 *)
199 local random=$(shuf -i20001-65535 -n1)
200 while :; do
201 echo -e "请输入 "$yellow"V2Ray"$none" 端口 ["$magenta"1-65535"$none"]"
202 read -p "$(echo -e "(默认端口: ${cyan}${random}$none):")" v2ray_port
203 [ -z "$v2ray_port" ] && v2ray_port=$random
204 case $v2ray_port in
205 [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])
206 echo
207 echo
208 echo -e "$yellow V2Ray 端口 = $cyan$v2ray_port$none"
209 echo "----------------------------------------------------------------"
210 echo
211 break
212 ;;
213 *)
214 error
215 ;;
216 esac
217 done
218 if [[ $v2ray_transport -ge 18 ]]; then
219 v2ray_dynamic_port_start
220 fi
221 ;;
222 esac
223}
224
225v2ray_dynamic_port_start() {
226
227 while :; do
228 echo -e "请输入 "$yellow"V2Ray 动态端口开始 "$none"范围 ["$magenta"1-65535"$none"]"
229 read -p "$(echo -e "(默认开始端口: ${cyan}10000$none):")" v2ray_dynamic_port_start_input
230 [ -z $v2ray_dynamic_port_start_input ] && v2ray_dynamic_port_start_input=10000
231 case $v2ray_dynamic_port_start_input in
232 $v2ray_port)
233 echo
234 echo " 不能和 V2Ray 端口一毛一样...."
235 echo
236 echo -e " 当前 V2Ray 端口:${cyan}$v2ray_port${none}"
237 error
238 ;;
239 [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])
240 echo
241 echo
242 echo -e "$yellow V2Ray 动态端口开始 = $cyan$v2ray_dynamic_port_start_input$none"
243 echo "----------------------------------------------------------------"
244 echo
245 break
246 ;;
247 *)
248 error
249 ;;
250 esac
251
252 done
253
254 if [[ $v2ray_dynamic_port_start_input -lt $v2ray_port ]]; then
255 lt_v2ray_port=true
256 fi
257
258 v2ray_dynamic_port_end
259}
260v2ray_dynamic_port_end() {
261
262 while :; do
263 echo -e "请输入 "$yellow"V2Ray 动态端口结束 "$none"范围 ["$magenta"1-65535"$none"]"
264 read -p "$(echo -e "(默认结束端口: ${cyan}20000$none):")" v2ray_dynamic_port_end_input
265 [ -z $v2ray_dynamic_port_end_input ] && v2ray_dynamic_port_end_input=20000
266 case $v2ray_dynamic_port_end_input in
267 [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])
268
269 if [[ $v2ray_dynamic_port_end_input -le $v2ray_dynamic_port_start_input ]]; then
270 echo
271 echo " 不能小于或等于 V2Ray 动态端口开始范围"
272 echo
273 echo -e " 当前 V2Ray 动态端口开始:${cyan}$v2ray_dynamic_port_start_input${none}"
274 error
275 elif [ $lt_v2ray_port ] && [[ ${v2ray_dynamic_port_end_input} -ge $v2ray_port ]]; then
276 echo
277 echo " V2Ray 动态端口结束范围 不能包括 V2Ray 端口..."
278 echo
279 echo -e " 当前 V2Ray 端口:${cyan}$v2ray_port${none}"
280 error
281 else
282 echo
283 echo
284 echo -e "$yellow V2Ray 动态端口结束 = $cyan$v2ray_dynamic_port_end_input$none"
285 echo "----------------------------------------------------------------"
286 echo
287 break
288 fi
289 ;;
290 *)
291 error
292 ;;
293 esac
294
295 done
296
297}
298
299tls_config() {
300
301 echo
302 local random=$(shuf -i20001-65535 -n1)
303 while :; do
304 echo -e "请输入 "$yellow"V2Ray"$none" 端口 ["$magenta"1-65535"$none"],不能选择 "$magenta"80"$none" 或 "$magenta"443"$none" 端口"
305 read -p "$(echo -e "(默认端口: ${cyan}${random}$none):")" v2ray_port
306 [ -z "$v2ray_port" ] && v2ray_port=$random
307 case $v2ray_port in
308 80)
309 echo
310 echo " ...都说了不能选择 80 端口了咯....."
311 error
312 ;;
313 443)
314 echo
315 echo " ..都说了不能选择 443 端口了咯....."
316 error
317 ;;
318 [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])
319 echo
320 echo
321 echo -e "$yellow V2Ray 端口 = $cyan$v2ray_port$none"
322 echo "----------------------------------------------------------------"
323 echo
324 break
325 ;;
326 *)
327 error
328 ;;
329 esac
330 done
331
332 while :; do
333 echo
334 echo -e "请输入一个 $magenta正确的域名$none,一定一定一定要正确,不!能!出!错!"
335 read -p "(例如:233blog.com): " domain
336 [ -z "$domain" ] && error && continue
337 echo
338 echo
339 echo -e "$yellow 你的域名 = $cyan$domain$none"
340 echo "----------------------------------------------------------------"
341 break
342 done
343 get_ip
344 echo
345 echo
346 echo -e "$yellow 请将 $magenta$domain$none $yellow解析到: $cyan$ip$none"
347 echo
348 echo -e "$yellow 请将 $magenta$domain$none $yellow解析到: $cyan$ip$none"
349 echo
350 echo -e "$yellow 请将 $magenta$domain$none $yellow解析到: $cyan$ip$none"
351 echo "----------------------------------------------------------------"
352 echo
353
354 while :; do
355
356 read -p "$(echo -e "(是否已经正确解析: [${magenta}Y$none]):") " record
357 if [[ -z "$record" ]]; then
358 error
359 else
360 if [[ "$record" == [Yy] ]]; then
361 domain_check
362 echo
363 echo
364 echo -e "$yellow 域名解析 = ${cyan}我确定已经有解析了$none"
365 echo "----------------------------------------------------------------"
366 echo
367 break
368 else
369 error
370 fi
371 fi
372
373 done
374
375 if [[ $v2ray_transport -ne 5 ]]; then
376 auto_tls_config
377 else
378 caddy=true
379 install_caddy_info="打开"
380 fi
381
382 if [[ $caddy ]]; then
383 path_config_ask
384 fi
385}
386auto_tls_config() {
387 echo -e "
388
389 安装 Caddy 来实现 自动配置 TLS
390
391 如果你已经安装 Nginx 或 Caddy
392
393 $yellow并且..自己能搞定配置 TLS$none
394
395 那么就不需要 打开自动配置 TLS
396 "
397 echo "----------------------------------------------------------------"
398 echo
399
400 while :; do
401
402 read -p "$(echo -e "(是否自动配置 TLS: [${magenta}Y/N$none]):") " auto_install_caddy
403 if [[ -z "$auto_install_caddy" ]]; then
404 error
405 else
406 if [[ "$auto_install_caddy" == [Yy] ]]; then
407 caddy=true
408 install_caddy_info="打开"
409 echo
410 echo
411 echo -e "$yellow 自动配置 TLS = $cyan$install_caddy_info$none"
412 echo "----------------------------------------------------------------"
413 echo
414 break
415 elif [[ "$auto_install_caddy" == [Nn] ]]; then
416 install_caddy_info="关闭"
417 echo
418 echo
419 echo -e "$yellow 自动配置 TLS = $cyan$install_caddy_info$none"
420 echo "----------------------------------------------------------------"
421 echo
422 break
423 else
424 error
425 fi
426 fi
427
428 done
429}
430path_config_ask() {
431 echo
432 while :; do
433 echo -e "是否开启 网站伪装 和 路径分流 [${magenta}Y/N$none]"
434 read -p "$(echo -e "(默认: [${cyan}N$none]):")" path_ask
435 [[ -z $path_ask ]] && path_ask="n"
436
437 case $path_ask in
438 Y | y)
439 path_config
440 break
441 ;;
442 N | n)
443 echo
444 echo
445 echo -e "$yellow 网站伪装 和 路径分流 = $cyan不想配置$none"
446 echo "----------------------------------------------------------------"
447 echo
448 break
449 ;;
450 *)
451 error
452 ;;
453 esac
454 done
455}
456path_config() {
457 echo
458 while :; do
459 echo -e "请输入想要 ${magenta}用来分流的路径$none , 例如 /233blog , 那么只需要输入 233blog 即可"
460 read -p "$(echo -e "(默认: [${cyan}233blog$none]):")" path
461 [[ -z $path ]] && path="233blog"
462
463 case $path in
464 *[/$]*)
465 echo
466 echo -e " 由于这个脚本太辣鸡了..所以分流的路径不能包含$red / $none或$red $ $none这两个符号.... "
467 echo
468 error
469 ;;
470 *)
471 echo
472 echo
473 echo -e "$yellow 分流的路径 = ${cyan}/${path}$none"
474 echo "----------------------------------------------------------------"
475 echo
476 break
477 ;;
478 esac
479 done
480 is_path=true
481 proxy_site_config
482}
483proxy_site_config() {
484 echo
485 while :; do
486 echo -e "请输入 ${magenta}一个正确的$none ${cyan}网址$none 用来作为 ${cyan}网站的伪装$none , 例如 https://liyafly.com"
487 echo -e "举例...你当前的域名是 $green$domain$none , 伪装的网址的是 https://liyafly.com"
488 echo -e "然后打开你的域名时候...显示出来的内容就是来自 https://liyafly.com 的内容"
489 echo -e "其实就是一个反代...明白就好..."
490 echo -e "如果不能伪装成功...可以使用 v2ray config 修改伪装的网址"
491 read -p "$(echo -e "(默认: [${cyan}https://liyafly.com$none]):")" proxy_site
492 [[ -z $proxy_site ]] && proxy_site="https://liyafly.com"
493
494 case $proxy_site in
495 *[#$]*)
496 echo
497 echo -e " 由于这个脚本太辣鸡了..所以伪装的网址不能包含$red # $none或$red $ $none这两个符号.... "
498 echo
499 error
500 ;;
501 *)
502 echo
503 echo
504 echo -e "$yellow 伪装的网址 = ${cyan}${proxy_site}$none"
505 echo "----------------------------------------------------------------"
506 echo
507 break
508 ;;
509 esac
510 done
511}
512
513blocked_hosts() {
514 echo
515 while :; do
516 echo -e "是否开启广告拦截(会影响性能) [${magenta}Y/N$none]"
517 read -p "$(echo -e "(默认 [${cyan}N$none]):")" blocked_ad
518 [[ -z $blocked_ad ]] && blocked_ad="n"
519
520 case $blocked_ad in
521 Y | y)
522 blocked_ad_info="开启"
523 ban_ad=true
524 echo
525 echo
526 echo -e "$yellow 广告拦截 = $cyan开启$none"
527 echo "----------------------------------------------------------------"
528 echo
529 break
530 ;;
531 N | n)
532 blocked_ad_info="关闭"
533 echo
534 echo
535 echo -e "$yellow 广告拦截 = $cyan关闭$none"
536 echo "----------------------------------------------------------------"
537 echo
538 break
539 ;;
540 *)
541 error
542 ;;
543 esac
544 done
545}
546shadowsocks_config() {
547
548 echo
549
550 while :; do
551 echo -e "是否配置 ${yellow}Shadowsocks${none} [${magenta}Y/N$none]"
552 read -p "$(echo -e "(默认 [${cyan}N$none]):") " install_shadowsocks
553 [[ -z "$install_shadowsocks" ]] && install_shadowsocks="n"
554 if [[ "$install_shadowsocks" == [Yy] ]]; then
555 echo
556 shadowsocks=true
557 shadowsocks_port_config
558 break
559 elif [[ "$install_shadowsocks" == [Nn] ]]; then
560 break
561 else
562 error
563 fi
564
565 done
566
567}
568
569shadowsocks_port_config() {
570 local random=$(shuf -i20001-65535 -n1)
571 while :; do
572 echo -e "请输入 "$yellow"Shadowsocks"$none" 端口 ["$magenta"1-65535"$none"],不能和 "$yellow"V2Ray"$none" 端口相同"
573 read -p "$(echo -e "(默认端口: ${cyan}${random}$none):") " ssport
574 [ -z "$ssport" ] && ssport=$random
575 case $ssport in
576 $v2ray_port)
577 echo
578 echo " 不能和 V2Ray 端口一毛一样...."
579 error
580 ;;
581 [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])
582 if [[ $v2ray_transport == [45] ]]; then
583 local tls=ture
584 fi
585 if [[ $tls && $ssport == "80" ]] || [[ $tls && $ssport == "443" ]]; then
586 echo
587 echo -e "由于你已选择了 "$green"WebSocket + TLS $none或$green HTTP/2"$none" 传输协议."
588 echo
589 echo -e "所以不能选择 "$magenta"80"$none" 或 "$magenta"443"$none" 端口"
590 error
591 elif [[ $v2ray_dynamic_port_start_input == $ssport || $v2ray_dynamic_port_end_input == $ssport ]]; then
592 local multi_port="${v2ray_dynamic_port_start_input} - ${v2ray_dynamic_port_end_input}"
593 echo
594 echo " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:$multi_port"
595 error
596 elif [[ $v2ray_dynamic_port_start_input -lt $ssport && $ssport -le $v2ray_dynamic_port_end_input ]]; then
597 local multi_port="${v2ray_dynamic_port_start_input} - ${v2ray_dynamic_port_end_input}"
598 echo
599 echo " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:$multi_port"
600 error
601 else
602 echo
603 echo
604 echo -e "$yellow Shadowsocks 端口 = $cyan$ssport$none"
605 echo "----------------------------------------------------------------"
606 echo
607 break
608 fi
609 ;;
610 *)
611 error
612 ;;
613 esac
614
615 done
616
617 shadowsocks_password_config
618}
619shadowsocks_password_config() {
620
621 while :; do
622 echo -e "请输入 "$yellow"Shadowsocks"$none" 密码"
623 read -p "$(echo -e "(默认密码: ${cyan}233blog.com$none)"): " sspass
624 [ -z "$sspass" ] && sspass="233blog.com"
625 case $sspass in
626 *[/$]*)
627 echo
628 echo -e " 由于这个脚本太辣鸡了..所以密码不能包含$red / $none或$red $ $none这两个符号.... "
629 echo
630 error
631 ;;
632 *)
633 echo
634 echo
635 echo -e "$yellow Shadowsocks 密码 = $cyan$sspass$none"
636 echo "----------------------------------------------------------------"
637 echo
638 break
639 ;;
640 esac
641
642 done
643
644 shadowsocks_ciphers_config
645}
646shadowsocks_ciphers_config() {
647
648 while :; do
649 echo -e "请选择 "$yellow"Shadowsocks"$none" 加密协议 [${magenta}1-${#ciphers[*]}$none]"
650 for ((i = 1; i <= ${#ciphers[*]}; i++)); do
651 ciphers_show="${ciphers[$i - 1]}"
652 echo
653 echo -e "$yellow $i. $none${ciphers_show}"
654 done
655 echo
656 read -p "$(echo -e "(默认加密协议: ${cyan}${ciphers[6]}$none)"):" ssciphers_opt
657 [ -z "$ssciphers_opt" ] && ssciphers_opt=7
658 case $ssciphers_opt in
659 [1-7])
660 ssciphers=${ciphers[$ssciphers_opt - 1]}
661 echo
662 echo
663 echo -e "$yellow Shadowsocks 加密协议 = $cyan${ssciphers}$none"
664 echo "----------------------------------------------------------------"
665 echo
666 break
667 ;;
668 *)
669 error
670 ;;
671 esac
672
673 done
674 pause
675}
676
677install_info() {
678 clear
679 echo
680 echo " ....准备安装了咯..看看有毛有配置正确了..."
681 echo
682 echo "---------- 安装信息 -------------"
683 echo
684 echo -e "$yellow V2Ray 传输协议 = $cyan${transport[$v2ray_transport - 1]}$none"
685
686 if [[ $v2ray_transport == [45] ]]; then
687 echo
688 echo -e "$yellow V2Ray 端口 = $cyan$v2ray_port$none"
689 echo
690 echo -e "$yellow 你的域名 = $cyan$domain$none"
691 echo
692 echo -e "$yellow 域名解析 = ${cyan}我确定已经有解析了$none"
693 echo
694 echo -e "$yellow 自动配置 TLS = $cyan$install_caddy_info$none"
695
696 if [[ $ban_ad ]]; then
697 echo
698 echo -e "$yellow 广告拦截 = $cyan$blocked_ad_info$none"
699 fi
700 if [[ $is_path ]]; then
701 echo
702 echo -e "$yellow 路径分流 = ${cyan}/${path}$none"
703 fi
704 elif [[ $v2ray_transport -ge 18 ]]; then
705 echo
706 echo -e "$yellow V2Ray 端口 = $cyan$v2ray_port$none"
707 echo
708 echo -e "$yellow V2Ray 动态端口范围 = $cyan${v2ray_dynamic_port_start_input} - ${v2ray_dynamic_port_end_input}$none"
709
710 if [[ $ban_ad ]]; then
711 echo
712 echo -e "$yellow 广告拦截 = $cyan$blocked_ad_info$none"
713 fi
714 else
715 echo
716 echo -e "$yellow V2Ray 端口 = $cyan$v2ray_port$none"
717
718 if [[ $ban_ad ]]; then
719 echo
720 echo -e "$yellow 广告拦截 = $cyan$blocked_ad_info$none"
721 fi
722 fi
723 if [ $shadowsocks ]; then
724 echo
725 echo -e "$yellow Shadowsocks 端口 = $cyan$ssport$none"
726 echo
727 echo -e "$yellow Shadowsocks 密码 = $cyan$sspass$none"
728 echo
729 echo -e "$yellow Shadowsocks 加密协议 = $cyan${ssciphers}$none"
730 else
731 echo
732 echo -e "$yellow 是否配置 Shadowsocks = ${cyan}未配置${none}"
733 fi
734 echo
735 echo "---------- END -------------"
736 echo
737 pause
738 echo
739}
740
741domain_check() {
742 # if [[ $cmd == "yum" ]]; then
743 # yum install bind-utils -y
744 # else
745 # $cmd install dnsutils -y
746 # fi
747 # test_domain=$(dig $domain +short)
748 #edit by Scaleya
749 test_domain=$(ping $domain -c 1 | grep -oE -m1 "([0-9]{1,3}\.){3}[0-9]{1,3}") || test_domain=$(ping $domain -6 -c 1 | grep -oE -m1 "([0-9a-fA-F]{0,4}:){1,7}([0-9a-fA-F]){0,4}")
750 if [[ $test_domain != $ip ]]; then
751 echo
752 echo -e "$red 检测域名解析错误....$none"
753 echo
754 echo -e " 你的域名: $yellow$domain$none 未解析到: $cyan$ip$none"
755 echo
756 echo -e " 你的域名当前解析到: $cyan$test_domain$none"
757 echo
758 echo "备注...如果你的域名是使用 Cloudflare 解析的话..在 Status 那里点一下那图标..让它变灰"
759 echo
760 exit 1
761 fi
762}
763
764install_caddy() {
765 # download caddy file then install
766 _load download-caddy.sh
767 _download_caddy_file
768 _install_caddy_service
769 caddy_config
770
771}
772caddy_config() {
773 # local email=$(shuf -i1-10000000000 -n1)
774 _load caddy-config.sh
775
776 # systemctl restart caddy
777 do_service restart caddy
778}
779
780install_v2ray() {
781 $cmd update -y
782 if [[ $cmd == "apt-get" ]]; then
783 $cmd install -y lrzsz git zip unzip curl wget qrencode libcap2-bin dbus
784 else
785 # $cmd install -y lrzsz git zip unzip curl wget qrencode libcap iptables-services
786 $cmd install -y lrzsz git zip unzip curl wget qrencode libcap
787 fi
788 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
789 [ -d /etc/v2ray ] && rm -rf /etc/v2ray
790 # date -s "$(curl -sI g.cn | grep Date | cut -d' ' -f3-6)Z"
791 _sys_timezone
792 _sys_time
793
794 if [[ $local_install ]]; then
795 if [[ ! -d $(pwd)/config ]]; then
796 echo
797 echo -e "$red 哎呀呀...安装失败了咯...$none"
798 echo
799 echo -e " 请确保你有完整的上传 233v2.com 的 V2Ray 一键安装脚本 & 管理脚本到当前 ${green}$(pwd) $none目录下"
800 echo
801 exit 1
802 fi
803 mkdir -p /etc/v2ray/233boy/v2ray
804 cp -rf $(pwd)/* /etc/v2ray/233boy/v2ray
805 else
806 pushd /tmp
807 git clone https://scaleya@bitbucket.org/scaleya/888.git -b "$_gitbranch" /etc/v2ray/233boy/v2ray --depth=1
808 popd
809
810 fi
811
812 if [[ ! -d /etc/v2ray/233boy/v2ray ]]; then
813 echo
814 echo -e "$red 哎呀呀...克隆脚本仓库出错了...$none"
815 echo
816 echo -e " 温馨提示..... 请尝试自行安装 Git: ${green}$cmd install -y git $none 之后再安装此脚本"
817 echo
818 exit 1
819 fi
820
821 # download v2ray file then install
822 _load download-v2ray.sh
823 _download_v2ray_file
824 _install_v2ray_service
825 _mkdir_dir
826}
827
828open_port() {
829 if [[ $cmd == "apt-get" ]]; then
830 if [[ $1 != "multiport" ]]; then
831
832 iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport $1 -j ACCEPT
833 iptables -I INPUT -m state --state NEW -m udp -p udp --dport $1 -j ACCEPT
834 ip6tables -I INPUT -m state --state NEW -m tcp -p tcp --dport $1 -j ACCEPT
835 ip6tables -I INPUT -m state --state NEW -m udp -p udp --dport $1 -j ACCEPT
836
837 # firewall-cmd --permanent --zone=public --add-port=$1/tcp
838 # firewall-cmd --permanent --zone=public --add-port=$1/udp
839 # firewall-cmd --reload
840
841 else
842
843 local multiport="${v2ray_dynamic_port_start_input}:${v2ray_dynamic_port_end_input}"
844 iptables -I INPUT -p tcp --match multiport --dports $multiport -j ACCEPT
845 iptables -I INPUT -p udp --match multiport --dports $multiport -j ACCEPT
846 ip6tables -I INPUT -p tcp --match multiport --dports $multiport -j ACCEPT
847 ip6tables -I INPUT -p udp --match multiport --dports $multiport -j ACCEPT
848
849 # local multi_port="${v2ray_dynamic_port_start_input}-${v2ray_dynamic_port_end_input}"
850 # firewall-cmd --permanent --zone=public --add-port=$multi_port/tcp
851 # firewall-cmd --permanent --zone=public --add-port=$multi_port/udp
852 # firewall-cmd --reload
853
854 fi
855 iptables-save >/etc/iptables.rules.v4
856 ip6tables-save >/etc/iptables.rules.v6
857 # else
858 # service iptables save >/dev/null 2>&1
859 # service ip6tables save >/dev/null 2>&1
860 fi
861}
862del_port() {
863 if [[ $cmd == "apt-get" ]]; then
864 if [[ $1 != "multiport" ]]; then
865 # if [[ $cmd == "apt-get" ]]; then
866 iptables -D INPUT -m state --state NEW -m tcp -p tcp --dport $1 -j ACCEPT
867 iptables -D INPUT -m state --state NEW -m udp -p udp --dport $1 -j ACCEPT
868 ip6tables -D INPUT -m state --state NEW -m tcp -p tcp --dport $1 -j ACCEPT
869 ip6tables -D INPUT -m state --state NEW -m udp -p udp --dport $1 -j ACCEPT
870 # else
871 # firewall-cmd --permanent --zone=public --remove-port=$1/tcp
872 # firewall-cmd --permanent --zone=public --remove-port=$1/udp
873 # fi
874 else
875 # if [[ $cmd == "apt-get" ]]; then
876 local ports="${v2ray_dynamicPort_start}:${v2ray_dynamicPort_end}"
877 iptables -D INPUT -p tcp --match multiport --dports $ports -j ACCEPT
878 iptables -D INPUT -p udp --match multiport --dports $ports -j ACCEPT
879 ip6tables -D INPUT -p tcp --match multiport --dports $ports -j ACCEPT
880 ip6tables -D INPUT -p udp --match multiport --dports $ports -j ACCEPT
881 # else
882 # local ports="${v2ray_dynamicPort_start}-${v2ray_dynamicPort_end}"
883 # firewall-cmd --permanent --zone=public --remove-port=$ports/tcp
884 # firewall-cmd --permanent --zone=public --remove-port=$ports/udp
885 # fi
886 fi
887 iptables-save >/etc/iptables.rules.v4
888 ip6tables-save >/etc/iptables.rules.v6
889 # else
890 # service iptables save >/dev/null 2>&1
891 # service ip6tables save >/dev/null 2>&1
892 fi
893
894}
895
896config() {
897 cp -f /etc/v2ray/233boy/v2ray/config/backup.conf $backup
898 cp -f /etc/v2ray/233boy/v2ray/v2ray.sh $_v2ray_sh
899 chmod +x $_v2ray_sh
900
901 v2ray_id=$uuid
902 alterId=233
903 ban_bt=true
904 if [[ $v2ray_transport -ge 18 ]]; then
905 v2ray_dynamicPort_start=${v2ray_dynamic_port_start_input}
906 v2ray_dynamicPort_end=${v2ray_dynamic_port_end_input}
907 fi
908 _load config.sh
909
910 if [[ $cmd == "apt-get" ]]; then
911 cat >/etc/network/if-pre-up.d/iptables <<-EOF
912 #!/bin/sh
913 /sbin/iptables-restore < /etc/iptables.rules.v4
914 /sbin/ip6tables-restore < /etc/iptables.rules.v6
915 EOF
916 chmod +x /etc/network/if-pre-up.d/iptables
917 # else
918 # [ $(pgrep "firewall") ] && systemctl stop firewalld
919 # systemctl mask firewalld
920 # systemctl disable firewalld
921 # systemctl enable iptables
922 # systemctl enable ip6tables
923 # systemctl start iptables
924 # systemctl start ip6tables
925 fi
926
927 [[ $shadowsocks ]] && open_port $ssport
928 if [[ $v2ray_transport == [45] ]]; then
929 open_port "80"
930 open_port "443"
931 open_port $v2ray_port
932 elif [[ $v2ray_transport -ge 18 ]]; then
933 open_port $v2ray_port
934 open_port "multiport"
935 else
936 open_port $v2ray_port
937 fi
938 # systemctl restart v2ray
939 do_service restart v2ray
940 backup_config
941
942}
943
944backup_config() {
945 sed -i "18s/=1/=$v2ray_transport/; 21s/=2333/=$v2ray_port/; 24s/=$old_id/=$uuid/" $backup
946 if [[ $v2ray_transport -ge 18 ]]; then
947 sed -i "30s/=10000/=$v2ray_dynamic_port_start_input/; 33s/=20000/=$v2ray_dynamic_port_end_input/" $backup
948 fi
949 if [[ $shadowsocks ]]; then
950 sed -i "42s/=/=true/; 45s/=6666/=$ssport/; 48s/=233blog.com/=$sspass/; 51s/=chacha20-ietf/=$ssciphers/" $backup
951 fi
952 [[ $v2ray_transport == [45] ]] && sed -i "36s/=233blog.com/=$domain/" $backup
953 [[ $caddy ]] && sed -i "39s/=/=true/" $backup
954 [[ $ban_ad ]] && sed -i "54s/=/=true/" $backup
955 if [[ $is_path ]]; then
956 sed -i "57s/=/=true/; 60s/=233blog/=$path/" $backup
957 sed -i "63s#=https://liyafly.com#=$proxy_site#" $backup
958 fi
959}
960
961get_ip() {
962
963 ipv4=$(curl -4 -s ipv4.icanhazip.com)
964 [[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://api.ip.sb/ip)
965 [[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://api.ipify.org)
966 [[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://ip.seeip.org)
967 [[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://ifconfig.co/ip)
968 [[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://api.myip.com | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}")
969 [[ -z $ipv4 ]] && ipv4=$(curl -s -4 icanhazip.com)
970 [[ -z $ipv4 ]] && ipv4=$(curl -s -4 myip.ipip.net | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}")
971 [[ -z $ipv4 ]] && echo -e "\n$red 这垃圾小鸡扔了吧!$none\n" && exit
972
973 ipv6=$(curl -6 -s ipv6.icanhazip.com)
974 [[ -z $ipv6 ]] && ipv6=$(curl -s -6 https://api.ip.sb/ip)
975 [[ -z $ipv6 ]] && ipv6=$(curl -s -6 https://ip.seeip.org)
976 [[ -z $ipv6 ]] && ipv6=$(curl -s -6 https://ifconfig.co/ip)
977 [[ -z $ipv6 ]] && ipv6=$(curl -s -6 icanhazip.com)
978 [[ -z $ipv6 ]] && echo -e "\n$red 这垃圾小鸡扔了吧!$none\n" && exit
979
980 if [ $ipv6 ]; then
981 ip=$ipv6 ##默认ipv6 edit by Scaleya
982 else ip=$ipv4
983 fi
984}
985
986error() {
987
988 echo -e "\n$red 输入错误!$none\n"
989
990}
991
992pause() {
993
994 read -rsp "$(echo -e "按$green Enter 回车键 $none继续....或按$red Ctrl + C $none取消.")" -d $'\n'
995 echo
996}
997do_service() {
998 if [[ $systemd ]]; then
999 systemctl $1 $2
1000 else
1001 service $2 $1
1002 fi
1003}
1004show_config_info() {
1005 clear
1006 _load v2ray-info.sh
1007 _v2_args
1008 _v2_info
1009 _load ss-info.sh
1010
1011}
1012
1013install() {
1014 if [[ -f /usr/bin/v2ray/v2ray && -f /etc/v2ray/config.json ]] && [[ -f $backup && -d /etc/v2ray/233boy/v2ray ]]; then
1015 echo
1016 echo " 大佬...你已经安装 V2Ray 啦...无需重新安装"
1017 echo
1018 echo -e " $yellow输入 ${cyan}v2ray${none} $yellow即可管理 V2Ray${none}"
1019 echo
1020 exit 1
1021 elif [[ -f /usr/bin/v2ray/v2ray && -f /etc/v2ray/config.json ]] && [[ -f /etc/v2ray/233blog_v2ray_backup.txt && -d /etc/v2ray/233boy/v2ray ]]; then
1022 echo
1023 echo " 如果你需要继续安装.. 请先卸载旧版本"
1024 echo
1025 echo -e " $yellow输入 ${cyan}v2ray uninstall${none} $yellow即可卸载${none}"
1026 echo
1027 exit 1
1028 fi
1029 v2ray_config
1030 blocked_hosts
1031 shadowsocks_config
1032 install_info
1033 # [[ $caddy ]] && domain_check
1034 install_v2ray
1035 if [[ $caddy || $v2ray_port == "80" ]]; then
1036 if [[ $cmd == "yum" ]]; then
1037 [[ $(pgrep "httpd") ]] && systemctl stop httpd
1038 [[ $(command -v httpd) ]] && yum remove httpd -y
1039 else
1040 [[ $(pgrep "apache2") ]] && service apache2 stop
1041 [[ $(command -v apache2) ]] && apt-get remove apache2* -y
1042 fi
1043 fi
1044 [[ $caddy ]] && install_caddy
1045
1046 ## bbr
1047 _load bbr.sh
1048 _try_enable_bbr
1049
1050 get_ip
1051 config
1052 show_config_info
1053}
1054uninstall() {
1055
1056 if [[ -f /usr/bin/v2ray/v2ray && -f /etc/v2ray/config.json ]] && [[ -f $backup && -d /etc/v2ray/233boy/v2ray ]]; then
1057 . $backup
1058 if [[ $mark ]]; then
1059 _load uninstall.sh
1060 else
1061 echo
1062 echo -e " $yellow输入 ${cyan}v2ray uninstall${none} $yellow即可卸载${none}"
1063 echo
1064 fi
1065
1066 elif [[ -f /usr/bin/v2ray/v2ray && -f /etc/v2ray/config.json ]] && [[ -f /etc/v2ray/233blog_v2ray_backup.txt && -d /etc/v2ray/233boy/v2ray ]]; then
1067 echo
1068 echo -e " $yellow输入 ${cyan}v2ray uninstall${none} $yellow即可卸载${none}"
1069 echo
1070 else
1071 echo -e "
1072 $red 大胸弟...你貌似毛有安装 V2Ray ....卸载个鸡鸡哦...$none
1073
1074 备注...仅支持卸载使用我 (233v2.com) 提供的 V2Ray 一键安装脚本
1075 " && exit 1
1076 fi
1077
1078}
1079
1080args=$1
1081_gitbranch=$2
1082[ -z $1 ] && args="online"
1083case $args in
1084online)
1085 #hello world
1086 [[ -z $_gitbranch ]] && _gitbranch="master"
1087 ;;
1088local)
1089 local_install=true
1090 ;;
1091*)
1092 echo
1093 echo -e " 你输入的这个参数 <$red $args $none> ...这个是什么鬼啊...脚本不认识它哇"
1094 echo
1095 echo -e " 这个辣鸡脚本仅支持输入$green local / online $none参数"
1096 echo
1097 echo -e " 输入$yellow local $none即是使用本地安装"
1098 echo
1099 echo -e " 输入$yellow online $none即是使用在线安装 (默认)"
1100 echo
1101 exit 1
1102 ;;
1103esac
1104
1105clear
1106while :; do
1107 echo
1108 echo "........... V2Ray 一键安装脚本 & 管理脚本 by 233v2.com .........."
1109 echo
1110 echo "帮助说明: https://233v2.com/post/1/"
1111 echo
1112 echo "搭建教程: https://233v2.com/post/2/"
1113 echo
1114 echo " 1. 安装"
1115 echo
1116 echo " 2. 卸载"
1117 echo
1118 if [[ $local_install ]]; then
1119 echo -e "$yellow 温馨提示.. 本地安装已启用 ..$none"
1120 echo
1121 fi
1122 read -p "$(echo -e "请选择 [${magenta}1-2$none]:")" choose
1123 case $choose in
1124 1)
1125 install
1126 break
1127 ;;
1128 2)
1129 uninstall
1130 break
1131 ;;
1132 *)
1133 error
1134 ;;
1135 esac
1136done
1137
1138
content v2ray.sh
1#!/bin/bash
2
3red='\e[91m'
4green='\e[92m'
5yellow='\e[93m'
6magenta='\e[95m'
7cyan='\e[96m'
8none='\e[0m'
9
10# Root
11[[ $(id -u) != 0 ]] && echo -e " 哎呀……请使用 ${red}root ${none}用户运行 ${yellow}~(^_^) ${none}" && exit 1
12
13_version="v3.14"
14
15cmd="apt-get"
16
17sys_bit=$(uname -m)
18
19case $sys_bit in
20i[36]86)
21 v2ray_bit="32"
22 caddy_arch="386"
23 ;;
24x86_64)
25 v2ray_bit="64"
26 caddy_arch="amd64"
27 ;;
28*armv6*)
29 v2ray_bit="arm"
30 caddy_arch="arm6"
31 ;;
32*armv7*)
33 v2ray_bit="arm"
34 caddy_arch="arm7"
35 ;;
36*aarch64* | *armv8*)
37 v2ray_bit="arm64"
38 caddy_arch="arm64"
39 ;;
40*)
41 echo -e "
42 哈哈……这个 ${red}辣鸡脚本${none} 不支持你的系统。 ${yellow}(-_-) ${none}
43
44 备注: 仅支持 Ubuntu 16+ / Debian 8+ / CentOS 7+ 系统
45 " && exit 1
46 ;;
47esac
48
49if [[ $(command -v yum) ]]; then
50
51 cmd="yum"
52
53fi
54
55backup="/etc/v2ray/233blog_v2ray_backup.conf"
56
57if [[ -f /usr/bin/v2ray/v2ray && -f /etc/v2ray/config.json ]] && [[ -f $backup && -d /etc/v2ray/233boy/v2ray ]]; then
58
59 . $backup
60
61elif [[ -f /usr/bin/v2ray/v2ray && -f /etc/v2ray/config.json ]] && [[ -f /etc/v2ray/233blog_v2ray_backup.txt && -d /etc/v2ray/233boy/v2ray ]]; then
62
63 . /etc/v2ray/233boy/v2ray/tools/v1xx_to_v3xx.sh
64
65else
66 echo -e " 哎呀哎呀…… ${red}出错咯...请重新安装V2Ray${none} ${yellow}~(^_^) ${none}" && exit 1
67fi
68
69if [[ $mark != "v3" ]]; then
70 . /etc/v2ray/233boy/v2ray/tools/v3.sh
71fi
72if [[ $v2ray_transport -ge 18 ]]; then
73 dynamicPort=true
74 port_range="${v2ray_dynamicPort_start}-${v2ray_dynamicPort_end}"
75fi
76if [[ $path_status ]]; then
77 is_path=true
78fi
79
80uuid=$(cat /proc/sys/kernel/random/uuid)
81old_id="e55c8d17-2cf3-b21a-bcf1-eeacb011ed79"
82v2ray_server_config="/etc/v2ray/config.json"
83v2ray_client_config="/etc/v2ray/233blog_v2ray_config.json"
84v2ray_pid=$(pgrep -f /usr/bin/v2ray/v2ray)
85caddy_pid=$(pgrep -f /usr/local/bin/caddy)
86_v2ray_sh="/usr/local/sbin/v2ray"
87v2ray_ver="$(/usr/bin/v2ray/v2ray -version | head -n 1 | cut -d " " -f2)"
88. /etc/v2ray/233boy/v2ray/src/init.sh
89systemd=true
90# _test=true
91
92if [[ $v2ray_ver != v* ]]; then
93 v2ray_ver="v$v2ray_ver"
94fi
95if [[ ! -f $_v2ray_sh ]]; then
96 mv -f /usr/local/bin/v2ray $_v2ray_sh
97 chmod +x $_v2ray_sh
98 echo -e "\n $yellow 警告: 请重新登录 SSH 以避免出现 v2ray 命令未找到的情况。$none \n" && exit 1
99fi
100
101if [ $v2ray_pid ]; then
102 v2ray_status="$green正在运行$none"
103else
104 v2ray_status="$red未在运行$none"
105fi
106if [[ $v2ray_transport == [45] && $caddy ]] && [[ $caddy_pid ]]; then
107 caddy_run_status="$green正在运行$none"
108else
109 caddy_run_status="$red未在运行$none"
110fi
111
112_load transport.sh
113ciphers=(
114 aes-128-cfb
115 aes-256-cfb
116 chacha20
117 chacha20-ietf
118 aes-128-gcm
119 aes-256-gcm
120 chacha20-ietf-poly1305
121)
122
123get_transport_args() {
124 _load v2ray-info.sh
125 _v2_args
126}
127create_vmess_URL_config() {
128
129 [[ -z $net ]] && get_transport_args
130
131 if [[ $v2ray_transport == [45] ]]; then
132 cat >/etc/v2ray/vmess_qr.json <<-EOF
133 {
134 "v": "2",
135 "ps": "233v2.com_${domain}",
136 "add": "${domain}",
137 "port": "443",
138 "id": "${v2ray_id}",
139 "aid": "${alterId}",
140 "net": "${net}",
141 "type": "none",
142 "host": "${domain}",
143 "path": "$_path",
144 "tls": "tls"
145 }
146 EOF
147 else
148 [[ -z $ip ]] && get_ip
149 cat >/etc/v2ray/vmess_qr.json <<-EOF
150 {
151 "v": "2",
152 "ps": "233v2.com_${ip}",
153 "add": "${ip}",
154 "port": "${v2ray_port}",
155 "id": "${v2ray_id}",
156 "aid": "${alterId}",
157 "net": "${net}",
158 "type": "${header}",
159 "host": "${host}",
160 "path": "",
161 "tls": ""
162 }
163 EOF
164 fi
165}
166view_v2ray_config_info() {
167
168 _load v2ray-info.sh
169 _v2_args
170 _v2_info
171}
172get_shadowsocks_config() {
173 if [[ $shadowsocks ]]; then
174
175 while :; do
176 echo
177 echo -e "$yellow 1. $none查看 Shadowsocks 配置信息"
178 echo
179 echo -e "$yellow 2. $none生成二维码链接"
180 echo
181 read -p "$(echo -e "请选择 [${magenta}1-2$none]:")" _opt
182 if [[ -z $_opt ]]; then
183 error
184 else
185 case $_opt in
186 1)
187 view_shadowsocks_config_info
188 break
189 ;;
190 2)
191 get_shadowsocks_config_qr_link
192 break
193 ;;
194 *)
195 error
196 ;;
197 esac
198 fi
199
200 done
201 else
202 shadowsocks_config
203 fi
204}
205view_shadowsocks_config_info() {
206 if [[ $shadowsocks ]]; then
207 _load ss-info.sh
208 else
209 shadowsocks_config
210 fi
211}
212get_shadowsocks_config_qr_link() {
213 if [[ $shadowsocks ]]; then
214 get_ip
215 _load qr.sh
216 _ss_qr
217 else
218 shadowsocks_config
219 fi
220
221}
222
223get_shadowsocks_config_qr_ask() {
224 echo
225 while :; do
226 echo -e "是否需要生成$yellow Shadowsocks 配置信息 $none二维码链接 [${magenta}Y/N$none]"
227 read -p "$(echo -e "默认 [${magenta}N$none]:")" y_n
228 [ -z $y_n ] && y_n="n"
229 if [[ $y_n == [Yy] ]]; then
230 get_shadowsocks_config_qr_link
231 break
232 elif [[ $y_n == [Nn] ]]; then
233 break
234 else
235 error
236 fi
237 done
238
239}
240change_shadowsocks_config() {
241 if [[ $shadowsocks ]]; then
242
243 while :; do
244 echo
245 echo -e "$yellow 1. $none修改 Shadowsocks 端口"
246 echo
247 echo -e "$yellow 2. $none修改 Shadowsocks 密码"
248 echo
249 echo -e "$yellow 3. $none修改 Shadowsocks 加密协议"
250 echo
251 echo -e "$yellow 4. $none关闭 Shadowsocks"
252 echo
253 read -p "$(echo -e "请选择 [${magenta}1-4$none]:")" _opt
254 if [[ -z $_opt ]]; then
255 error
256 else
257 case $_opt in
258 1)
259 change_shadowsocks_port
260 break
261 ;;
262 2)
263 change_shadowsocks_password
264 break
265 ;;
266 3)
267 change_shadowsocks_ciphers
268 break
269 ;;
270 4)
271 disable_shadowsocks
272 break
273 ;;
274 *)
275 error
276 ;;
277 esac
278 fi
279
280 done
281 else
282
283 shadowsocks_config
284 fi
285}
286shadowsocks_config() {
287 echo
288 echo
289 echo -e " $red大佬...你没有配置 Shadowsocks $none...不过现在想要配置的话也是可以的 ^_^"
290 echo
291 echo
292
293 while :; do
294 echo -e "是否配置 ${yellow}Shadowsocks${none} [${magenta}Y/N$none]"
295 read -p "$(echo -e "(默认 [${cyan}N$none]):") " install_shadowsocks
296 [[ -z "$install_shadowsocks" ]] && install_shadowsocks="n"
297 if [[ "$install_shadowsocks" == [Yy] ]]; then
298 echo
299 shadowsocks=true
300 shadowsocks_port_config
301 shadowsocks_password_config
302 shadowsocks_ciphers_config
303 pause
304 open_port $new_ssport
305 backup_config +ss
306 ssport=$new_ssport
307 sspass=$new_sspass
308 ssciphers=$new_ssciphers
309 config
310 clear
311 view_shadowsocks_config_info
312 # get_shadowsocks_config_qr_ask
313 break
314 elif [[ "$install_shadowsocks" == [Nn] ]]; then
315 echo
316 echo -e " $green已取消配置 Shadowsocks ....$none"
317 echo
318 break
319 else
320 error
321 fi
322
323 done
324}
325shadowsocks_port_config() {
326 local random=$(shuf -i20001-65535 -n1)
327 while :; do
328 echo -e "请输入 "$yellow"Shadowsocks"$none" 端口 ["$magenta"1-65535"$none"],不能和 "$yellow"V2ray"$none" 端口相同"
329 read -p "$(echo -e "(默认端口: ${cyan}${random}$none):") " new_ssport
330 [ -z "$new_ssport" ] && new_ssport=$random
331 case $new_ssport in
332 $v2ray_port)
333 echo
334 echo -e " 不能和$cyan V2Ray 端口 $none一毛一样...."
335 echo
336 echo -e " 当前 V2Ray 端口:${cyan}$v2ray_port${none}"
337 error
338 ;;
339 [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])
340 if [[ $v2ray_transport == [45] ]]; then
341 local tls=ture
342 fi
343 if [[ $tls && $new_ssport == "80" ]] || [[ $tls && $new_ssport == "443" ]]; then
344 echo
345 echo -e "由于你当前已使用了 "$green"WebSocket + TLS $none或$green HTTP/2"$none" 传输协议."
346 echo
347 echo -e "所以不能选择 "$magenta"80"$none" 或 "$magenta"443"$none" 端口"
348 error
349 elif [[ $dynamicPort ]] && [[ $v2ray_dynamicPort_start == $new_ssport || $v2ray_dynamicPort_end == $new_ssport ]]; then
350 echo
351 echo -e " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:${cyan}$port_range${none}"
352 error
353 elif [[ $dynamicPort ]] && [[ $v2ray_dynamicPort_start -lt $new_ssport && $new_ssport -le $v2ray_dynamicPort_end ]]; then
354 echo
355 echo -e " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:${cyan}$port_range${none}"
356 error
357 elif [[ $socks && $new_ssport == $socks_port ]]; then
358 echo
359 echo -e "抱歉, 此端口跟 Socks 端口冲突...当前 Socks 端口: ${cyan}$socks_port$none"
360 error
361 elif [[ $mtproto && $new_ssport == $mtproto_port ]]; then
362 echo
363 echo -e "抱歉, 此端口跟 MTProto 端口冲突...当前 MTProto 端口: ${cyan}$mtproto_port$none"
364 error
365 else
366 echo
367 echo
368 echo -e "$yellow Shadowsocks 端口 = $cyan$new_ssport$none"
369 echo "----------------------------------------------------------------"
370 echo
371 break
372 fi
373 ;;
374 *)
375 error
376 ;;
377 esac
378
379 done
380
381}
382
383shadowsocks_password_config() {
384
385 while :; do
386 echo -e "请输入 "$yellow"Shadowsocks"$none" 密码"
387 read -p "$(echo -e "(默认密码: ${cyan}233blog.com$none)"): " new_sspass
388 [ -z "$new_sspass" ] && new_sspass="233blog.com"
389 case $new_sspass in
390 *[/$]*)
391 echo
392 echo -e " 由于这个脚本太辣鸡了..所以密码不能包含$red / $none或$red $ $none这两个符号.... "
393 echo
394 error
395 ;;
396 *)
397 echo
398 echo
399 echo -e "$yellow Shadowsocks 密码 = $cyan$new_sspass$none"
400 echo "----------------------------------------------------------------"
401 echo
402 break
403 ;;
404 esac
405
406 done
407
408}
409
410shadowsocks_ciphers_config() {
411
412 while :; do
413 echo -e "请选择 "$yellow"Shadowsocks"$none" 加密协议 [${magenta}1-7$none]"
414 for ((i = 1; i <= ${#ciphers[*]}; i++)); do
415 ciphers_show="${ciphers[$i - 1]}"
416 echo
417 echo -e "$yellow $i. $none${ciphers_show}"
418 done
419 echo
420 read -p "$(echo -e "(默认加密协议: ${cyan}${ciphers[6]}$none)"):" ssciphers_opt
421 [ -z "$ssciphers_opt" ] && ssciphers_opt=7
422 case $ssciphers_opt in
423 [1-7])
424 new_ssciphers=${ciphers[$ssciphers_opt - 1]}
425 echo
426 echo
427 echo -e "$yellow Shadowsocks 加密协议 = $cyan${new_ssciphers}$none"
428 echo "----------------------------------------------------------------"
429 echo
430 break
431 ;;
432 *)
433 error
434 ;;
435 esac
436
437 done
438}
439
440change_shadowsocks_port() {
441 echo
442 while :; do
443 echo -e "请输入 "$yellow"Shadowsocks"$none" 端口 ["$magenta"1-65535"$none"]"
444 read -p "$(echo -e "(当前端口: ${cyan}$ssport$none):") " new_ssport
445 [ -z "$new_ssport" ] && error && continue
446 case $new_ssport in
447 $ssport)
448 echo
449 echo " 跟当前端口一毛一样....修改个鸡鸡哦"
450 error
451 ;;
452 $v2ray_port)
453 echo
454 echo -e " 不能和$cyan V2Ray 端口 $none一毛一样...."
455 error
456 ;;
457 [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])
458 if [[ $v2ray_transport == [45] ]]; then
459 local tls=ture
460 fi
461 if [[ $tls && $new_ssport == "80" ]] || [[ $tls && $new_ssport == "443" ]]; then
462 echo
463 echo -e "由于你已选择了 "$green"WebSocket + TLS $none或$green HTTP/2"$none" 传输协议."
464 echo
465 echo -e "所以不能选择 "$magenta"80"$none" 或 "$magenta"443"$none" 端口"
466 error
467 elif [[ $dynamicPort ]] && [[ $v2ray_dynamicPort_start == $new_ssport || $v2ray_dynamicPort_end == $new_ssport ]]; then
468 echo
469 echo -e " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:${cyan}$port_range${none}"
470 error
471 elif [[ $dynamicPort ]] && [[ $v2ray_dynamicPort_start -lt $new_ssport && $new_ssport -le $v2ray_dynamicPort_end ]]; then
472 echo
473 echo -e " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:${cyan}$port_range${none}"
474 error
475 elif [[ $socks && $new_ssport == $socks_port ]]; then
476 echo
477 echo -e "抱歉, 此端口跟 Socks 端口冲突...当前 Socks 端口: ${cyan}$socks_port$none"
478 error
479 elif [[ $mtproto && $new_ssport == $mtproto_port ]]; then
480 echo
481 echo -e "抱歉, 此端口跟 MTProto 端口冲突...当前 MTProto 端口: ${cyan}$mtproto_port$none"
482 error
483 else
484 echo
485 echo
486 echo -e "$yellow Shadowsocks 端口 = $cyan$new_ssport$none"
487 echo "----------------------------------------------------------------"
488 echo
489 pause
490 backup_config ssport
491 del_port $ssport
492 open_port $new_ssport
493 ssport=$new_ssport
494 config
495 clear
496 view_shadowsocks_config_info
497 # get_shadowsocks_config_qr_ask
498 break
499 fi
500 ;;
501 *)
502 error
503 ;;
504 esac
505
506 done
507}
508change_shadowsocks_password() {
509 echo
510 while :; do
511 echo -e "请输入 "$yellow"Shadowsocks"$none" 密码"
512 read -p "$(echo -e "(当前密码:${cyan}$sspass$none)"): " new_sspass
513 [ -z "$new_sspass" ] && error && continue
514 case $new_sspass in
515 $sspass)
516 echo
517 echo " 跟当前密码一毛一样....修改个鸡鸡哦"
518 error
519 ;;
520 *[/$]*)
521 echo
522 echo -e " 由于这个脚本太辣鸡了..所以密码不能包含$red / $none或$red $ $none这两个符号.... "
523 echo
524 error
525 ;;
526 *)
527 echo
528 echo
529 echo -e "$yellow Shadowsocks 密码 = $cyan$new_sspass$none"
530 echo "----------------------------------------------------------------"
531 echo
532 pause
533 backup_config sspass
534 sspass=$new_sspass
535 config
536 clear
537 view_shadowsocks_config_info
538 # get_shadowsocks_config_qr_ask
539 break
540 ;;
541 esac
542
543 done
544
545}
546
547change_shadowsocks_ciphers() {
548 echo
549 while :; do
550 echo -e "请选择 "$yellow"Shadowsocks"$none" 加密协议 [${magenta}1-${#ciphers[*]}$none]"
551 for ((i = 1; i <= ${#ciphers[*]}; i++)); do
552 ciphers_show="${ciphers[$i - 1]}"
553 echo
554 echo -e "$yellow $i. $none${ciphers_show}"
555 done
556 echo
557 read -p "$(echo -e "(当前加密协议: ${cyan}${ssciphers}$none)"):" ssciphers_opt
558 [ -z "$ssciphers_opt" ] && error && continue
559 case $ssciphers_opt in
560 [1-7])
561 new_ssciphers=${ciphers[$ssciphers_opt - 1]}
562 if [[ $new_ssciphers == $ssciphers ]]; then
563 echo
564 echo " 跟当前加密协议一毛一样....修改个鸡鸡哦"
565 error && continue
566 fi
567 echo
568 echo
569 echo -e "$yellow Shadowsocks 加密协议 = $cyan${new_ssciphers}$none"
570 echo "----------------------------------------------------------------"
571 echo
572 pause
573 backup_config ssciphers
574 ssciphers=$new_ssciphers
575 config
576 clear
577 view_shadowsocks_config_info
578 # get_shadowsocks_config_qr_ask
579 break
580 ;;
581 *)
582 error
583 ;;
584 esac
585
586 done
587
588}
589disable_shadowsocks() {
590 echo
591
592 while :; do
593 echo -e "是否关闭 ${yellow}Shadowsocks${none} [${magenta}Y/N$none]"
594 read -p "$(echo -e "(默认 [${cyan}N$none]):") " y_n
595 [[ -z "$y_n" ]] && y_n="n"
596 if [[ "$y_n" == [Yy] ]]; then
597 echo
598 echo
599 echo -e "$yellow 关闭 Shadowsocks = $cyan是$none"
600 echo "----------------------------------------------------------------"
601 echo
602 pause
603 backup_config -ss
604 del_port $ssport
605 shadowsocks=''
606 config
607 # clear
608 echo
609 echo
610 echo
611 echo -e "$green Shadowsocks 已关闭...不过你也可以随时重新启用 Shadowsocks ...只要你喜欢$none"
612 echo
613 break
614 elif [[ "$y_n" == [Nn] ]]; then
615 echo
616 echo -e " $green已取消关闭 Shadowsocks ....$none"
617 echo
618 break
619 else
620 error
621 fi
622
623 done
624}
625change_v2ray_config() {
626 local _menu=(
627 "修改 V2Ray 端口"
628 "修改 V2Ray 传输协议"
629 "修改 V2Ray 动态端口 (如果可以)"
630 "修改 用户ID ( UUID )"
631 "修改 TLS 域名 (如果可以)"
632 "修改 分流的路径 (如果可以)"
633 "修改 伪装的网址 (如果可以)"
634 "关闭 网站伪装 和 路径分流 (如果可以)"
635 "开启 / 关闭 广告拦截"
636 )
637 while :; do
638 for ((i = 1; i <= ${#_menu[*]}; i++)); do
639 if [[ "$i" -le 9 ]]; then
640 echo
641 echo -e "$yellow $i. $none${_menu[$i - 1]}"
642 else
643 echo
644 echo -e "$yellow $i. $none${_menu[$i - 1]}"
645 fi
646 done
647 echo
648 read -p "$(echo -e "请选择 [${magenta}1-${#_menu[*]}$none]:")" _opt
649 if [[ -z $_opt ]]; then
650 error
651 else
652 case $_opt in
653 1)
654 change_v2ray_port
655 break
656 ;;
657 2)
658 change_v2ray_transport
659 break
660 ;;
661 3)
662 change_v2ray_dynamicport
663 break
664 ;;
665 4)
666 change_v2ray_id
667 break
668 ;;
669 5)
670 change_domain
671 break
672 ;;
673 6)
674 change_path_config
675 break
676 ;;
677 7)
678 change_proxy_site_config
679 break
680 ;;
681 8)
682 disable_path
683 break
684 ;;
685 9)
686 blocked_hosts
687 break
688 ;;
689 [aA][Ii][aA][Ii] | [Dd][Dd])
690 custom_uuid
691 break
692 ;;
693 [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])
694 change_v2ray_alterId
695 break
696 ;;
697 *)
698 error
699 ;;
700 esac
701 fi
702 done
703}
704change_v2ray_port() {
705 if [[ $v2ray_transport == 4 ]]; then
706 echo
707 echo -e " 由于你目前使用的是$yellow WebSocket + TLS $none传输协议...所以修不修改 V2Ray 端口没有什么不一样的"
708 echo
709 echo " 如果你想要使用其他端口...可以先修改 V2Ray 的传输协议..之后再修改 V2Ray 端口"
710 echo
711 change_v2ray_transport_ask
712 elif [[ $v2ray_transport == 5 ]]; then
713 echo
714 echo -e " 由于你目前使用的是$yellow HTTP/2 $none传输协议...所以修不修改 V2Ray 端口没有什么不一样的"
715 echo
716 echo " 如果你想要使用其他端口...可以先修改 V2Ray 的传输协议..之后再修改 V2Ray 端口"
717 echo
718 change_v2ray_transport_ask
719 else
720 echo
721 while :; do
722 echo -e "请输入 "$yellow"V2Ray"$none" 端口 ["$magenta"1-65535"$none"]"
723 read -p "$(echo -e "(当前端口: ${cyan}${v2ray_port}$none):")" v2ray_port_opt
724 [[ -z $v2ray_port_opt ]] && error && continue
725 case $v2ray_port_opt in
726 $v2ray_port)
727 echo
728 echo " 哎呀...跟当前端口一毛一样呀...修改个鸡鸡哦"
729 error
730 ;;
731 [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])
732 if [[ $dynamicPort ]] && [[ $v2ray_dynamicPort_start == $v2ray_port_opt || $v2ray_dynamicPort_end == $v2ray_port_opt ]]; then
733 echo
734 echo -e " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:${cyan}$port_range${none}"
735 error
736 elif [[ $dynamicPort ]] && [[ $v2ray_dynamicPort_start -lt $v2ray_port_opt && $v2ray_port_opt -le $v2ray_dynamicPort_end ]]; then
737 echo
738 echo -e " 抱歉,此端口和 V2Ray 动态端口 冲突,当前 V2Ray 动态端口范围为:${cyan}$port_range${none}"
739 error
740 elif [[ $shadowsocks && $v2ray_port_opt == $ssport ]]; then
741 echo
742 echo -e "抱歉, 此端口跟 Shadowsocks 端口冲突...当前 Shadowsocks 端口: ${cyan}$ssport$none"
743 error
744 elif [[ $socks && $v2ray_port_opt == $socks_port ]]; then
745 echo
746 echo -e "抱歉, 此端口跟 Socks 端口冲突...当前 Socks 端口: ${cyan}$socks_port$none"
747 error
748 elif [[ $mtproto && $v2ray_port_opt == $mtproto_port ]]; then
749 echo
750 echo -e "抱歉, 此端口跟 MTProto 端口冲突...当前 MTProto 端口: ${cyan}$mtproto_port$none"
751 error
752 else
753 echo
754 echo
755 echo -e "$yellow V2Ray 端口 = $cyan$v2ray_port_opt$none"
756 echo "----------------------------------------------------------------"
757 echo
758 pause
759 backup_config v2ray_port
760 del_port $v2ray_port
761 open_port $v2ray_port_opt
762 v2ray_port=$v2ray_port_opt
763 config
764 clear
765 view_v2ray_config_info
766 # download_v2ray_config_ask
767 break
768 fi
769 ;;
770 *)
771 error
772 ;;
773 esac
774
775 done
776 fi
777
778}
779download_v2ray_config_ask() {
780 echo
781 while :; do
782 echo -e "是否需要 下载 V2Ray 配置 / 生成配置信息链接 / 生成二维码链接 [${magenta}Y/N$none]"
783 read -p "$(echo -e "默认 [${cyan}N$none]:")" y_n
784 [ -z $y_n ] && y_n="n"
785 if [[ $y_n == [Yy] ]]; then
786 download_v2ray_config
787 break
788 elif [[ $y_n == [Nn] ]]; then
789 break
790 else
791 error
792 fi
793 done
794
795}
796change_v2ray_transport_ask() {
797 echo
798 while :; do
799 echo -e "是否需要修改$yellow V2Ray $none传输协议 [${magenta}Y/N$none]"
800 read -p "$(echo -e "默认 [${cyan}N$none]:")" y_n
801 [ -z $y_n ] && break
802 if [[ $y_n == [Yy] ]]; then
803 change_v2ray_transport
804 break
805 elif [[ $y_n == [Nn] ]]; then
806 break
807 else
808 error
809 fi
810 done
811}
812change_v2ray_transport() {
813 echo
814 while :; do
815 echo -e "请选择 "$yellow"V2Ray"$none" 传输协议 [${magenta}1-${#transport[*]}$none]"
816 echo
817 for ((i = 1; i <= ${#transport[*]}; i++)); do
818 Stream="${transport[$i - 1]}"
819 if [[ "$i" -le 9 ]]; then
820 # echo
821 echo -e "$yellow $i. $none${Stream}"
822 else
823 # echo
824 echo -e "$yellow $i. $none${Stream}"
825 fi
826 done
827 echo
828 echo "备注1: 含有 [dynamicPort] 的即启用动态端口.."
829 echo "备注2: [utp | srtp | wechat-video | dtls | wireguard] 分别伪装成 [BT下载 | 视频通话 | 微信视频通话 | DTLS 1.2 数据包 | WireGuard 数据包]"
830 echo
831 read -p "$(echo -e "(当前传输协议: ${cyan}${transport[$v2ray_transport - 1]}$none)"):" v2ray_transport_opt
832 if [ -z "$v2ray_transport_opt" ]; then
833 error
834 else
835 case $v2ray_transport_opt in
836 $v2ray_transport)
837 echo
838 echo " 哎呀...跟当前传输协议一毛一样呀...修改个鸡鸡哦"
839 error
840 ;;
841 4 | 5)
842 if [[ $v2ray_port == "80" || $v2ray_port == "443" ]]; then
843 echo
844 echo -e " 抱歉...如果你想要使用${cyan} ${transport[$v2ray_transport_opt - 1]} $none传输协议.. ${red}V2Ray 端口不能为 80 或者 443 ...$none"
845 echo
846 echo -e " 当前 V2Ray 端口: ${cyan}$v2ray_port$none"
847 error
848 elif [[ $shadowsocks ]] && [[ $ssport == "80" || $ssport == "443" ]]; then
849 echo
850 echo -e " 抱歉...如果你想要使用${cyan} ${transport[$v2ray_transport_opt - 1]} $none传输协议.. ${red}Shadowsocks 端口不能为 80 或者 443 ...$none"
851 echo
852 echo -e " 当前 Shadowsocks 端口: ${cyan}$ssport$none"
853 error
854 elif [[ $socks ]] && [[ $socks_port == "80" || $socks_port == "443" ]]; then
855 echo
856 echo -e " 抱歉...如果你想要使用${cyan} ${transport[$v2ray_transport_opt - 1]} $none传输协议.. ${red}Socks 端口不能为 80 或者 443 ...$none"
857 echo
858 echo -e " 当前 Socks 端口: ${cyan}$socks_port$none"
859 error
860 elif [[ $mtproto ]] && [[ $mtproto_port == "80" || $mtproto_port == "443" ]]; then
861 echo
862 echo -e " 抱歉...如果你想要使用${cyan} ${transport[$v2ray_transport_opt - 1]} $none传输协议.. ${red}MTProto 端口不能为 80 或者 443 ...$none"
863 echo
864 echo -e " 当前 MTProto 端口: ${cyan}$mtproto_port$none"
865 error
866 else
867 echo
868 echo
869 echo -e "$yellow V2Ray 传输协议 = $cyan${transport[$v2ray_transport_opt - 1]}$none"
870 echo "----------------------------------------------------------------"
871 echo
872 break
873 fi
874 ;;
875 [1-9] | [1-2][0-9] | 3[0-2])
876 echo
877 echo
878 echo -e "$yellow V2Ray 传输协议 = $cyan${transport[$v2ray_transport_opt - 1]}$none"
879 echo "----------------------------------------------------------------"
880 echo
881 break
882 ;;
883 *)
884 error
885 ;;
886 esac
887 fi
888
889 done
890 pause
891
892 if [[ $v2ray_transport_opt == [45] ]]; then
893 tls_config
894 elif [[ $v2ray_transport_opt -ge 18 ]]; then
895 v2ray_dynamic_port_start
896 v2ray_dynamic_port_end
897 pause
898 old_transport
899 open_port "multiport"
900 backup_config v2ray_transport v2ray_dynamicPort_start v2ray_dynamicPort_end
901 port_range="${v2ray_dynamic_port_start_input}-${v2ray_dynamic_port_end_input}"
902 v2ray_transport=$v2ray_transport_opt
903 config
904 clear
905 view_v2ray_config_info
906 # download_v2ray_config_ask
907 else
908 old_transport
909 backup_config v2ray_transport
910 v2ray_transport=$v2ray_transport_opt
911 config
912 clear
913 view_v2ray_config_info
914 # download_v2ray_config_ask
915 fi
916
917}
918old_transport() {
919 if [[ $v2ray_transport == [45] ]]; then
920 del_port "80"
921 del_port "443"
922 if [[ $caddy && $caddy_pid ]]; then
923 do_service stop caddy
924 if [[ $systemd ]]; then
925 systemctl disable caddy >/dev/null 2>&1
926 else
927 update-rc.d -f caddy remove >/dev/null 2>&1
928 fi
929 elif [[ $caddy ]]; then
930 if [[ $systemd ]]; then
931 systemctl disable caddy >/dev/null 2>&1
932 else
933 update-rc.d -f caddy remove >/dev/null 2>&1
934 fi
935 fi
936 if [[ $is_path ]]; then
937 backup_config -path
938 fi
939 elif [[ $v2ray_transport -ge 18 ]]; then
940 del_port "multiport"
941 fi
942}
943
944tls_config() {
945 while :; do
946 echo
947 echo
948 echo
949 echo -e "请输入一个 $magenta正确的域名$none,一定一定一定要正确,不!能!出!错!"
950 read -p "(例如:233blog.com): " new_domain
951 [ -z "$new_domain" ] && error && continue
952 echo
953 echo
954 echo -e "$yellow 你的域名 = $cyan$new_domain$none"
955 echo "----------------------------------------------------------------"
956 break
957 done
958 get_ip
959 echo
960 echo
961 echo -e "$yellow 请将 $magenta$new_domain$none $yellow解析到: $cyan$ip$none"
962 echo
963 echo -e "$yellow 请将 $magenta$new_domain$none $yellow解析到: $cyan$ip$none"
964 echo
965 echo -e "$yellow 请将 $magenta$new_domain$none $yellow解析到: $cyan$ip$none"
966 echo "----------------------------------------------------------------"
967 echo
968
969 while :; do
970
971 read -p "$(echo -e "(是否已经正确解析: [${magenta}Y$none]):") " record
972 if [[ -z "$record" ]]; then
973 error
974 else
975 if [[ "$record" == [Yy] ]]; then
976 domain_check
977 echo
978 echo
979 echo -e "$yellow 域名解析 = ${cyan}我确定已经有解析了$none"
980 echo "----------------------------------------------------------------"
981 echo
982 break
983 else
984 error
985 fi
986 fi
987
988 done
989
990 if [[ $caddy ]]; then
991 path_config_ask
992 pause
993 # domain_check
994 backup_config v2ray_transport domain
995 if [[ $new_path ]]; then
996 backup_config +path
997 path=$new_path
998 proxy_site=$new_proxy_site
999 is_path=true
1000 fi
1001
1002 if [[ $v2ray_transport -ge 18 ]]; then
1003 del_port "multiport"
1004 fi
1005 domain=$new_domain
1006
1007 open_port "80"
1008 open_port "443"
1009 if [[ $systemd ]]; then
1010 systemctl enable caddy >/dev/null 2>&1
1011 else
1012 update-rc.d -f caddy defaults >/dev/null 2>&1
1013 fi
1014 v2ray_transport=$v2ray_transport_opt
1015 caddy_config
1016 config
1017 clear
1018 view_v2ray_config_info
1019 # download_v2ray_config_ask
1020 else
1021 if [[ $v2ray_transport_opt == 5 ]]; then
1022 path_config_ask
1023 pause
1024 domain_check
1025 backup_config v2ray_transport domain caddy
1026 if [[ $new_path ]]; then
1027 backup_config +path
1028 path=$new_path
1029 proxy_site=$new_proxy_site
1030 is_path=true
1031 fi
1032 if [[ $v2ray_transport -ge 18 ]]; then
1033 del_port "multiport"
1034 fi
1035 domain=$new_domain
1036 install_caddy
1037 open_port "80"
1038 open_port "443"
1039 v2ray_transport=$v2ray_transport_opt
1040 caddy_config
1041 config
1042 caddy=true
1043 clear
1044 view_v2ray_config_info
1045 # download_v2ray_config_ask
1046 else
1047 auto_tls_config
1048 fi
1049 fi
1050
1051}
1052auto_tls_config() {
1053 echo -e "
1054
1055 安装 Caddy 来实现 自动配置 TLS
1056
1057 如果你已经安装 Nginx 或 Caddy
1058
1059 $yellow并且..自己能搞定配置 TLS$none
1060
1061 那么就不需要 打开自动配置 TLS
1062 "
1063 echo "----------------------------------------------------------------"
1064 echo
1065
1066 while :; do
1067
1068 read -p "$(echo -e "(是否自动配置 TLS: [${magenta}Y/N$none]):") " auto_install_caddy
1069 if [[ -z "$auto_install_caddy" ]]; then
1070 error
1071 else
1072 if [[ "$auto_install_caddy" == [Yy] ]]; then
1073 echo
1074 echo
1075 echo -e "$yellow 自动配置 TLS = $cyan打开$none"
1076 echo "----------------------------------------------------------------"
1077 echo
1078 path_config_ask
1079 pause
1080 domain_check
1081 backup_config v2ray_transport domain caddy
1082 if [[ $new_path ]]; then
1083 backup_config +path
1084 path=$new_path
1085 proxy_site=$new_proxy_site
1086 is_path=true
1087 fi
1088 if [[ $v2ray_transport -ge 18 ]]; then
1089 del_port "multiport"
1090 fi
1091 domain=$new_domain
1092 install_caddy
1093 open_port "80"
1094 open_port "443"
1095 v2ray_transport=$v2ray_transport_opt
1096 caddy_config
1097 config
1098 caddy=true
1099 clear
1100 view_v2ray_config_info
1101 # download_v2ray_config_ask
1102 break
1103 elif [[ "$auto_install_caddy" == [Nn] ]]; then
1104 echo
1105 echo
1106 echo -e "$yellow 自动配置 TLS = $cyan关闭$none"
1107 echo "----------------------------------------------------------------"
1108 echo
1109 pause
1110 domain_check
1111 backup_config v2ray_transport domain
1112 if [[ $v2ray_transport -ge 18 ]]; then
1113 del_port "multiport"
1114 fi
1115 domain=$new_domain
1116 open_port "80"
1117 open_port "443"
1118 v2ray_transport=$v2ray_transport_opt
1119 config
1120 clear
1121 view_v2ray_config_info
1122 # download_v2ray_config_ask
1123 break
1124 else
1125 error
1126 fi
1127 fi
1128
1129 done
1130}
1131
1132path_config_ask() {
1133 echo
1134 while :; do
1135 echo -e "是否开启 网站伪装 和 路径分流 [${magenta}Y/N$none]"
1136 read -p "$(echo -e "(默认: [${cyan}N$none]):")" path_ask
1137 [[ -z $path_ask ]] && path_ask="n"
1138
1139 case $path_ask in
1140 Y | y)
1141 path_config
1142 break
1143 ;;
1144 N | n)
1145 echo
1146 echo
1147 echo -e "$yellow 网站伪装 和 路径分流 = $cyan不想配置$none"
1148 echo "----------------------------------------------------------------"
1149 echo
1150 break
1151 ;;
1152 *)
1153 error
1154 ;;
1155 esac
1156 done
1157}
1158path_config() {
1159 echo
1160 while :; do
1161 echo -e "请输入想要 ${magenta}用来分流的路径$none , 例如 /233blog , 那么只需要输入 233blog 即可"
1162 read -p "$(echo -e "(默认: [${cyan}233blog$none]):")" new_path
1163 [[ -z $new_path ]] && new_path="233blog"
1164
1165 case $new_path in
1166 *[/$]*)
1167 echo
1168 echo -e " 由于这个脚本太辣鸡了..所以分流的路径不能包含$red / $none或$red $ $none这两个符号.... "
1169 echo
1170 error
1171 ;;
1172 *)
1173 echo
1174 echo
1175 echo -e "$yellow 分流的路径 = ${cyan}/${new_path}$none"
1176 echo "----------------------------------------------------------------"
1177 echo
1178 break
1179 ;;
1180 esac
1181 done
1182 proxy_site_config
1183}
1184proxy_site_config() {
1185 echo
1186 while :; do
1187 echo -e "请输入 ${magenta}一个正确的$none ${cyan}网址$none 用来作为 ${cyan}网站的伪装$none , 例如 https://liyafly.com"
1188 echo -e "举例...假设你当前的域名是$green $domain $none, 伪装的网址的是 https://liyafly.com"
1189 echo -e "然后打开你的域名时候...显示出来的内容就是来自 https://liyafly.com 的内容"
1190 echo -e "其实就是一个反代...明白就好..."
1191 echo -e "如果不能伪装成功...可以使用 v2ray config 修改伪装的网址"
1192 read -p "$(echo -e "(默认: [${cyan}https://liyafly.com$none]):")" new_proxy_site
1193 [[ -z $new_proxy_site ]] && new_proxy_site="https://liyafly.com"
1194
1195 case $new_proxy_site in
1196 *[#$]*)
1197 echo
1198 echo -e " 由于这个脚本太辣鸡了..所以伪装的网址不能包含$red # $none或$red $ $none这两个符号.... "
1199 echo
1200 error
1201 ;;
1202 *)
1203 echo
1204 echo
1205 echo -e "$yellow 伪装的网址 = ${cyan}${new_proxy_site}$none"
1206 echo "----------------------------------------------------------------"
1207 echo
1208 break
1209 ;;
1210 esac
1211 done
1212}
1213
1214install_caddy() {
1215 _load download-caddy.sh
1216 _download_caddy_file
1217 _install_caddy_service
1218
1219}
1220caddy_config() {
1221 # local email=$(shuf -i1-10000000000 -n1)
1222 _load caddy-config.sh
1223 # systemctl restart caddy
1224 do_service restart caddy
1225}
1226v2ray_dynamic_port_start() {
1227 echo
1228 echo
1229 while :; do
1230 echo -e "请输入 "$yellow"V2Ray 动态端口开始 "$none"范围 ["$magenta"1-65535"$none"]"
1231 read -p "$(echo -e "(默认开始端口: ${cyan}10000$none):")" v2ray_dynamic_port_start_input
1232 [ -z $v2ray_dynamic_port_start_input ] && v2ray_dynamic_port_start_input=10000
1233 case $v2ray_dynamic_port_start_input in
1234 $v2ray_port)
1235 echo
1236 echo " 不能和 V2Ray 端口一毛一样...."
1237 echo
1238 echo -e " 当前 V2Ray 端口:${cyan}$v2ray_port${none}"
1239 error
1240 ;;
1241 [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])
1242 if [[ $shadowsocks && $v2ray_dynamic_port_start_input == $ssport ]]; then
1243 echo
1244 echo -e "抱歉, 此端口跟 Shadowsocks 端口冲突...当前 Shadowsocks 端口: ${cyan}$ssport$none"
1245 error
1246 elif [[ $socks && $v2ray_dynamic_port_start_input == $socks_port ]]; then
1247 echo
1248 echo -e "抱歉, 此端口跟 Socks 端口冲突...当前 Socks 端口: ${cyan}$socks_port$none"
1249 error
1250 elif [[ $mtproto && $v2ray_dynamic_port_start_input == $mtproto_port ]]; then
1251 echo
1252 echo -e "抱歉, 此端口跟 MTProto 端口冲突...当前 MTProto 端口: ${cyan}$mtproto_port$none"
1253 error
1254 else
1255 echo
1256 echo
1257 echo -e "$yellow V2Ray 动态端口开始 = $cyan$v2ray_dynamic_port_start_input$none"
1258 echo "----------------------------------------------------------------"
1259 echo
1260 break
1261 fi
1262
1263 ;;
1264 *)
1265 error
1266 ;;
1267 esac
1268
1269 done
1270
1271 if [[ $v2ray_dynamic_port_start_input -lt $v2ray_port ]]; then
1272 lt_v2ray_port=true
1273 fi
1274 if [[ $shadowsocks ]] && [[ $v2ray_dynamic_port_start_input -lt $ssport ]]; then
1275 lt_ssport=true
1276 fi
1277 if [[ $socks ]] && [[ $v2ray_dynamic_port_start_input -lt $socks_port ]]; then
1278 lt_socks_port=true
1279 fi
1280 if [[ $mtproto ]] && [[ $v2ray_dynamic_port_start_input -lt $mtproto_port ]]; then
1281 lt_mtproto_port=true
1282 fi
1283
1284}
1285
1286v2ray_dynamic_port_end() {
1287 echo
1288 while :; do
1289 echo -e "请输入 "$yellow"V2Ray 动态端口结束 "$none"范围 ["$magenta"1-65535"$none"]"
1290 read -p "$(echo -e "(默认结束端口: ${cyan}20000$none):")" v2ray_dynamic_port_end_input
1291 [ -z $v2ray_dynamic_port_end_input ] && v2ray_dynamic_port_end_input=20000
1292 case $v2ray_dynamic_port_end_input in
1293 [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])
1294
1295 if [[ $v2ray_dynamic_port_end_input -le $v2ray_dynamic_port_start_input ]]; then
1296 echo
1297 echo " 不能小于或等于 V2Ray 动态端口开始范围"
1298 echo
1299 echo -e " 当前 V2Ray 动态端口开始:${cyan}$v2ray_dynamic_port_start_input${none}"
1300 error
1301 elif [ $lt_v2ray_port ] && [[ ${v2ray_dynamic_port_end_input} -ge $v2ray_port ]]; then
1302 echo
1303 echo " V2Ray 动态端口结束范围 不能包括 V2Ray 端口..."
1304 echo
1305 echo -e " 当前 V2Ray 端口: ${cyan}$v2ray_port$none"
1306 error
1307 elif [ $lt_ssport ] && [[ ${v2ray_dynamic_port_end_input} -ge $ssport ]]; then
1308 echo
1309 echo " V2Ray 动态端口结束范围 不能包括 Shadowsocks 端口..."
1310 echo
1311 echo -e " 当前 Shadowsocks 端口: ${cyan}$ssport$none"
1312 error
1313 elif [ $lt_socks_port ] && [[ ${v2ray_dynamic_port_end_input} -ge $socks_port ]]; then
1314 echo
1315 echo " V2Ray 动态端口结束范围 不能包括 Socks 端口..."
1316 echo
1317 echo -e " 当前 Socks 端口: ${cyan}$socks_port$none"
1318 error
1319 elif [ $lt_mtproto_port ] && [[ ${v2ray_dynamic_port_end_input} -ge $mtproto_port ]]; then
1320 echo
1321 echo " V2Ray 动态端口结束范围 不能包括 MTProto 端口..."
1322 echo
1323 echo -e " 当前 MTProto 端口: ${cyan}$mtproto_port$none"
1324 error
1325 else
1326 echo
1327 echo
1328 echo -e "$yellow V2Ray 动态端口结束 = $cyan$v2ray_dynamic_port_end_input$none"
1329 echo "----------------------------------------------------------------"
1330 echo
1331 break
1332 fi
1333 ;;
1334 *)
1335 error
1336 ;;
1337 esac
1338
1339 done
1340
1341}
1342change_v2ray_dynamicport() {
1343 if [[ $v2ray_transport -ge 18 ]]; then
1344 change_v2ray_dynamic_port_start
1345 change_v2ray_dynamic_port_end
1346 pause
1347 del_port "multiport"
1348 open_port "multiport"
1349 backup_config v2ray_dynamicPort_start v2ray_dynamicPort_end
1350 port_range="${v2ray_dynamic_port_start_input}-${v2ray_dynamic_port_end_input}"
1351 config
1352 # clear
1353 echo
1354 echo -e "$green 动态端口修改成功啦...你不需要修改 V2Ray 客户端配置...保持原有的配置即可...$none"
1355 echo
1356 else
1357 echo
1358 echo -e "$red ...当前传输协议木有启用动态端口...$none"
1359 echo
1360 while :; do
1361 echo -e "是否需要修改传输协议 [${magenta}Y/N$none]"
1362 read -p "$(echo -e "默认 [${cyan}N$none]:")" y_n
1363 if [[ -z $y_n ]]; then
1364 echo
1365 echo -e "$green 已取消修改传输协议...$none"
1366 echo
1367 break
1368 else
1369 if [[ $y_n == [Yy] ]]; then
1370 change_v2ray_transport
1371 break
1372 elif [[ $y_n == [Nn] ]]; then
1373 echo
1374 echo -e "$green 已取消修改传输协议...$none"
1375 echo
1376 break
1377 else
1378 error
1379 fi
1380 fi
1381 done
1382
1383 fi
1384}
1385change_v2ray_dynamic_port_start() {
1386 echo
1387 echo
1388 while :; do
1389 echo -e "请输入 "$yellow"V2Ray 动态端口开始 "$none"范围 ["$magenta"1-65535"$none"]"
1390 read -p "$(echo -e "(当前动态开始端口: ${cyan}$v2ray_dynamicPort_start$none):")" v2ray_dynamic_port_start_input
1391 [ -z $v2ray_dynamic_port_start_input ] && error && continue
1392 case $v2ray_dynamic_port_start_input in
1393 $v2ray_port)
1394 echo
1395 echo " 不能和 V2Ray 端口一毛一样...."
1396 echo
1397 echo -e " 当前 V2Ray 端口:${cyan}$v2ray_port${none}"
1398 error
1399 ;;
1400 [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])
1401 if [[ $shadowsocks && $v2ray_dynamic_port_start_input == $ssport ]]; then
1402 echo
1403 echo -e "抱歉, 此端口跟 Shadowsocks 端口冲突...当前 Shadowsocks 端口: ${cyan}$ssport$none"
1404 error
1405 elif [[ $socks && $v2ray_dynamic_port_start_input == $socks_port ]]; then
1406 echo
1407 echo -e "抱歉, 此端口跟 Socks 端口冲突...当前 Socks 端口: ${cyan}$socks_port$none"
1408 error
1409 elif [[ $mtproto && $v2ray_dynamic_port_start_input == $mtproto_port ]]; then
1410 echo
1411 echo -e "抱歉, 此端口跟 MTProto 端口冲突...当前 MTProto 端口: ${cyan}$mtproto_port$none"
1412 error
1413 else
1414 echo
1415 echo
1416 echo -e "$yellow V2Ray 动态端口开始 = $cyan$v2ray_dynamic_port_start_input$none"
1417 echo "----------------------------------------------------------------"
1418 echo
1419 break
1420 fi
1421
1422 ;;
1423 *)
1424 error
1425 ;;
1426 esac
1427
1428 done
1429
1430 if [[ $v2ray_dynamic_port_start_input -lt $v2ray_port ]]; then
1431 lt_v2ray_port=true
1432 fi
1433 if [[ $shadowsocks ]] && [[ $v2ray_dynamic_port_start_input -lt $ssport ]]; then
1434 lt_ssport=true
1435 fi
1436 if [[ $socks ]] && [[ $v2ray_dynamic_port_start_input -lt $socks_port ]]; then
1437 lt_socks_port=true
1438 fi
1439 if [[ $mtproto ]] && [[ $v2ray_dynamic_port_start_input -lt $mtproto_port ]]; then
1440 lt_mtproto_port=true
1441 fi
1442}
1443
1444change_v2ray_dynamic_port_end() {
1445 echo
1446 while :; do
1447 echo -e "请输入 "$yellow"V2Ray 动态端口结束 "$none"范围 ["$magenta"1-65535"$none"]"
1448 read -p "$(echo -e "(当前动态结束端口: ${cyan}$v2ray_dynamicPort_end$none):")" v2ray_dynamic_port_end_input
1449 [ -z $v2ray_dynamic_port_end_input ] && error && continue
1450 case $v2ray_dynamic_port_end_input in
1451 [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])
1452
1453 if [[ $v2ray_dynamic_port_end_input -le $v2ray_dynamic_port_start_input ]]; then
1454 echo
1455 echo " 不能小于或等于 V2Ray 动态端口开始范围"
1456 echo
1457 echo -e " 当前 V2Ray 动态端口开始:${cyan}$v2ray_dynamic_port_start_input${none}"
1458 error
1459 elif [ $lt_v2ray_port ] && [[ ${v2ray_dynamic_port_end_input} -ge $v2ray_port ]]; then
1460 echo
1461 echo " V2Ray 动态端口结束范围 不能包括 V2Ray 端口..."
1462 echo
1463 echo -e " 当前 V2Ray 端口: ${cyan}$v2ray_port$none"
1464 error
1465 elif [ $lt_ssport ] && [[ ${v2ray_dynamic_port_end_input} -ge $ssport ]]; then
1466 echo
1467 echo " V2Ray 动态端口结束范围 不能包括 Shadowsocks 端口..."
1468 echo
1469 echo -e " 当前 Shadowsocks 端口: ${cyan}$ssport$none"
1470 error
1471 elif [ $lt_socks_port ] && [[ ${v2ray_dynamic_port_end_input} -ge $socks_port ]]; then
1472 echo
1473 echo " V2Ray 动态端口结束范围 不能包括 Socks 端口..."
1474 echo
1475 echo -e " 当前 Socks 端口: ${cyan}$socks_port$none"
1476 error
1477 elif [ $lt_mtproto_port ] && [[ ${v2ray_dynamic_port_end_input} -ge $mtproto_port ]]; then
1478 echo
1479 echo " V2Ray 动态端口结束范围 不能包括 MTProto 端口..."
1480 echo
1481 echo -e " 当前 MTProto 端口: ${cyan}$mtproto_port$none"
1482 error
1483 else
1484 echo
1485 echo
1486 echo -e "$yellow V2Ray 动态端口结束 = $cyan$v2ray_dynamic_port_end_input$none"
1487 echo "----------------------------------------------------------------"
1488 echo
1489 break
1490 fi
1491 ;;
1492 *)
1493 error
1494 ;;
1495 esac
1496
1497 done
1498
1499}
1500change_v2ray_id() {
1501 echo
1502 while :; do
1503 echo -e "是否确定要修改用户ID [${magenta}Y/N$none]"
1504 read -p "$(echo -e "默认 [${cyan}N$none]:")" y_n
1505 if [[ -z $y_n ]]; then
1506 echo
1507 echo -e "$green 已取消修改用户ID...$none"
1508 echo
1509 break
1510 else
1511 if [[ $y_n == [Yy] ]]; then
1512 echo
1513 echo
1514 echo -e "$yellow 修改用户ID = $cyan确定$none"
1515 echo "----------------------------------------------------------------"
1516 echo
1517 pause
1518 backup_config uuid
1519 v2ray_id=$uuid
1520 config
1521 clear
1522 view_v2ray_config_info
1523 # download_v2ray_config_ask
1524 break
1525 elif [[ $y_n == [Nn] ]]; then
1526 echo
1527 echo -e "$green 已取消修改用户ID...$none"
1528 echo
1529 break
1530 else
1531 error
1532 fi
1533 fi
1534 done
1535}
1536change_domain() {
1537 if [[ $v2ray_transport == [45] ]] && [[ $caddy ]]; then
1538 while :; do
1539 echo
1540 echo -e "请输入一个 $magenta正确的域名$none,一定一定一定要正确,不!能!出!错!"
1541 read -p "$(echo -e "(当前域名: ${cyan}$domain$none):") " new_domain
1542 [ -z "$new_domain" ] && error && continue
1543 if [[ $new_domain == $domain ]]; then
1544 echo
1545 echo -e " 跟当前域名一毛一样啊...修改个鸡鸡哦"
1546 echo
1547 error && continue
1548 fi
1549 echo
1550 echo
1551 echo -e "$yellow 你的域名 = $cyan$new_domain$none"
1552 echo "----------------------------------------------------------------"
1553 break
1554 done
1555 get_ip
1556 echo
1557 echo
1558 echo -e "$yellow 请将 $magenta$new_domain$none $yellow解析到: $cyan$ip$none"
1559 echo
1560 echo -e "$yellow 请将 $magenta$new_domain$none $yellow解析到: $cyan$ip$none"
1561 echo
1562 echo -e "$yellow 请将 $magenta$new_domain$none $yellow解析到: $cyan$ip$none"
1563 echo "----------------------------------------------------------------"
1564 echo
1565
1566 while :; do
1567
1568 read -p "$(echo -e "(是否已经正确解析: [${magenta}Y$none]):") " record
1569 if [[ -z "$record" ]]; then
1570 error
1571 else
1572 if [[ "$record" == [Yy] ]]; then
1573 domain_check
1574 echo
1575 echo
1576 echo -e "$yellow 域名解析 = ${cyan}我确定已经有解析了$none"
1577 echo "----------------------------------------------------------------"
1578 echo
1579 pause
1580 # domain_check
1581 backup_config domain
1582 domain=$new_domain
1583 caddy_config
1584 config
1585 clear
1586 view_v2ray_config_info
1587 # download_v2ray_config_ask
1588 break
1589 else
1590 error
1591 fi
1592 fi
1593
1594 done
1595 else
1596 echo
1597 echo -e "$red 抱歉...不支持修改...$none"
1598 echo
1599 echo -e " 备注..修改 TLS 域名仅支持传输协议为 ${yellow}WebSocket + TLS$none 或 ${yellow}HTTP/2$none 并且$yellow 自动配置 TLS = 打开$none"
1600 echo
1601 echo -e " 当前传输协议为: ${cyan}${transport[$v2ray_transport - 1]}${none}"
1602 echo
1603 if [[ $caddy ]]; then
1604 echo -e " 自动配置 TLS = ${cyan}打开$none"
1605 else
1606 echo -e " 自动配置 TLS = $red关闭$none"
1607 fi
1608 echo
1609 fi
1610}
1611change_path_config() {
1612 if [[ $v2ray_transport == [45] ]] && [[ $caddy && $is_path ]]; then
1613 echo
1614 while :; do
1615 echo -e "请输入想要 ${magenta}用来分流的路径$none , 例如 /233blog , 那么只需要输入 233blog 即可"
1616 read -p "$(echo -e "(当前分流的路径: [${cyan}/${path}$none]):")" new_path
1617 [[ -z $new_path ]] && error && continue
1618
1619 case $new_path in
1620 $path)
1621 echo
1622 echo -e " 大佬...跟 当前分流的路径 一毛一样啊...修改个鸡鸡哦 "
1623 echo
1624 error
1625 ;;
1626 *[/$]*)
1627 echo
1628 echo -e " 由于这个脚本太辣鸡了..所以分流的路径不能包含$red / $none或$red $ $none这两个符号.... "
1629 echo
1630 error
1631 ;;
1632 *)
1633 echo
1634 echo
1635 echo -e "$yellow 分流的路径 = ${cyan}/${new_path}$none"
1636 echo "----------------------------------------------------------------"
1637 echo
1638 break
1639 ;;
1640 esac
1641 done
1642 pause
1643 backup_config path
1644 path=$new_path
1645 caddy_config
1646 config
1647 clear
1648 view_v2ray_config_info
1649 # download_v2ray_config_ask
1650 elif [[ $v2ray_transport == [45] ]] && [[ $caddy ]]; then
1651 path_config_ask
1652 if [[ $new_path ]]; then
1653 backup_config +path
1654 path=$new_path
1655 proxy_site=$new_proxy_site
1656 is_path=true
1657 caddy_config
1658 config
1659 clear
1660 view_v2ray_config_info
1661 # download_v2ray_config_ask
1662 else
1663 echo
1664 echo
1665 echo " 给大佬点赞....好果断的放弃配置 网站伪装 和 路径分流"
1666 echo
1667 echo
1668 fi
1669 else
1670 echo
1671 echo -e "$red 抱歉...不支持修改...$none"
1672 echo
1673 echo -e " 备注..修改 分流的路径 仅支持传输协议为 ${yellow}WebSocket + TLS$none 或 ${yellow}HTTP/2$none 并且$yellow 自动配置 TLS = 打开$none"
1674 echo
1675 echo -e " 当前传输协议为: ${cyan}${transport[$v2ray_transport - 1]}${none}"
1676 echo
1677 if [[ $caddy ]]; then
1678 echo -e " 自动配置 TLS = ${cyan}打开$none"
1679 else
1680 echo -e " 自动配置 TLS = $red关闭$none"
1681 fi
1682 echo
1683 change_v2ray_transport_ask
1684 fi
1685
1686}
1687change_proxy_site_config() {
1688 if [[ $v2ray_transport == [45] ]] && [[ $caddy && $is_path ]]; then
1689 echo
1690 while :; do
1691 echo -e "请输入 ${magenta}一个正确的$none ${cyan}网址$none 用来作为 ${cyan}网站的伪装$none , 例如 https://liyafly.com"
1692 echo -e "举例...你当前的域名是$green $domain $none, 伪装的网址的是 https://liyafly.com"
1693 echo -e "然后打开你的域名时候...显示出来的内容就是来自 https://liyafly.com 的内容"
1694 echo -e "其实就是一个反代...明白就好..."
1695 echo -e "如果不能伪装成功...可以使用 v2ray config 修改伪装的网址"
1696 read -p "$(echo -e "(当前伪装的网址: [${cyan}${proxy_site}$none]):")" new_proxy_site
1697 [[ -z $new_proxy_site ]] && error && continue
1698
1699 case $new_proxy_site in
1700 *[#$]*)
1701 echo
1702 echo -e " 由于这个脚本太辣鸡了..所以伪装的网址不能包含$red # $none或$red $ $none这两个符号.... "
1703 echo
1704 error
1705 ;;
1706 *)
1707 echo
1708 echo
1709 echo -e "$yellow 伪装的网址 = ${cyan}${new_proxy_site}$none"
1710 echo "----------------------------------------------------------------"
1711 echo
1712 break
1713 ;;
1714 esac
1715 done
1716 pause
1717 backup_config proxy_site
1718 proxy_site=$new_proxy_site
1719 caddy_config
1720 echo
1721 echo
1722 echo " 哎哟...好像是修改成功了..."
1723 echo
1724 echo -e " 赶紧打开你的域名 ${cyan}https://${domain}$none 检查一下看看"
1725 echo
1726 echo
1727 elif [[ $v2ray_transport == [45] ]] && [[ $caddy ]]; then
1728 path_config_ask
1729 if [[ $new_path ]]; then
1730 backup_config +path
1731 path=$new_path
1732 proxy_site=$new_proxy_site
1733 is_path=true
1734 caddy_config
1735 config
1736 clear
1737 view_v2ray_config_info
1738 # download_v2ray_config_ask
1739 else
1740 echo
1741 echo
1742 echo " 给大佬点赞....好果断的放弃配置 网站伪装 和 路径分流"
1743 echo
1744 echo
1745 fi
1746 else
1747 echo
1748 echo -e "$red 抱歉...不支持修改...$none"
1749 echo
1750 echo -e " 备注..修改 伪装的网址 仅支持传输协议为 ${yellow}WebSocket + TLS$none 或 ${yellow}HTTP/2$none 并且$yellow 自动配置 TLS = 打开$none"
1751 echo
1752 echo -e " 当前传输协议为: ${cyan}${transport[$v2ray_transport - 1]}${none}"
1753 echo
1754 if [[ $caddy ]]; then
1755 echo -e " 自动配置 TLS = ${cyan}打开$none"
1756 else
1757 echo -e " 自动配置 TLS = $red关闭$none"
1758 fi
1759 echo
1760 change_v2ray_transport_ask
1761 fi
1762
1763}
1764domain_check() {
1765 # test_domain=$(dig $new_domain +short)
1766 test_domain=$(ping $new_domain -c 1 | grep -oE -m1 "([0-9]{1,3}\.){3}[0-9]{1,3}")
1767 if [[ $test_domain != $ip ]]; then
1768 echo
1769 echo -e "$red 检测域名解析错误....$none"
1770 echo
1771 echo -e " 你的域名: $yellow$new_domain$none 未解析到: $cyan$ip$none"
1772 echo
1773 echo -e " 你的域名当前解析到: $cyan$test_domain$none"
1774 echo
1775 echo "备注...如果你的域名是使用 Cloudflare 解析的话..在 Status 那里点一下那图标..让它变灰"
1776 echo
1777 exit 1
1778 fi
1779}
1780disable_path() {
1781 if [[ $v2ray_transport == [45] ]] && [[ $caddy && $is_path ]]; then
1782 echo
1783
1784 while :; do
1785 echo -e "是否关闭 ${yellow}网站伪装 和 路径分流${none} [${magenta}Y/N$none]"
1786 read -p "$(echo -e "(默认 [${cyan}N$none]):") " y_n
1787 [[ -z "$y_n" ]] && y_n="n"
1788 if [[ "$y_n" == [Yy] ]]; then
1789 echo
1790 echo
1791 echo -e "$yellow 关闭 网站伪装 和 路径分流 = $cyan是$none"
1792 echo "----------------------------------------------------------------"
1793 echo
1794 pause
1795 backup_config -path
1796 is_path=''
1797 caddy_config
1798 config
1799 clear
1800 view_v2ray_config_info
1801 # download_v2ray_config_ask
1802 break
1803 elif [[ "$y_n" == [Nn] ]]; then
1804 echo
1805 echo -e " $green已取消关闭 网站伪装 和 路径分流 ....$none"
1806 echo
1807 break
1808 else
1809 error
1810 fi
1811
1812 done
1813 else
1814 echo
1815 echo -e "$red 抱歉...不支持修改...$none"
1816 echo
1817 echo -e " 当前传输协议为: ${cyan}${transport[$v2ray_transport - 1]}${none}"
1818 echo
1819 if [[ $caddy ]]; then
1820 echo -e " 自动配置 TLS = ${cyan}打开$none"
1821 else
1822 echo -e " 自动配置 TLS = $red关闭$none"
1823 fi
1824 echo
1825 if [[ $is_path ]]; then
1826 echo -e " 路径分流 = ${cyan}打开$none"
1827 else
1828 echo -e " 路径分流 = $red关闭$none"
1829 fi
1830 echo
1831 echo -e " 必须为 WebSocket + TLS 或 HTTP/2 传输协议, 自动配置 TLS = ${cyan}打开$none, 路径分流 = ${cyan}打开$none, 才能修改"
1832 echo
1833
1834 fi
1835}
1836blocked_hosts() {
1837 if [[ $ban_ad ]]; then
1838 local _info="$green已开启$none"
1839 else
1840 local _info="$red已关闭$none"
1841 fi
1842 _opt=''
1843 while :; do
1844 echo
1845 echo -e "$yellow 1. $none开启 广告拦截"
1846 echo
1847 echo -e "$yellow 2. $none关闭 广告拦截"
1848 echo
1849 echo "备注: 广告拦截是基于 域名 拦截的..所以也许会造成浏览网页的时候出现部分元素留白..或者其他问题"
1850 echo
1851 echo "反馈问题或请求拦截更多域名: https://github.com/233boy/v2ray/issues"
1852 echo
1853 echo -e "当前广告拦截状态: $_info"
1854 echo
1855 read -p "$(echo -e "请选择 [${magenta}1-2$none]:")" _opt
1856 if [[ -z $_opt ]]; then
1857 error
1858 else
1859 case $_opt in
1860 1)
1861 if [[ $ban_ad ]]; then
1862 echo
1863 echo -e " 大胸弟...难不成你没有看到 (当前广告拦截状态: $_info) 这个帅帅的提示么.....还开启个鸡鸡哦"
1864 echo
1865 else
1866 echo
1867 echo
1868 echo -e "$yellow 广告拦截 = $cyan开启$none"
1869 echo "----------------------------------------------------------------"
1870 echo
1871 pause
1872 backup_config +ad
1873 ban_ad=true
1874 config
1875 echo
1876 echo
1877 echo -e "$green 广告拦截已开启...如果出现异常..那就关闭它咯$none"
1878 echo
1879 fi
1880 break
1881 ;;
1882 2)
1883 if [[ $ban_ad ]]; then
1884 echo
1885 echo
1886 echo -e "$yellow 广告拦截 = $cyan关闭$none"
1887 echo "----------------------------------------------------------------"
1888 echo
1889 pause
1890 backup_config -ad
1891 ban_ad=''
1892 config
1893 echo
1894 echo
1895 echo -e "$red 广告拦截已关闭...不过你也可以随时重新开启 ...只要你喜欢$none"
1896 echo
1897 else
1898 echo
1899 echo -e " 大胸弟...难不成你没有看到 (当前广告拦截状态: $_info) 这个帅帅的提示么.....还关闭个鸡鸡哦"
1900 echo
1901 fi
1902 break
1903 ;;
1904 *)
1905 error
1906 ;;
1907 esac
1908 fi
1909 done
1910
1911}
1912change_v2ray_alterId() {
1913 echo
1914 while :; do
1915 echo -e "请输入 ${yellow}alterId${none} 的数值 [${magenta}0-65535$none]"
1916 read -p "$(echo -e "(当前数值是: ${cyan}$alterId$none):") " new_alterId
1917 [[ -z $new_alterId ]] && error && continue
1918 case $new_alterId in
1919 $alterId)
1920 echo
1921 echo -e " 大佬...跟 当前 alterId 一毛一样啊...修改个鸡鸡哦 "
1922 echo
1923 error
1924 ;;
1925 [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])
1926 echo
1927 echo
1928 echo -e "$yellow alterId = $cyan$new_alterId$none"
1929 echo "----------------------------------------------------------------"
1930 echo
1931 pause
1932 backup_config alterId
1933 alterId=$new_alterId
1934 config
1935 clear
1936 view_v2ray_config_info
1937 # download_v2ray_config_ask
1938 break
1939 ;;
1940 *)
1941 error
1942 ;;
1943 esac
1944 done
1945}
1946
1947custom_uuid() {
1948 echo
1949 while :; do
1950 echo -e "请输入$yello自定义的 UUID$none...(${cyan}UUID 格式一定要对!!!$none)"
1951 read -p "$(echo -e "(当前 UUID: ${cyan}${v2ray_id}$none)"): " myuuid
1952 [ -z "$myuuid" ] && error && continue
1953 case $myuuid in
1954 $v2ray_id)
1955 echo
1956 echo -e " 大佬...跟 当前 UUID 一毛一样啊...修改个鸡鸡哦 "
1957 echo
1958 error
1959 ;;
1960 *[/$]* | *\&*)
1961 echo
1962 echo -e " 由于这个脚本太辣鸡了..所以 UUID 不能包含$red / $none或$red $ $none或$red & $none这三个符号.... "
1963 echo
1964 error
1965 ;;
1966 *)
1967 echo
1968 echo
1969 echo -e "$yellow UUID = $cyan$myuuid$none"
1970 echo
1971 echo -e " 如果 UUID 格式不正确.. V2Ray 会跪...使用$cyan v2ray reuuid$none 复活"
1972 echo "----------------------------------------------------------------"
1973 echo
1974 pause
1975 uuid=$myuuid
1976 backup_config uuid
1977 v2ray_id=$uuid
1978 config
1979 clear
1980 view_v2ray_config_info
1981 # download_v2ray_config_ask
1982 break
1983 ;;
1984 esac
1985 done
1986}
1987v2ray_service() {
1988 while :; do
1989 echo
1990 echo -e "$yellow 1. $none启动 V2Ray"
1991 echo
1992 echo -e "$yellow 2. $none停止 V2Ray"
1993 echo
1994 echo -e "$yellow 3. $none重启 V2Ray"
1995 echo
1996 echo -e "$yellow 4. $none查看访问日志"
1997 echo
1998 echo -e "$yellow 5. $none查看错误日志"
1999 echo
2000 read -p "$(echo -e "请选择 [${magenta}1-5$none]:")" _opt
2001 if [[ -z $_opt ]]; then
2002 error
2003 else
2004 case $_opt in
2005 1)
2006 start_v2ray
2007 break
2008 ;;
2009 2)
2010 stop_v2ray
2011 break
2012 ;;
2013 3)
2014 restart_v2ray
2015 break
2016 ;;
2017 4)
2018 view_v2ray_log
2019 break
2020 ;;
2021 5)
2022 view_v2ray_error_log
2023 break
2024 ;;
2025 *)
2026 error
2027 ;;
2028 esac
2029 fi
2030 done
2031}
2032start_v2ray() {
2033 if [[ $v2ray_pid ]]; then
2034 echo
2035 echo -e "${green} V2Ray 正在运行...无需再启动$none"
2036 echo
2037 else
2038
2039 # systemctl start v2ray
2040 service v2ray start >/dev/null 2>&1
2041 if [[ $? -ne 0 ]]; then
2042 echo
2043 echo -e "${red} V2Ray 启动失败!$none"
2044 echo
2045 else
2046 echo
2047 echo -e "${green} V2Ray 已启动$none"
2048 echo
2049 fi
2050
2051 fi
2052}
2053stop_v2ray() {
2054 if [[ $v2ray_pid ]]; then
2055 # systemctl stop v2ray
2056 service v2ray stop >/dev/null 2>&1
2057 echo
2058 echo -e "${green} V2Ray 已停止$none"
2059 echo
2060 else
2061 echo
2062 echo -e "${red} V2Ray 没有在运行$none"
2063 echo
2064 fi
2065}
2066restart_v2ray() {
2067 # systemctl restart v2ray
2068 service v2ray restart >/dev/null 2>&1
2069 if [[ $? -ne 0 ]]; then
2070 echo
2071 echo -e "${red} V2Ray 重启失败!$none"
2072 echo
2073 else
2074 echo
2075 echo -e "${green} V2Ray 重启完成 $none"
2076 echo
2077 fi
2078}
2079view_v2ray_log() {
2080 echo
2081 echo -e "$green 按 Ctrl + C 即可退出...$none"
2082 echo
2083 tail -f /var/log/v2ray/access.log
2084}
2085view_v2ray_error_log() {
2086 echo
2087 echo -e "$green 按 Ctrl + C 即可退出...$none"
2088 echo
2089 tail -f /var/log/v2ray/error.log
2090}
2091download_v2ray_config() {
2092 while :; do
2093 echo
2094 echo -e "$yellow 1. $none直接下载 V2Ray 客户端配置文件(仅支持 Xshell)"
2095 echo
2096 echo -e "$yellow 2. $none生成 V2Ray 客户端配置文件下载链接"
2097 echo
2098 echo -e "$yellow 3. $none生成 V2Ray 配置信息链接"
2099 echo
2100 echo -e "$yellow 4. $none生成 V2Ray 配置二维码链接"
2101 echo
2102 read -p "$(echo -e "请选择 [${magenta}1-4$none]:")" other_opt
2103 if [[ -z $other_opt ]]; then
2104 error
2105 else
2106 case $other_opt in
2107 1)
2108 get_v2ray_config
2109 break
2110 ;;
2111 2)
2112 get_v2ray_config_link
2113 break
2114 ;;
2115 3)
2116 get_v2ray_config_info_link
2117 break
2118 ;;
2119 4)
2120 get_v2ray_config_qr_link
2121 break
2122 ;;
2123 *)
2124 error
2125 ;;
2126 esac
2127 fi
2128 done
2129}
2130get_v2ray_config() {
2131 config
2132 echo
2133 echo " 如果你当前使用的 SSH 客户端不是 Xshell 的话...下载 V2Ray 客户端配置文件将会出现卡死情况"
2134 echo
2135 while :; do
2136 read -p "$(echo -e "不要BB...哥就是在使用 Xshell [${magenta}Y$none]:")" is_xshell
2137 if [[ -z $is_xshell ]]; then
2138 error
2139 else
2140 if [[ $is_xshell == [yY] ]]; then
2141 echo
2142 echo "开始下载....请选择 V2Ray 客户端配置文件保存位置"
2143 echo
2144 # sz /etc/v2ray/233blog_v2ray.zip
2145 local tmpfile="/tmp/233blog_v2ray_config_$RANDOM.json"
2146 cp -f $v2ray_client_config $tmpfile
2147 sz $tmpfile
2148 echo
2149 echo
2150 echo -e "$green 下载完成咯...$none"
2151 echo
2152 # echo -e "$yellow 解压密码 = ${cyan}233blog.com$none"
2153 # echo
2154 echo -e "$yellow SOCKS 监听端口 = ${cyan}2333${none}"
2155 echo
2156 echo -e "${yellow} HTTP 监听端口 = ${cyan}6666$none"
2157 echo
2158 echo "V2Ray 客户端使用教程: https://233v2.com/post/4/"
2159 echo
2160 break
2161 else
2162 error
2163 fi
2164 fi
2165 done
2166 [[ -f $tmpfile ]] && rm -rf $tmpfile
2167
2168}
2169get_v2ray_config_link() {
2170 _load client_file.sh
2171 _get_client_file
2172}
2173create_v2ray_config_text() {
2174
2175 get_transport_args
2176
2177 echo
2178 echo
2179 echo "---------- V2Ray 配置信息 -------------"
2180 if [[ $v2ray_transport == [45] ]]; then
2181 if [[ ! $caddy ]]; then
2182 echo
2183 echo " 警告!请自行配置 TLS...教程: https://233v2.com/post/3/"
2184 fi
2185 echo
2186 echo "地址 (Address) = ${domain}"
2187 echo
2188 echo "端口 (Port) = 443"
2189 echo
2190 echo "用户ID (User ID / UUID) = ${v2ray_id}"
2191 echo
2192 echo "额外ID (Alter Id) = ${alterId}"
2193 echo
2194 echo "传输协议 (Network) = ${net}"
2195 echo
2196 echo "伪装类型 (header type) = ${header}"
2197 echo
2198 echo "伪装域名 (host) = ${domain}"
2199 echo
2200 echo "路径 (path) = ${_path}"
2201 echo
2202 echo "TLS (Enable TLS) = 打开"
2203 echo
2204 if [[ $ban_ad ]]; then
2205 echo " 备注: 广告拦截已开启.."
2206 echo
2207 fi
2208 else
2209 [[ -z $ip ]] && get_ip
2210 echo
2211 echo "地址 (Address) = ${ip}"
2212 echo
2213 echo "端口 (Port) = $v2ray_port"
2214 echo
2215 echo "用户ID (User ID / UUID) = ${v2ray_id}"
2216 echo
2217 echo "额外ID (Alter Id) = ${alterId}"
2218 echo
2219 echo "传输协议 (Network) = ${net}"
2220 echo
2221 echo "伪装类型 (header type) = ${header}"
2222 echo
2223 fi
2224 if [[ $v2ray_transport -ge 18 ]] && [[ $ban_ad ]]; then
2225 echo "备注: 动态端口已启用...广告拦截已开启..."
2226 echo
2227 elif [[ $v2ray_transport -ge 18 ]]; then
2228 echo "备注: 动态端口已启用..."
2229 echo
2230 elif [[ $ban_ad ]]; then
2231 echo "备注: 广告拦截已开启.."
2232 echo
2233 fi
2234 echo "---------- END -------------"
2235 echo
2236 echo "V2Ray 客户端使用教程: https://233v2.com/post/4/"
2237 echo
2238}
2239get_v2ray_config_info_link() {
2240 echo
2241 echo -e "$green 正在生成链接.... 稍等片刻即可....$none"
2242 echo
2243 create_v2ray_config_text >/tmp/233blog_v2ray.txt
2244 local random=$(echo $RANDOM-$RANDOM-$RANDOM | base64 -w 0)
2245 local link=$(curl -s --upload-file /tmp/233blog_v2ray.txt "https://transfer.sh/${random}_233v2_v2ray.txt")
2246 if [[ $link ]]; then
2247 echo
2248 echo "---------- V2Ray 配置信息链接-------------"
2249 echo
2250 echo -e "$yellow 链接 = $cyan$link$none"
2251 echo
2252 echo -e " V2Ray 客户端使用教程: https://233v2.com/post/4/"
2253 echo
2254 echo "备注...链接将在 14 天后失效..."
2255 echo
2256 echo "提醒...请不要把链接分享出去...除非你有特别的理由...."
2257 echo
2258 else
2259 echo
2260 echo -e "$red 哎呀呀呀...出错咯...请重试$none"
2261 echo
2262 fi
2263 rm -rf /tmp/233blog_v2ray.txt
2264}
2265get_v2ray_config_qr_link() {
2266
2267 create_vmess_URL_config
2268
2269 _load qr.sh
2270 _qr_create
2271}
2272get_v2ray_vmess_URL_link() {
2273 create_vmess_URL_config
2274 local vmess="vmess://$(cat /etc/v2ray/vmess_qr.json | base64 -w 0)"
2275 echo
2276 echo "---------- V2Ray vmess URL / V2RayNG v0.4.1+ / V2RayN v2.1+ / 仅适合部分客户端 -------------"
2277 echo
2278 echo -e ${cyan}$vmess${none}
2279 echo
2280 rm -rf /etc/v2ray/vmess_qr.json
2281}
2282other() {
2283 while :; do
2284 echo
2285 echo -e "$yellow 1. $none安装 BBR"
2286 echo
2287 echo -e "$yellow 2. $none安装 LotServer(锐速)"
2288 echo
2289 echo -e "$yellow 3. $none卸载 LotServer(锐速)"
2290 echo
2291 read -p "$(echo -e "请选择 [${magenta}1-3$none]:")" _opt
2292 if [[ -z $_opt ]]; then
2293 error
2294 else
2295 case $_opt in
2296 1)
2297 install_bbr
2298 break
2299 ;;
2300 2)
2301 install_lotserver
2302 break
2303 ;;
2304 3)
2305 uninstall_lotserver
2306 break
2307 ;;
2308 *)
2309 error
2310 ;;
2311 esac
2312 fi
2313 done
2314}
2315install_bbr() {
2316 local test1=$(sed -n '/net.ipv4.tcp_congestion_control/p' /etc/sysctl.conf)
2317 local test2=$(sed -n '/net.core.default_qdisc/p' /etc/sysctl.conf)
2318 if [[ $test1 == "net.ipv4.tcp_congestion_control = bbr" && $test2 == "net.core.default_qdisc = fq" ]]; then
2319 echo
2320 echo -e "$green BBR 已经启用啦...无需再安装$none"
2321 echo
2322 else
2323 _load bbr.sh
2324 _try_enable_bbr
2325 [[ ! $enable_bbr ]] && bash <(curl -s -L https://github.com/teddysun/across/raw/master/bbr.sh)
2326 fi
2327}
2328install_lotserver() {
2329 # https://moeclub.org/2017/03/08/14/
2330 wget --no-check-certificate -qO /tmp/appex.sh "https://raw.githubusercontent.com/0oVicero0/serverSpeeder_Install/master/appex.sh"
2331 bash /tmp/appex.sh 'install'
2332 rm -rf /tmp/appex.sh
2333}
2334uninstall_lotserver() {
2335 # https://moeclub.org/2017/03/08/14/
2336 wget --no-check-certificate -qO /tmp/appex.sh "https://raw.githubusercontent.com/0oVicero0/serverSpeeder_Install/master/appex.sh"
2337 bash /tmp/appex.sh 'uninstall'
2338 rm -rf /tmp/appex.sh
2339}
2340
2341open_port() {
2342 if [[ $cmd == "apt-get" ]]; then
2343 if [[ $1 != "multiport" ]]; then
2344 # if [[ $cmd == "apt-get" ]]; then
2345 iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport $1 -j ACCEPT
2346 iptables -I INPUT -m state --state NEW -m udp -p udp --dport $1 -j ACCEPT
2347 ip6tables -I INPUT -m state --state NEW -m tcp -p tcp --dport $1 -j ACCEPT
2348 ip6tables -I INPUT -m state --state NEW -m udp -p udp --dport $1 -j ACCEPT
2349
2350 # iptables-save >/etc/iptables.rules.v4
2351 # ip6tables-save >/etc/iptables.rules.v6
2352 # else
2353 # firewall-cmd --permanent --zone=public --add-port=$1/tcp
2354 # firewall-cmd --permanent --zone=public --add-port=$1/udp
2355 # firewall-cmd --reload
2356 # fi
2357 else
2358 # if [[ $cmd == "apt-get" ]]; then
2359 local multiport="${v2ray_dynamic_port_start_input}:${v2ray_dynamic_port_end_input}"
2360 iptables -I INPUT -p tcp --match multiport --dports $multiport -j ACCEPT
2361 iptables -I INPUT -p udp --match multiport --dports $multiport -j ACCEPT
2362 ip6tables -I INPUT -p tcp --match multiport --dports $multiport -j ACCEPT
2363 ip6tables -I INPUT -p udp --match multiport --dports $multiport -j ACCEPT
2364
2365 # iptables-save >/etc/iptables.rules.v4
2366 # ip6tables-save >/etc/iptables.rules.v6
2367 # else
2368 # local multi_port="${v2ray_dynamic_port_start_input}-${v2ray_dynamic_port_end_input}"
2369 # firewall-cmd --permanent --zone=public --add-port=$multi_port/tcp
2370 # firewall-cmd --permanent --zone=public --add-port=$multi_port/udp
2371 # firewall-cmd --reload
2372 # fi
2373 fi
2374 iptables-save >/etc/iptables.rules.v4
2375 ip6tables-save >/etc/iptables.rules.v6
2376 # else
2377 # service iptables save >/dev/null 2>&1
2378 # service ip6tables save >/dev/null 2>&1
2379 fi
2380
2381}
2382del_port() {
2383 if [[ $cmd == "apt-get" ]]; then
2384 if [[ $1 != "multiport" ]]; then
2385 # if [[ $cmd == "apt-get" ]]; then
2386 iptables -D INPUT -m state --state NEW -m tcp -p tcp --dport $1 -j ACCEPT
2387 iptables -D INPUT -m state --state NEW -m udp -p udp --dport $1 -j ACCEPT
2388 ip6tables -D INPUT -m state --state NEW -m tcp -p tcp --dport $1 -j ACCEPT
2389 ip6tables -D INPUT -m state --state NEW -m udp -p udp --dport $1 -j ACCEPT
2390 # else
2391 # firewall-cmd --permanent --zone=public --remove-port=$1/tcp
2392 # firewall-cmd --permanent --zone=public --remove-port=$1/udp
2393 # fi
2394 else
2395 # if [[ $cmd == "apt-get" ]]; then
2396 local ports="${v2ray_dynamicPort_start}:${v2ray_dynamicPort_end}"
2397 iptables -D INPUT -p tcp --match multiport --dports $ports -j ACCEPT
2398 iptables -D INPUT -p udp --match multiport --dports $ports -j ACCEPT
2399 ip6tables -D INPUT -p tcp --match multiport --dports $ports -j ACCEPT
2400 ip6tables -D INPUT -p udp --match multiport --dports $ports -j ACCEPT
2401 # else
2402 # local ports="${v2ray_dynamicPort_start}-${v2ray_dynamicPort_end}"
2403 # firewall-cmd --permanent --zone=public --remove-port=$ports/tcp
2404 # firewall-cmd --permanent --zone=public --remove-port=$ports/udp
2405 # fi
2406 fi
2407 iptables-save >/etc/iptables.rules.v4
2408 ip6tables-save >/etc/iptables.rules.v6
2409 # else
2410 # service iptables save >/dev/null 2>&1
2411 # service ip6tables save >/dev/null 2>&1
2412 fi
2413}
2414update() {
2415 while :; do
2416 echo
2417 echo -e "$yellow 1. $none更新 V2Ray 主程序"
2418 echo
2419 echo -e "$yellow 2. $none更新 V2Ray 管理脚本"
2420 echo
2421 read -p "$(echo -e "请选择 [${magenta}1-2$none]:")" _opt
2422 if [[ -z $_opt ]]; then
2423 error
2424 else
2425 case $_opt in
2426 1)
2427 update_v2ray
2428 break
2429 ;;
2430 2)
2431 update_v2ray.sh
2432 exit
2433 break
2434 ;;
2435 *)
2436 error
2437 ;;
2438 esac
2439 fi
2440 done
2441}
2442update_v2ray() {
2443 _load download-v2ray.sh
2444 _update_v2ray_version
2445}
2446update_v2ray.sh() {
2447 if [[ $_test ]]; then
2448 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)
2449 else
2450 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)
2451 fi
2452
2453 if [[ ! $latest_version ]]; then
2454 echo
2455 echo -e " $red获取 V2Ray 最新版本失败!!!$none"
2456 echo
2457 echo -e " 请尝试执行如下命令: $green echo 'nameserver 8.8.8.8' >/etc/resolv.conf $none"
2458 echo
2459 echo " 然后再继续...."
2460 echo
2461 exit 1
2462 fi
2463
2464 if [[ $latest_version == $_version ]]; then
2465 echo
2466 echo -e "$green 木有发现新版本 $none"
2467 echo
2468 else
2469 echo
2470 echo -e " $green 咦...发现新版本耶....正在拼命更新.......$none"
2471 echo
2472 cd /etc/v2ray/233boy/v2ray
2473 git pull
2474 cp -f /etc/v2ray/233boy/v2ray/v2ray.sh $_v2ray_sh
2475 chmod +x $_v2ray_sh
2476 echo
2477 echo -e "$green 更新成功啦...当前 V2Ray 管理脚本 版本: ${cyan}$latest_version$none"
2478 echo
2479 fi
2480
2481}
2482uninstall_v2ray() {
2483 _load uninstall.sh
2484}
2485config() {
2486 _load config.sh
2487
2488 if [[ $v2ray_port == "80" ]]; then
2489 if [[ $cmd == "yum" ]]; then
2490 [[ $(pgrep "httpd") ]] && systemctl stop httpd >/dev/null 2>&1
2491 [[ $(command -v httpd) ]] && yum remove httpd -y >/dev/null 2>&1
2492 else
2493 [[ $(pgrep "apache2") ]] && service apache2 stop >/dev/null 2>&1
2494 [[ $(command -v apache2) ]] && apt-get remove apache2* -y >/dev/null 2>&1
2495 fi
2496 fi
2497 do_service restart v2ray
2498}
2499backup_config() {
2500 for keys in $*; do
2501 case $keys in
2502 v2ray_transport)
2503 sed -i "18s/=$v2ray_transport/=$v2ray_transport_opt/" $backup
2504 ;;
2505 v2ray_port)
2506 sed -i "21s/=$v2ray_port/=$v2ray_port_opt/" $backup
2507 ;;
2508 uuid)
2509 sed -i "24s/=$v2ray_id/=$uuid/" $backup
2510 ;;
2511 alterId)
2512 sed -i "27s/=$alterId/=$new_alterId/" $backup
2513 ;;
2514 v2ray_dynamicPort_start)
2515 sed -i "30s/=$v2ray_dynamicPort_start/=$v2ray_dynamic_port_start_input/" $backup
2516 ;;
2517 v2ray_dynamicPort_end)
2518 sed -i "33s/=$v2ray_dynamicPort_end/=$v2ray_dynamic_port_end_input/" $backup
2519 ;;
2520 domain)
2521 sed -i "36s/=$domain/=$new_domain/" $backup
2522 ;;
2523 caddy)
2524 sed -i "39s/=/=true/" $backup
2525 ;;
2526 +ss)
2527 sed -i "42s/=/=true/; 45s/=$ssport/=$new_ssport/; 48s/=$sspass/=$new_sspass/; 51s/=$ssciphers/=$new_ssciphers/" $backup
2528 ;;
2529 -ss)
2530 sed -i "42s/=true/=/" $backup
2531 ;;
2532 ssport)
2533 sed -i "45s/=$ssport/=$new_ssport/" $backup
2534 ;;
2535 sspass)
2536 sed -i "48s/=$sspass/=$new_sspass/" $backup
2537 ;;
2538 ssciphers)
2539 sed -i "51s/=$ssciphers/=$new_ssciphers/" $backup
2540 ;;
2541 +ad)
2542 sed -i "54s/=/=true/" $backup
2543 ;;
2544 -ad)
2545 sed -i "54s/=true/=/" $backup
2546 ;;
2547 +path)
2548 sed -i "57s/=/=true/; 60s/=$path/=$new_path/; 63s#=$proxy_site#=$new_proxy_site#" $backup
2549 ;;
2550 -path)
2551 sed -i "57s/=true/=/" $backup
2552 ;;
2553 path)
2554 sed -i "60s/=$path/=$new_path/" $backup
2555 ;;
2556 proxy_site)
2557 sed -i "63s#=$proxy_site#=$new_proxy_site#" $backup
2558 ;;
2559 +socks)
2560 sed -i "66s/=/=true/; 69s/=$socks_port/=$new_socks_port/; 72s/=$socks_username/=$new_socks_username/; 75s/=$socks_userpass/=$new_socks_userpass/;" $backup
2561 ;;
2562 -socks)
2563 sed -i "66s/=true/=/" $backup
2564 ;;
2565 socks_port)
2566 sed -i "69s/=$socks_port/=$new_socks_port/" $backup
2567 ;;
2568 socks_username)
2569 sed -i "72s/=$socks_username/=$new_socks_username/" $backup
2570 ;;
2571 socks_userpass)
2572 sed -i "75s/=$socks_userpass/=$new_socks_userpass/" $backup
2573 ;;
2574 +mtproto)
2575 sed -i "78s/=/=true/; 81s/=$mtproto_port/=$new_mtproto_port/; 84s/=$mtproto_secret/=$new_mtproto_secret/" $backup
2576 ;;
2577 -mtproto)
2578 sed -i "78s/=true/=/" $backup
2579 ;;
2580 mtproto_port)
2581 sed -i "81s/=$mtproto_port/=$new_mtproto_port/" $backup
2582 ;;
2583 mtproto_secret)
2584 sed -i "84s/=$mtproto_secret/=$new_mtproto_secret/" $backup
2585 ;;
2586 +bt)
2587 sed -i "87s/=/=true/" $backup
2588 ;;
2589 -bt)
2590 sed -i "87s/=true/=/" $backup
2591 ;;
2592 esac
2593 done
2594
2595}
2596
2597get_ip() {
2598
2599 ipv4=$(curl -4 -s ipv4.icanhazip.com)
2600 [[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://api.ip.sb/ip)
2601 [[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://api.ipify.org)
2602 [[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://ip.seeip.org)
2603 [[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://ifconfig.co/ip)
2604 [[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://api.myip.com | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}")
2605 [[ -z $ipv4 ]] && ipv4=$(curl -s -4 icanhazip.com)
2606 [[ -z $ipv4 ]] && ipv4=$(curl -s -4 myip.ipip.net | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}")
2607 [[ -z $ipv4 ]] && echo -e "\n$red 这垃圾小鸡扔了吧!$none\n" && exit
2608
2609 ipv6=$(curl -6 -s ipv6.icanhazip.com)
2610 [[ -z $ipv6 ]] && ipv6=$(curl -s -6 https://api.ip.sb/ip)
2611 [[ -z $ipv6 ]] && ipv6=$(curl -s -6 https://ip.seeip.org)
2612 [[ -z $ipv6 ]] && ipv6=$(curl -s -6 https://ifconfig.co/ip)
2613 [[ -z $ipv6 ]] && ipv6=$(curl -s -6 icanhazip.com)
2614 [[ -z $ipv6 ]] && echo -e "\n$red 这垃圾小鸡扔了吧!$none\n" && exit
2615
2616 if [ $ipv6 ]; then
2617 ip=$ipv6 ##默认ipv6 edit by Scaleya
2618 else ip=$ipv4
2619 fi
2620}
2621
2622error() {
2623
2624 echo -e "\n$red 输入错误!$none\n"
2625
2626}
2627
2628pause() {
2629
2630 read -rsp "$(echo -e "按$green Enter 回车键 $none继续....或按$red Ctrl + C $none取消.")" -d $'\n'
2631 echo
2632}
2633do_service() {
2634 if [[ $systemd ]]; then
2635 systemctl $1 $2
2636 else
2637 service $2 $1
2638 fi
2639}
2640_help() {
2641 echo
2642 echo "........... V2Ray 管理脚本帮助信息 by 233v2.com .........."
2643 echo -e "
2644 ${green}v2ray menu $none管理 V2Ray (同等于直接输入 v2ray)
2645
2646 ${green}v2ray info $none查看 V2Ray 配置信息
2647
2648 ${green}v2ray config $none修改 V2Ray 配置
2649
2650 ${green}v2ray link $none生成 V2Ray 客户端配置文件链接
2651
2652 ${green}v2ray textlink $none生成 V2Ray 配置信息链接
2653
2654 ${green}v2ray qr $none生成 V2Ray 配置二维码链接
2655
2656 ${green}v2ray ss $none修改 Shadowsocks 配置
2657
2658 ${green}v2ray ssinfo $none查看 Shadowsocks 配置信息
2659
2660 ${green}v2ray ssqr $none生成 Shadowsocks 配置二维码链接
2661
2662 ${green}v2ray status $none查看 V2Ray 运行状态
2663
2664 ${green}v2ray start $none启动 V2Ray
2665
2666 ${green}v2ray stop $none停止 V2Ray
2667
2668 ${green}v2ray restart $none重启 V2Ray
2669
2670 ${green}v2ray log $none查看 V2Ray 运行日志
2671
2672 ${green}v2ray update $none更新 V2Ray
2673
2674 ${green}v2ray update.sh $none更新 V2Ray 管理脚本
2675
2676 ${green}v2ray uninstall $none卸载 V2Ray
2677"
2678}
2679menu() {
2680 clear
2681 while :; do
2682 echo
2683 echo "........... V2Ray 管理脚本 $_version by 233v2.com .........."
2684 echo
2685 echo -e "## V2Ray 版本: $cyan$v2ray_ver$none / V2Ray 状态: $v2ray_status ##"
2686 echo
2687 echo "帮助说明: https://233v2.com/post/1/"
2688 echo
2689 echo "反馈问题: https://github.com/233boy/v2ray/issues"
2690 echo
2691 echo "TG 群组: https://t.me/blog233"
2692 echo
2693 echo "捐赠脚本作者: https://233v2.com/donate/"
2694 echo
2695 echo "捐助 V2Ray: https://www.v2ray.com/chapter_00/02_donate.html"
2696 echo
2697 echo -e "$yellow 1. $none查看 V2Ray 配置"
2698 echo
2699 echo -e "$yellow 2. $none修改 V2Ray 配置"
2700 echo
2701 echo -e "$yellow 3. $none下载 V2Ray 配置 / 生成配置信息链接 / 生成二维码链接"
2702 echo
2703 echo -e "$yellow 4. $none查看 Shadowsocks 配置 / 生成二维码链接"
2704 echo
2705 echo -e "$yellow 5. $none修改 Shadowsocks 配置"
2706 echo
2707 echo -e "$yellow 6. $none查看 MTProto 配置 / 修改 MTProto 配置"
2708 echo
2709 echo -e "$yellow 7. $none查看 Socks5 配置 / 修改 Socks5 配置"
2710 echo
2711 echo -e "$yellow 8. $none启动 / 停止 / 重启 / 查看日志"
2712 echo
2713 echo -e "$yellow 9. $none更新 V2Ray / 更新 V2Ray 管理脚本"
2714 echo
2715 echo -e "$yellow 10. $none卸载 V2Ray"
2716 echo
2717 echo -e "$yellow 11. $none其他"
2718 echo
2719 echo -e "温馨提示...如果你不想执行选项...按$yellow Ctrl + C $none即可退出"
2720 echo
2721 read -p "$(echo -e "请选择菜单 [${magenta}1-11$none]:")" choose
2722 if [[ -z $choose ]]; then
2723 exit 1
2724 else
2725 case $choose in
2726 1)
2727 view_v2ray_config_info
2728 break
2729 ;;
2730 2)
2731 change_v2ray_config
2732 break
2733 ;;
2734 3)
2735 download_v2ray_config
2736 break
2737 ;;
2738 4)
2739 get_shadowsocks_config
2740 break
2741 ;;
2742 5)
2743 change_shadowsocks_config
2744 break
2745 ;;
2746 6)
2747 _load mtproto.sh
2748 _mtproto_main
2749 break
2750 ;;
2751 7)
2752 _load socks.sh
2753 _socks_main
2754 break
2755 ;;
2756 8)
2757 v2ray_service
2758 break
2759 ;;
2760 9)
2761 update
2762 break
2763 ;;
2764 10)
2765 uninstall_v2ray
2766 break
2767 ;;
2768 11)
2769 other
2770 break
2771 ;;
2772 *)
2773 error
2774 ;;
2775 esac
2776 fi
2777 done
2778}
2779args=$1
2780[ -z $1 ] && args="menu"
2781case $args in
2782menu)
2783 menu
2784 ;;
2785i | info)
2786 view_v2ray_config_info
2787 ;;
2788c | config)
2789 change_v2ray_config
2790 ;;
2791l | link)
2792 get_v2ray_config_link
2793 ;;
2794L | infolink)
2795 get_v2ray_config_info_link
2796 ;;
2797q | qr)
2798 get_v2ray_config_qr_link
2799 ;;
2800s | ss)
2801 change_shadowsocks_config
2802 ;;
2803S | ssinfo)
2804 view_shadowsocks_config_info
2805 ;;
2806Q | ssqr)
2807 get_shadowsocks_config_qr_link
2808 ;;
2809socks)
2810 _load socks.sh
2811 _socks_main
2812 ;;
2813socksinfo)
2814 _load socks.sh
2815 _view_socks_info
2816 ;;
2817tg)
2818 _load mtproto.sh
2819 _mtproto_main
2820 ;;
2821tginfo)
2822 _load mtproto.sh
2823 _view_mtproto_info
2824 ;;
2825bt)
2826 _load bt.sh
2827 _ban_bt_main
2828 ;;
2829status)
2830 echo
2831 if [[ $v2ray_transport == [45] && $caddy ]]; then
2832 echo -e " V2Ray 状态: $v2ray_status / Caddy 状态: $caddy_run_status"
2833 else
2834 echo -e " V2Ray 状态: $v2ray_status"
2835 fi
2836 echo
2837 ;;
2838start)
2839 start_v2ray
2840 ;;
2841stop)
2842 stop_v2ray
2843 ;;
2844restart)
2845 [[ $v2ray_transport == [45] && $caddy ]] && do_service restart caddy
2846 restart_v2ray
2847 ;;
2848reload)
2849 config
2850 [[ $v2ray_transport == [45] && $caddy ]] && caddy_config
2851 clear
2852 view_v2ray_config_info
2853 ;;
2854time)
2855 date -s "$(curl -sI g.cn | grep Date | cut -d' ' -f3-6)Z"
2856 ;;
2857log)
2858 view_v2ray_log
2859 ;;
2860url | URL)
2861 get_v2ray_vmess_URL_link
2862 ;;
2863u | update)
2864 update_v2ray
2865 ;;
2866U | update.sh)
2867 update_v2ray.sh
2868 exit
2869 ;;
2870un | uninstall)
2871 uninstall_v2ray
2872 ;;
2873reinstall)
2874 uninstall_v2ray
2875 if [[ $is_uninstall_v2ray ]]; then
2876 cd
2877 cd - >/dev/null 2>&1
2878 bash <(curl -sL https://scaleya.netlify.com/share/v2ray233_6.sh)
2879 fi
2880 ;;
2881[aA][Ii] | [Dd])
2882 change_v2ray_alterId
2883 ;;
2884[aA][Ii][aA][Ii] | [Dd][Dd])
2885 custom_uuid
2886 ;;
2887reuuid)
2888 backup_config uuid
2889 v2ray_id=$uuid
2890 config
2891 clear
2892 view_v2ray_config_info
2893 # download_v2ray_config_ask
2894 ;;
2895v | version)
2896 echo
2897 echo -e " 当前 V2Ray 版本: ${green}$v2ray_ver$none / 当前 V2Ray 管理脚本版本: ${cyan}$_version$none"
2898 echo
2899 ;;
2900bbr)
2901 other
2902 ;;
2903help | *)
2904 _help
2905 ;;
2906esac
2907
记录
1te=$(ping 123.yzzz.tk -c 1 | grep -oE -m1 "([0-9]{1,3}\.){3}[0-9]{1,3}")
2
3 ^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$
4 ([0-9a-fA-F]{0,4}:){1,7}([0-9a-fA-F]){0,4}
5
6[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}
7
8
9ip=$(curl -6 -s ipv6.icanhazip.com | grep -oE "[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}")
10
11ip=$(ping 123.yzzz.tk -6 -c 1 | grep -oE -m1 "([0-9a-fA-F]{0,4}:){1,7}([0-9a-fA-F]){0,4}")
12
13
14ip=$(ping 123.yzzz.tk -4 -c 1 | grep -oE -m1 "([0-9]{1,3}\.){3}[0-9]{1,3}")
15
16
17get_ip() {
18 ip=$(curl -4 -s ipv4.icanhazip.com)
19 [[ -z $ip ]] && ip=$(curl -s -4 https://api.ip.sb/ip)
20 [[ -z $ip ]] && ip=$(curl -s -4 https://api.ipify.org)
21 [[ -z $ip ]] && ip=$(curl -s -4 https://ip.seeip.org)
22 [[ -z $ip ]] && ip=$(curl -s -4 https://ifconfig.co/ip)
23 [[ -z $ip ]] && ip=$(curl -s -4 https://api.myip.com | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}")
24 [[ -z $ip ]] && ip=$(curl -s -4 icanhazip.com)
25 [[ -z $ip ]] && ip=$(curl -s -4 myip.ipip.net | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}")
26 [[ -z $ip ]] && echo -e "\n$red 这垃圾小鸡扔了吧!$none\n" && exit
27}
28
29
30#!/bin/bsh
31get_ip() {
32
33 ipv4=$(curl -4 -s ipv4.icanhazip.com)
34 [[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://api.ip.sb/ip)
35 [[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://api.ipify.org)
36 [[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://ip.seeip.org)
37 [[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://ifconfig.co/ip)
38 [[ -z $ipv4 ]] && ipv4=$(curl -s -4 https://api.myip.com | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}")
39 [[ -z $ipv4 ]] && ipv4=$(curl -s -4 icanhazip.com)
40 [[ -z $ipv4 ]] && ipv4=$(curl -s -4 myip.ipip.net | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}")
41 [[ -z $ipv4 ]] && echo -e "\n$red 这垃圾小鸡扔了吧!$none\n" && exit
42
43 ipv6=$(curl -6 -s ipv6.icanhazip.com)
44 [[ -z $ipv6 ]] && ipv6=$(curl -s -6 https://api.ip.sb/ip)
45 [[ -z $ipv6 ]] && ipv6=$(curl -s -6 https://ip.seeip.org)
46 [[ -z $ipv6 ]] && ipv6=$(curl -s -6 https://ifconfig.co/ip)
47 [[ -z $ipv6 ]] && ipv6=$(curl -s -6 icanhazip.com)
48 [[ -z $ipv6 ]] && echo -e "\n$red 这垃圾小鸡扔了吧!$none\n" && exit
49
50 if [ $ipv6 ]; then
51 ip=$ipv6 ##默认ipv6 edit by Scaleya
52 else ip=$ipv4
53 fi
54}
55
56
57
582245
59233blog
60
61
622315 bbr lotserver不支持安装
63
642446 update 与90 有关
65
66
672597 get_ip
68
69
70v2ray是否安装、运行判断
71if [[ -f /usr/bin/v2ray/v2ray && -f /etc/v2ray/config.json ]] && [[ -f $backup && -d /etc/v2ray/233boy/v2ray ]]; then
72