Zpět na domů

Vyrovnávání proxy pro n8n v Dockeru: odstranění chyb DNS

Podrobný návod na nastavení odolného proti výpadkům vyrovnávače 3proxy pro n8n v Dockeru. Řešení problémů s DNS timeouty a chybami přístupu. Připravené konfigurace a příkazy pro kontrolu funkčnosti.

Jak nastavit odolný proti výpadkům pool proxy pro n8n v Dockeru
Advertisement 728x90

# 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.

Google AdInline article slot

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.

Google AdInline article slot

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.

Google AdInline article slot

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ím parent, jinak parser hlásí chybu Chaining error a vypne řetězec.
  • Vypnutý ACL: Direktiva auth none úplně deaktivuje mechanismus kontroly přístupu, což rozbije logiku předávání. Používejte auth iponly.
  • Chybějící fallback ochrana: Bez deny 0.0.0.0/0 můž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řed parent, auth iponly místo none.
  • Ochrana proti úniku IP je povinná: direktiva deny 0.0.0.0/0 zabraň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

Advertisement 728x90

Číst dál