Добавить install/install.sh
This commit is contained in:
parent
98905aa6ca
commit
13e25fcc74
1 changed files with 226 additions and 0 deletions
226
install/install.sh
Normal file
226
install/install.sh
Normal file
|
|
@ -0,0 +1,226 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# Автоустановка: VLESS+XHTTP+Reality (443) + VLESS+TCP+Vision+Reality (8443) + Hysteria2 (443/udp)
|
||||
# Ubuntu 22.04/24.04, запускать от root: sudo bash install.sh
|
||||
#
|
||||
set -euo pipefail
|
||||
|
||||
# ========================= НАСТРОЙКИ (отредактируйте перед запуском) =========================
|
||||
DOMAIN="" # ваш домен, нужен для сертификата (letsencrypt), напр. example.com
|
||||
DEST_XHTTP="addons.mozilla.org" # dest-домен для XHTTP-Reality инбаунда
|
||||
DEST_TCP="www.lovelive-anime.jp" # dest-домен для TCP-Vision-Reality инбаунда (должен ОТЛИЧАТЬСЯ от первого)
|
||||
HYSTERIA_MASQ_URL="https://www.bing.com" # сайт-прикрытие для Hysteria2 masquerade
|
||||
TELEGRAM_BOT_TOKEN="" # опционально: для алертов мониторинга
|
||||
TELEGRAM_CHAT_ID="" # опционально
|
||||
# ==============================================================================================
|
||||
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo "Запускать от root: sudo bash install.sh"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "$DOMAIN" ]]; then
|
||||
echo "Укажите DOMAIN в начале скрипта (нужен для TLS-сертификата Hysteria2/Trojan)."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
WORKDIR="/opt/vpn-setup"
|
||||
mkdir -p "$WORKDIR"
|
||||
cd "$WORKDIR"
|
||||
|
||||
echo "== 1/9: Обновление системы и зависимости =="
|
||||
apt-get update -y
|
||||
apt-get install -y curl wget unzip jq openssl uuid-runtime certbot socat cron
|
||||
|
||||
echo "== 2/9: Установка Xray-core =="
|
||||
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
|
||||
XRAY_BIN="/usr/local/bin/xray"
|
||||
|
||||
echo "== 3/9: Установка Hysteria2 =="
|
||||
bash <(curl -fsSL https://get.hy2.sh/)
|
||||
|
||||
echo "== 4/9: Получение TLS-сертификата (для Hysteria2) =="
|
||||
systemctl stop nginx 2>/dev/null || true
|
||||
if [[ ! -f "/etc/letsencrypt/live/${DOMAIN}/fullchain.pem" ]]; then
|
||||
certbot certonly --standalone --non-interactive --agree-tos -m "admin@${DOMAIN}" -d "${DOMAIN}"
|
||||
fi
|
||||
CERT_PATH="/etc/letsencrypt/live/${DOMAIN}/fullchain.pem"
|
||||
KEY_PATH="/etc/letsencrypt/live/${DOMAIN}/privkey.pem"
|
||||
|
||||
echo "== 5/9: Генерация ключей, UUID, паролей =="
|
||||
UUID1=$(uuidgen)
|
||||
UUID2=$(uuidgen)
|
||||
REALITY_KEYS=$($XRAY_BIN x25519)
|
||||
PRIVATE_KEY=$(echo "$REALITY_KEYS" | grep -i "Private" | awk '{print $NF}')
|
||||
PUBLIC_KEY=$(echo "$REALITY_KEYS" | grep -i "Public" | awk '{print $NF}')
|
||||
SHORT_ID1=$(openssl rand -hex 8)
|
||||
SHORT_ID2=$(openssl rand -hex 8)
|
||||
XHTTP_PATH="/$(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 16)/"
|
||||
HYSTERIA_PASSWORD=$(openssl rand -hex 16)
|
||||
HYSTERIA_OBFS_PASSWORD=$(openssl rand -hex 16)
|
||||
|
||||
echo "== 6/9: Конфигурация Xray (2 инбаунда) =="
|
||||
mkdir -p /usr/local/etc/xray
|
||||
cat > /usr/local/etc/xray/config.json <<EOF
|
||||
{
|
||||
"log": { "loglevel": "warning" },
|
||||
"inbounds": [
|
||||
{
|
||||
"tag": "vless-xhttp-reality",
|
||||
"listen": "0.0.0.0",
|
||||
"port": 443,
|
||||
"protocol": "vless",
|
||||
"settings": {
|
||||
"clients": [{"id": "${UUID1}", "flow": "", "email": "primary"}],
|
||||
"decryption": "none"
|
||||
},
|
||||
"streamSettings": {
|
||||
"network": "xhttp",
|
||||
"security": "reality",
|
||||
"xhttpSettings": {
|
||||
"host": "${DEST_XHTTP}",
|
||||
"path": "${XHTTP_PATH}",
|
||||
"mode": "stream-up",
|
||||
"scMaxEachPostBytes": "500000-1000000",
|
||||
"scMinPostsIntervalMs": "30-100",
|
||||
"scMaxBufferedPosts": 30,
|
||||
"extra": {
|
||||
"xPaddingBytes": "100-1000",
|
||||
"xmux": {
|
||||
"maxConcurrency": "16-32",
|
||||
"hMaxRequestTimes": "600-900",
|
||||
"hMaxReusableSecs": "1800-3600"
|
||||
}
|
||||
}
|
||||
},
|
||||
"realitySettings": {
|
||||
"show": false,
|
||||
"dest": "${DEST_XHTTP}:443",
|
||||
"serverNames": ["${DEST_XHTTP}"],
|
||||
"privateKey": "${PRIVATE_KEY}",
|
||||
"shortIds": ["${SHORT_ID1}"],
|
||||
"fingerprint": "chrome",
|
||||
"alpn": ["h2"],
|
||||
"spiderX": "/"
|
||||
}
|
||||
},
|
||||
"sniffing": { "enabled": true, "destOverride": ["http", "tls"] }
|
||||
},
|
||||
{
|
||||
"tag": "vless-tcp-vision-reality",
|
||||
"listen": "0.0.0.0",
|
||||
"port": 8443,
|
||||
"protocol": "vless",
|
||||
"settings": {
|
||||
"clients": [{"id": "${UUID2}", "flow": "xtls-rprx-vision", "email": "backup"}],
|
||||
"decryption": "none"
|
||||
},
|
||||
"streamSettings": {
|
||||
"network": "tcp",
|
||||
"security": "reality",
|
||||
"realitySettings": {
|
||||
"show": false,
|
||||
"dest": "${DEST_TCP}:443",
|
||||
"serverNames": ["${DEST_TCP}"],
|
||||
"privateKey": "${PRIVATE_KEY}",
|
||||
"shortIds": ["${SHORT_ID2}"],
|
||||
"fingerprint": "chrome",
|
||||
"spiderX": "/"
|
||||
}
|
||||
},
|
||||
"sniffing": { "enabled": true, "destOverride": ["http", "tls"] }
|
||||
}
|
||||
],
|
||||
"outbounds": [
|
||||
{ "protocol": "freedom", "tag": "direct" },
|
||||
{ "protocol": "blackhole", "tag": "block" }
|
||||
]
|
||||
}
|
||||
EOF
|
||||
|
||||
echo "== 7/9: Конфигурация Hysteria2 (443/udp) =="
|
||||
mkdir -p /etc/hysteria
|
||||
cat > /etc/hysteria/config.yaml <<EOF
|
||||
listen: :443
|
||||
|
||||
tls:
|
||||
cert: ${CERT_PATH}
|
||||
key: ${KEY_PATH}
|
||||
alpn:
|
||||
- h3
|
||||
|
||||
obfs:
|
||||
type: salamander
|
||||
salamander:
|
||||
password: ${HYSTERIA_OBFS_PASSWORD}
|
||||
|
||||
auth:
|
||||
type: password
|
||||
password: ${HYSTERIA_PASSWORD}
|
||||
|
||||
masquerade:
|
||||
type: proxy
|
||||
proxy:
|
||||
url: ${HYSTERIA_MASQ_URL}
|
||||
rewriteHost: true
|
||||
listenHTTP: :80
|
||||
listenHTTPS: :443
|
||||
forceHTTPS: true
|
||||
|
||||
bandwidth:
|
||||
up: 50 mbps
|
||||
down: 100 mbps
|
||||
|
||||
udpIdleTimeout: 60s
|
||||
EOF
|
||||
|
||||
echo "== 8/9: Запуск сервисов =="
|
||||
systemctl enable xray hysteria-server
|
||||
systemctl restart xray
|
||||
systemctl restart hysteria-server
|
||||
|
||||
echo "== 9/9: Открытие портов (ufw, если установлен) =="
|
||||
if command -v ufw &> /dev/null; then
|
||||
ufw allow 443/tcp
|
||||
ufw allow 443/udp
|
||||
ufw allow 8443/tcp
|
||||
ufw allow 22/tcp
|
||||
fi
|
||||
|
||||
# Сохраняем все параметры для монитора и вывода клиенту
|
||||
cat > "$WORKDIR/params.env" <<EOF
|
||||
DOMAIN=${DOMAIN}
|
||||
SERVER_IP=$(curl -s https://api.ipify.org)
|
||||
UUID1=${UUID1}
|
||||
UUID2=${UUID2}
|
||||
PUBLIC_KEY=${PUBLIC_KEY}
|
||||
SHORT_ID1=${SHORT_ID1}
|
||||
SHORT_ID2=${SHORT_ID2}
|
||||
XHTTP_PATH=${XHTTP_PATH}
|
||||
DEST_XHTTP=${DEST_XHTTP}
|
||||
DEST_TCP=${DEST_TCP}
|
||||
HYSTERIA_PASSWORD=${HYSTERIA_PASSWORD}
|
||||
HYSTERIA_OBFS_PASSWORD=${HYSTERIA_OBFS_PASSWORD}
|
||||
TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}
|
||||
TELEGRAM_CHAT_ID=${TELEGRAM_CHAT_ID}
|
||||
EOF
|
||||
chmod 600 "$WORKDIR/params.env"
|
||||
|
||||
SERVER_IP=$(curl -s https://api.ipify.org)
|
||||
|
||||
echo ""
|
||||
echo "=================================================================================="
|
||||
echo " УСТАНОВКА ЗАВЕРШЕНА"
|
||||
echo "=================================================================================="
|
||||
echo ""
|
||||
echo "--- 1) VLESS + XHTTP + Reality (основной, порт 443) ---"
|
||||
echo "vless://${UUID1}@${SERVER_IP}:443?type=xhttp&path=${XHTTP_PATH}&host=${DEST_XHTTP}&security=reality&pbk=${PUBLIC_KEY}&fp=chrome&sni=${DEST_XHTTP}&sid=${SHORT_ID1}&mode=stream-up#VLESS-XHTTP-Primary"
|
||||
echo ""
|
||||
echo "--- 2) VLESS + TCP + Vision + Reality (резерв, порт 8443) ---"
|
||||
echo "vless://${UUID2}@${SERVER_IP}:8443?type=tcp&security=reality&pbk=${PUBLIC_KEY}&fp=chrome&sni=${DEST_TCP}&sid=${SHORT_ID2}&flow=xtls-rprx-vision#VLESS-TCP-Backup"
|
||||
echo ""
|
||||
echo "--- 3) Hysteria2 (резерв, порт 443/udp) ---"
|
||||
echo "hysteria2://${HYSTERIA_PASSWORD}@${SERVER_IP}:443?obfs=salamander&obfs-password=${HYSTERIA_OBFS_PASSWORD}&sni=${DOMAIN}&insecure=0#Hysteria2-Backup"
|
||||
echo ""
|
||||
echo "Все параметры сохранены в: $WORKDIR/params.env"
|
||||
echo "=================================================================================="
|
||||
Loading…
Add table
Add a link
Reference in a new issue