proxy.pac einrichten: Datei schreiben, auf den Webserver legen, Clients verteilen, testen

English version of this guide

Eine PAC-Datei (Proxy Auto-Config, meist proxy.pac oder wpad.dat genannt) ist eine kleine Textdatei mit einer JavaScript-Funktion. Sie entscheidet für jede Anfrage des Browsers, ob er direkt verbindet oder über welchen Proxy. Diese Anleitung führt in vier Schritten durch die Einrichtung. Sie schreiben die Datei, legen sie auf einen Webserver, teilen den Clients die Adresse mit und testen das Ergebnis.

Die Seiten, auf die diese Anleitung für Details verweist, sind auf Englisch; sie tragen den Hinweis „(Englisch)“. Für die Einrichtung selbst brauchen Sie sie nicht.

Schritt 1: Die Datei schreiben

Für jede Anfrage ruft der Browser die Funktion FindProxyForURL(url, host) auf. url ist die vollständige Adresse, host nur der Rechnername daraus, etwa www.example.com. Die Funktion antwortet mit einem Text:

  • "DIRECT" heißt: ohne Proxy verbinden.
  • "PROXY proxy1.firma.example:8080" heißt: diesen Proxy verwenden.
  • "PROXY proxy1.firma.example:8080; PROXY proxy2.firma.example:8080" ist eine Liste. Fällt der erste Proxy aus, nimmt der Browser den nächsten.

Eine vollständige Datei für ein typisches Firmennetz sieht so aus:

// Interne Kurznamen, die Benutzer ohne Domain eintippen
var kurznamen = ["intranet", "wiki", "drucker"];

function FindProxyForURL(url, host) {
  // Rechnernamen klein schreiben: Vergleiche im Skript unterscheiden Gross- und Kleinschreibung
  host = host.toLowerCase();

  // Die echten internen Kurznamen, nicht jeder Name ohne Punkt
  if (kurznamen.indexOf(host) >= 0) {
    return "DIRECT";
  }

  // Die interne DNS-Zone und alle Rechner darin
  if (host == "firma.example" || dnsDomainIs(host, ".firma.example")) {
    return "DIRECT";
  }

  // Private Adressen, aber nur wenn die URL schon eine IP-Adresse enthaelt
  // (sonst loest isInNet den Namen erst per DNS auf)
  if (/^\d+\.\d+\.\d+\.\d+$/.test(host) &&
      (isInNet(host, "10.0.0.0", "255.0.0.0") ||
       isInNet(host, "172.16.0.0", "255.240.0.0") ||
       isInNet(host, "192.168.0.0", "255.255.0.0"))) {
    return "DIRECT";
  }

  // Standardroute: alles andere ueber die Firmen-Proxys, der zweite ist die Ausweichroute
  return "PROXY proxy1.firma.example:8080; PROXY proxy2.firma.example:8080";
}

Ersetzen Sie firma.example und die Proxy-Namen durch Ihre eigenen. Drei Punkte entscheiden darüber, ob die Datei zuverlässig arbeitet:

  • Die Standardroute steht als letzte Zeile. Die erste return-Anweisung, die ausgeführt wird, entscheidet. Alle Ausnahmen gehören deshalb darüber. Endet die Funktion ohne return, verbinden die Browser direkt, und der Verkehr läuft unbemerkt am Proxy vorbei.
  • Namen kosten nichts, DNS-Abfragen schon. Die Liste der Kurznamen und dnsDomainIs() prüfen nur den Text. isInNet() mit einem Rechnernamen löst den Namen dagegen per DNS auf, und wenn der DNS-Server nicht antwortet, wartet jede Anfrage. Deshalb prüft die Beispieldatei Netze nur, wenn die URL schon eine IP-Adresse enthält (DNS in PAC-Dateien, Englisch).
  • Nur reines ASCII. Schreiben Sie die Datei in einem Texteditor, nie in einer Textverarbeitung, denn die macht aus geraden Anführungszeichen typografische, und das ist ein Syntaxfehler. Lassen Sie auch in Kommentaren die Umlaute weg, dann liest jede Engine die Datei gleich. Speichern Sie nie als UTF-16 (im Windows-Editor früher „Unicode“): Windows und Firefox können eine solche Datei nicht lesen.

