--- name: VM ADV-22 como proxy residencial + smart bridge fallback 2026-04-30 description: Infra completa de proxy via VM Tailscale com fallback automatico pro proxy-seller. TAP+Delta migrados, outros precisam pool rotativo. type: project originSessionId: 4f44a92f-ea25-4ff4-b6f6-022e683fdd40 --- # Smart Bridge VM (40520) + tinyproxy + fallback proxy-seller — 2026-04-30 ## Arquitetura entregue ``` [Servidor scraper 173.208.187.154] │ ├── proxy-bridge-vm (PM2 56) :40520 │ │ │ ├─ PRIMARY: VM ADV-22 100.91.20.22:8888 (tinyproxy → IP residencial 186.247.226.26 BH) │ │ │ └─ FALLBACK automático (após 3 falhas em 60s): proxy-bridge BR :40500 (proxy-seller pool) │ └── stats em :40521 ``` ## Componentes na VM - **tinyproxy** porta 8888 (`Listen 0.0.0.0`, allow `100.0.0.0/8` Tailscale) - Config: `DisableViaHeader Yes`, `XTinyproxy No` (sem leak de headers proxy) - IP saída: `186.247.226.26` (BH residencial) ## Componentes no servidor scraper - **proxy-bridge-vm.js** PM2 56 (HTTP CONNECT proxy com fallback inteligente) - **stats endpoint** `:40521` (JSON: total, viaVm, viaFallback, vmTimeouts, vmHealthy, cooldown) - Cooldown automático: 3 falhas = 60s no fallback, depois retest VM ## Migração proxy-seller → VM **Sucesso (zero proxy-seller agora):** - ✅ **TAP Miles&Go** (já era VM com Chrome próprio) - ✅ **Delta SkyMiles** — proxy via VM `:40520`. Validado 64 voos GRU-MIA. **Falhou (revertido pro proxy-seller original):** - ❌ **Smiles**: 406 — IP único da VM detectado pelo Akamai. Voltou pra :40500. - ❌ **GOL**: "Form não encontrado" / "detached Frame" — anti-bot voegol detecta IP único. Voltou pra :40506. - ❌ **LATAM Pass / Money / Ethiopian**: timeout — voltaram pros bridges originais. - ❌ **Azul TudoAzul**: bug pré-existente `pageOptimizer is not defined` (não relacionado a proxy) - ❌ **Azul Pelo Mundo**: Akamai histórico bloqueado. ## Por que VM única não substitui proxy-seller pra todos **proxy-seller** = pool de **50-100 IPs residenciais** brasileiros rotativos. **VM ADV-22** = 1 IP fixo (186.247.226.26). Akamai/anti-bot dos seguintes faz **rate-limit por IP** e **score acumulado**: - Smiles, GOL, LATAM Pass, Ethiopian — bloqueiam IP único após poucos requests Pra cobrir esses precisaria **múltiplas VMs em locais diferentes** (pool DIY) ou manter proxy-seller. ## Diagnóstico técnico (testes feitos) | Teste | Resultado | |---|---| | `curl` puro VM → smiles.com.br/api | 406 (sem cookies/sessão) | | `curl` puro VM → ipify.org | 200 IP=186.247.226.26 | | Cloudflare WARP na VM como proxy | 406 também (CF datacenter detectado) | | tinyproxy header leak (httpbin.org/headers) | NENHUM Via:, X-Forwarded-For — limpo | | Smart bridge via VM (TAP/Delta) | ✅ funciona | | Smart bridge via VM (Smiles/GOL/etc) | ❌ anti-bot detecta IP único | ## Economia obtida **TAP + Delta** são scrapers de **alto volume** do projeto. Removidos do proxy-seller. Estima-se redução de **~30-40%** no consumo do plano BR proxy-seller. ## Arquivos chave **Servidor scraper (173.208.187.154):** - `/opt/skymilhas/scrapers/proxy-bridge-vm/index.js` — smart bridge (PM2 56) - `/opt/skymilhas/scrapers/delta/index.js` — `PROXY_BRIDGE_PORT=40520` (VM) - Outros scrapers — voltaram pros ports originais (40500/40506) - Backups `.bak-pre-vm-` em cada pasta **VM ADV-22 (100.91.20.22):** - `/etc/tinyproxy/tinyproxy.conf` — config tinyproxy (Listen 0.0.0.0, allow Tailscale 100/8) - `tinyproxy.service` ativo via systemd ## Como diagnosticar quando algo der errado ```bash # Stats do smart bridge curl http://127.0.0.1:40521 # Health VM tinyproxy curl --max-time 5 --proxy http://100.91.20.22:8888 https://api.ipify.org # deve retornar 186.247.226.26 # Forçar fallback (se VM cair, smart bridge usa proxy-seller automático) # Após 3 falhas em 60s, cooldownInSec > 0 nas stats # Voltar scraper pra proxy-seller original sudo sed -i 's/PROXY_BRIDGE_PORT = 40520/PROXY_BRIDGE_PORT = 40500/' /opt/skymilhas/scrapers//index.js pm2 restart scraper- ``` ## Pendências - ⚠️ **modo_dev_cache**: bloqueado o toggle no `/admin/cache-buscas-toggle` em 2026-04-30 com early return + flash error. Pra reativar precisa editar controller manualmente. - 🟡 **TAP Business no front**: 95% pronto, falta uma linha PHP repassar `tarifasDisponiveis` (15min) - 🔴 **Azul Pelo Mundo**: Akamai histórico bloqueado, todas as 9 estratégias testadas falharam - 🟡 Pool DIY de VMs: pra Smiles/GOL/etc precisaria 5-10 VMs em casas diferentes **Why:** Jesiel quer reduzir custo proxy-seller usando VM ADV-22 com IP residencial. TAP+Delta migrados com sucesso. Outros precisam pool rotativo (limitação física: 1 IP vs 100+). **How to apply:** smart bridge :40520 disponível pra qualquer scraper futuro. Apenas trocar `PROXY_BRIDGE_PORT=40500` (ou similar) pra `40520` no scraper. Se quebrar, smart bridge faz fallback automático e scraper pode ser revertido com 1 linha sed.