上传文件至 /

This commit is contained in:
chunzhi 2025-03-27 05:53:48 -04:00
commit e3c5fe759d

487
v2ray_installer.sh Normal file
View File

@ -0,0 +1,487 @@
#!/bin/bash
# V2Ray 一键安装脚本
# 基于 https://ericclose.github.io/V2Ray-TLS-WebSocket-Nginx-with-Cloudflare.html
# 颜色定义
RED="\033[31m"
GREEN="\033[32m"
YELLOW="\033[33m"
BLUE="\033[36m"
PLAIN="\033[0m"
# 检查是否为root用户
if [[ $EUID -ne 0 ]]; then
echo -e "${RED}错误: 请使用root用户运行此脚本${PLAIN}"
exit 1
fi
# 系统检测
if [ -f /etc/redhat-release ]; then
OS="centos"
elif [ -f /etc/debian_version ]; then
OS="debian"
elif [ -f /etc/lsb-release ]; then
OS="ubuntu"
else
echo -e "${RED}不支持的操作系统!${PLAIN}"
exit 1
fi
# 检查系统位数
if [ $(getconf WORD_BIT) = '32' ] && [ $(getconf LONG_BIT) = '64' ]; then
MACHINE='x64'
else
MACHINE='x86'
fi
# 生成随机字符串
generate_random_string() {
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w ${1:-16} | head -n 1
}
# 生成UUID
generate_uuid() {
uuid=$(cat /proc/sys/kernel/random/uuid)
echo "$uuid"
}
# 显示菜单
show_menu() {
echo -e "
${GREEN}V2Ray 一键安装脚本${PLAIN}
————————————————————————————————
${GREEN}1.${PLAIN} 安装 V2Ray (WebSocket + TLS + Web + Cloudflare)
${GREEN}2.${PLAIN} 更新 V2Ray
${GREEN}3.${PLAIN} 卸载 V2Ray
${GREEN}4.${PLAIN} 查看 V2Ray 配置
${GREEN}5.${PLAIN} 退出
————————————————————————————————
"
echo && read -p "请输入选择 [1-5]: " num
case "${num}" in
1) install_v2ray ;;
2) update_v2ray ;;
3) uninstall_v2ray ;;
4) view_v2ray_config ;;
5) exit 0 ;;
*) echo -e "${RED}请输入正确的数字 [1-5]${PLAIN}" && exit 1 ;;
esac
}
# 安装依赖
install_dependencies() {
echo -e "${BLUE}正在安装依赖...${PLAIN}"
if [ "$OS" == "centos" ]; then
yum update -y
yum install -y epel-release
yum install -y wget curl unzip vim openssl socat
else
apt update -y
apt install -y wget curl unzip vim openssl socat
fi
}
# 时间校准
time_sync() {
echo -e "${BLUE}正在同步系统时间...${PLAIN}"
if [ "$OS" == "centos" ]; then
yum install -y chrony
systemctl enable chronyd
systemctl start chronyd
chronyc sourcestats -v
chronyc tracking -v
else
apt install -y ntp
systemctl enable ntp
systemctl start ntp
fi
timedatectl set-ntp true
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc
echo -e "${GREEN}时间同步完成,当前时间:$(date -R)${PLAIN}"
}
# 安装防火墙
install_firewall() {
echo -e "${BLUE}正在配置防火墙...${PLAIN}"
if [ "$OS" == "centos" ]; then
systemctl enable firewalld
systemctl start firewalld
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload
else
apt install -y ufw
ufw enable
ufw allow 'OpenSSH'
ufw allow 'Nginx Full'
fi
}
# 安装V2Ray
install_v2ray() {
echo -e "${BLUE}开始安装V2Ray...${PLAIN}"
# 获取用户输入的域名
echo -e "${YELLOW}请输入您的域名 (例如: example.com)${PLAIN}"
read -p "域名: " domain
if [ -z "$domain" ]; then
echo -e "${RED}错误: 域名不能为空${PLAIN}"
exit 1
fi
# 安装依赖
install_dependencies
# 时间校准
time_sync
# 安装防火墙
install_firewall
# 下载V2Ray安装脚本
echo -e "${BLUE}下载V2Ray安装脚本...${PLAIN}"
curl -O https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh
curl -O https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-dat-release.sh
# 安装V2Ray主程序
echo -e "${BLUE}安装V2Ray主程序...${PLAIN}"
bash install-release.sh
# 安装最新发行的geoip.dat和geosite.dat
echo -e "${BLUE}安装最新发行的geoip.dat和geosite.dat...${PLAIN}"
bash install-dat-release.sh
# 生成UUID
uuid=$(generate_uuid)
# 配置V2Ray
echo -e "${BLUE}配置V2Ray...${PLAIN}"
cat > /usr/local/etc/v2ray/config.json << EOF
{
"log":{
"loglevel":"warning"
},
"routing":{
"domainStrategy":"AsIs",
"rules":[
{
"type":"field",
"ip":[
"geoip:private"
],
"outboundTag":"block"
}
]
},
"inbounds":[
{
"listen":"127.0.0.1",
"port":10000,
"protocol":"vmess",
"settings":{
"clients":[
{
"id":"${uuid}",
"alterId":0
}
]
},
"streamSettings":{
"network":"ws",
"wsSettings":{
"path":"/ray"
}
}
}
],
"outbounds":[
{
"protocol":"freedom",
"tag":"direct"
},
{
"protocol":"blackhole",
"tag":"block"
}
]
}
EOF
# 安装Nginx
echo -e "${BLUE}安装Nginx...${PLAIN}"
if [ "$OS" == "centos" ]; then
yum install -y nginx
systemctl enable nginx
else
apt install -y nginx
systemctl enable nginx
fi
# 配置Nginx
echo -e "${BLUE}配置Nginx...${PLAIN}"
# 删除默认配置
rm -f /etc/nginx/sites-enabled/default
# 创建网站目录
mkdir -p /var/www/${domain}/html
# 设置目录权限
chown -R $USER:$USER /var/www/${domain}/html
chmod -R 755 /var/www/${domain}
# 创建示例页面
cat > /var/www/${domain}/html/index.html << EOF
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h1>Success! Your Nginx server is successfully configured. </h1>
<p>This is a sample page.</p>
</body>
</html>
EOF
# 创建Nginx配置文件
cat > /etc/nginx/sites-available/${domain} << EOF
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name ${domain} www.${domain};
return 301 https://\$host\$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
# intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000" always;
server_name ${domain} www.${domain};
root /var/www/${domain}/html;
index index.html index.htm index.nginx-debian.html;
location / {
try_files \$uri \$uri/ =404;
}
location /ray {
if (\$http_upgrade != "websocket") {
return 404;
}
proxy_redirect off;
proxy_pass http://127.0.0.1:10000;
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
}
}
EOF
# 创建符号链接启用配置
ln -s /etc/nginx/sites-available/${domain} /etc/nginx/sites-enabled/
# 调整nginx.conf
sed -i 's/#server_names_hash_bucket_size 64;/server_names_hash_bucket_size 64;/g' /etc/nginx/nginx.conf
# 提示用户配置TLS证书
echo -e "${YELLOW}请注意:${PLAIN}"
echo -e "${YELLOW}1. 您需要在Cloudflare上配置您的域名${PLAIN}"
echo -e "${YELLOW}2. 在Cloudflare的SSL/TLS -> Origin Server中创建证书${PLAIN}"
echo -e "${YELLOW}3. 将证书内容保存到服务器的/etc/ssl/cert.pem${PLAIN}"
echo -e "${YELLOW}4. 将私钥内容保存到服务器的/etc/ssl/key.pem${PLAIN}"
echo -e "${YELLOW}5. 将SSL/TLS加密模式设置为Full (strict)${PLAIN}"
echo -e "${YELLOW}准备好后按回车继续...${PLAIN}"
read -p ""
# 创建证书和私钥文件
echo -e "${BLUE}请粘贴您的证书内容按Ctrl+D结束输入:${PLAIN}"
cat > /etc/ssl/cert.pem
echo -e "${BLUE}请粘贴您的私钥内容按Ctrl+D结束输入:${PLAIN}"
cat > /etc/ssl/key.pem
# 设置证书和私钥的权限
chmod 644 /etc/ssl/cert.pem
chmod 600 /etc/ssl/key.pem
# 启动服务
echo -e "${BLUE}启动V2Ray和Nginx服务...${PLAIN}"
systemctl enable v2ray nginx --now
# 检查服务状态
v2ray_status=$(systemctl is-active v2ray)
nginx_status=$(systemctl is-active nginx)
if [ "$v2ray_status" = "active" ] && [ "$nginx_status" = "active" ]; then
echo -e "${GREEN}V2Ray和Nginx服务已成功启动${PLAIN}"
# 显示配置信息
echo -e "${GREEN}V2Ray配置信息${PLAIN}"
echo -e "${YELLOW}地址: ${domain}${PLAIN}"
echo -e "${YELLOW}端口: 443${PLAIN}"
echo -e "${YELLOW}用户ID(UUID): ${uuid}${PLAIN}"
echo -e "${YELLOW}额外ID(alterId): 0${PLAIN}"
echo -e "${YELLOW}加密方式: auto${PLAIN}"
echo -e "${YELLOW}传输协议: ws${PLAIN}"
echo -e "${YELLOW}路径: /ray${PLAIN}"
echo -e "${YELLOW}TLS: 开启${PLAIN}"
# 生成客户端配置
cat > v2ray_client_config.json << EOF
{
"inbounds": [
{
"port": 1080,
"listen": "127.0.0.1",
"protocol": "socks",
"settings": {
"udp": true
}
}
],
"outbounds": [
{
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "${domain}",
"port": 443,
"users": [
{
"id": "${uuid}",
"alterId": 0
}
]
}
]
},
"streamSettings": {
"network": "ws",
"security": "tls",
"wsSettings": {
"path": "/ray"
}
}
}
]
}
EOF
echo -e "${GREEN}客户端配置已保存到 v2ray_client_config.json${PLAIN}"
# 启用BBR加速
echo -e "${BLUE}正在启用BBR加速...${PLAIN}"
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p
echo -e "${GREEN}BBR加速已启用${PLAIN}"
echo -e "${GREEN}安装完成!${PLAIN}"
else
echo -e "${RED}安装失败,请检查错误信息${PLAIN}"
if [ "$v2ray_status" != "active" ]; then
echo -e "${RED}V2Ray服务未能成功启动${PLAIN}"
systemctl status v2ray
fi
if [ "$nginx_status" != "active" ]; then
echo -e "${RED}Nginx服务未能成功启动${PLAIN}"
systemctl status nginx
fi
fi
}
# 更新V2Ray
update_v2ray() {
echo -e "${BLUE}正在更新V2Ray...${PLAIN}"
bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)
systemctl restart v2ray
echo -e "${GREEN}V2Ray已更新至最新版本${PLAIN}"
}
# 卸载V2Ray
uninstall_v2ray() {
echo -e "${YELLOW}确定要卸载V2Ray吗(y/n)${PLAIN}"
read -p "" answer
if [ "$answer" != "y" ]; then
return
fi
echo -e "${BLUE}正在卸载V2Ray...${PLAIN}"
systemctl stop v2ray
systemctl disable v2ray
# 卸载V2Ray
bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh) --remove
# 删除配置文件
rm -rf /usr/local/etc/v2ray
echo -e "${GREEN}V2Ray已卸载${PLAIN}"
echo -e "${YELLOW}是否要卸载Nginx(y/n)${PLAIN}"
read -p "" answer
if [ "$answer" = "y" ]; then
echo -e "${BLUE}正在卸载Nginx...${PLAIN}"
systemctl stop nginx
systemctl disable nginx
if [ "$OS" == "centos" ]; then
yum remove -y nginx
else
apt remove -y nginx
fi
rm -rf /etc/nginx/sites-available
rm -rf /etc/nginx/sites-enabled
rm -rf /var/www
echo -e "${GREEN}Nginx已卸载${PLAIN}"
fi
}
# 查看V2Ray配置
view_v2ray_config() {
echo -e "${BLUE}V2Ray配置信息${PLAIN}"
cat /usr/local/etc/v2ray/config.json
echo -e "\n${BLUE}Nginx配置信息${PLAIN}"
ls -l /etc/nginx/sites-enabled/
echo -e "\n${BLUE}V2Ray运行状态${PLAIN}"
systemctl status v2ray
echo -e "\n${BLUE}Nginx运行状态${PLAIN}"
systemctl status nginx
}
# 主程序
main() {
clear
echo -e "${GREEN}V2Ray一键安装脚本${PLAIN}"
echo -e "${GREEN}支持:${PLAIN}${YELLOW}Debian / Ubuntu / CentOS${PLAIN}"
echo -e "${GREEN}网站:${PLAIN}${YELLOW}https://ericclose.github.io/V2Ray-TLS-WebSocket-Nginx-with-Cloudflare.html${PLAIN}"
echo -e "—————————————————————————————————————"
show_menu
}
main