Diese Seite wurde vor mehr als 2 Jahren erstellt und vor über einem Monat zuletzt bearbeitet. Eventuell ist längst ihr Mindesthaltbarkeitsdatum überschritten!
Automatische 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.
Nach dem Standard wird zuerst die DHCP-Option 252
ausgewertet. Ist diese nicht gesetzt, wird der
Rechner pc.abteilung.niederlassung.firma.com
per DNS in der folgenden Reihenfolge eine Proxy-Konfigurationsdatei
suchen:
http://wpad.abteilung.niederlassung.firma.com/wpad.dat
http://wpad.niederlassung.firma.com/wpad.dat
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
.
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 sollPROXY host.name:port
, wenn der Zugriff über einen Proxy erfolgen sollPROXY host.name:port; DIRECT
, wenn der Zugriff über einen Proxy und bei Fehler direkt erfolgen sollInformationen 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]
Bingo.
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)"
[...]