# Odolná vyvážení zátěže proxy pro n8n v Dockeru: řešení DNS timeoutů a chyb přístupu
Provoz n8n přes jediný proxy představuje architektonickou slabinu. Při blokaci IP nebo výpadku proxy serveru se všechny workflow zastaví. Jediným spolehlivým řešením je nasazení poolu proxy s automatickým přepínáním a round-robin vyvážením zátěže. Tento článek popisuje krok za krokem nastavení 3proxy v Docker stacku, opravu kritických DNS chyb a problémů s přístupovými právy, stejně jako metody ověření funkčnosti celého řetězce.
Architektura odolného proxy poolu
Místo přímého připojení n8n k Telegramu nebo jiným externím API zavádíme lokální kontejner 3proxy, který slouží jako brána. Přijímá HTTP/HTTPS požadavky od n8n na portu 3128 a distribuuje je do předem definovaného seznamu externích SOCKS5 proxy. Klíčové výhody:
- Automatické obnovení: při nedostupnosti jednoho uzlu se provoz okamžitě přesměruje na další živý proxy.
- Průhlednost pro n8n: workflow nevyžadují úpravy – stačí zadat jednu adresu proxy v proměnných prostředí.
- Ochrana proti úniku IP: pokud jsou všechny externí proxy nedostupné, spojení se násilně ukončí, což zabrání odchodu provozu pod skutečnou IP serveru.
Konfigurace se realizuje přes docker-compose, kde oba služby (n8n a 3proxy) sdílejí jednu uživatelskou síť. To zajišťuje stabilní interní směrování bez nutnosti mapování portů na hostitele.
Nastavení docker-compose.yml a konfiguračního souboru 3proxy
Začneme základním stackem. Všimněte si parametru user: "0:0" – je nezbytný pro správný chod 3proxy v kontejneru, protože proces potřebuje práva k otevření síťových portů a čtení konfigurace z volume.
version: '3.8'
services:
n8n:
image: docker.n8n.io/n8nio/n8n:latest
container_name: n8n
environment:
- HTTP_PROXY=http://3proxy:3128
- HTTPS_PROXY=http://3proxy:3128
- http_proxy=http://3proxy:3128
- https_proxy=http://3proxy:3128
networks:
- n8n_net
3proxy:
image: ghcr.io/z3apa3a/3proxy:latest
container_name: 3proxy
restart: always
user: "0:0"
volumes:
- ./3proxy.cfg:/etc/3proxy/3proxy.cfg
networks:
- n8n_net
networks:
n8n_net:
name: n8n_net
Hlavní logika vyvážení zátěže je definována v souboru 3proxy.cfg. Níže je minimálně funkční konfigurace s komentáři:
daemon
log /var/log/3proxy.log D
logformat "L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
# Ispolzuem DNS rezolver Docker, and not vneshniy (for example, 8.8.8.8)
nserver 127.0.0.11
nscache 65536
timeouts 1 5 30 60 180 1800 15 60
# Akaktywatsiya ACL — bez etogo parent-chains ignoriruyutsya
auth iponly
# Razreshenie must be TO obyavleniya parent
allow *
# Pul vneshnikh wytyczsi (round-robin)
parent 1000 socks5 IP_PROKWithI_1 PORT_1 LOGIN_1 PAROL_1
parent 1000 socks5 IP_PROKWithI_2 PORT_2 LOGIN_2 PAROL_2
parent 1000 socks5 IP_PROKWithI_3 PORT_3 LOGIN_3 PAROL_3
# Zapreschaem directlyy output, if all wytyczsi nedostupny
deny * * 0.0.0.0/0
# Run HTTP-wytyczsi on portu 3128
proxy -p3128 -a
flush
Diagnostika a řešení běžných chyb
Při prvním spuštění se objeví tři časté problémy. Jejich vyřešení je klíčem k stabilnímu provozu systému.
Chyba 1: DNS timeouty (26 sekund na požadavek)
Příznaky: n8n se na každém požadavku zasekne přesně na 26 sekund, poté buď obdrží odpověď, nebo selže s timeoutem.
Příčina: V konfiguraci je zadán externí DNS server (např. nserver 8.8.8.8), ale kontejner 3proxy nemá přímý přístup k internetu mimo uživatelskou síť Dockeru. DNS požadavky jdou do prázdna a čekají na timeout.
Řešení: Nahradit DNS interním resolverem Dockeru – nserver 127.0.0.11. Tato adresa je vždy dostupná uvnitř jakéhokoli kontejneru a deleguje požadavky na hostitelský systém.
Chyba 2: Permission denied při startu kontejneru
Příznaky: Kontejner 3proxy selže hned po spuštění, v logách jsou zprávy o nemožnosti otevřít port nebo přečíst konfiguraci.
Příčina: Oficiální image 3proxy se standardně spouští od neprivilegovaného uživatele, kterému je zakázáno pracovat s porty pod 1024 a připojenými volume.
Řešení: Explicitně zadat user: "0:0" v docker-compose pro službu 3proxy. To spustí proces jako root v izolovaném prostoru kontejneru – bezpečné, protože síť je omezena.
Chyba 3: Provóz jde přímo, obchází proxy pool
Příznaky: n8n funguje, ale při kontrole odchozí IP je vidět skutečná adresa serveru, ne proxy. Balancer ignoruje direktivy parent.
Příčiny a řešení:
- Nesprávný pořadí direktiv:
allow *musí stát přesně před prvnímparent, jinak parser hlásí chybuChaining errora vypne řetězec. - Vypnutý ACL: Direktiva
auth noneúplně deaktivuje mechanismus kontroly přístupu, což rozbije logiku předávání. Používejteauth iponly. - Chybějící fallback ochrana: Bez
deny 0.0.0.0/0může systém "prosáknout" ven přímo při úplném výpadku poolu. Tento řádek zaručuje, že pokud jsou všechny proxy mrtvé, spojení se přeruší, ne přesměruje na výchozí trasu.
Metody ověření funkčnosti systému
Po nastavení je nutné ověřit, že provoz skutečně prochází balancerem a proxy poolem. Použijte dvě úrovně kontroly:
- Kontrola logů 3proxy:
```
docker compose logs --tail 20 3proxy
```
Hledejte záznamy ve formátu [NNN] CONNECT ... – potvrzují, že požadavky jsou přijímány a přesměrovávány. Pokud vidíte Permission denied – vraťte se k nastavení user: "0:0".
- Kontrola end-to-end spojení z n8n:
```
docker compose exec n8n curl -Ivx http://3proxy:3128 https://api.telegram.org
```
Očekávaný výsledek – HTTP kód 200 OK a výpis hlaviček. Pokud příkaz visí – problém s DNS (nserver). Pokud vrátí Connection refused – zkontrolujte, zda běží 3proxy a je otevřen port 3128.
Navíc lze do konfigurace 3proxy přidat řádek logrotate 1000000 5 – aktivuje rotaci logů podle velikosti a zabrání zaplnění disku.
Co je důležité
- DNS uvnitř Dockeru vždy musí ukazovat na 127.0.0.11, jinak vznikají 26sekundové timeouty.
- Uživatelská práva v kontejneru jsou kritická: bez
user: "0:0"3proxy nedokáže otevřít port 3128. - Pořadí direktiv v konfiguraci 3proxy ovlivňuje funkčnost:
allow *předparent,auth iponlymístonone. - Ochrana proti úniku IP je povinná: direktiva
deny 0.0.0.0/0zabraňuje přímému odchodu provozu při výpadku všech proxy. - Round-robin vyvážení je vestavěné v 3proxy – nevyžaduje další nástroje nebo skripty.
Nastavený systém zajišťuje nepřetržitý provoz n8n i při částečném výpadku infrastruktury. Všechny změny jsou pro workflow průhledné – stačí jednou zadat lokální proxy a další směrování probíhá automaticky.
— Editorial Team
Zatím žádné komentáře.