Deploy Bot a4e80f712a feat: WireGuard VPS туннель — установка в 1 клик
- install.sh: интерактивный + неинтерактивный (--vps/--client) установщик
- watchdog.sh: Starlink-оптимизированный мониторинг с backoff
- uninstall.sh: полная очистка
- README.md: документация на русском языке

Архитектура: VPS (10.0.0.1) ←WireGuard UDP→ RPi (10.0.0.2)
DNAT портов 80/443 с VPS на RPi через iptables
PersistentKeepalive 21с для Starlink/NAT
2026-07-29 20:26:58 +01:00

WireGuard VPS Tunnel — 1-Click Installer

Автоматическая настройка WireGuard-туннеля между VPS (с публичным IP) и домашним сервером за NAT (Raspberry Pi, Orange Pi, Starlink и т.д.).

Архитектура

                          Интернет
                             │
                    ┌────────┴────────┐
                    │   VPS (сервер)   │
                    │  Публичный IP    │
                    │  например:       │
                    │  2.59.219.234    │
                    │                  │
                    │  wg0: 10.0.0.1   │
                    │  :51820 (UDP)    │
                    │                  │
                    │  iptables DNAT:  │
                    │  :80  → 10.0.0.2 │
                    │  :443 → 10.0.0.2 │
                    └────────┬────────┘
                             │
              ╔═════════════╧═════════════╗
              ║   WireGuard UDP :51820    ║
              ║   (PersistentKeepalive=21)║
              ╚═════════════╤═════════════╝
                             │
                    ┌────────┴────────┐
                    │  Домашний сервер │
                    │  (за NAT/CGNAT) │
                    │  Raspberry Pi   │
                    │  Starlink       │
                    │                 │
                    │  wg0: 10.0.0.2  │
                    │                 │
                    │  Watchdog       │
                    │  (мониторинг)   │
                    └────────┬────────┘
                             │
                    ┌────────┴────────┐
                    │  Nginx Proxy    │
                    │  Manager :80,443│
                    │  → backend      │
                    └─────────────────┘

Как это работает:

  1. VPS принимает входящие соединения на порты 80 и 443
  2. iptables перенаправляет трафик через WireGuard-туннель на домашний сервер (10.0.0.2)
  3. Домашний сервер (RPi) инициирует соединение с VPS — работает через любой NAT
  4. PersistentKeepalive = 21 секунда поддерживает туннель активным даже при отсутствии трафика
  5. Watchdog на RPi мониторит состояние туннеля и перезапускает при обрыве

Быстрый старт (1 команда)

На VPS:

curl -sSL https://raw.githubusercontent.com/user/wireguard-vps-tunnel/main/install.sh | sudo bash
# Выбрать "1) VPS"

На домашнем сервере (Raspberry Pi):

curl -sSL https://raw.githubusercontent.com/user/wireguard-vps-tunnel/main/install.sh | sudo bash
# Выбрать "2) Домашний сервер"

Или неинтерактивный режим:

# VPS
sudo ./install.sh --vps --ports 80,443

# Клиент
sudo ./install.sh --client --vps-ip 2.59.219.234 --keepalive 21

Ручная установка

1. Клонирование репозитория

git clone https://github.com/user/wireguard-vps-tunnel.git
cd wireguard-vps-tunnel

2. Установка на VPS

sudo ./install.sh --vps --vps-ip 2.59.219.234 --ports 80,443

Скрипт автоматически:

  • Установит wireguard-tools
  • Сгенерирует ключи
  • Настроит wg0 интерфейс
  • Настроит iptables (DNAT + FORWARD)
  • Включит IP-форвардинг
  • Запустит systemd-сервис

3. Установка на домашний сервер

sudo ./install.sh --client --vps-ip 2.59.219.234 --keepalive 21

Скрипт автоматически:

  • Установит wireguard-tools
  • Сгенерирует ключи
  • Настроит wg0 интерфейс
  • Установит watchdog для мониторинга туннеля
  • Запустит systemd-сервисы

4. Проверка

# На VPS
ping 10.0.0.2

# На домашнем сервере
ping 10.0.0.1

Конфигурация

Все настройки сохраняются в /etc/wireguard-vps-tunnel/config:

MODE="vps"              # vps или client
VPS_PUBLIC_IP="2.59.219.234"
CLIENT_WG_IP="10.0.0.2"
SERVER_WG_IP="10.0.0.1"
WG_PORT="51820"
PORTS="80,443"
KEEPALIVE="21"

Ключи хранятся в /etc/wireguard-vps-tunnel/:

  • server_private.key / server_public.key
  • client_private.key / client_public.key

Опции командной строки

Опция Описание По умолчанию
--vps Режим VPS (сервер)
--client Режим клиента (домашний сервер)
--vps-ip IP Публичный IP VPS автоопределение
--client-wg-ip IP WireGuard IP клиента 10.0.0.2
--ports PORT,... Порты для проброса (VPS) 80,443
--wg-port PORT Порт WireGuard 51820
--keepalive SEC PersistentKeepalive (сек) 21
--help Справка

Watchdog (мониторинг туннеля)

