Files
wireguard-vps-tunnel/client/entrypoint.sh
Deploy Bot 5d618a04b5
Some checks failed
Build and Push Docker Images / Сборка сервера (multi-arch) (push) Has been cancelled
Build and Push Docker Images / Сборка клиента (multi-arch) (push) Has been cancelled
feat: multi-arch Docker образы (amd64+arm64), CI/CD, registry
- Dockerfile с multi-stage сборкой для linux/amd64 и linux/arm64
- Gitea Actions CI/CD для автоматической сборки и пуша в registry
- docker-compose с поддержкой multi-arch образов
- install.sh с автоопределением архитектуры и выбором: pull vs build
- uninstall.sh обновлён для Docker-деинсталляции
- README.md обновлён: multi-arch, CI/CD, Gitea registry
2026-07-29 20:38:47 +01:00

109 lines
4.7 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# =============================================================================
# WireGuard VPS Tunnel — точка входа клиента (домашний сервер)
# Генерирует конфигурацию wg0.conf из переменных окружения и поднимает туннель.
# =============================================================================
set -euo pipefail
# ── Значения по умолчанию ───────────────────────────────────────────────────
CLIENT_WG_IP="${CLIENT_WG_IP:-10.0.0.2}"
VPS_WG_PORT="${VPS_WG_PORT:-51820}"
PERSISTENT_KEEPALIVE="${PERSISTENT_KEEPALIVE:-21}"
SERVER_WG_IP="${SERVER_WG_IP:-10.0.0.1}"
WG_CONF="/etc/wireguard/wg0.conf"
# ── Логирование ─────────────────────────────────────────────────────────────
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$1] $*"; }
# ── Проверка обязательных переменных ───────────────────────────────────────
check_required() {
if [[ -z "${VPS_PUBLIC_IP:-}" ]]; then
log "ERROR" "VPS_PUBLIC_IP не задан. Укажите публичный IP VPS."
exit 1
fi
if [[ -z "${SERVER_PUBLIC_KEY:-}" ]]; then
log "ERROR" "SERVER_PUBLIC_KEY не задан. Укажите публичный ключ сервера."
exit 1
fi
}
# ── Генерация ключей ───────────────────────────────────────────────────────
generate_keys() {
local private_key_file="/etc/wireguard/client_private.key"
local public_key_file="/etc/wireguard/client_public.key"
if [[ -f "$private_key_file" ]] && [[ -f "$public_key_file" ]]; then
log "INFO" "Ключи клиента уже существуют"
else
log "INFO" "Генерация ключей клиента..."
wg genkey | tee "$private_key_file" | wg pubkey > "$public_key_file"
chmod 600 "$private_key_file"
log "INFO" "Ключи клиента сгенерированы"
fi
CLIENT_PRIVATE_KEY=$(cat "$private_key_file")
CLIENT_PUBLIC_KEY=$(cat "$public_key_file")
}
# ── Создание конфигурации WireGuard ────────────────────────────────────────
create_wg_config() {
if [[ -f "$WG_CONF" ]]; then
log "INFO" "Конфигурация ${WG_CONF} уже существует, пропускаем создание"
return 0
fi
mkdir -p "$(dirname "$WG_CONF")"
cat > "$WG_CONF" <<WGCONF
# WireGuard VPS Tunnel — конфигурация клиента (домашний сервер)
# Создано: $(date '+%Y-%m-%d %H:%M:%S')
[Interface]
PrivateKey = ${CLIENT_PRIVATE_KEY}
Address = ${CLIENT_WG_IP}/24
[Peer]
# VPS (сервер)
PublicKey = ${SERVER_PUBLIC_KEY}
Endpoint = ${VPS_PUBLIC_IP}:${VPS_WG_PORT}
AllowedIPs = ${SERVER_WG_IP}/24
PersistentKeepalive = ${PERSISTENT_KEEPALIVE}
WGCONF
chmod 600 "$WG_CONF"
log "INFO" "Конфигурация WireGuard создана: ${WG_CONF}"
}
# ── Запуск WireGuard ───────────────────────────────────────────────────────
start_wireguard() {
log "INFO" "Запуск WireGuard интерфейса wg0..."
wg-quick up wg0
log "INFO" "WireGuard интерфейс wg0 запущен"
log "INFO" "Публичный ключ клиента: ${CLIENT_PUBLIC_KEY}"
log "INFO" "Скопируйте его на сервер: CLIENT_PUBLIC_KEY=${CLIENT_PUBLIC_KEY}"
}
# ── Главная функция ────────────────────────────────────────────────────────
main() {
log "INFO" "=== Запуск WireGuard VPS Tunnel (клиент) ==="
log "INFO" "CLIENT_WG_IP=${CLIENT_WG_IP}"
log "INFO" "VPS_PUBLIC_IP=${VPS_PUBLIC_IP}"
log "INFO" "VPS_WG_PORT=${VPS_WG_PORT}"
log "INFO" "PERSISTENT_KEEPALIVE=${PERSISTENT_KEEPALIVE}"
check_required
generate_keys
create_wg_config
start_wireguard
# Запуск watchdog в фоне
log "INFO" "Запуск watchdog..."
/watchdog.sh &
log "INFO" "Клиент запущен. Ожидание..."
exec sleep infinity
}
main