diff --git a/v2ray_installer.sh b/v2ray_installer.sh index 1c6898d..6ebb7f8 100644 --- a/v2ray_installer.sh +++ b/v2ray_installer.sh @@ -329,7 +329,13 @@ EOF # 启动服务 echo -e "${BLUE}启动V2Ray和Nginx服务...${PLAIN}" - systemctl enable v2ray nginx --now + systemctl daemon-reload + systemctl enable v2ray --now + systemctl enable nginx --now + + # 等待服务启动 + echo -e "${BLUE}等待服务启动...${PLAIN}" + sleep 2 # 检查服务状态 v2ray_status=$(systemctl is-active v2ray) @@ -338,16 +344,19 @@ EOF 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}" + # 显示客户端配置信息 + show_client_info "${domain}" "${uuid}" + + # 检查时间同步 + check_time_sync + + # 启用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}" # 生成客户端配置 cat > v2ray_client_config.json << EOF @@ -373,7 +382,8 @@ EOF "users": [ { "id": "${uuid}", - "alterId": 0 + "alterId": 0, + "security": "auto" } ] } @@ -384,6 +394,9 @@ EOF "security": "tls", "wsSettings": { "path": "/ray" + }, + "tlsSettings": { + "allowInsecure": false } } } @@ -392,13 +405,22 @@ EOF 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 + # 显示V2Ray状态并查看可能的错误 + echo -e "${BLUE}查看V2Ray运行状态和最近日志...${PLAIN}" + systemctl status v2ray --no-pager + if [ -f /var/log/v2ray/error.log ]; then + echo -e "${BLUE}最近的错误日志:${PLAIN}" + tail -n 10 /var/log/v2ray/error.log + fi + + # 提供故障排除指南 + echo -e "${GREEN}如果您遇到连接问题,请检查:${PLAIN}" + echo -e "${YELLOW}1. 客户端和服务器的时间是否同步${PLAIN}" + echo -e "${YELLOW}2. 客户端的UUID是否正确配置${PLAIN}" + echo -e "${YELLOW}3. WebSocket路径是否为 /ray${PLAIN}" + echo -e "${YELLOW}4. 是否启用了TLS${PLAIN}" + echo -e "${YELLOW}5. 防火墙是否允许443端口通信${PLAIN}" - echo -e "${GREEN}BBR加速已启用${PLAIN}" echo -e "${GREEN}安装完成!${PLAIN}" else echo -e "${RED}安装失败,请检查错误信息${PLAIN}" @@ -413,6 +435,109 @@ EOF fi } +# 显示客户端配置详情 +show_client_info() { + local domain=$1 + local uuid=$2 + + echo -e "${GREEN}V2Ray配置信息:${PLAIN}" + echo -e "${YELLOW}-----------------------------${PLAIN}" + echo -e "${YELLOW}地址 (Address): ${domain}${PLAIN}" + echo -e "${YELLOW}端口 (Port): 443${PLAIN}" + echo -e "${YELLOW}用户ID (UUID): ${uuid}${PLAIN}" + echo -e "${YELLOW}额外ID (AlterId): 0${PLAIN}" + echo -e "${YELLOW}加密方式 (Security): auto${PLAIN}" + echo -e "${YELLOW}传输协议 (Network): ws${PLAIN}" + echo -e "${YELLOW}WebSocket路径 (Path): /ray${PLAIN}" + echo -e "${YELLOW}TLS: 开启${PLAIN}" + echo -e "${YELLOW}-----------------------------${PLAIN}" + echo -e "${GREEN}提示:请确保客户端和服务器的时间误差在90秒内${PLAIN}" + echo -e "${GREEN} 如果无法连接,可以尝试重启V2Ray服务:${PLAIN}" + echo -e "${GREEN} systemctl restart v2ray${PLAIN}" + echo -e "${YELLOW}-----------------------------${PLAIN}" +} + +# 检查时间同步状态 +check_time_sync() { + echo -e "${BLUE}检查系统时间同步状态...${PLAIN}" + + # 显示当前时间 + current_time=$(date -R) + echo -e "${YELLOW}当前系统时间: ${current_time}${PLAIN}" + + # 尝试同步时间的多种方法 + echo -e "${BLUE}尝试同步系统时间...${PLAIN}" + + # 方法1: 使用timedatectl(如果可用) + if command -v timedatectl &> /dev/null; then + timedatectl set-ntp true + if [ $? -ne 0 ]; then + echo -e "${YELLOW}timedatectl设置NTP失败,尝试其他方法${PLAIN}" + else + echo -e "${GREEN}已通过timedatectl启用时间同步${PLAIN}" + return + fi + fi + + # 方法2: 使用ntpd或chronyd(如果已安装) + if command -v ntpd &> /dev/null; then + if [ "$OS" == "centos" ]; then + systemctl restart ntpd + echo -e "${GREEN}已重启ntpd服务${PLAIN}" + else + systemctl restart ntp + echo -e "${GREEN}已重启ntp服务${PLAIN}" + fi + return + fi + + if command -v chronyd &> /dev/null; then + systemctl restart chronyd + echo -e "${GREEN}已重启chronyd服务${PLAIN}" + return + fi + + # 方法3: 手动使用ntpdate(如果已安装) + if command -v ntpdate &> /dev/null; then + echo -e "${BLUE}使用ntpdate手动同步时间...${PLAIN}" + ntpdate -u time.google.com || ntpdate -u time.windows.com || ntpdate -u pool.ntp.org + if [ $? -eq 0 ]; then + echo -e "${GREEN}时间同步成功${PLAIN}" + else + echo -e "${YELLOW}ntpdate同步失败${PLAIN}" + fi + return + fi + + # 方法4: 使用rdate(如果已安装) + if command -v rdate &> /dev/null; then + echo -e "${BLUE}使用rdate同步时间...${PLAIN}" + rdate -s time-a.nist.gov || rdate -s time-b.nist.gov + if [ $? -eq 0 ]; then + echo -e "${GREEN}时间同步成功${PLAIN}" + else + echo -e "${YELLOW}rdate同步失败${PLAIN}" + fi + return + fi + + # 如果以上方法都失败,尝试安装时间同步工具 + echo -e "${YELLOW}未找到可用的时间同步工具,尝试安装...${PLAIN}" + if [ "$OS" == "centos" ]; then + yum install -y ntpdate + ntpdate -u pool.ntp.org + else + apt update + apt install -y ntpdate + ntpdate -u pool.ntp.org + fi + + # 最后提示用户 + echo -e "${YELLOW}重要提示: V2Ray要求服务器和客户端的时间差在90秒内${PLAIN}" + echo -e "${YELLOW}请确保您的系统时间是准确的${PLAIN}" + echo -e "${YELLOW}当前时间: $(date -R)${PLAIN}" +} + # 更新V2Ray update_v2ray() { echo -e "${BLUE}正在更新V2Ray...${PLAIN}"