Entwickler

Gehostete Proxys

10 Min. LesezeitAls Markdown ansehen ↗

Ein gehosteter Proxy leitet den Datenverkehr einer App über URnetwork, wenn die App nur eine Proxy-Einstellung annimmt: curl, ein Skript, ein Scraper oder eine Smartphone-App wie Shadowrocket. Diese Anleitung zeigt, wo du die URL eines Proxys auf ur.io findest und wie du sie in gängigen Clients einträgst.

Ein Hinweis zum Geltungsbereich: Ein gehosteter Proxy hat keine versiegelte Sitzung. Dein Client-Gerät läuft beim Operator, der das Protokoll des Proxys in das des Netzwerks übersetzt. Zwischen dem Operator und deinem Datenverkehr steht das protokollfreie Design des Proxys, das im Bedrohungsmodell beschrieben ist, keine Versiegelung. Provider erfahren weiterhin nicht, wer du bist. Wo eine App URnetwork selbst ausführen kann, sind die Apps und das SDK der privatere Weg.

Zwei Arten von Proxys

ur.io erstellt zwei Arten von Proxys, die Clients von Drittanbietern nutzen können:

HTTPS-ProxySOCKS5-Proxy
TarifJeder TarifUR Pro
URL auf ur.iohttps://<token>.<host>:<port>socks5h://<token>:x@<host>:<port>
Wo das Token stehtIm Hostnamen, ohne Benutzername oder PasswortIm Benutzernamen; das Passwort wird nie geprüft
Der Client muss unterstützenHTTPS-Proxys, die TLS zum Proxy verwendenSOCKS5 mit Benutzername und Passwort
ÜberträgtWebverkehr: HTTP, und HTTPS über CONNECTTCP-Verbindungen, und UDP über UDP associate

Der SOCKS5-Proxy unterstützt kein BIND und verwirft UDP-Datagramme über 2 KiB. ur.io erstellt mit UR Pro außerdem WireGuard-Profile. Importiere die heruntergeladene .conf-Datei in eine WireGuard-App; der Rest dieser Anleitung behandelt HTTPS und SOCKS5.

Die URL eines Proxys holen

  1. Melde dich auf ur.io an und öffne Proxys (Proxies) (ur.io/app/proxies).
  2. Wähle Proxy erstellen (Create proxy).
  3. Wähle den Proxy-Typ: HTTPS, SOCKS5 oder WireGuard. SOCKS5 und WireGuard tragen ein Pro-Abzeichen. Im Gratis-Tarif bietet die Erstellen-Schaltfläche zuerst Pro an.
  4. Wähle einen Standort. Suche nach einem Land, einer Region oder einer Stadt, oder behalte Bestmöglich (Best available), das jeden Provider im Netzwerk nutzt. Standorte zeigen an, wie viele Provider sie haben.
  5. Wähle Create HTTPS proxy oder Create SOCKS5 proxy. Der neue Proxy erscheint mit seiner URL.

Jeder HTTPS- und SOCKS5-Proxy in der Liste hat URL kopieren (Copy URL), das die ganze URL mit ihrem Token kopiert, und ×, das den Proxy entfernt.

Die URL lesen

Text
https://<token>.<host>:<port>
socks5h://<token>:x@<host>:<port>
  • <token> ist das Token des Proxys, eine lange Folge aus Buchstaben und Ziffern. Es ist die einzige Zugangsberechtigung des Proxys, und Groß- und Kleinschreibung spielt keine Rolle.
  • In der HTTPS-URL ist das Token das erste Label des Hostnamens. Trage <token>.<host> als Proxy-Host ein, genau so, wie ur.io es anzeigt: Das Token im Namen ist das, was dich anmeldet.
  • In der SOCKS5-URL steht das Token zwischen socks5h:// und :x@. <host> folgt auf das @, und <port> folgt auf das letzte :.
  • Das x ist ein Platzhalter-Passwort. Der SOCKS5-Proxy prüft das Passwort nie, daher funktioniert jeder Wert. Manche Clients senden den Benutzernamen nur, wenn auch ein Passwort gesetzt ist, darunter Pythons requests, und für sie trägt die URL von ur.io das x. Fragt ein Client Benutzername und Passwort getrennt ab, gib ihm das Token und ein beliebiges Passwort.
  • Behalte das h in socks5h. Damit löst der Proxy die Hostnamen auf, sodass die Namensauflösung über den Provider erfolgt statt von deinem Rechner aus. Mit einfachem socks5 löst curl Namen zuerst auf deinem Rechner auf.

