Files
vpn-raspberry/server/udp2raw-server.service
Maxim 538414f2c8 Стабильная работа туннеля: anti-RST, --fix-gro, QUIC-блок, автозагрузка
Проверено на живом стенде: 0% потерь на 10.66.66.1 и 8.8.8.8, выход через
сервер (curl -> 95.174.102.77).

Транспорт (устранение разрывов faketcp):
- anti-RST вписан в конфиги вместо хрупкого -a+flush:
  клиент — первой строкой chain input (ip saddr 95.174.102.77 tcp sport 25565 drop),
  сервер — в таблице wgfwd (ip daddr 192.168.31.163 tcp dport 25565 drop, переживает ufw reload).
  Причина: RST от ядра убивал CGNAT-маппинг оператора -> direction timeout и смена порта.
- --fix-gro на обоих концах: чинит дроп GRO «супер-пакетов» (huge packet > max_data_len).

Клиент:
- nftables.conf: flush ruleset (убирает дубли), reject QUIC/UDP 443 (откат браузера на TCP).
- udp2raw-client.service: After=nftables.service (anti-RST применяется до старта udp2raw).

Автозагрузка/порядок (обе службы udp2raw):
- After=network-online.target, Before=wg-quick@wg0.service.

README: раздел 5 «Известные нюансы» (anti-RST vs flush, CGNAT/RST, GRO),
сниппеты и таблицы приведены в соответствие.
2026-07-08 11:35:46 +03:00

26 lines
1.7 KiB
Desktop File
Raw Permalink 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.

[Unit]
Description=udp2raw Server (FakeTCP)
# network-online (а не network.target): нужен реально поднятый enp2s0 с адресом
# 192.168.31.163, иначе bind на конкретный IP упадёт при загрузке.
Wants=network-online.target
After=network-online.target
# Порядок автозагрузки: udp2raw поднимается ДО туннеля WireGuard.
Before=wg-quick@wg0.service
[Service]
Type=simple
User=root
# Слушает внешние TCP подключения на порту 25565 и перенаправляет в локальный WireGuard.
# Порт 443 НЕ используем: его держит nginx (reverse-proxy для Gitea totmaxim.ru),
# а udp2raw в faketcp через правило -a дропнул бы весь входящий TCP на своём порту.
# ВАЖНО #1: слушаем КОНКРЕТНЫЙ IP интерфейса (192.168.31.163), а не 0.0.0.0 —
# иначе из-за множества docker-бриджей udp2raw падает с "bind fail".
# Если LAN-адрес сервера сменится — поправить здесь И в пробросе на роутере.
# ВАЖНО #2: Замените "MY_CONFIDENTIAL_PASS" на ваш секретный пароль для udp2raw
# --fix-gro: чинит дроп «супер-пакетов» GRO (huge packet > max_data_len). Ставим на обоих концах.
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 --fix-gro -a
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target