Исправление маршрутизации, порт 25565 и документирование окружения
Транспорт udp2raw: 443 -> 25565/tcp - 443 на сервере занят nginx (reverse-proxy Gitea totmaxim.ru); udp2raw в faketcp через правило -a перехватил бы весь TCP на своём порту и поломал nginx - server/client .service: -l/-r переведены на 25565 Клиент (Raspberry Pi): - wg0.conf: PreUp-маршрут 95.174.102.77/32 via 192.168.200.1 dev usbnet — устраняет петлю транспорта udp2raw при AllowedIPs=0.0.0.0/0 - nftables.conf: MSS-clamp для wlan0->wg0 (клиенты MTU 1500 vs туннель 1200) Сервер (Ubuntu за NAT 192.168.31.163): - wg0.conf: masquerade сужен до 10.66.66.0/24 в изолированной таблице wgfwd (не конфликтует с Docker), MSS-clamp на входе в туннель, MTU=1200 README: - фактическая топология (сервер за NAT, 95.174.102.77 = WAN роутера, проброс 25565 обязателен), таблица предусловий окружения и проверок - шаг закрепления net.ipv4.ip_forward, диагностика петли и выхода в интернет
This commit is contained in:
@@ -5,9 +5,11 @@ After=network.target
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
# Слушает внешние TCP подключения на порту 443 и перенаправляет в локальный WireGuard
|
||||
# Слушает внешние 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:443 -r 127.0.0.1:51820 -k "MY_CONFIDENTIAL_PASS" --raw-mode faketcp -a
|
||||
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
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
|
||||
|
||||
@@ -1,16 +1,29 @@
|
||||
|
||||
# СЕРВЕР (Ubuntu, за NAT: enp2s0 = 192.168.31.163, шлюз 192.168.31.1)
|
||||
# Публичный вход: 95.174.102.77:25565 (TCP) --проброс на роутере--> 192.168.31.163:25565
|
||||
# (443 не используем — его держит nginx/Gitea; см. udp2raw-server.service)
|
||||
|
||||
[Interface]
|
||||
Address = 10.66.66.1/24
|
||||
ListenPort = 51820
|
||||
# Приватный ключ Сервера (из файла server_private.key)
|
||||
PrivateKey = KMcPBI6LAY/NC1zFNYopsvNXqQ8w8ssluDj4yOh3skk=
|
||||
# Симметрично клиенту: транспорт идёт внутри faketcp, держим запас на оверхед
|
||||
MTU = 1200
|
||||
|
||||
# Автоматический NAT для выхода клиентов в интернет через основной интерфейс enp2s0
|
||||
PostUp = nft add table ip wg_nat; nft add chain ip wg_nat post { type nat hook postrouting priority srcnat\; policy accept\; }; nft add rule ip wg_nat post oifname "enp2s0" masquerade
|
||||
PostDown = nft delete table ip wg_nat
|
||||
# Всё хозяйство WG держим в отдельной nft-таблице wgfwd, чтобы:
|
||||
# - не конфликтовать с правилами Docker/UFW в главных таблицах;
|
||||
# - на PostDown снести одной командой (идемпотентно).
|
||||
# NAT: маскарадим ТОЛЬКО подсеть туннеля (не трогаем docker и трафик хоста).
|
||||
PostUp = nft add table ip wgfwd
|
||||
PostUp = nft add chain ip wgfwd postrouting { type nat hook postrouting priority 100 \; policy accept \; }
|
||||
PostUp = nft add rule ip wgfwd postrouting ip saddr 10.66.66.0/24 oifname "enp2s0" masquerade
|
||||
# MSS-clamp для пакетов, входящих В туннель (SYN-ACK от внешних серверов),
|
||||
# чтобы large-TCP не «залипал» из-за MTU 1200 и заблокированного PMTUD.
|
||||
PostUp = nft add chain ip wgfwd mangle { type filter hook forward priority -150 \; policy accept \; }
|
||||
PostUp = nft add rule ip wgfwd mangle oifname "wg0" tcp flags syn tcp option maxseg size set rt mtu
|
||||
PostDown = nft delete table ip wgfwd
|
||||
|
||||
[Peer]
|
||||
# Публичный ключ Raspberry Pi (из файла client_public.key)
|
||||
PublicKey = WWFhoYfIgIhGOsvdJ/F9eWx7hPksrV6riiqo5lFPExI=
|
||||
AllowedIPs = 10.66.66.2/32
|
||||
AllowedIPs = 10.66.66.2/32
|
||||
|
||||
Reference in New Issue
Block a user