Behandle die URL wie ein Passwort. Wer sie hat, kann den Proxy nutzen, und der Datenverkehr des Proxys verbraucht das Datenvolumen deines Kontos. Wenn eine URL nach außen gelangt, entferne diesen Proxy auf ur.io; dann nimmt der Proxy sein Token nicht mehr an. Erstelle anschließend einen neuen.

Mit curl prüfen, ob es funktioniert

Shell
# HTTPS proxy, on every plan
curl -x 'https://<token>.<host>:<port>' https://api.bringyour.com/my-ip-info

# SOCKS5 proxy, on UR Pro
curl -x 'socks5h://<token>:x@<host>:<port>' https://api.bringyour.com/my-ip-info

/my-ip-info antwortet mit der Adresse, von der deine Anfrage kam, und mit dem Ort dieser Adresse. Über den Proxy ist das die Adresse eines Providers an dem Standort, den du gewählt hast. HTTPS-Proxys brauchen curl 7.52 oder neuer.

Browser

Der einfachste Weg, einen Browser über einen Proxy zu leiten, ist die URnetwork-Erweiterung, die ihren eigenen gehosteten Proxy erstellt und verwaltet. Siehe Erste Schritte in deinem Browser.

Willst du stattdessen einen Proxy verwenden, den du auf ur.io erstellt hast, nimm seine HTTPS-URL. Chrome kann überhaupt keinen SOCKS5-Benutzernamen senden. Die Proxy-Einstellungen des Betriebssystems und die manuellen Proxy-Einstellungen von Firefox können einen HTTPS-Proxy in der Regel nicht beschreiben.

Chrome, Edge und andere Chromium-Browser. Starte den Browser mit dem Proxy auf der Befehlszeile. Durch das separate Profilverzeichnis wirkt das Flag auch dann, wenn dein gewohntes Browserfenster geöffnet ist:

Shell
# macOS
open -na "Google Chrome" --args --user-data-dir="$HOME/urnetwork-proxy-profile" --proxy-server="https://<token>.<host>:<port>"

# Linux
google-chrome --user-data-dir="$HOME/urnetwork-proxy-profile" --proxy-server="https://<token>.<host>:<port>"

# Windows, in Command Prompt (Edge: msedge instead of chrome)
start chrome --user-data-dir="%USERPROFILE%\urnetwork-proxy-profile" --proxy-server="https://<token>.<host>:<port>"

Firefox. Die manuellen Einstellungen von Firefox haben kein Benutzernamensfeld für SOCKS und keinen HTTPS-Proxy-Typ, also verwende eine einzeilige Datei zur automatischen Proxy-Konfiguration (PAC). Speichere dies als urnetwork.pac:

js
function FindProxyForURL(url, host) {
  return "HTTPS <token>.<host>:<port>";
}

Öffne dann Einstellungen → Allgemein → Verbindungs-Einstellungen → Einstellungen… (Settings → General → Network Settings → Settings…), wähle Automatische Proxy-Konfigurations-Adresse (Automatic proxy configuration URL), gib die Adresse der Datei ein, etwa file:///Users/you/urnetwork.pac oder file:///C:/Users/you/urnetwork.pac, und wähle OK. Zum Beenden wähle im selben Dialog Kein Proxy (No proxy).

Smartphone-Apps: Shadowrocket und andere

Proxy-Apps für Smartphones, etwa Shadowrocket unter iOS, nehmen einen SOCKS5-Server als einige wenige Felder entgegen. Erstelle auf ur.io einen SOCKS5-Proxy (UR Pro) und kopiere seine URL. Füge in der App einen Server hinzu und fülle ihn anhand der URL aus:

