# Die Browser-Erweiterung: die Tour

Die Erweiterung ist URnetwork im Browser, und die ur.io-Web-App ist ihre
Steuerungsebene: ein Produkt, zwei Hälften. Diese Seite ist der Tiefgang:
die Proxy-Maschinerie in jedem Browser, die Steuerelemente mit ihren
ausgelieferten Standardwerten, was der Kill Switch verspricht und was
nicht, und was du prüfst, wenn etwas kaputtgeht. Für das Netzwerk dahinter,
wer die Provider sind und was jede Partei sehen kann, lies den
[Überblick](/docs/overview). Für Store-Links, Anmeldung und erstes
Verbinden starte mit
[Erste Schritte im Browser](/docs/getting-started-browser).

Die Einordnung, die du immer behalten solltest: **Das ist ein
Browser-Proxy, kein VPN.** Ein Proxy ist ein Mittelsmann, der Websites für
den Browser holt, sodass Websites seine Adresse sehen statt deiner. Die
Erweiterung konfiguriert die eigenen Proxy-Einstellungen des Browsers — sie
regiert also genau, was dieser Browser sendet, nicht mehr. Abgedeckt: jeder
Tab und jedes Fenster dieses Browsers, Inkognito auch, auf Chromium immer
und auf Firefox, sobald du es in privaten Fenstern erlaubst. Nicht
abgedeckt: andere Browser, deine Mail-App, System-Updates, alles andere —
ungeschützt und unversehrt gleichermaßen. Installier sie pro Browser; die
Abdeckung des ganzen Geräts ist die Aufgabe der URnetwork-Apps (Android,
iOS, macOS, Windows, Linux): gleiches Konto, gleicher Kill Switch, eine
Ebene tiefer.

![Das Popup der Erweiterung](/docs-assets/connect-extension.png)

## Einstellungen auf einen Blick

Die Erweiterung hält ihre Fläche absichtlich klein. Zwei Steuerelemente,
beide im Popup:

| Einstellung | Standard | Wirkung | Hauptkosten |
|---|---|---|---|
| Kill Switch | An | blockiert Browser-Datenverkehr, wenn der Proxy abreißt, statt auf deine direkte Verbindung zurückzufallen | Tabs werfen Fehler während eines Ausfalls |
| Geolokalisierungs-Override (Geolocation override) | Aus | die Geolocation-API des Browsers meldet deine Exit-Stadt statt deiner echten Position | Websites, denen du deinen echten Standort geben willst, brauchen es aus; aktuell zu bleiben braucht einen offenen ur.io-Tab |

Vorbehalte, die zur Tabelle gehören:

- Zwei App-Schalter haben kein Browser-Gegenstück, per Design. Es gibt hier
  keine **Post-Quanten-Verschlüsselung** (Post Quantum Encryption), denn
  die Erweiterung hat keine Client-zu-Provider-Sitzung zu versiegeln; die
  vollständige Ausnahme steht unten unter Datensammlung. Und es gibt keinen
  Schalter **Starke Anonymisierung** (Strong Anonymization), denn der
  Direktmodus ist auf dem gehosteten Proxy-Device, auf dem die Erweiterung
  läuft, zwangsweise aus: Keinem Provider kann je deine echte Adresse
  übergeben werden.
- Der Kill Switch überdauert Browser-Neustarts — ein Ausfall hält dich also
  blockiert, nicht entblößt, bis du trennst oder der Pfad sich erholt.

## Wie es funktioniert

Die Erweiterung ist Manifest V3 auf jedem Browser, aber die
Proxy-Verrohrung unterscheidet sich, weil die APIs der Browser es tun:

- **Chrome und Edge** (und Browser der Chromium-Familie allgemein) nutzen
  die Proxy-Einstellungs-API. Die Erweiterung installiert ein generiertes
  PAC-Skript, eine winzige Regeldatei, die der Browser konsultiert, um zu
  entscheiden, wohin jede Anfrage geht, und die Browser-Datenverkehr zu
  deinen bereitgestellten URnetwork-Proxy-Endpunkten schickt. Es zu setzen
  beansprucht die Proxy-Konfiguration des Browsers, weshalb zwei
  Proxy-Erweiterungen auch nicht koexistieren können (siehe
  Fehlerbehebung). Sie fasst nie OS-Einstellungen an und macht sauber
  rückgängig: Trennen kehrt zu direkt zurück, Deinstallieren entfernt den
  Anspruch.
