Portál AbcLinuxu, 20. května 2025 23:44
Je to jednoduché, existují firemní sítě, kde uživatelé nemají přímý přístup na internet a jediný způsob, jak se dostat ven, je přes proxy server. Je to celkem standardní politika. Jenomže jak klientům říci, kde je proxy server?
Ano, můžeme ho na PC nastavit natvrdo, buď nějakou distribucí nastavení v rámci třeba Active Directory politik, nebo jinak. Problém ale je, že uživatelé mají třeba notebooky. Jak tedy zajistit, aby notebookáři fungoval internet někde na freewifi, doma apod.? Můžeme mu dát dva webové prohlížeče, jeden, co bude nastaven na proxy, druhý, který ne. To je ale pro uživatele i pro správce značně nekomfortní (distribuce oblíbených položek apod.). Další možnost je do PC nainstalovat nějaký Network Profiler (Netsetman apod.), který umožňuje měnit i nastavení proxyny.
Všechny tyto nápady nejsou úplně ideální. Vyžadují nějakou účast admina, nebo interakci uživatele a někdy i nástroj třetí strany. To je samozřejmě špatně.
Krásný popis je na této adrese : findproxyforurl.com.
Jak je vidět, nastavit automatickou konfiguraci lze pomocí DNS a DHCP. Podpora DHCP není ve všech prohlížečích, podpora DNS je. Z toho důvodu použijeme řešení pomocí DNS.
Pokud tedy ve firmě provozujeme nějakou doménu (Active Directory, např.: corp.devaine.cz), nebo používáme nějaký dns suffix, tak prohlížeč se tedy po spuštění snaží najít konfigurační soubor na jedné z těchto adres:
Nastavení je velmi jednoduchá věc, která se skládá ze čtyřech kroků :
Na DNS serveru je teda potřeba vytvořit DNS záznam "A", který správně směruje na web server, kde je uložen "wpad.dat" soubor.
Pokud používáme CNAME, tak pozor, třeba java nechodí na wpad přes CNAME, ale přes koncový "A" záznam. V takovém případě musí být tedy server/wpad dostupný z obou dns adres, jinak něco nemusí fungovat. Pokud tedy např. vytvoříme dns záznam jako toto :
proxy-cluster.corp.devaine.cz A 192.168.1.1 wpad.corp.devaine.cz CNAME web-cluster.corp.devaine.czTak wpad.dat musí být dostupný na těchto adresách :
http://wpad/wpad.dat http://wpad.corp.devaine.cz/wpad.dat http://web-cluster.corp.devaine.cz/wpad.dat
Případ s "http://wpad/wpad.dat" by neměl nikdy nastat. Pokud ale nepoužíváme dns suffix, tak nejspíše nastane.
UPDATE: dle RFC 3040 by mělo být možné pro automatickou detekci používat toto :
wpad.corp.devaine.cz A 192.168.1.1 _wpad._tcp SRV 0 0 80 wpad.corp.devaine.cz IN TXT "service: wpad:http://wpad.corp.devaine.cz/wpad.dat"
Není to nic složitého, je to obyčejný txt, kde si nadefinujeme výjimky, které mají být směrovány bez proxy na přímo do sítě (v našem případě vše v naší lokální doméně "corp.devaine.cz") a na jaký proxy server má jít zbytek komunikace (v našem případě na proxy serveru "192.168.1.254:3180")
function FindProxyForURL(url, host) { if (isPlainHostName(host) || dnsDomainIs(host, ".corp.devaine.cz") || isInNet(host, "127.0.0.1", "255.255.255.255") || isInNet(host, "192.168.0.0", "255.255.0.0")) isInNet(myIpAddress(), "10.0.0.0", "255.255.255.0") return "DIRECT"; else return "PROXY 192.168.1.254:3128"; }
Vysvětlivky :
Příklad konfiguračního souboru je pro ipv4, kdo používá ipv6, je třeba jí též zohlednit, a to i pro localhost.
Provoz lze řídit i na základě url, nebo protokolu, viz další příklady : Code Snippets
Jako poslední věc je potřeba umístit soubor na web server, který je potřeba nastavit tak, aby byl dostupný ze všech DNS, které by mohl prohlížeč aj. aplikace volat.
Dále by měl soubor servírovat jako mime type "application/x-ns-proxy-autoconfig". Není to tedy úplně nutné, ale je to standard a špatným nastavením mime type bychom si mohli někde(třeba u nějakých striktních aplikací) vytvořit problém.
Nastavení na nginx serveru pak vypadá takto :
server { listen 80; server_name wpad.corp.devaine.cz wpad web-cluster.corp.devaine.cz; root /var/www/wpad; location / { types { application/x-ns-proxy-autoconfig dat; } } access_log /var/log/nginx/wpad.corp.devaine.cz.access.log; error_log /var/log/nginx/wpad.corp.devaine.cz.error.log; }
Internet Explorer má ve výchozím nastavení povolenou automatickou detekci :
Chrome používá nastavení ze systému, tedy v případě win z Internet Exploreru.
Firefox má svou vlastní konfiguraci a ta není ve výchozím nastavení na automatické detekci. U Firefoxu tedy bude nutné použít distribuci vlastního nastavení. U Firefoxu ESR by od verze 60 mělo fungovat GPO (Group Policy v rámci Active Directory), ale nezkoušel jsem (jiné priority). Další možností je distribuce vlastního nastavení pomocí vlastního konfiguračního souboru, viz tento článek : Firefox - centrální konfigurace v síti.
A to je prosím vše. Takto jednoduše funguje směrování komunikace klientů v síti na proxy server.
Samozřejmě v dnešní době nemusí všechny app toto podporovat. V takovém případě nezbývá, než na firewallu povolit konkrétní port na konkrétní službu, aby se na ní klienti dostali napřímo bez proxyny.
Zdar Max
PS: Původně jsem chtěl psát jen o automatickém nastavení proxy v síti, ale když jsem zjistil, že u FF se musím zmínit o distribuci konfigurace, tak jsem si řekl, že bych toto měl objasnit v nějakém zápisku, co vydám dřív [Firefox - centrální konfigurace v síti]. Mno a vzhledem k tomu, že k distribuci nastavení používám Inno Setup, tak jsem si říkal, že bych měl před vydáním zápisku o FF vydat zápisek o Inno Setupu [Inno Setup : OSS instalátor pro windows]. To zní docela úchylně... :)
Tiskni
Sdílej:
# srv _wpad._tcp SRV 0 0 80 wpad.corp.devaine.cz # txt IN TXT "service: wpad:http://wpad.corp.devaine.cz/wpad.dat"Přiznám se, že to jsem nevěděl a nezkoušel. SRV záznamem by šel vyřešit problém s překladem bez dns suffixu (což je v případě AD nula stanic).
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.