Watchdog работает только на клиенте (домашний сервер) и выполняет:

  1. Проверяет, что интерфейс wg0 поднят
  2. Проверяет доступность VPS через туннель (ping 10.0.0.1)
  3. Проверяет доступность VPS через интернет (ping VPS_IP)
  4. Если туннель не работает, но VPS доступен — перезапускает WireGuard
  5. Использует экспоненциальную отсрочку при повторных сбоях:
    • 10с → 20с → 40с → 80с → 120с (максимум)
  6. После 3 успешных проверок подряд сбрасывает отсрочку

Логи: /var/log/wg-watchdog.log (авторотация при 10 МБ)

Управление:

systemctl status wg-watchdog   # Статус
systemctl restart wg-watchdog  # Перезапуск
tail -f /var/log/wg-watchdog.log  # Логи в реальном времени

Сравнение: WireGuard vs SSH Reverse Tunnel

Критерий WireGuard SSH Reverse Tunnel
Протокол UDP (kernel) TCP (userspace)
Производительность ~1 Gbps ~100 Mbps
Задержка Минимальная TCP-over-TCP проблема
Starlink Оптимально (UDP) Плохо (TCP через TCP)
Переподключение Мгновенное Заметная задержка
NAT traversal PersistentKeepalive Autossh + мониторинг
Проброс портов iptables DNAT ssh -R
Отказоустойчивость Встроенная Требует autossh
Нагрузка на CPU Минимальная (kernel) Заметная (шифрование в userspace)

Вывод: WireGuard превосходит SSH reverse tunnel по всем параметрам для production-использования, особенно на Starlink.

Starlink использует CGNAT (Carrier-Grade NAT), что означает:

  • Нет публичного IPv4 — домашний сервер недоступен из интернета напрямую
  • Высокая задержка — 25-60 мс (спутниковая связь)
  • Кратковременные обрывы — при переключении между спутниками
  • UDP работает лучше TCP — меньше проблем с TCP congestion control

Рекомендации для Starlink:

  1. PersistentKeepalive = 21 — оптимальное значение (каждые 21 сек отправляет keepalive-пакет)
  2. Watchdog обязателен — автоматически восстанавливает туннель после обрывов
  3. Не используйте SSH reverse tunnel — TCP-over-TCP на спутниковом канале работает плохо
  4. MTU = 1420 (стандартный для WireGuard) — не меняйте без необходимости

Безопасность

  • Ключи: приватные ключи хранятся с правами 600 (только root)
  • Фаервол: iptables правила применяются атомарно через PostUp/PostDown
  • SSH: парольная аутентификация НЕ отключается — скрипт не трогает sshd_config
  • Порты: открываются только указанные порты (по умолчанию 80 и 443)
  • WireGuard: использует современную криптографию (Curve25519, ChaCha20, BLAKE2s)

Рекомендации по усилению безопасности:

# На VPS: ограничить доступ к порту WireGuard только с IP клиента (если известен)
iptables -A INPUT -p udp --dport 51820 -s <IP_КЛИЕНТА> -j ACCEPT
iptables -A INPUT -p udp --dport 51820 -j DROP

# Или ограничить rate limiting:
iptables -A INPUT -p udp --dport 51820 -m limit --limit 10/sec -j ACCEPT
iptables -A INPUT -p udp --dport 51820 -j DROP

Устранение неполадок

Туннель не поднимается

# Проверить статус
systemctl status wg-quick@wg0

# Проверить конфигурацию
wg show

# Проверить логи
journalctl -u wg-quick@wg0 -n 50

Пинг не проходит

# Проверить что интерфейс поднят
ip link show wg0

# Проверить IP-адреса
ip addr show wg0

# Проверить что порт открыт на VPS
# На клиенте:
nc -zvu <VPS_IP> 51820

Порты не пробрасываются

# Проверить правила iptables на VPS
iptables -t nat -L PREROUTING -n
iptables -L FORWARD -n

# Проверить IP-форвардинг
sysctl net.ipv4.ip_forward  # Должно быть = 1

Watchdog не запускается

systemctl status wg-watchdog
journalctl -u wg-watchdog -n 50
cat /var/log/wg-watchdog.log

Полный сброс и переустановка

# Деинсталляция
sudo ./uninstall.sh

# Переустановка
sudo ./install.sh --vps --vps-ip <IP>

Деинсталляция

sudo ./uninstall.sh

Опции:

  • --remove-package — также удалить пакет wireguard-tools

Деинсталлятор:

  • Останавливает и отключает сервисы
  • Удаляет интерфейс wg0
  • Очищает правила iptables
  • Удаляет конфигурационные файлы и ключи
  • НЕ трогает SSH-сервер и другие сервисы

Поддерживаемые ОС

  • Debian 11+ (Bullseye, Bookworm)
  • Ubuntu 20.04+ (Focal, Jammy, Noble)
  • Armbian (Orange Pi, Banana Pi, etc.)
  • Raspberry Pi OS (Raspbian)

Структура проекта

wireguard-vps-tunnel/
├── install.sh      # Основной установщик
├── uninstall.sh    # Деинсталлятор
├── watchdog.sh     # Watchdog для мониторинга туннеля
└── README.md       # Документация

Лицензия

MIT

Description
WireGuard VPN туннель между VPS и домашним сервером (Starlink-оптимизированный). Установка в 1 клик.
Readme 115 KiB
2026-07-29 19:39:08 +00:00
Languages
Shell 97.4%
Dockerfile 2.6%