Неблокируемый VPN‑туннель AmneziaWG для Raspberry Pi 5: подключение к VPS и проброс портов (на примере CS 1.6)
Для кого это решение:
Идеально подходит тем, у кого дома нет публичного/статического ("белого") IP-адреса, чтобы напрямую открыть порты, но есть любой недорогой VPS-сервер. В данном руководстве для примера, мы используем сервер игры Counter-Strike 1.6.
Как работает эта архитектура:
Мы превращаем VPS сервер в публичную "витрину" для домашнего железа, связывая их через неблокируемый VPN-туннель.
- VPS (Внешний шлюз): Смотрит в интернет своим реальным IP-адресом и принимает подключения игроков. Внутри туннеля AmneziaWG он получает адрес 10.8.0.1.
- Raspberry Pi 5 (Домашний сервер): Спокойно стоит за провайдерским NAT. Она сама инициирует подключение к VPS, пробивая туннель, и получает внутренний адрес 10.8.0.2.
- Магия маршрутизации: Мы берем внешний игровой порт (27015 UDP/TCP) на VPS и прозрачно пробрасываем его сквозь туннель прямо на вашу домашнюю "малинку", ну или linux сервер.
Главный плюс: мы буквально "вытягиваем" Raspberry Pi в глобальную сеть, не ломая то, что уже работает. Порт-форвардинг настраивается настолько ювелирно, что крутящиеся на VPS сайты, веб-сервисы и боты даже не заметят соседства с игровым сервером.
1. Установка AmneziaWG
На сервере VPS (Ubuntu/Debian):
sudo add-apt-repository ppa:amnezia/ppa
sudo apt update
sudo apt install amneziawg-tools amneziawg-dkms -yНа Raspberry Pi 5 (Особый способ установки ключей, обходящий блокировки):
sudo apt update
sudo apt install -y gnupg2 curl linux-headers-$(uname -r)
# Скачиваем ключ через 80 порт
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 57290828
gpg --export 57290828 | sudo tee /usr/share/keyrings/amnezia.gpg > /dev/null
# Добавляем репозиторий
echo "deb [signed-by=/usr/share/keyrings/amnezia.gpg] https://ppa.launchpadcontent.net/amnezia/ppa/ubuntu focal main" | sudo tee /etc/apt/sources.list.d/amneziawg.list
sudo apt update
sudo apt install -y amneziawg-tools amneziawg-dkms2. Генерация ключей
Все ключи для удобства генерируем на VPS, чтобы потом просто скопировать их в конфиги.
Выполняем на VPS:
mkdir -p ~/awg-keys && cd ~/awg-keys
awg genkey | tee server_private | awg pubkey > server_public
awg genkey | tee client_private | awg pubkey > client_public
# Выводим на экран и копируем в блокнот:
cat server_private && cat server_public
cat client_private && cat client_public3. Настройка VPS (Сервер)
Включаем маршрутизацию (форвардинг) в ядре:
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf sudo sysctl -pСоздаем конфигурационный файл:
sudo nano /etc/amnezia/amneziawg/awg0.confВставляем настройки (замените ключи на сгенерированные). Внимание: если ваш основной сетевой интерфейс называется не eth0, а ens3 - измените его в правилах PostUp/PostDown.
[Interface] PrivateKey = <server_private> Address = 10.8.0.1/24 ListenPort = 51820 # Магические параметры Amnezia Jc = 4 Jmin = 40 Jmax = 70 S1 = 29 S2 = 15 H1 = 2021056581 H2 = 641527027 H3 = 1018901243 H4 = 301646271 # Маскарадинг для выхода туннеля в сеть PostUp = iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE PostDown = iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE [Peer] PublicKey = <client_public> AllowedIPs = 10.8.0.2/32Открываем порт в фаерволе (если используете UFW) и запускаем туннель:
sudo ufw allow 51820/udp sudo systemctl enable --now awg-quick@awg0
4. Настройка Raspberry Pi 5 (Клиент)
Создаем конфигурационный файл:
sudo nano /etc/amnezia/amneziawg/awg0.confВставляем настройки. Важно: Обязательно проверьте наличие заголовка
[Peer], без него парсер выдаст ошибкуLine unrecognized[Interface] PrivateKey = <client_private> Address = 10.8.0.2/24 Jc = 4 Jmin = 40 Jmax = 70 S1 = 29 S2 = 15 H1 = 2021056581 H2 = 641527027 H3 = 1018901243 H4 = 301646271 [Peer] PublicKey = <server_public> Endpoint = IP_ВАШЕГО_VPS:51820 AllowedIPs = 10.8.0.0/24 PersistentKeepalive = 25Запускаем туннель и проверяем пинг до VPS:
sudo systemctl enable --now awg-quick@awg0 ping -c 4 10.8.0.1
5. Настройка проброса портов (NAT и UFW) на VPS
Чтобы внешний трафик, приходящий на публичный IP VPS по порту 27015, улетал на домашнюю малинку, выполняем на VPS:
Открываем нужные порты для входящих подключений:
sudo ufw allow 27015/udp sudo ufw allow 27015/tcpКритически важный шаг: Разрешаем транзитный (FORWARD) трафик в UFW, иначе фаервол молча убьет пакеты, идущие сквозь сервер в туннель:
sudo ufw route allow proto udp to 10.8.0.2 port 27015 sudo ufw route allow proto tcp to 10.8.0.2 port 27015Прописываем правила
iptablesдля перенаправления (DNAT) и обратной подмены адреса (SNAT/MASQUERADE):# Перенаправление внутрь туннеля sudo iptables -t nat -A PREROUTING -p udp --dport 27015 -j DNAT --to-destination 10.8.0.2:27015 sudo iptables -t nat -A PREROUTING -p tcp --dport 27015 -j DNAT --to-destination 10.8.0.2:27015 # Обратный маскарадинг sudo iptables -t nat -A POSTROUTING -d 10.8.0.2 -p udp --dport 27015 -j MASQUERADE sudo iptables -t nat -A POSTROUTING -d 10.8.0.2 -p tcp --dport 27015 -j MASQUERADEСохраняем правила iptables, чтобы они пережили перезагрузку сервера:
sudo apt install iptables-persistent -y sudo netfilter-persistent save
Вывод:
Сервер работает стабильно, трафик полностью скрыт от DPI, а игровой сервер светит в мир с выделенного IP-адреса.