FeldWert
Typ (Type)SOCKS5
Adresse, Server oder Host (Address)<host>: der Teil zwischen @ und dem letzten :
Port (Port)<port>: die Ziffern nach dem letzten :
Benutzer oder Benutzername (User)<token>: der Teil zwischen socks5h:// und :x@
Passwort (Password)Ein beliebiger Wert, etwa x

Speichere den Server, wähle ihn aus und schalte die Verbindung ein. Für ein ganzes Smartphone braucht die URnetwork-App für iOS oder Android keinen Proxy und ist der privatere Weg.

Python

requests nimmt beide Proxys an. SOCKS5 braucht das Extra socks (pip install "requests[socks]"), und seine URL braucht ein Platzhalter-Passwort:

python
import requests

proxy = "https://<token>.<host>:<port>"          # HTTPS proxy, every plan
# proxy = "socks5h://<token>:x@<host>:<port>"    # SOCKS5 proxy, UR Pro

r = requests.get(
    "https://api.bringyour.com/my-ip-info",
    proxies={"http": proxy, "https": proxy},
    timeout=30,
)
print(r.json()["info"]["ip"])

httpx nimmt dieselben URLs an; SOCKS5 braucht pip install "httpx[socks]". aiohttp nimmt den HTTPS-Proxy an:

python
import asyncio

import aiohttp
import httpx

with httpx.Client(proxy="https://<token>.<host>:<port>") as client:
    print(client.get("https://api.bringyour.com/my-ip-info").json())


async def main():
    async with aiohttp.ClientSession() as session:
        async with session.get("https://api.bringyour.com/my-ip-info", proxy="https://<token>.<host>:<port>") as r:
            print(await r.json())

asyncio.run(main())

Der Standard-Download-Handler von Scrapy kann https://-Seiten nicht über einen HTTPS-Proxy abrufen: Er bricht mit „HTTPS proxies for HTTPS destinations are not supported“ ab. Rufe diese Seiten stattdessen mit einer der Bibliotheken oben ab.

Node.js

Für fetch gib undicis ProxyAgent den HTTPS-Proxy:

js
import { fetch, ProxyAgent } from "undici";

const dispatcher = new ProxyAgent("https://<token>.<host>:<port>");
const res = await fetch("https://api.bringyour.com/my-ip-info", { dispatcher });
console.log(await res.json());

Für node:https und Bibliotheken, die einen Agent annehmen, verwende https-proxy-agent, oder für SOCKS5 socks-proxy-agent:

js
import https from "node:https";
import { HttpsProxyAgent } from "https-proxy-agent";
// import { SocksProxyAgent } from "socks-proxy-agent";

const agent = new HttpsProxyAgent("https://<token>.<host>:<port>");
// const agent = new SocksProxyAgent("socks5h://<token>:x@<host>:<port>");

https.get("https://api.bringyour.com/my-ip-info", { agent }, (res) => res.pipe(process.stdout));

Andere Programme: proxychains

Unter Linux leitet proxychains-ng die Verbindungen eines Programms über einen SOCKS5-Proxy (UR Pro), auch wenn das Programm keine Proxy-Einstellung hat. Es funktioniert, indem es eine Bibliothek vorlädt, und erreicht daher keine statisch gelinkten Programme, zu denen die meisten Go-Programme gehören. Sein erster Proxy muss eine IP-Adresse sein, kein Hostname, also ermittle die Adresse zuerst:

Shell
dig +short <host>

Speichere eine Konfigurationsdatei, urnetwork.conf, mit dieser Adresse:

Text
strict_chain
proxy_dns
[ProxyList]
socks5 <ip> <port> <token> x

Starte dann Programme darüber:

Shell
proxychains4 -f urnetwork.conf curl https://api.bringyour.com/my-ip-info

proxy_dns lässt proxychains Namen über den Proxy auflösen. Wenn Verbindungen später nicht mehr funktionieren, ermittle die Adresse erneut.

Grenzen

