Транспорт udp2raw протестирован: bind к 192.168.31.163 + iptables на клиенте
По результатам дымового теста (faketcp handshake прошёл, server_ready/client_ready): - server udp2raw: -l 0.0.0.0 -> 192.168.31.163 (на 0.0.0.0 bind fail из-за docker-бриджей) - README: iptables добавлен в предусловия и шаг установки клиента (на чистой nft-системе udp2raw не может добавить правило -a) - README: примечание про установку бинарника файлом и выбор ARM-архитектуры, таблица предусловий дополнена (строки iptables и bind-IP)
This commit is contained in:
18
README.md
18
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`).
|
||||
Если малинка имеет доступ к интернету, скачайте архив прямо на неё:
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user