diff --git a/README.md b/README.md index 7e4a7a6..0e355d0 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,10 @@ | 3 | Порт `25565/tcp` на хосте свободен; `443` оставить за nginx (Gitea) | Сервер | `sudo ss -ltnp 'sport = :25565'` | | 4 | Одинаковый пароль `-k` в обеих службах `udp2raw` | Сервер + Клиент | сверить `.service` | | 5 | Маршрут `95.174.102.77/32 via 192.168.200.1 dev usbnet` при поднятом `wg0` | Клиент | `ip route get 95.174.102.77` (должен быть `dev usbnet`, НЕ `wg0`) | +| 6 | Установлен пакет `iptables` (udp2raw добавляет правило `-a` только через него) | Клиент (чистый nft) | `iptables -V` | +| 7 | udp2raw на сервере слушает `192.168.31.163`, а НЕ `0.0.0.0` (иначе `bind fail` из-за docker-бриджей) | Сервер | см. `-l` в `.service` | + +> **Заметка по портам/интерфейсам, проверено на стенде:** faketcp-рукопожатие успешно проходит (сервер `server_ready`, клиент `client_ready`). Клиент виден серверу под мобильным публичным IP (напр. `95.174.126.11`). Привязка сервера к `0.0.0.0` даёт `bind fail` — обязательно указывать конкретный IP интерфейса. > **Почему требование #5 критично:** на клиенте `AllowedIPs = 0.0.0.0/0`, поэтому `wg-quick` заворачивает весь трафик в `wg0`. Без закреплённого маршрута сам транспорт `udp2raw` (пакеты к `95.174.102.77:25565`) тоже уйдёт в `wg0` — получится **петля**, и туннель порвётся. Маршрут добавляется автоматически через `PreUp` в `client/wg0.conf`. @@ -74,9 +78,11 @@ # 2) Включаем и ЗАКРЕПЛЯЕМ форвардинг пакетов (wg-quick сам его НЕ включает): echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-wg.conf sudo sysctl --system -# 3) Проверяем, что порт 25565 на хосте свободен (udp2raw слушает 0.0.0.0:25565). +# 3) Проверяем, что порт 25565 на хосте свободен (udp2raw слушает 192.168.31.163:25565). # Порт 443 ДОЛЖЕН оставаться за nginx (Gitea) — udp2raw его не трогает: sudo ss -ltnp 'sport = :25565' +# ПРИМЕЧАНИЕ: udp2raw слушает КОНКРЕТНЫЙ IP 192.168.31.163, а НЕ 0.0.0.0. +# На 0.0.0.0 из-за множества docker-бриджей он падает с "bind fail" (проверено). ``` ### Шаг 2.1. Установка WireGuard @@ -130,7 +136,7 @@ After=network.target [Service] Type=simple User=root -ExecStart=/usr/local/bin/udp2raw -s -l 0.0.0.0:25565 -r 127.0.0.1:51820 -k "MY_CONFIDENTIAL_PASS" --raw-mode faketcp -a +ExecStart=/usr/local/bin/udp2raw -s -l 192.168.31.163:25565 -r 127.0.0.1:51820 -k "MY_CONFIDENTIAL_PASS" --raw-mode faketcp -a Restart=always RestartSec=5 @@ -150,15 +156,19 @@ sudo systemctl enable --now wg-quick@wg0 3. Пошаговое развертывание на КЛИЕНТЕ (Raspberry Pi 4) Выполняется в терминале малинки (user@raspberrypi): -Шаг 3.1. Установка WireGuard +Шаг 3.1. Установка WireGuard и iptables Bash -sudo apt update && sudo apt install wireguard -y +# iptables обязателен: на чистой nft-системе udp2raw не сможет добавить правило -a +sudo apt update && sudo apt install wireguard iptables -y +iptables -V # должно печатать версию (nf_tables) Шаг 3.2. Доставка бинарника udp2raw +# Внимание: положить бинарник ФАЙЛОМ по пути /usr/local/bin/udp2raw (не каталогом!). +# Архитектура: aarch64 -> udp2raw_arm64, armv7l -> udp2raw_arm_asm_aes (см. `uname -m`). Если малинка имеет доступ к интернету, скачайте архив прямо на неё: diff --git a/server/udp2raw-server.service b/server/udp2raw-server.service index b9c4c56..b9ba4ce 100644 --- a/server/udp2raw-server.service +++ b/server/udp2raw-server.service @@ -8,8 +8,11 @@ User=root # Слушает внешние TCP подключения на порту 25565 и перенаправляет в локальный WireGuard. # Порт 443 НЕ используем: его держит nginx (reverse-proxy для Gitea totmaxim.ru), # а udp2raw в faketcp через правило -a дропнул бы весь входящий TCP на своём порту. -# ВАЖНО: Замените "MY_CONFIDENTIAL_PASS" на ваш секретный пароль для udp2raw -ExecStart=/usr/local/bin/udp2raw -s -l 0.0.0.0:25565 -r 127.0.0.1:51820 -k "MY_CONFIDENTIAL_PASS" --raw-mode faketcp -a +# ВАЖНО #1: слушаем КОНКРЕТНЫЙ IP интерфейса (192.168.31.163), а не 0.0.0.0 — +# иначе из-за множества docker-бриджей udp2raw падает с "bind fail". +# Если LAN-адрес сервера сменится — поправить здесь И в пробросе на роутере. +# ВАЖНО #2: Замените "MY_CONFIDENTIAL_PASS" на ваш секретный пароль для udp2raw +ExecStart=/usr/local/bin/udp2raw -s -l 192.168.31.163:25565 -r 127.0.0.1:51820 -k "MY_CONFIDENTIAL_PASS" --raw-mode faketcp -a Restart=always RestartSec=5