Die Kurznamen stehen bewusst als Liste in der Datei. Die bequemere Funktion isPlainHostName() würde jeden Namen ohne Punkt direkt schicken, auch einen vertippten Namen aus dem Internet, und der Benutzer bekäme dann eine Fehlermeldung statt der Sperrseite des Proxys. Fertige, kommentierte Vorlagen finden Sie auf der Seite mit PAC-Beispielen (Englisch); der PAC-Generator (Englisch) baut eine Datei aus Ihren Listen von Proxys, Domains und Netzen.

Schritt 2: Die Datei auf einen Webserver legen

Die Clients laden die Datei über eine URL. Sie brauchen also einen Webserver, den alle Clients erreichen, und zwar ohne Proxy. Wählen Sie eine feste Adresse, die sich nicht mehr ändert, zum Beispiel https://pac.firma.example/proxy.pac, denn genau diese Adresse steht später in jedem Client.

AnforderungWarum
Auslieferung über https://Über reines HTTP kann jeder auf dem Netzweg die Datei verändern und den gesamten Webverkehr auf seinen eigenen Proxy umleiten.
Status 200Bei jedem anderen Status arbeitet der Client ohne PAC-Datei.
keine AnmeldungChrome, Edge und Windows melden sich zum Laden einer PAC-Datei nicht an.
Content-Type: application/x-ns-proxy-autoconfigDie Clients laden die Datei auch so, aber ein falscher Typ ist meist ein Zeichen, dass der Server eine Fehlerseite schickt.
Cache-Control: max-age von höchstens einem TagDavon hängt ab, wie lange Proxys, CDNs und Clients mit HTTP-Cache eine alte Datei behalten. Chrome und Firefox laden die Datei ohnehin am Cache vorbei.
kleiner als 1 MiBEine größere Datei ignorieren Chrome, Edge und Windows vollständig.

Eine Dateifreigabe oder ein file://-Pfad ist kein Ersatz: Chrome und Edge laden PAC-Dateien nicht mehr aus Dateipfaden, und wer auf die Freigabe schreiben darf, bestimmt das Routing.

Unter Apache genügen diese Zeilen in der Konfiguration der Website (für Header muss das Modul mod_headers aktiv sein):

AddType application/x-ns-proxy-autoconfig .pac
<Files "proxy.pac">
    Header set Cache-Control "max-age=3600"
</Files>

Prüfen Sie anschließend, was der Server tatsächlich schickt:

curl -sI https://pac.firma.example/proxy.pac

Die erste Zeile muss 200 enthalten, darunter sollten content-type und cache-control stehen.

Schritt 3: Den Clients die Adresse mitteilen

Am sichersten tragen Sie die Adresse fest und zentral ein, für jede Art von Client an der Stelle, die er liest:

ClientWo die Adresse eingetragen wird
Windows 10 und 11Einstellungen > Netzwerk und Internet > Proxy, bei Setupskript verwenden auf Einrichten klicken, den Schalter Setupskript verwenden einschalten, die Skriptadresse eintragen, Speichern. Für viele Rechner per Gruppenrichtlinie oder Intune.
Windows-Dienste (WinHTTP)getrennt davon mit netsh winhttp set advproxy
Chrome und Edgeübernehmen die Einstellung von Windows oder macOS; die Browser-Richtlinie ProxySettings mit ProxyMode = pac_script und ProxyPacUrl hat Vorrang. In Edge heißt sie in der Gruppenrichtlinie „Konfigurieren von Proxyeinstellungen“.
FirefoxDie Voreinstellung Proxy-Einstellungen des Systems verwenden übernimmt die Adresse aus dem System. Eine eigene Adresse steht im Dialog Verbindungs-Einstellungen unter Automatische Proxy-Konfigurations-Adresse; per Unternehmensrichtlinie Proxy mit "Mode": "autoConfig" und AutoConfigURL.
macOSSystemeinstellungen > Netzwerk, den Netzwerkdienst wählen, Details > Proxys, Automatische Proxykonfiguration; für verwaltete Macs ein MDM-Profil
Geräte, die Sie nicht konfigurieren könnenautomatische Erkennung per WPAD über DHCP-Option 252 oder den DNS-Namen wpad, als letzte Wahl

Warum eine verteilte Richtlinie manchmal nicht ankommt, etwa weil sie pro Benutzer statt pro Rechner gilt oder weil Edge eine eigene Richtlinie hat, erklärt die Seite PAC file not applied by Group Policy or Intune (Englisch).

Schalten Sie die automatische Erkennung aus, wenn Sie ein Setupskript eintragen. Der Schalter heißt in Windows Einstellungen automatisch erkennen, in Firefox Die Proxy-Einstellungen für dieses Netzwerk automatisch erkennen. Bleibt er an, ersetzt jede wpad-Antwort in einem fremden Netz Ihr Skript (Web proxy auto-detection, Englisch).