Gratis-TarifUR Pro
Aktive Proxys51.000
Neue Proxys pro Minute520

Proxys, die die Browser-Erweiterung erstellt, zählen ebenfalls. Eine Grenze stoppt nur neue Proxys: Proxys, die du hast, funktionieren weiter, und wenn du einen entfernst, wird Platz für einen anderen. Ein Proxy bleibt, bis du ihn entfernst; einer, der etwa 30 Tage lang nicht benutzt wurde, wird für dich entfernt.

Eindeutige Ausgangs-IPs

Ein gehosteter Proxy verteilt seine Verbindungen meist auf mehrere Provider, daher können zwei deiner Proxys über dieselbe Adresse austreten. Mit einer eindeutigen Ausgangs-IP, mit UR Pro, tritt jeder Proxy über einen einzigen Provider aus, dessen Adresse keiner deiner anderen Proxys verwendet. Ein Proxy behält seinen Exit, solange dieser Provider gesund bleibt.

  • Einschalten: Setze auf der Seite „Proxys“ beim Erstellen eines Proxys ein Häkchen bei Eindeutige Ausgangs-IP (Unique exit IP). Stelle Anzahl der Proxys (Number of proxies) ein, um bis zu 20 auf einmal zu erstellen. In der API fügst du "unique_exit": true zur proxy_config hinzu.
  • Grenzen: Proxys mit eindeutigem Exit zählen zu denselben Grenzen wie jeder andere Proxy, 1.000 aktive und 20 neue pro Minute.
  • Was du siehst: Jeder Proxy zeigt, wo sein Exit ist (Stadt, Region und Land) und seit wann. Die IP-Adresse des Exits wird nicht angezeigt. Um sie zu sehen, rufe über den Proxy eine IP-Prüfung ab, etwa mit den curl-Befehlen oben.
  • Wenn der Provider ausfällt: Der Proxy bekommt automatisch einen neuen eindeutigen Exit und zeigt währenddessen Ausgang wird ersetzt… (Replacing exit…) an. Ersetzungen sind pro Stunde begrenzt; über der Grenze wartet ein Proxy und versucht es später erneut. In der API lässt "unique_exit_replace": "manual" einen Proxy stattdessen auf dich warten: Er zeigt Ausgang verloren (Exit lost) an, bis du ihn wechselst.
  • Ausgang wechseln (Rotate exit): gibt dem Proxy einen neuen eindeutigen Exit. Der Exit eines Proxys kann einmal pro Minute und bis zu 60-mal pro Tag gewechselt werden. Ist am Standort kein anderer eindeutiger Exit frei, behält der Proxy den, den er hat.
  • Kein eindeutiger Exit verfügbar: Wenn jeder gesunde Exit am Standort bereits von deinen anderen Proxys genutzt wird, sagt ur.io das und erstellt nichts; der Versuch zählt nicht zu deinen Grenzen. Wähle einen anderen Standort oder Bestmöglich.

Fehlerbehebung

ur.io weigert sich, einen Proxy zu erstellen. Es zeigt den Grund an (die Meldungen sind auf Englisch). Im Gratis-Tarif:

  • „Your plan's limit of 5 active proxies is reached. Remove a proxy to create another, or upgrade to UR Pro for more.“ (Die Grenze deines Tarifs von 5 aktiven Proxys ist erreicht.) Entferne Proxys, die du nicht mehr nutzt, oder steige auf.
  • „Your plan allows 5 new proxies a minute. Try again in a minute, or upgrade to UR Pro for more.“ (Dein Tarif erlaubt 5 neue Proxys pro Minute.) Warte eine Minute und versuche es dann erneut.

Mit UR Pro nennen dieselben Meldungen die Grenzen von Pro und lassen das Upgrade weg.

Der SOCKS5-Proxy lehnt die Anmeldung ab. curl meldet eine dieser Nachrichten, und andere Clients formulieren sie auf ihre Weise:

  • User was rejected by the SOCKS5 server (1 1). Das Token ist falsch oder abgeschnitten, oder der Proxy wurde entfernt. Kopiere die URL erneut von ur.io.
  • No authentication method was acceptable. Der Client hat keinen Benutzernamen gesendet. Setze den Benutzernamen auf das Token, mit einem Platzhalter-Passwort wie x.

