#!/bin/bash # 检查并安装 jq(如果未安装) install_jq() { if ! command -v jq &> /dev/null; then echo "jq 未安装,正在安装 jq..." if [[ -f /etc/debian_version ]]; then sudo apt-get update sudo apt-get install -y jq elif [[ -f /etc/redhat-release ]]; then sudo yum install -y epel-release sudo yum install -y jq else echo "无法确定系统发行版,手动安装 jq。" exit 1 fi else echo "jq 已安装。" fi } # 检查并安装 Xray core(如果未安装) install_xray() { if ! command -v xray &> /dev/null; then echo "Xray 未安装,正在安装 Xray..." bash <(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh) install echo "Xray 安装完成。" else echo "Xray 已安装。" fi } # 获取所有公网 IPv4 地址 get_public_ipv4() { echo "正在获取所有公网 IPv4 地址..." ip -4 addr show | grep inet | grep -v "127.0.0.1" | grep -v "10\." | grep -v "172\." | grep -v "192\.168\." | awk '{print $2}' | cut -d'/' -f1 } # 打印节点链接 print_node_links() { local port=$1 local id=$2 local outbound_ip=$3 local link="vmess://$(echo -n "{\"v\":\"2\",\"ps\":\"$(hostname)\",\"add\":\"$outbound_ip\",\"port\":\"$port\",\"id\":\"$id\",\"aid\":\"0\",\"net\":\"ws\",\"type\":\"none\",\"host\":\"\",\"path\":\"/ws\",\"tls\":\"none\"}" | base64 -w 0)" echo "端口: $port, 出站 IP: $outbound_ip, 节点链接: $link" } # 配置 Xray 配置文件 configure_xray() { public_ips=($(get_public_ipv4)) echo "找到的公网 IPv4 地址: ${public_ips[@]}" # Xray 配置文件路径 config_file="/usr/local/etc/xray/config.json" # 基础配置 cat > $config_file < temp.json && mv temp.json $config_file # 添加出站配置 (源进源出) jq --argjson port $port --arg ip $ip '.outbounds += [{ "protocol": "freedom", "settings": {}, "sendThrough": $ip, "tag": ("out-" + ($port | tostring)) }]' $config_file > temp.json && mv temp.json $config_file # 入站对应的出站 (源进源出) jq --argjson port $port '.routing.rules += [{ "type": "field", "inboundTag": ["in-" + ($port | tostring)], "outboundTag": "out-" + ($port | tostring) }]' $config_file > temp.json && mv temp.json $config_file # 打印节点链接 print_node_links $port $id $ip # 端口递增 port=$((port + 1)) done echo "Xray 配置完成。" } restart_xray() { echo "正在重启 Xray 服务..." systemctl restart xray systemctl enable xray echo "Xray 服务已重启。" } main() { install_jq install_xray configure_xray restart_xray echo "部署完成。" } main