- **Firefox** hat keine gleichwertige Einstellungs-Übergabe und nutzt
  deshalb `proxy.onRequest`: Die Erweiterung wird pro Anfrage konsultiert
  und antwortet mit der ganzen Liste der bereitgestellten Proxys, damit ein
  unerreichbarer Proxy die Anfrage nicht strandet. `direct` wird dieser
  Liste nur angehängt, wenn du den Kill Switch ausgeschaltet hast;
  scharfgestellt endet die Liste beim letzten Proxy, und ein voller Ausfall
  schlägt fehl.

Eine Safari-Version gibt es nicht, denn Safari fehlen diese APIs. Auf
Apple-Geräten deckt die App alles ab, Safari eingeschlossen.

Das Surfen tritt über ein kleines Fenster von Providern zugleich aus:
Mitgliedsgeräte, deren Besitzer zugestimmt haben und am
[UR Protocol](https://ur.xyz) teilnehmen. „Deine Exit-IP“ ist plural, und
die Bindung pro Website hält jede Website auf einem Exit — deine Bank sieht
also eine konsistente Adresse.

Das URnetwork SDK liegt als WebAssembly im Erweiterungspaket.
Bereitstellung, Standortliste und API-Aufrufe laufen alle lokal. Nichts
Ausführbares wird zur Laufzeit geholt; was der Store geprüft hat, ist, was
läuft.

**Die Web-App ist die Steuerungsebene der Erweiterung; sie sind ein
Produkt.** Melde dich einmal auf [ur.io](https://ur.io) an, und die Seite
und die Erweiterung sprechen über eine dokumentierte Brücke: ein kurzes
Verben-Protokoll (`SETUP`, `CONNECT`, `DISCONNECT`, `SET_LOCATION`, Kill
Switch, Geo-Sync), getragen von `window.postMessage`, dem einzigen Kanal,
der auf Chrome, Edge, Brave und Firefox gleichermaßen funktioniert. `SETUP`
übergibt die angemeldete Sitzung direkt, weshalb die Einrichtung aus der
App dich nie nach einem Auth-Code fragt. Die Arbeitsteilung ist echt: Die
Erweiterung prägt die Proxy-Sitzung und installiert den Browser-Proxy,
während die App das lebende Device hält. Den Standort in der App zu
wechseln routet es um, ohne Browser-Neuverbindung, und jede Fläche zeigt,
was du in der anderen getan hast.

**Die Brücke ist absichtlich schmal.** Sie läuft nur auf `ur.io`- und
`app.ur.network`-Seiten; keine andere Website kann mit der Erweiterung
sprechen. Ein anderes Skript lädt zwar auf jeder Seite, der
Geolokalisierungs-Override, aber es bleibt untätig, native Funktionen
unangetastet, bis du es einschaltest (unten).

Die Anmeldung verlangt ein Konto, denn die Nutzung wird pro Konto gemessen:
ein E-Mail- oder Telefon-Code, eine der SSO-Optionen von ur.io, eine
Wallet-Signatur oder ein Auth-Code, erzeugt auf einem Gerät, auf dem du
schon angemeldet bist. Die E-Mail-freien Wege hier sind die Wallet und der
Auth-Code; das E-Mail-freie Ein-Tipp-Sofort-Konto (Instant Account) wird in
den Telefon- und Desktop-Apps erstellt, und die Erweiterung übernimmt
dieses Konto wie jedes andere. Gratis ist ein tägliches Datenkontingent;
Pro ein großes monatliches (5 $/Monat oder 40 $/Jahr; aktuelle Zahlen auf
ur.io/products).

## Kill-Switch-Semantik

Was er tut: Reißt die Proxy-Verbindung ab, während der Kill Switch an ist,
blockiert die Erweiterung den Datenverkehr des Browsers, statt den Browser
leise auf deine direkte Verbindung zurückfallen zu lassen und deine echte
Adresse mitten in der Sitzung zu entblößen.

- Er ist **standardmäßig an**, die eine URnetwork-Fläche, die
  scharfgestellt ausgeliefert wird.
- Die Durchsetzung ist die eigene Proxy-Regel des Browsers: Scharfgestellt
  hat sie keine Notluke „sonst geh direkt“, Anfragen schlagen also fehl,
  statt zurückzufallen. Er überdauert Browser-Neustarts. Du kommst
  blockiert zurück, nicht entblößt.
- Löst er aus, stoppt nur dieser Browser (Tabs werfen Fehler; das Popup
  zeigt warum). Der Rest deines Computers lief nie darüber.
- Ihn auszuschalten heißt offen scheitern: Eine abgerissene Verbindung
  setzt dich zurück aufs direkte Surfen, sichtbar im Popup, aber still in
  deinen Tabs. Akzeptabel nur dort, wo ein Leck eine Unannehmlichkeit ist,
  kein Schaden.
- Geltungsgrenze: Er blockiert *Browser*-Datenverkehr, mehr kann eine
  Erweiterung nicht regieren; er ist keine System-Firewall. Lokale Adressen
  (localhost, Drucker) gehen absichtlich vorbei, und WebRTC (Sprache/Video
  im Browser) kann Verbindungen öffnen, die Proxy-Einstellungen ignorieren,
  eine Lücke in jeder Proxy-Erweiterung; Browser können es einschränken.

## Geolokalisierungs-Override

Zwei Signale: Deine IP-Adresse sagt jetzt Amsterdam, aber die
Geolocation-API des Browsers, beantwortet aus OS-Signalen wie WLANs in der
Nähe, meldet weiter, wo dein Körper ist. Websites, die beide vergleichen,
sehen den Widerspruch. Der Override repariert das zweite Signal, damit
beide Geschichten übereinstimmen:

- **Standardmäßig aus.** Nichts ändert sich, bis du ihn im Popup
  aktivierst.
- Aktiviert antwortet er bei `document_start` **in allen Frames**, sodass
  die Geolocation-API deinen Exit-Standort liefert, bevor irgendein
  Seitenskript fragen kann, auch in iframes, die ein Wettrennen versuchen.
  Die Koordinaten sind die Stadt deines ältesten verbundenen Providers, und
  sie erreichen die Erweiterung über die App-Brücke: Die Erweiterung hält
  kein eigenes Device, ein offener ur.io-Tab ist also, was die Position
  aktuell hält.
- Deaktiviert sagt er gar nichts: Die Seite behält ihre native
  Geolokalisierung, und keiner Website wird ein frisches Signal übergeben,
  dass du eine Erweiterung fährst. Schalt ihn aus, wenn du *willst*, dass
  Websites deinen echten Standort sehen (Karten, Lieferdienste).

## Health-Pings und der Zustand „beeinträchtigt“

Verbunden holt die Erweiterung alle fünf Minuten einen leichtgewichtigen
Endpunkt (`my-ip-info` auf der URnetwork-API) durch den Proxy,
vernachlässigbar selbst gegen das Gratis-Kontingent. Das beweist, dass der
Pfad Ende zu Ende funktioniert, nicht nur, dass die Einstellungen angewandt
wurden:

- **Zwei aufeinanderfolgende Fehlschläge**: Der Status wird
  **beeinträchtigt** (degraded). Du bist noch konfiguriert, aber fließender
  Datenverkehr ist nicht bestätigt. Das Popup zeigt einen
  Instabilitäts-Indikator.
- **Drei aufeinanderfolgende Fehlschläge**: automatische Neuverbindung, mit
  Backoff (2 s, verdoppelnd bis 30 s, fünf Versuche), bei Bedarf mit neu
  bereitgestellten Proxys.
- Ein Erfolg zu irgendeinem Zeitpunkt lässt den Status zurück auf verbunden
  schnappen. Eine Schonfrist nach dem Verbinden vermeidet Flattern, während
  sich die erste Verbindung setzt.

Beeinträchtigt ist kein Leck. Du zeigst weiter auf den Proxy, und
scharfgestellt blockiert ein toter Pfad, statt zu entblößen. Es ist kein
Fehler zum Beheben; es ist die Erweiterung, die dir früh Bescheid sagt,
meist über ein wackliges Netz zwischen dir und dem Proxy.

## Datensammlung: keine

- Der Firefox-Eintrag deklariert es im Manifest, maschinenlesbar:
  `data_collection_permissions` ist **none**. Das ist eine vom Store
  durchgesetzte Aussage, kein Versprechen auf einer Datenschutzseite.
- Die Erweiterung spricht nur mit der URnetwork-API, um deine Proxys
  bereitzustellen, dieselben Aufrufe, die jeder Client macht. Keine
  Analytics, keine Telemetrie, nirgends eine Sammlung des Browserverlaufs.
- **Host-Berechtigungen unterscheiden sich pro Browser, aus gutem Grund.**
  Auf Chrome fordert die Erweiterung nur Zugriff auf die
  URnetwork-API-Hosts (`api.bringyour.com`, `api-v4.bringyour.com`); die
  PAC-basierte Proxy-API muss deine Anfragen nicht sehen. Auf Firefox
  braucht die Erweiterung `<all_urls>`: `proxy.onRequest` konsultiert die
  Erweiterung für jede Anfrage, die es routen könnte, und Firefox verlangt
  dafür Host-Zugriff. Die breitere Berechtigung dort ist der Preis von
  Firefox' Proxy-API, kein Datengriff.
- **Keine externe Partei hat die Erweiterung geprüft.** URnetworks
  Android-App bestand im Mai 2025 eine MASA-AL2-Prüfung der Leviathan
  Security Group, Googles feste Sicherheits-Checkliste für Mobile-Apps, und
  eine unabhängige Firma hat im April desselben Jahres die Web-Anwendung
  und API penetrationsgetestet; keine der beiden deckt die Erweiterung ab,
  und kein unabhängiges Audit deckt das Protokoll oder den Server-Code des
  Operators ab. Was diese Seite stattdessen bietet, ist falsifizierbar:
  Diese Berechtigungen sind in deiner eigenen installierten Kopie lesbar,
  nichts wird zur Laufzeit geholt, und der Quellcode ist öffentlich.
  Aussagen, die du prüfen kannst, kein Zertifikat.

Was der Dienst behält: dein Konto und ein Bytezahl-Register pro Gerät (das
sind Kontingente und Provider-Messung), nie Ziele oder URLs; eine
Client-Adresse, gehalten als Einweg-Hash mit geheimem Schlüssel über deinen
IP-Block statt der Adresse selbst; und eine ungefähre Stadt aus einer
Geo-Abfrage. Provider tragen nach außen, ohne deine echte Adresse zu
erfahren, und sehen nur Metadaten auf Internetanbieter-Niveau
(Website-Namen, nie Seiten oder Passwörter, die HTTPS-versiegelt bleiben);
Websites sehen nur den Exit.

Sei beim Mittelstück aber genau. Das Netzwerk hat drei Modi, und der
Browser besetzt immer nur einen davon:

| Modus | Operator sieht | Provider sieht | Hier verfügbar |
|---|---|---|---|
| **Relay, Standard** | dein Konto und deine Quellverbindung, auf welchen Providern du bist, und die Ziele und Paketbytes darin | Ziele, die er nach außen trägt, und eine Geräte-/Vertrags-ID, **nicht** deine echte IP | **ja: der einzige Browser-Modus** |
| **Relay, versiegelt** | dasselbe, aber Chiffretext mit Timing und Volumen an Stelle der Ziele | wie oben | nein: die Verschlüssele-zum-Provider-Sitzung der Apps, dort standardmäßig an, hat kein Browser-Gegenstück |
| **Direkt** | weniger Relay-Beteiligung | **deine echte IP** und die Ziele, die er nach außen trägt | nein: zwangsweise aus auf dem gehosteten Proxy-Device, auf dem die Erweiterung läuft |

Diese erste Zeile ist die Browser-Position, und der Kontrast zu den Apps
ist scharf, nicht weich: Sie versiegeln die Client↔Provider-Sitzung
standardmäßig, und der Browser hat dort keine Sitzung zu versiegeln. Er
kann keine haben. Ein Browser spricht sein eigenes Proxy-Protokoll und kann
die Engine des Netzwerks nicht ausführen, dein Client-Device läuft also aus
der Ferne im Inneren des Operators, der zwischen den beiden Protokollen
übersetzt — eine von diesem Device begonnene Versiegelung begänne beim
Operator, der Partei, die eine Versiegelung blind machen soll. Die
Implementierung hat die Versiegelung dafür eingetauscht, den Browser
überhaupt zu erreichen. Die Garantie hier ist eine Speicher-, keine
Verschlüsselungsgarantie. Jeder Browser-Proxy übergibt jedes Ziel dem
Endpunkt, den er anwählt, der Operator handhabt deine also im Transit; was
dahinter steht, ist ein Proxy-Datenpfad, der gar kein Log schreibt,
festgenagelt durch einen Regressionstest im offenen Quellcode, und ein
Register ohne einen Ort für ein Ziel. Der App-Schalter **Starke
Anonymisierung** fehlt ebenso und wird ebenso nicht gebraucht: Mit
zwangsweise ausgeschaltetem Direktmodus kann keinem Provider je deine echte
Adresse übergeben werden.

Was das Netzwerk selbst sehen kann und was nicht, sobald dein Datenverkehr
fließt, steht im [Überblick](/docs/overview). Das
[Bedrohungsmodell](/docs/threat-model) geht weiter und benennt die fehlende
Versiegelung des Browser-Pfads als eines seiner eigenen Versäumnisse.

## Fehlerbehebung

### „Failed to provision any proxy connections. Check your account.“

Die Erweiterung hat die API nach Proxy-Zugangsdaten gefragt, und keine
wurden gewährt. Fast immer ein Kontozustand:

1. Bestätige, dass du dich auf [ur.io](https://ur.io) anmelden kannst, und
   prüf deinen Tarif. Ein aufgebrauchtes kostenloses Tageskontingent ist
   die übliche Ursache (es frischt sich täglich auf).
2. Prüf, ob das Limit gleichzeitiger Clients deines Tarifs von anderen
   Geräten aufgebraucht ist; trenn eines.
3. Melde dich aus der Erweiterung ab und wieder an, um die Zugangsdaten
   aufzufrischen.

### „Connection lost. Please reconnect.“

Die Gesundheitschecks schlugen wiederholt fehl, und die automatische
Neuverbindung hat ihre Versuche aufgebraucht. Dein darunterliegendes Netz
hat sich wahrscheinlich geändert (Netzwechsel, Laptop schlief, feindseliges
WLAN). Verbinde neu aus dem Popup; wiederholt es sich in einem Netz,
blockiert dieses Netz womöglich die Proxy-Ports.

### Eine andere Erweiterung kämpft um den Proxy

Nur eine Erweiterung kann die Proxy-Einstellungen des Browsers zugleich
steuern (auf Chrome gewinnt die zuletzt installierte). Fährst du eine
andere VPN- oder Proxy-Erweiterung, reichen sie die Einstellung hin und
her, und beide wirken kaputt. Das Popup sagt es, wenn es die Kontrolle
verliert, und `chrome://settings` nennt den aktuellen Halter; deaktivier
die andere. Auf Firefox prüf auf andere installierte Add-ons mit
Proxy-Berechtigung.

### Captive Portals

Hotel- und Flughafen-WLAN verlangt, dass du dich über eine Portalseite
anmeldest, *bevor* das Internet funktioniert, und mit stehendem Proxy
(besonders scharfgestellt) kann das Portal nicht laden. Festklemmen kannst
du dich nicht: Trennen ist lokal und braucht kein Netz. Trenn die
Erweiterung, schließ die Portal-Anmeldung ab, dann verbinde neu. Jedem
Proxy und VPN eigen, kein Erweiterungs-Bug.

### Den Status lesen

Der Zustandsindikator des Popups ist die schnellste Diagnose:

- **Untätig (Idle)**: angemeldet, nicht verbunden. Das Surfen ist direkt.
- **Verbinden (Connecting)** (Spinner): Proxys werden bereitgestellt und
  Einstellungen angewandt.
- **Verbunden (Connected)**: konfiguriert und kürzlich gesundheitsgeprüft.
- **Beeinträchtigt (Degraded)** (Instabilitäts-Symbol): konfiguriert, aber
  Health-Pings schlagen fehl; erwarte eine Neuverbindung, wenn es anhält.
- **Neu verbinden (Reconnecting)**: automatische Erholung läuft; lass es in
  Ruhe.
- **Fehler (Error)**: eine der Meldungen oben, mit der hier gelisteten
  Lösung.

## Wohin als Nächstes

- [Erste Schritte im Browser](/docs/getting-started-browser): Store-Links,
  Anmeldung und erstes Verbinden, einschließlich der Notiz zu privaten
  Fenstern.
- [So funktioniert URnetwork](/docs/overview): das Netzwerk hinter dem
  Popup und woher die Provider kommen.
- [FAQ](/docs/faq): Tarife, Kontingente und Kontofragen.