Der HTTPS-Proxy lehnt die Verbindung ab. curl meldet CONNECT tunnel failed, response N, wobei N Folgendes ist:

  • 407: Der Proxy hat kein gültiges Token gefunden. Kopiere die URL erneut von ur.io und trage das ganze <token>.<host> als Proxy-Host ein.
  • 502: Den Proxy gibt es nicht mehr, zum Beispiel weil du ihn entfernt hast, oder das Ziel war nicht erreichbar.
  • 403: Die Adresse des Aufrufers liegt außerhalb der IP-Sperre des Proxys. Nur Proxys, die über die API mit einer IP-Sperre erstellt wurden, haben eine.

Ein Client, der eine leere Antwort bekommt oder dessen Verbindung sofort geschlossen wird, spricht vermutlich einfaches HTTP mit dem Proxy. Verwende die https://-URL in einem Client, der HTTPS-Proxys unterstützt.

Seiten laden langsam oder laufen in ein Timeout. Probiere Bestmöglich oder einen Standort mit mehr Providern. Der Datenverkehr des Proxys verbraucht das Datenvolumen deines Kontos, daher kann ein Konto ohne verbleibende Daten keine neuen Verbindungen öffnen.

Die Ausgangs-IP ändert sich. Wie in den Apps verteilt ein gehosteter Proxy seine Verbindungen auf mehrere Provider an seinem Standort. Die Adresse, die eine Website sieht, kann sich von einer Verbindung zur nächsten ändern. Um pro Proxy eine Ausgangs-IP zu halten, erstelle ihn mit einer eindeutigen Ausgangs-IP mit UR Pro.

Der Proxy ist am falschen Ort. Bestmöglich kann in jedem Land austreten. Wähle beim Erstellen des Proxys ein Land, eine Region oder eine Stadt. ur.io kann einen vorhandenen Proxy nicht verschieben: Erstelle einen neuen am gewünschten Ort und entferne dann den alten.

Mit der API automatisieren

Die Seite „Proxys“ ruft die Operator-API auf: POST /network/auth-client mit einer proxy_config, in der initial_device_state.location den Standort wählt. Die proxy_config_result der Antwort enthält https_proxy_url, socks_proxy_url und auth_token. Die socks_proxy_url der API hat keinen Benutzernamen: Füge auth_token als Benutzernamen hinzu, wie es ur.io tut. Eine lock_ip_list aus IP-Adressen oder Subnetzen begrenzt, wer den Proxy nutzen darf. Die Grenzen oben gelten auch für die API.

Für eine eindeutige Ausgangs-IP füge unique_exit zur proxy_config hinzu:

JSON
{
  "proxy_config": {
    "unique_exit": true,
    "initial_device_state": {
      "location": { "connect_location_id": { "best_available": true } }
    }
  }
}

Füge "unique_exit_replace": "manual" hinzu, damit ein Proxy bei einem Ausfall seines Providers auf seinem Exit bleibt, bis du ihn wechselst; der Standard ist "auto".

Die proxy_config_result.exit der Antwort nennt exit_id, country_code, region, city, exit_since, state (assigned, replacing oder no_supply) des Exits, state_reason, wenn es einen gibt, und replace_mode. GET /network/proxies meldet dasselbe als exit jedes Proxys, neben seinem proxy_client. Eine Ablehnung mit no_unique_supply bedeutet, dass der Standort keinen Exit mehr hat, den deine Proxys nicht schon nutzen. POST /network/proxy/rotate-exit mit der client_id des Proxys verschiebt ihn auf einen neuen eindeutigen Exit und antwortet mit dem neuen exit; über der Wechselgrenze lehnt es mit rate_limited ab, oder mit no_unique_supply, wenn kein anderer Exit frei ist. Es nimmt die Anmeldung deines Netzwerks oder einen API-Schlüssel an.