WPAD nur, wo es nicht anders geht. Die automatische Erkennung findet die Datei ohne jede Einstellung am Client. Sie fragt aber DHCP und DNS ohne Authentifizierung und lädt die Datei über reines HTTP. Wer zuerst antwortet, liefert die Datei und damit das Routing. Die Risiken und wie man sie begrenzt, stehen auf der WPAD-Seite (Englisch); den Server für eine wpad.dat richtet der wpad.dat-Generator (Englisch) ein.

Schritt 4: Testen, vor und nach der Verteilung

Testen Sie die Datei, bevor ein Client sie bekommt. Der PAC-Tester auf dieser Website ist englischsprachig, die Bedienung ist aber schnell erklärt:

Im TesterBedeutung
Domain or URL to tracedie Adresse, für die Sie die Entscheidung der Datei sehen wollen
Engine profilewelcher Client simuliert wird: Chromium (Chrome, Edge), Firefox, pacparser oder Windows (WinHTTP, WinINet)
Checkstartet den Test
Pathder Ablauf: jede Bedingung mit wahr oder falsch, jeder Funktionsaufruf mit Ergebnis und die Zeile, die entschieden hat
AnnotatedIhre Datei mit einer Erklärung über jeder Regel
Note A+ bis F und die Hinweise darunterdie Bewertung der Datei gegen den Regelkatalog (Englisch), jeder Hinweis mit Zeile und Lösung
DeliveryHier fügen Sie die Ausgabe von curl -sI aus Schritt 2 ein, dann wird auch die Auslieferung bewertet.

Testen Sie mindestens eine Adresse pro Regel Ihrer Datei, dazu eine reine IP-Adresse, einen kurzen Namen ohne Punkt und eine Adresse, die einer internen Domain nur ähnelt (etwa firma.example.boese.example). Wählen Sie dabei die Profile der Clients, die Ihre Benutzer tatsächlich verwenden, denn die Engines verhalten sich nicht in allen Punkten gleich. Die Datei wird in Ihrem Browser ausgewertet; zur Bewertung wird nur ihre logische Struktur übertragen, ohne Namen, Adressen oder Text.

Verteilen Sie die Adresse danach zuerst an eine kleine Pilotgruppe. Prüfen Sie dort, ob die Clients die Datei wirklich verwenden: in Chrome und Edge unter chrome://net-internals/#proxy bzw. edge://net-internals/#proxy, für WinHTTP mit netsh winhttp show advproxy. Clients, die schon eine ältere Datei geladen haben, behalten sie eine Weile; wie Sie jede Engine zum Neuladen bringen, zeigt PAC cache reset (Englisch). Lädt ein Client die Datei gar nicht, hilft PAC file troubleshooting (Englisch) weiter.

Wenn alles stimmt, bekommen alle Clients die Adresse. Bei jeder späteren Änderung der Datei testen Sie wieder im Tester, bevor Sie die neue Fassung auf den Server legen.

Häufige Fragen

Wie richte ich eine proxy.pac ein?

Schreiben Sie eine Textdatei proxy.pac mit der Funktion FindProxyForURL(url, host), die für jede Anfrage "DIRECT" oder "PROXY host:port" zurückgibt. Legen Sie sie auf einen Webserver, der sie über HTTPS mit Status 200 und dem Content-Type application/x-ns-proxy-autoconfig ausliefert. Verteilen Sie die Adresse per Gruppenrichtlinie, Intune, Browser-Richtlinie oder MDM-Profil, und testen Sie die Datei vor und nach der Verteilung.

Was ist der Unterschied zwischen proxy.pac und wpad.dat?

Der Inhalt ist derselbe. wpad.dat ist nur der Name, unter dem die automatische Proxy-Erkennung (WPAD) die Datei sucht. Eine proxy.pac tragen Sie dagegen mit ihrer Adresse fest in die Einstellungen der Clients ein, was sicherer ist.

Wo trage ich die PAC-Datei in Windows ein?

In Windows 10 und 11 unter Einstellungen, Netzwerk und Internet, Proxy, bei "Setupskript verwenden" auf "Einrichten" klicken, den Schalter einschalten, die Skriptadresse eintragen und speichern. Für viele Rechner setzen Sie dieselbe Einstellung per Gruppenrichtlinie oder Intune.

Zuletzt aktualisiert: