Automatischer Proxy im Netzwerk mit PAC/WPAD

In Computer und Netzwerk | Erstellt: 09.11.2018, 12:03 | Editiert: 14.11.2018, 06:21 (Neu) | 139 mal angesehen | Seite drucken

Automatisch Proxy-Konfiguration für Windows, Browser und andere Software, die PAC/WPAD unterstützt

Um den Benutzern im (Firmen-)netzwerk das ständige Umschalten von Proxy an/aus im Browser zu ersparen, kann die Konfiguration mit PAC und WPAD angeboten werden.

PAC – Finden der Konfigurations-Datei

Nach dem Standard wird zuerst die DHCP-Option 252 ausgewertet. ist diese nicht gesetzt, wird per DNS ein Rechner mit einem bestimmten Hostnamen in der folgenden Reihenfolge für eine Proxy-Konfigurationsdatei gesucht (Beispiel: Suchender PC mit dem Hostnamen pc.abteilung.niederlassung.firma.com):

  • http://wpad.abteilung.niederlassung.firma.com/wpad.dat
  • http://wpad.niederlassung.firma.com
  • http://wpad.firma.com/wpad.dat
  • http://wpad/wpad.dat

Also im Netzwerk local.lan im zuständigen dnsmasq einen Eintrag für die DHCP-Option 252 setzen:

# Proxy PAC file
dhcp-option=252,http://wpad.local.lan/wpad.dat

Für den iS DHCPd:

option local-pac-server code 252 = text;
option local-pac-server "http://wpad.local.lan/wpad.dat";

Per DHCP-Option 252 kann ein beliebiger Dateiname gewählt werden, bei der DNS-Suche wird immer wpad.dat vorausgesetzt

Diese URL muss – funktionierender DNS, funktionierender Webserver auf wpad.local.lan vorausgesetzt – auf die WPAD-Datei zeigen, MIME-Typ application/x-ns-proxy-autoconfig.

WPAD – Inhalt der Konfigurations-Datei

Die Erkennung ob "mit oder ohne Proxy" erfolgt im Browser durch Abarbeiten einer in der WPAD-Datei definierten JavaScript-Funktion.

function FindProxyForURL(url, host)

Diese Funktion muss eine definierte Rückgabe ergeben:

  • DIRECT, wenn der Zugriff ohne Proxy erfolgen soll
  • PROXY host.name:port:8080, wenn der Zugriff über einen Proxy erfolgen soll
  • PROXY host.name:port:8080; DIRECT, wenn der Zugriff über einen Proxy und bei Fehler direkt erfolgen soll

Informationen zu PAC/WPAD, definierten internen Funktionen und der Browser-Unterstützung der WPAD-Methoden ist auf findproxyforurl.com zu finden

Hier als Beispiel eine – alte – wpad.dat für ein Firmen-Netzwerk (local.lan/192.168.40.0/29):

// NETZ-LOKAL Proxy Auto-Config wpad.dat, 2016-01-20 08:28
// Siehe https://wiki.local.lan/wiki/Proxy_Autoconfig

function FindProxyForURL(url, host) {
   host = host.toLowerCase();
   url = url.toLowerCase();

   // Ohne Proxy, wenn Client nicht im Firmen-Netz/10er Netz ist, z.B. in VPN-Netz daheim
   if (!(isInNet(myIpAddress(), "192.168.40.0", "255.255.252.0")) && 
       !(isInNet(myIpAddress(), "10.0.0.0",     "255.0.0.0"    )))   { return "DIRECT"; }

   // Host ohne "." oder Host in Domain local.lan
   if (isPlainHostName(host) || shExpMatch(host,"*.local.lan"))      { return "DIRECT"; }

   var host_ip_resolved; 
   // Regex-Test auf IPv4-Adresse
   var is_ip_addr = /^(\d+.){3}\d+$/; 

   if (is_ip_addr.test (host)) 
      // Nicht aufloesen, wenn schon IP
      host_ip_resolved=host; 
   else 
      // Einmalig aufloesen, wenn nicht
      host_ip_resolved=dnsResolve(host);
   
   // Host in NETZ-LOKAL-Netz
   if (isInNet(host_ip_resolved, "192.168.40.0",  "255.255.252.0"))  { return "DIRECT"; }

   // Host in DMZ-Netz
   if (isInNet(host_ip_resolved, "172.16.0.0",    "255.255.255.0"))  { return "DIRECT"; }

   // Host in Maschinen-Netz
   if (isInNet(host_ip_resolved, "10.0.0.0",      "255.0.0.0"))      { return "DIRECT"; }

   // Host in Netz A (VPN)
   if (isInNet(host_ip_resolved, "192.A.129.0",   "255.255.255.0"))  { return "DIRECT"; }

   // Host in Netz B (VPN)
   if (isInNet(host_ip_resolved, "192.168.B.0",   "255.255.255.0"))  { return "DIRECT"; }

   // Host in Netz C (VPN)
   if (isInNet(host_ip_resolved, "192.168.C.0",   "255.255.255.0"))  { return "DIRECT"; }

   // Alles andere mit Proxy 172.16.XXX.YYY:8080
   return "PROXY 172.16.XXX.YYY:8080";
}

In der Datei .htaccess (für Apache Webserver) im Verzeichnis der WPAD-Datei wird der MIME-Typ gesetzt:

AddType application/x-ns-proxy-autoconfig .dat # z.B. wpad.dat
AddType application/x-ns-proxy-autoconfig .pac # z.B. proxy.pac

Test mit wget:

stefan@t440s /tmp # wget --proxy=off http://wpad.local.lan/wpad.dat
--2018-11-09 12:37:00--  http://wpad.local.lan/wpad.dat
Auflösen des Hostnamen »wpad.local.lan (wpad.local.lan)«... 192.168.40.220
Verbindungsaufbau zu wpad.local.lan (wpad.local.lan)|192.168.40.220|:80... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 1700 (1,7K) [application/x-ns-proxy-autoconfig]
In »»wpad.dat«« speichern.

100%[==============================================================================>] 1.700       --.-K/s   in 0s

2018-11-09 12:37:00 (203 MB/s) - »wpad.dat« gespeichert [1700/1700]

Webserver-Log

Das Log des Webservers für die WPAD-Datei kann nun auf Zugriffe überprüft werden:

[...]
192.168.X.8 - - [09/Nov/2018:13:06:40 +0100] "GET /wpad.dat HTTP/1.1" 200 2076 "-" "Microsoft-WebDAV-MiniRedir/6.3.9600"
192.168.X.23 - - [09/Nov/2018:13:07:06 +0100] "GET /wpad.dat HTTP/1.1" 200 2077 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"
192.168.X.32 - - [09/Nov/2018:13:07:14 +0100] "GET /wpad.dat HTTP/1.1" 304 192 "-" "Mozilla/5.0 (compatible; IE 11.0; Win32; Trident/7.0)"
[...]

Weitere Seiten in 'Computer und Netzwerk'