# 🌐 OmniRoute Proxy Guide (Latviešu) 🌐 **Languages:** 🇺🇸 [English](../../../../ops/PROXY_GUIDE.md) · 🇪🇹 [am](../../../am/docs/ops/PROXY_GUIDE.md) · 🇸🇦 [ar](../../../ar/docs/ops/PROXY_GUIDE.md) · 🇦🇿 [az](../../../az/docs/ops/PROXY_GUIDE.md) · 🇧🇬 [bg](../../../bg/docs/ops/PROXY_GUIDE.md) · 🇧🇩 [bn](../../../bn/docs/ops/PROXY_GUIDE.md) · 🇧🇦 [bs](../../../bs/docs/ops/PROXY_GUIDE.md) · 🇨🇿 [cs](../../../cs/docs/ops/PROXY_GUIDE.md) · 🇩🇰 [da](../../../da/docs/ops/PROXY_GUIDE.md) · 🇩🇪 [de](../../../de/docs/ops/PROXY_GUIDE.md) · 🇬🇷 [el](../../../el/docs/ops/PROXY_GUIDE.md) · 🇪🇸 [es](../../../es/docs/ops/PROXY_GUIDE.md) · 🇪🇪 [et](../../../et/docs/ops/PROXY_GUIDE.md) · 🇮🇷 [fa](../../../fa/docs/ops/PROXY_GUIDE.md) · 🇫🇮 [fi](../../../fi/docs/ops/PROXY_GUIDE.md) · 🇫🇷 [fr](../../../fr/docs/ops/PROXY_GUIDE.md) · 🇮🇪 [ga](../../../ga/docs/ops/PROXY_GUIDE.md) · 🇮🇳 [gu](../../../gu/docs/ops/PROXY_GUIDE.md) · 🇳🇬 [ha](../../../ha/docs/ops/PROXY_GUIDE.md) · 🇮🇱 [he](../../../he/docs/ops/PROXY_GUIDE.md) · 🇮🇳 [hi](../../../hi/docs/ops/PROXY_GUIDE.md) · 🇭🇷 [hr](../../../hr/docs/ops/PROXY_GUIDE.md) · 🇭🇺 [hu](../../../hu/docs/ops/PROXY_GUIDE.md) · 🇦🇲 [hy](../../../hy/docs/ops/PROXY_GUIDE.md) · 🇮🇩 [id](../../../id/docs/ops/PROXY_GUIDE.md) · 🇳🇬 [ig](../../../ig/docs/ops/PROXY_GUIDE.md) · 🇮🇹 [it](../../../it/docs/ops/PROXY_GUIDE.md) · 🇯🇵 [ja](../../../ja/docs/ops/PROXY_GUIDE.md) · 🇬🇪 [ka](../../../ka/docs/ops/PROXY_GUIDE.md) · 🇰🇭 [km](../../../km/docs/ops/PROXY_GUIDE.md) · 🇮🇳 [kn](../../../kn/docs/ops/PROXY_GUIDE.md) · 🇰🇷 [ko](../../../ko/docs/ops/PROXY_GUIDE.md) · 🇱🇹 [lt](../../../lt/docs/ops/PROXY_GUIDE.md) · 🇮🇳 [ml](../../../ml/docs/ops/PROXY_GUIDE.md) · 🇮🇳 [mr](../../../mr/docs/ops/PROXY_GUIDE.md) · 🇲🇾 [ms](../../../ms/docs/ops/PROXY_GUIDE.md) · 🇲🇹 [mt](../../../mt/docs/ops/PROXY_GUIDE.md) · 🇲🇲 [my](../../../my/docs/ops/PROXY_GUIDE.md) · 🇳🇵 [ne](../../../ne/docs/ops/PROXY_GUIDE.md) · 🇳🇱 [nl](../../../nl/docs/ops/PROXY_GUIDE.md) · 🇳🇴 [no](../../../no/docs/ops/PROXY_GUIDE.md) · 🇮🇳 [or](../../../or/docs/ops/PROXY_GUIDE.md) · 🇮🇳 [pa](../../../pa/docs/ops/PROXY_GUIDE.md) · 🇵🇭 [phi](../../../phi/docs/ops/PROXY_GUIDE.md) · 🇵🇱 [pl](../../../pl/docs/ops/PROXY_GUIDE.md) · 🇵🇹 [pt](../../../pt/docs/ops/PROXY_GUIDE.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/ops/PROXY_GUIDE.md) · 🇷🇴 [ro](../../../ro/docs/ops/PROXY_GUIDE.md) · 🇷🇺 [ru](../../../ru/docs/ops/PROXY_GUIDE.md) · 🇱🇰 [si](../../../si/docs/ops/PROXY_GUIDE.md) · 🇸🇰 [sk](../../../sk/docs/ops/PROXY_GUIDE.md) · 🇸🇮 [sl](../../../sl/docs/ops/PROXY_GUIDE.md) · 🇷🇸 [sr](../../../sr/docs/ops/PROXY_GUIDE.md) · 🇸🇪 [sv](../../../sv/docs/ops/PROXY_GUIDE.md) · 🇰🇪 [sw](../../../sw/docs/ops/PROXY_GUIDE.md) · 🇮🇳 [ta](../../../ta/docs/ops/PROXY_GUIDE.md) · 🇮🇳 [te](../../../te/docs/ops/PROXY_GUIDE.md) · 🇹🇭 [th](../../../th/docs/ops/PROXY_GUIDE.md) · 🇹🇷 [tr](../../../tr/docs/ops/PROXY_GUIDE.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/ops/PROXY_GUIDE.md) · 🇵🇰 [ur](../../../ur/docs/ops/PROXY_GUIDE.md) · 🇺🇿 [uz](../../../uz/docs/ops/PROXY_GUIDE.md) · 🇻🇳 [vi](../../../vi/docs/ops/PROXY_GUIDE.md) · 🇳🇬 [yo](../../../yo/docs/ops/PROXY_GUIDE.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/ops/PROXY_GUIDE.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/ops/PROXY_GUIDE.md) --- > **Apejiet ģeogrāfiskos ierobežojumus, aizsargājiet savu identitāti un maršrutējiet AI datplūsmu caur jebkuru starpniekserveri — bez sarežģītas konfigurēšanas.** OmniRoute ietver pilnvērtīgu starpniekserveru pārvaldības sistēmu, kas ļauj maršrutēt datplūsmu uz ārējiem AI pakalpojumu sniedzējiem caur HTTP, HTTPS vai SOCKS5 starpniekserveriem. Neatkarīgi no tā, vai atrodaties bloķētā reģionā, jums nepieciešama IP adrešu rotācija vai vēlaties izmantot maskētu digitālo nospiedumu — šajā rokasgrāmatā ir aprakstīts viss nepieciešamais. --- ## Satura rādītājs - [Kāpēc izmantot starpniekserverus?](#kāpēc-izmantot-starpniekserverus) - [Arhitektūras pārskats](#arhitektūras-pārskats) - [4 līmeņu starpniekserveru sistēma](#4-līmeņu-starpniekserveru-sistēma) - [Starpniekserveru reģistrs (CRUD)](#starpniekserveru-reģistrs-crud) - [1proxy bezmaksas tirgus](#1proxy-bezmaksas-starpniekserveru-tirgus) - [Starpniekserveru rotācija](#starpniekserveru-rotācija) - [Aizsardzība pret noteikšanu un maskēšana](#aizsardzība-pret-noteikšanu--maskēšana) - [Augšupstraumes starpniekserveru režīmi](#augšupstraumes-starpniekserveru-režīmi) - [Vadības paneļa saskarne](#vadības-paneļa-saskarne) - [API atsauce](#api-atsauce) - [Vides mainīgie](#vides-mainīgie) - [Problēmu novēršana](#problēmu-novēršana) --- ## Kāpēc izmantot starpniekserverus? Daudzi AI pakalpojumu sniedzēji ierobežo piekļuvi pēc ģeogrāfiskā reģiona. Izstrādātāji **Krievijā, Ķīnā, Irānā, Kubā, Turcijā** un citās valstīs sastopas ar šādām kļūdām: ``` unsupported_country_region_territory ``` Arī ārpus bloķētajiem reģioniem starpniekserveri ir noderīgi: | Lietojuma scenārijs | Apraksts | | ------------------------------------- | ------------------------------------------------------------------------------------------ | | **Ģeogrāfisko ierobežojumu apiešana** | Piekļuve OpenAI, Anthropic, Codex un Copilot no bloķētām valstīm | | **IP rotācija** | Pieprasījumu sadalīšana starp vairākām IP adresēm, lai izvairītos no ātruma ierobežojumiem | | **Privātums** | Jūsu īstās IP adreses slēpšana no ārējiem pakalpojumu sniedzējiem | | **Atbilstība** | Datplūsmas maršrutēšana caur noteiktām jurisdikcijām | | **Testēšana** | Pieprasījumu simulēšana no dažādiem reģioniem | --- ## Arhitektūras pārskats ``` ┌───────────────────────────────────────────────────────────────┐ │ OmniRoute serveris │ │ │ │ ┌─────────────┐ ┌──────────────┐ ┌──────────────────┐ │ │ │ Starpniek- │ │ Starpniek- │ │ Starpniekservera│ │ │ │ serveru │───▶│ serveru │───▶│ Fetch (undici) │ │ │ │ reģistrs │ │ dispečers │ │ │ │ │ │ (SQLite) │ │ (kešots) │ │ │ │ │ └─────────────┘ └──────────────┘ └────────┬─────────┘ │ │ ▲ │ │ │ │ ▼ │ │ ┌──────┴──────┐ ┌──────────────────┐ │ │ │ 1proxy │ │ Ārējā │ │ │ │ sinhronizācija │ pakalpojumu │ │ │ │ (bezmaksas fonds) │ sniedzēja API │ │ │ └─────────────┘ └──────────────────┘ │ └───────────────────────────────────────────────────────────────┘ ``` ### Galvenie komponenti | Komponents | Fails | Loma | | ------------------------------ | -------------------------------------------- | ------------------------------------------------------------------ | | **Starpniekserveru reģistrs** | `src/lib/db/proxies.ts` | Starpniekserveru ierakstu CRUD un tvērumu piešķiršana | | **Starpniekserveru dispečers** | `open-sse/utils/proxyDispatcher.ts` | Izveido `undici` ProxyAgent/SOCKS dispečerus un nodrošina kešošanu | | **Starpniekservera Fetch** | `open-sse/utils/proxyFetch.ts` | Ietver `fetch()`, ievadot starpniekservera dispečeru | | **Iestatījumu maršruts** | `src/app/api/settings/proxy/route.ts` | Mantotā starpniekservera konfigurācijas API (GET/PUT/DELETE) | | **Pārvaldības maršruts** | `src/app/api/v1/management/proxies/route.ts` | Reģistra CRUD API (GET/POST/PATCH/DELETE) | | **1proxy DB** | `src/lib/db/oneproxy.ts` | Bezmaksas starpniekserveru tirgus datu pastāvīga glabāšana | --- ## 4 līmeņu starpniekserveru sistēma OmniRoute atbalsta starpniekserveru konfigurāciju **četros neatkarīgos tvērumos**, kas tiek izvērtēti prioritārā secībā: ``` Prioritāšu izvērtēšanas secība (no augstākās → līdz zemākajai): 1. 🔵 Konta/savienojuma starpniekserveris → katrai API atslēgai / OAuth savienojumam 2. 🟡 Pakalpojumu sniedzēja starpniekserveris → katram pakalpojumu sniedzējam (piem., visai OpenAI datplūsmai) 3. 🟠 Kombinācijas starpniekserveris → katrai kombinācijai/maršrutēšanas konfigurācijai 4. 🟢 Globālais starpniekserveris → visai datplūsmai, visiem pakalpojumu sniedzējiem ``` ### Kā darbojas izvērtēšana Kad OmniRoute nosūta pieprasījumu augšupējam pakalpojumu sniedzējam, tas izsauc `resolveProxyForConnectionFromRegistry()`, kas secīgi pārbauda katru līmeni: 1. **Konta līmenis** — vai šim konkrētajam savienojuma ID ir piešķirts starpniekserveris? 2. **Pakalpojumu sniedzēja līmenis** — vai šim pakalpojumu sniedzējam (piem., `openai`) ir piešķirts starpniekserveris? 3. **Globālais līmenis** — vai ir konfigurēts globālais starpniekserveris? 4. **Bez starpniekservera** — tiešs savienojums ar pakalpojumu sniedzēju. Tiek izmantota pirmā atbilstība. Tas nozīmē, ka globālo starpniekserveri varat iestatīt kā rezerves variantu, bet konkrētiem pakalpojumu sniedzējiem vai savienojumiem to pārrakstīt. ### Kāda datplūsma tiek novirzīta caur starpniekserveri | Datplūsmas veids | Izmanto starpniekserveri? | Piezīmes | | ------------------------ | ------------------------- | ----------------------------------------------------- | | Tērzēšanas pabeigšana | ✅ | Visi `/v1/chat/completions` pieprasījumi | | Iegultnes | ✅ | `/v1/embeddings` | | Attēlu ģenerēšana | ✅ | `/v1/images/generations` | | Audio (TTS/STT) | ✅ | `/v1/audio/*` | | OAuth pilnvaru apmaiņa | ✅ | Atrisina `unsupported_country_region_territory` | | Savienojuma pārbaudes | ✅ | Poga "Pārbaudīt savienojumu" izmanto starpniekserveri | | Pilnvaru atsvaidzināšana | ✅ | OAuth atjaunošana fonā | | Modeļu sinhronizācija | ✅ | Modeļu uzskaitīšana un atklāšana | --- ## Starpniekserveru reģistrs (CRUD) Starpniekserveru reģistrs ir SQLite tabula (`proxy_registry`), kurā tiek glabāti visi jūsu starpniekserveri. Katram starpniekserverim ir: | Lauks | Tips | Apraksts | | ---------- | --------------- | --------------------------------------------------------- | | `id` | UUID | Unikāls identifikators | | `name` | Virkne | Cilvēkam saprotama etiķete | | `type` | Virkne | Protokols: `http`, `https`, `socks5` | | `host` | Virkne | Starpniekservera resursdatora nosaukums vai IP | | `port` | Vesels skaitlis | Porta numurs | | `username` | Virkne | Autentifikācijas lietotājvārds (šifrēts glabāšanas laikā) | | `password` | Virkne | Autentifikācijas parole (šifrēta glabāšanas laikā) | | `region` | Virkne | Ģeogrāfiskā reģiona etiķete | | `notes` | Virkne | Brīvas formas piezīmes | | `status` | Virkne | `active` vai `inactive` | | `source` | Virkne | `manual` vai `oneproxy` | ### Starpniekservera izveide **Izmantojot informācijas paneli:** 1. Dodieties uz **Iestatījumi → Starpniekserveris** 2. Noklikšķiniet uz **Pievienot starpniekserveri** 3. Norādiet tipu, resursdatoru, portu un, ja nepieciešams, autentifikācijas datus 4. Saglabājiet **Izmantojot API:** ```bash curl -X POST http://localhost:20128/api/v1/management/proxies \ -H "Content-Type: application/json" \ -d '{ "name": "US Proxy", "type": "http", "host": "proxy.example.com", "port": 8080, "username": "user", "password": "pass", "region": "US" }' ``` ### Starpniekservera atjaunināšana ```bash curl -X PATCH http://localhost:20128/api/v1/management/proxies \ -H "Content-Type: application/json" \ -d '{ "id": "proxy-uuid-here", "host": "new-proxy.example.com", "port": 9090 }' ``` > **Piezīme:** Akreditācijas dati tiek saglabāti, ja vien skaidri nenosūtāt aizstājošas vērtības, kas nav tukšas. Nosūtot tukšas virknes laukiem `username`/`password`, saglabātās vērtības netiks mainītas. ### Starpniekservera dzēšana ```bash # Neizdodas, ja starpniekserveris ir piešķirts kādam tvērumam curl -X DELETE "http://localhost:20128/api/v1/management/proxies?id=proxy-uuid" # Piespiedu dzēšana (noņem arī piešķīrumus) curl -X DELETE "http://localhost:20128/api/v1/management/proxies?id=proxy-uuid&force=1" ``` ### Starpniekserveru uzskaitīšana ```bash curl "http://localhost:20128/api/v1/management/proxies?limit=50&offset=0" ``` ### Starpniekserveru piešķiršana tvērumiem ```bash # Piešķirt globālajam tvērumam curl -X PUT http://localhost:20128/api/settings/proxy \ -H "Content-Type: application/json" \ -d '{"level": "global", "proxy": {"type":"http","host":"proxy.example.com","port":8080}}' # Piešķirt konkrētam pakalpojumu sniedzējam curl -X PUT http://localhost:20128/api/settings/proxy \ -H "Content-Type: application/json" \ -d '{"level": "provider", "id": "openai", "proxy": {"type":"socks5","host":"socks.example.com","port":1080}}' # Piešķirt konkrētam savienojumam/atslēgai curl -X PUT http://localhost:20128/api/settings/proxy \ -H "Content-Type: application/json" \ -d '{"level": "key", "id": "connection-uuid", "proxy": {"type":"http","host":"key-proxy.com","port":3128}}' ``` ### Efektīvā starpniekservera noteikšana Pārbaudiet, kurš starpniekserveris tiktu izmantots konkrētam savienojumam: ```bash curl "http://localhost:20128/api/settings/proxy?resolve=connection-uuid" ``` Atgriež noteikto starpniekserveri kopā ar tā līmeni (`account`, `provider` vai `global`) un avotu. ### Lielapjoma piešķiršana Piešķiriet vienu starpniekserveri vairākiem pakalpojumu sniedzējiem vai savienojumiem vienlaikus: ```bash curl -X POST http://localhost:20128/api/v1/management/proxies/bulk-assign \ -H "Content-Type: application/json" \ -d '{ "scope": "provider", "scopeIds": ["openai", "anthropic", "codex"], "proxyId": "proxy-uuid" }' ``` ### Importēšana/eksportēšana Starpniekserveri ir iekļauti **dublēšanas/atjaunošanas** sistēmā. Eksportējot OmniRoute konfigurāciju: 1. Dodieties uz **Informācijas panelis → Iestatījumi → Dublēšana** 2. Noklikšķiniet uz **Eksportēt** — tiks iekļauts starpniekserveru reģistrs un piešķīrumi 3. Lai atjaunotu, noklikšķiniet uz **Importēt** un augšupielādējiet dublējuma failu Starpniekserveru reģistrs atbalsta arī **ievietošanu vai atjaunināšanu pēc resursdatora+porta** — ja importējat jau esošu starpniekserveri (ar to pašu resursdatoru un portu), tas tiek atjaunināts, nevis izveidots dublikāts. ### Mantotās konfigurācijas migrācija Ja konfigurējāt starpniekserverus vecākā versijā (pirms reģistra ieviešanas), OmniRoute tos automātiski migrē: ``` Mantotā key_value krātuve → proxy_registry + proxy_assignments ``` Tas notiek vienreiz, veicot pirmo palaišanu pēc jaunināšanas. Lai migrāciju palaistu atkārtoti, izmantojiet `migrateLegacyProxyConfigToRegistry({ force: true })`. --- ## 1proxy bezmaksas starpniekserveru tirgus > 🆕 **Pievienoja [@oyi77](https://github.com/oyi77)** — PR [#1847](https://github.com/diegosouzapw/OmniRoute/pull/1847) (problēma [#1788](https://github.com/diegosouzapw/OmniRoute/issues/1788)) OmniRoute integrējas ar **[1proxy](https://1proxy-api.aitradepulse.com)** kopienas platformu, lai nodrošinātu piekļuvi **simtiem bezmaksas, pārbaudītu starpniekserveru** no visas pasaules. Tas ir lieliski piemērots lietotājiem, kuriem nav savas starpniekserveru infrastruktūras. ### Kā tas darbojas ``` ┌─────────────┐ Sinhronizācija ┌─────────────────┐ Rotācija ┌──────────────────────┐ │ 1proxy API │ ───────────────▶ │ proxy_registry │ ────────────▶ │ Pakalpojuma sniedzēja │ │ (ārējs) │ līdz 500 │ source=oneproxy │ pēc kvalitātes│ API │ └─────────────┘ starpniekserveru └─────────────────┘ └──────────────────────┘ ``` 1. **Sinhronizācija** — OmniRoute iegūst pārbaudītus starpniekserverus no 1proxy API 2. **Saglabāšana** — starpniekserveri tiek saglabāti tajā pašā `proxy_registry` tabulā ar `source = 'oneproxy'` 3. **Filtrēšana** — filtrējiet pēc protokola, valsts un kvalitātes vērtējuma 4. **Rotācija** — izvēlieties labāko starpniekserveri, izmantojot kvalitātes, nejaušas vai secīgas izvēles stratēģiju 5. **Automātiska pazemināšana** — starpniekserveriem, kuru izmantošana neizdodas, tiek samazināts kvalitātes vērtējums; ja tas ir zem sliekšņa → tie tiek atzīmēti kā neaktīvi ### Starpniekserveru sinhronizēšana **Izmantojot informācijas paneli:** 1. Atveriet cilni **Iestatījumi → 1proxy** 2. Noklikšķiniet uz **„Sinhronizēt tagad”** 3. Skatiet statistiku: kopējais starpniekserveru skaits, aktīvo serveru skaits, vidējā kvalitāte un sadalījums pa valstīm **Izmantojot API:** ```bash # Sākt sinhronizāciju curl -X POST http://localhost:20128/api/settings/oneproxy \ -H "Content-Type: application/json" \ -d '{}' # Atbilde: # { "success": true, "added": 127, "updated": 45, "failed": 2, "total": 172 } ``` ### Starpniekserveru filtrēšana ```bash # Filtrēt pēc protokola curl "http://localhost:20128/api/settings/oneproxy?protocol=socks5" # Filtrēt pēc valsts curl "http://localhost:20128/api/settings/oneproxy?countryCode=US" # Filtrēt pēc minimālā kvalitātes vērtējuma curl "http://localhost:20128/api/settings/oneproxy?minQuality=80" # Apvienot filtrus curl "http://localhost:20128/api/settings/oneproxy?protocol=http&countryCode=DE&minQuality=70" ``` ### Starpniekserveru kvalitātes vērtējumi Katram 1proxy starpniekserverim ir pievienoti metadati: | Lauks | Apraksts | | --------------- | ------------------------------------------------------ | | `qualityScore` | 1proxy validācijas vērtējums no 0 līdz 100 | | `latencyMs` | Izmērītais tīkla latentums | | `anonymity` | `transparent`, `anonymous` vai `elite` | | `googleAccess` | Vai starpniekserveris var piekļūt Google pakalpojumiem | | `countryCode` | Divu burtu ISO valsts kods | | `lastValidated` | Pēdējās validācijas laikspiedols | Kvalitātes vērtējumi tiek dinamiski pielāgoti: - **Neizdevušies pieprasījumi** samazina vērtējumu par 10 punktiem - **Vērtējums samazinās līdz ≤10** → starpniekserveris tiek atzīmēts kā `inactive` - Neaktīvie starpniekserveri tiek izslēgti no rotācijas ### Rotācijas stratēģijas ```bash # Rotācija pēc kvalitātes (vispirms labākais starpniekserveris) — noklusējuma stratēģija curl -X POST http://localhost:20128/api/settings/oneproxy/rotate \ -H "Content-Type: application/json" \ -d '{"strategy": "quality"}' # Nejauša rotācija curl -X POST http://localhost:20128/api/settings/oneproxy/rotate \ -d '{"strategy": "random"}' # Secīga rotācija (vispirms visilgāk nevalidētais) curl -X POST http://localhost:20128/api/settings/oneproxy/rotate \ -d '{"strategy": "sequential"}' ``` ### Ķēdes pārtraucējs 1proxy sinhronizācijai ir iebūvēts ķēdes pārtraucējs: - Pēc **5 secīgām sinhronizācijas kļūmēm** turpmākie sinhronizācijas mēģinājumi tiek bloķēti - Atiestatiet ar `resetOneproxyCircuitBreaker()` vai restartējiet serveri - Sinhronizācijas statuss ir pieejams adresē `GET /api/settings/oneproxy?action=status` ### 1proxy starpniekserveru dzēšana ```bash # Dzēst vienu 1proxy starpniekserveri curl -X DELETE "http://localhost:20128/api/settings/oneproxy?id=proxy-uuid" # Dzēst VISUS 1proxy starpniekserverus (manuāli pievienotie starpniekserveri netiek mainīti) curl -X DELETE "http://localhost:20128/api/settings/oneproxy?clearAll=1" ``` --- ## Aizsardzība pret noteikšanu un maskēšanās OmniRoute ne tikai maršrutē datplūsmu caur starpniekserveri — tas liek datplūsmai izskatīties leģitīmai: ### TLS digitālā nospieduma imitēšana Izmanto `wreq-js`, lai ģenerētu pārlūkprogrammai līdzīgus TLS digitālos nospiedumus, apejot robotu noteikšanas sistēmas, kas atzīmē TLS rokasspiedienus, kuri nenāk no pārlūkprogrammas. ### CLI digitālā nospieduma atbilstība **CLI digitālā nospieduma pārslēgs** (`Iestatījumi → Drošība`) pārkārto HTTP galvenes un JSON pamatteksta laukus, lai tie precīzi atbilstu vietējo CLI bināro failu (Claude Code, Codex u.c.) signatūrai. Tas darbojas **papildus** starpniekserverim: ``` Jūsu IP (bloķēta) → Starpniekservera IP (ASV) → Pakalpojumu sniedzēja API + TLS imitēšana + CLI digitālais nospiedums ``` Jūs vienlaikus iegūstat gan **IP maskēšanu**, gan **pieprasījumu autentiskumu**. ### Starpniekservera IP saglabāšana Krāsu kodiem atbilstošas emblēmas informācijas panelī parāda, kurš starpniekservera līmenis ir aktīvs: | Emblēma | Līmenis | Nozīme | | ------- | ----------- | ---------------------------------------------------------- | | 🟢 | Globāls | Visa datplūsma tiek virzīta caur šo starpniekserveri | | 🟡 | Sniedzējs | Tiek starpniekota tikai šī pakalpojumu sniedzēja datplūsma | | 🔵 | Savienojums | Šī konkrētā atslēga/konts izmanto šo starpniekserveri | Emblēma verifikācijai parāda arī atrisināto starpniekservera IP. --- ## Augšupstraumes starpniekservera režīmi Pakalpojumu sniedzējiem, kas izmanto CLIProxyAPI modeli, OmniRoute atbalsta trīs augšupstraumes starpniekservera režīmus: | Režīms | Apraksts | | ------------- | -------------------------------------------------------------------- | | `native` | OmniRoute tieši apstrādā starpniekservera maršrutēšanu (noklusējums) | | `cliproxyapi` | Deleģē ārējai CLIProxyAPI instancei | | `fallback` | Vispirms mēģina vietējo režīmu, pēc tam pārslēdzas uz CLIProxyAPI | Konfigurējiet katram pakalpojumu sniedzējam atsevišķi: ```bash curl -X PUT "http://localhost:20128/api/upstream-proxy/openai" \ -H "Content-Type: application/json" \ -d '{"mode": "native", "enabled": true}' ``` --- ## Informācijas paneļa lietotāja saskarne ### Iestatījumi → Cilne Starpniekserveris - **Globālā starpniekservera** konfigurācija (iestatiet vienreiz visai datplūsmai) - **Atsevišķu pakalpojumu sniedzēju starpniekservera** ignorēšanas iestatījumi - **Atsevišķu savienojumu starpniekservera** piešķīrumi - **Savienojuma pārbaude**, izmantojot konfigurēto starpniekserveri - **Krāsu kodiem atbilstošas emblēmas**, kas parāda aktīvo starpniekservera līmeni ### Iestatījumi → Cilne 1proxy - Poga **Sinhronizēt tagad**, lai iegūtu bezmaksas starpniekserverus - **Statistikas kartītes**: Kopā, Aktīvi, Vid. kvalitāte, Pēdējā sinhronizācija - **Filtri**: Protokols, Valsts kods, Min. kvalitāte - **Starpniekserveru tabula** ar resursdatoru, protokolu, valsti, kvalitātes rādītāju, latentumu, anonimitāti un Google piekļuvi - **Sinhronizācijas statusa** panelis ar sekmīgu/neveiksmīgu mēģinājumu izsekošanu un secīgo kļūmju skaitu - **Notīrīt visu**, lai noņemtu visus 1proxy ierakstus --- ## API atsauce ### Starpniekservera iestatījumu API | Metode | Galapunkts | Apraksts | | -------- | ---------------------------------------------- | -------------------------------------------- | | `GET` | `/api/settings/proxy` | Iegūt pilnu starpniekservera konfigurāciju | | `GET` | `/api/settings/proxy?level=global` | Iegūt globālo starpniekserveri | | `GET` | `/api/settings/proxy?level=provider&id=openai` | Iegūt pakalpojumu sniedzēja starpniekserveri | | `GET` | `/api/settings/proxy?resolve=connectionId` | Noteikt faktiski izmantoto starpniekserveri | | `PUT` | `/api/settings/proxy` | Atjaunināt starpniekservera konfigurāciju | | `DELETE` | `/api/settings/proxy?level=provider&id=openai` | Noņemt starpniekserveri attiecīgajā līmenī | ### Starpniekserveru reģistra API | Metode | Galapunkts | Apraksts | | -------- | ------------------------------------------------- | -------------------------------------- | | `GET` | `/api/v1/management/proxies` | Uzskaitīt visus starpniekserverus | | `GET` | `/api/v1/management/proxies?id=uuid` | Iegūt starpniekserveri pēc ID | | `GET` | `/api/v1/management/proxies?id=uuid&where_used=1` | Iegūt starpniekservera piešķīrumus | | `POST` | `/api/v1/management/proxies` | Izveidot starpniekserveri | | `PATCH` | `/api/v1/management/proxies` | Atjaunināt starpniekserveri | | `DELETE` | `/api/v1/management/proxies?id=uuid` | Dzēst starpniekserveri | | `DELETE` | `/api/v1/management/proxies?id=uuid&force=1` | Dzēst piespiedu kārtā | | `POST` | `/api/v1/management/proxies/bulk-assign` | Veikt masveida piešķiršanu | | `GET` | `/api/v1/management/proxies/assignments` | Uzskaitīt piešķīrumus | | `GET` | `/api/v1/management/proxies/health` | Starpniekserveru darbspējas statistika | ### Tuneļu API Lai padarītu savu OmniRoute instanci pieejamu publiskajā internetā (Cloudflare/ngrok/Tailscale), nevis maršrutētu izejošo datplūsmu caur starpniekserveri, skatiet [TUNNELS_GUIDE.md](./TUNNELS_GUIDE.md). Tuneļa REST API atrodas zem `/api/tunnels/{cloudflared,ngrok,tailscale}/*` un nav atkarīga no iepriekš dokumentētās izejošā starpniekservera ķēdes. ### 1proxy API | Metode | Galapunkts | Apraksts | | -------- | -------------------------------------- | ------------------------------------------- | | `GET` | `/api/settings/oneproxy` | Uzskaitīt 1proxy starpniekserverus | | `GET` | `/api/settings/oneproxy?action=stats` | Iegūt statistiku un sinhronizācijas statusu | | `GET` | `/api/settings/oneproxy?action=status` | Iegūt tikai sinhronizācijas statusu | | `POST` | `/api/settings/oneproxy` | Aktivizēt sinhronizāciju | | `POST` | `/api/settings/oneproxy/rotate` | Pārslēgties uz nākamo starpniekserveri | | `DELETE` | `/api/settings/oneproxy?id=uuid` | Dzēst vienu | | `DELETE` | `/api/settings/oneproxy?clearAll=1` | Notīrīt visu | ### Augšupstraumes starpniekservera API | Metode | Galapunkts | Apraksts | | -------- | --------------------------------- | ---------------------------------------------------- | | `GET` | `/api/upstream-proxy/:providerId` | Iegūt augšupstraumes starpniekservera konfigurāciju | | `PUT` | `/api/upstream-proxy/:providerId` | Iestatīt augšupstraumes starpniekservera režīmu | | `DELETE` | `/api/upstream-proxy/:providerId` | Noņemt augšupstraumes starpniekservera konfigurāciju | --- ## Vides mainīgie | Mainīgais | Noklusējums | Apraksts | | --------------------- | ----------- | -------------------------------------------------------------------------------------- | | `ENABLE_SOCKS5_PROXY` | `true` | Iespējot SOCKS5 starpniekservera atbalstu (noklusējums `.env.example` failā ir `true`) | --- ## Problēmu novēršana ### "SOCKS5 starpniekserveris ir atspējots" Iestatiet `ENABLE_SOCKS5_PROXY=true` savā `.env` failā un restartējiet. ### "socket hang up" kļūdas, izmantojot starpniekserveri Tas ir normāli lētiem starpniekserveriem, kuri pārtrauc neaktīvus savienojumus. OmniRoute to jau apstrādā šādi: - Atspējo savienojuma uzturēšanu starpniekservera savienojumiem (`keepAliveTimeout: 1`) - Atspējo konveijerizāciju (`pipelining: 0`) - Kešatmiņā saglabā dispečerus, lai izvairītos no atkārtotas savienojuma izveides Ja problēma joprojām pastāv, izmēģiniet citu starpniekserveri vai izmantojiet 1proxy rotācijas funkciju. ### "unsupported_country_region_territory" OAuth laikā Pārliecinieties, ka starpniekserveris ir konfigurēts **pirms** OAuth plūsmas sākšanas. OmniRoute maršrutē OAuth pilnvaras apmaiņu caur konfigurēto starpniekserveri. Vispirms iestatiet globālu vai nodrošinātāja līmeņa starpniekserveri un pēc tam izveidojiet savienojumu. ### Starpniekserveris netiek izmantots Pārbaudiet noteikšanas secību: 1. Pārbaudiet ar `GET /api/settings/proxy?resolve=your-connection-id` 2. Pārbaudiet, vai starpniekservera `status` ir `active` (nevis `inactive`) 3. Pārliecinieties, ka starpniekservera piešķiršanas tvērums atbilst jūsu savienojumam ### 1proxy sinhronizācija neizdodas Pārbaudiet sinhronizācijas statusu: ```bash curl "http://localhost:20128/api/settings/oneproxy?action=status" ``` Ja `consecutiveFailures >= 5`, ir nostrādājis ķēdes pārtraucējs. Restartējiet serveri, lai to atiestatītu, vai gaidiet manuālu atiestatīšanu. --- ## Datu bāzes shēma ### Tabula `proxy_registry` ```sql CREATE TABLE proxy_registry ( id TEXT PRIMARY KEY, name TEXT NOT NULL, type TEXT NOT NULL DEFAULT 'http', host TEXT NOT NULL, port INTEGER NOT NULL, username TEXT DEFAULT '', password TEXT DEFAULT '', region TEXT, notes TEXT, status TEXT DEFAULT 'active', source TEXT NOT NULL DEFAULT 'manual', -- 'manual' vai 'oneproxy' quality_score INTEGER, -- 0–100 (tikai 1proxy) latency_ms INTEGER, -- milisekundes (tikai 1proxy) anonymity TEXT, -- caurspīdīgs/anonīms/elitārs google_access INTEGER DEFAULT 0, -- vai var piekļūt Google? (1proxy) last_validated TEXT, -- ISO laikspiedols (1proxy) country_code TEXT, -- ISO divu burtu kods (1proxy) created_at TEXT NOT NULL, updated_at TEXT NOT NULL ); ``` ### Tabula `proxy_assignments` ```sql CREATE TABLE proxy_assignments ( id INTEGER PRIMARY KEY AUTOINCREMENT, proxy_id TEXT NOT NULL REFERENCES proxy_registry(id), scope TEXT NOT NULL, -- 'global', 'provider', 'account', 'combo' scope_id TEXT, -- nodrošinātāja ID, savienojuma ID vai kombinācijas ID created_at TEXT NOT NULL, updated_at TEXT NOT NULL, UNIQUE(scope, scope_id) ); ``` --- ## Starpniekservera darbspējas pārbaude (v3.8.16+) OmniRoute **starpniekservera ātrās atteices** mehānisms (`src/lib/proxyHealth.ts`) nosaka nedarbojošos starpniekserverus mazāk nekā 2 sekundēs, izmantojot ātru TCP savienojuma pārbaudi, un pēc tam **saglabā rezultātu kešatmiņā**, lai izvairītos no papildu slodzes katram pieprasījumam. ### Darbības princips ``` Pieprasījums ──▶ ProxyHealthCache.get(url) │ ├─ Trāpījums kešatmiņā + aktuāls? ──▶ atgriezt kešatmiņā saglabāto statusu │ └─ Nav kešatmiņā / novecojis? ──▶ TCP savienojums ar host:port (taimauts: FAST_FAIL_TIMEOUT_MS) ──▶ saglabāt kešatmiņā uz HEALTH_CACHE_TTL_MS ──▶ atgriezt rezultātu ``` Bez šī mehānisma nedarbojošs starpniekserveris bloķētu katru pieprasījumu uz visu `PROXY_TIMEOUT_MS` laiku (noklusējums — 30 s), pirms rastos kļūme. ### Pielāgojami vides mainīgie | Mainīgais | Noklusējums | Nolūks | | ---------------------------- | ----------- | ---------------------------------------------------- | | `PROXY_FAST_FAIL_TIMEOUT_MS` | `2000` | TCP savienojuma taimauts katrai darbspējas pārbaudei | | `PROXY_HEALTH_CACHE_TTL_MS` | `30000` | Cik ilgi darbspējas rezultāts tiek glabāts kešatmiņā | **Ieteicamās vērtības:** | Scenārijs | Ātrās atteices taimauts | Kešatmiņas TTL | Pamatojums | | ---------------------------------- | ----------------------- | -------------- | ----------------------------------------------------------------------------------------- | | Augstas caurlaidspējas API vārteja | 1500ms | 60000ms | Agresīva ātrā atteice, ilgāka glabāšana kešatmiņā, lai samazinātu pārbaužu skaitu | | Ģeogrāfiski izkliedēti mezgli | 3000ms | 15000ms | Lēnākiem tīkliem nepieciešams vairāk laika; īsāka glabāšana kešatmiņā ātrai kļūmjpārlēcei | | Izstrāde / testēšana | 1000ms | 10000ms | Ātra iterācija ar lokālajiem starpniekserveriem | | Maskēšanās / pretatklāšana | 2500ms | 45000ms | Izvairīšanās no biežas zondēšanas, kas varētu aktivizēt ātruma ierobežojumus | ### Starpniekservera darbspējas pārbaude ```ts import { getAllProxyHealthStatuses, invalidateProxyHealth } from "omniroute/proxyHealth"; const statuses = getAllProxyHealthStatuses(); for (const s of statuses) { console.log(`${s.proxyUrl} → healthy=${s.healthy}, stale=${s.stale}`); } // Piespiedu kārtā atkārtoti pārbaudīt konkrētu starpniekserveri invalidateProxyHealth("http://user:pass@203.0.113.7:8080"); ``` Karodziņš `stale` ir `true`, ja kešatmiņas ieraksts ir pārsniedzis `HEALTH_CACHE_TTL_MS` un nākamais pieprasījums aktivizēs jaunu pārbaudi. ### Noklusējumi katram starpniekservera tipam Darbspējas pārbaude izmanto saprātīgas noklusējuma vērtības atkarībā no URL shēmas: | Shēma | Noklusējuma ports | | -------------------------- | ----------------- | | `http://` | 8080 | | `https://` | 443 | | `socks5://` / `socks5h://` | 1080 | Pielāgotiem portiem URL adresē (`http://host:9999`) vienmēr ir prioritāte pār shēmas noklusējuma vērtību. --- ## Starpniekserveru analītika un novērojamība OmniRoute uzskaita katra starpniekservera lietojumu, lai palīdzētu operatoriem diagnosticēt maršrutēšanas modeļus, latentuma lēcienus un atkārtotas kļūmes. ### Kas tiek uzskaitīts Katram pieprasījumam, kas tiek nosūtīts caur konfigurētu starpniekserveri, OmniRoute reģistrē: | Metrika | Apraksts | | ------------ | -------------------------------------------------------------------- | | `proxy_url` | Pilns starpniekservera URL (autentifikācijas dati maskēti) | | `provider` | Augšupstraumes nodrošinātāja ID (openai, anthropic u.c.) | | `latency_ms` | Kopējais turp-atpakaļ laiks, tostarp starpniekservera rokasspiediens | | `connect_ms` | Tikai TCP savienojuma izveides laiks | | `status` | Augšupstraumes HTTP statusa kods | | `error` | Kļūdas klase, ja pieprasījums neizdevās | | `timestamp` | ISO 8601 UTC | ### Piekļuve datiem ```bash # Nesenie starpniekserveru notikumi curl -H "Authorization: Bearer $OMNIROUTE_KEY" \ "http://localhost:20128/api/usage/proxy-logs?limit=100" ``` Faktiskais galapunkts ir `/api/usage/proxy-logs` (skatiet `src/app/api/usage/proxy-logs/route.ts`). Šis galapunkts atbalsta: - `GET /api/usage/proxy-logs` — izgūt starpniekserveru žurnālus - `DELETE /api/usage/proxy-logs` — notīrīt visus starpniekserveru žurnālus Ja nepieciešams, apkopoto statistiku var pieprasīt tieši no tabulas `proxy_logs`, izmantojot SQL. Informācijas paneļa lietotāja saskarne var piedāvāt apkopotus skatus. ### Biežākie scenāriji **Noteikt nestabilu starpniekserveri** (pārmaiņus veiksmīgs/neveiksmīgs): ```sql SELECT proxy_url, COUNT(*) AS total, SUM(CASE WHEN status >= 500 THEN 1 ELSE 0 END) AS errors, ROUND(100.0 * SUM(CASE WHEN status >= 500 THEN 1 ELSE 0 END) / COUNT(*), 1) AS error_pct FROM proxy_logs WHERE timestamp > datetime('now', '-1 hour') GROUP BY proxy_url HAVING error_pct > 5 ORDER BY error_pct DESC; ``` **Atrast lēnus starpniekserverus** (p95 latentums > 2 s): ```sql WITH ranked AS ( SELECT proxy_url, latency_ms, PERCENT_RANK() OVER (PARTITION BY proxy_url ORDER BY latency_ms) AS pct FROM proxy_logs WHERE timestamp > datetime('now', '-24 hour') ) SELECT proxy_url, latency_ms FROM ranked WHERE pct >= 0.95 ORDER BY latency_ms DESC; ``` --- ## Rotācijas stratēģijas lēmumu koks Ja vienam tvērumam ir piešķirti vairāki starpniekserveri, OmniRoute izmanto **rotācijas stratēģiju**, lai izvēlētos, kuru no tiem izmantot katram pieprasījumam. Stratēģija tiek konfigurēta tvēruma līmenī (globāli, katram nodrošinātājam, katram kontam vai katrai kombinācijai). ### Pieejamās stratēģijas | Stratēģija | Kad izmantot | Kompromiss | | ----------------------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------ | | `quality` (noklusējums) | Produkcijas vidē ar dažādas kvalitātes starpniekserveriem | Dod priekšroku augstu novērtētiem starpniekserveriem; zemu novērtētie var netikt izmantoti | | `random` | Slodzes sadalei, privātumam | Vienmērīga sadale; ignorē kvalitātes signālus | | `sequential` | Atkļūdošanai, deterministiskai testēšanai | Secīgi cikliski izmanto starpniekserverus; darbību ir viegli izprast | ### Lēmumu koks ``` Vai starpniekserveriem ir kvalitātes vērtējumi? │ ┌───────────┴───────────┐ │ │ JĀ NĒ │ │ Vai visu starpniekserveru │ kvalitāte ir aptuveni │ vienāda? │ │ │ ┌────┴────┐ │ │ │ │ JĀ NĒ Izmantojiet │ │ `random` │ │ (vienmērīga sadale │ │ laika gaitā uzkrāj │ │ kvalitātes datus) │ │ │ Izmantojiet `quality` │ (vispiemērotākā │ dažādai kvalitātei) │ Izmantojiet `random` (sadaliet slodzi vienmērīgi) ``` ## Automātiska nedarbojošos paša starpniekserveru izslēgšana 1proxy tirdzniecības vietas pūls jau pats automātiski pazemina nedarbojošos starpniekserveru prioritāti (skatiet [Starpniekserveru kvalitātes rādītāji](#proxy-quality-scores)). Jūsu reģistram pievienotajiem starpniekserveriem fona darbspējas plānotājs (`src/lib/proxyHealth/scheduler.ts`) nodrošina tādu pašu darbību — „automātiski izslēgt nedarbojošos dalībnieku no ķēdes”, neko nedzēšot: ```bash # .env — programmiski atspējot starpniekserveri pēc 3 secīgām neveiksmīgām pārbaudēm un # automātiski to atkārtoti iespējot, tiklīdz tas atkal sāk atbildēt uz pārbaudēm. PROXY_AUTO_DISABLE=true PROXY_AUTO_REMOVE_AFTER=3 ``` Kā tas darbojas vairāku starpniekserveru ķēdē: 1. Plānotājs pārbauda katru reģistrēto starpniekserveri ik pēc `PROXY_HEALTH_INTERVAL_MS` (pēc noklusējuma — 10 min.; minimums — 1 min.). 2. Pēc `PROXY_AUTO_REMOVE_AFTER` secīgām **pārliecinošām** neveiksmēm (reālas savienojuma kļūmes — noildze vai paša pārbaudes mērķa 5xx atbilde nekad netiek ieskaitīta; skatiet [Starpniekserveru darbspējas pārbaude](#proxy-health-checking-v3816)) starpniekservera `status` tiek iestatīts uz `dead`. 3. `dead` ir viens no statusiem, kurus izslēdz pūla/rotācijas atrisināšanā izmantotais aktīvo statusu filtrs, tādēļ tvēruma rotācija (secīga / nejauša / piesaistīta / pēc latentuma — skatiet [Rotācijas stratēģijas lēmumu koks](#rotation-strategy-decision-tree)) nekavējoties pārtrauc piešķirt šo starpniekserveri jauniem pieprasījumiem. Citi pūla starpniekserveri netiek ietekmēti, un viss pūls nekad nemanāmi nepārslēdzas uz tiešu savienojumu — skatiet [4 līmeņu starpniekserveru sistēmas](#4-level-proxy-system) kļūmes gadījumā savienojumu bloķējošo aizsardzību. 4. Plānotājs turpina pārbaudīt `dead` starpniekserverus ar to pašu intervālu. Nākamā veiksmīgā pārbaude maina `status` atpakaļ uz `active`, un starpniekserveris atgriežas rotācijā — manuāla atkārtota pievienošana nav nepieciešama. Šī funkcija ir apzināti **brīvprātīgi iespējojama un nedestruktīva**: pēc noklusējuma plānotājs tikai uzskaita un reģistrē žurnālā neveiksmes (skatiet politiku C failā `decision.ts`), un `PROXY_AUTO_DISABLE` nekad nedzēš rindu — tam ir paredzēts atsevišķais, agresīvākais `PROXY_AUTO_REMOVE` karodziņš. Ja abi ir iestatīti uz `true`, prioritāte ir `PROXY_AUTO_REMOVE` (starpniekserverim, kuru tūlīt dzēsīs, starpposmā nav jēgas to programmiski atspējot). Pilnu mainīgo sarakstu skatiet [Vides konfigurācijas](../reference/ENVIRONMENT.md) uzziņā. --- > 📖 **Saistītā dokumentācija:** > > - [Lietotāja rokasgrāmata](../guides/USER_GUIDE.md) — Vispārīga iestatīšana un konfigurēšana > - [API uzziņa](../reference/API_REFERENCE.md) — Pilna API dokumentācija > - [Vides konfigurācija](../reference/ENVIRONMENT.md) — Visi vides mainīgie