Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.
Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.
Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).
Revolut nabídne neomezený mobilní tarif za 12,50 eur (312 Kč). Aktuálně startuje ve Velké Británii a Německu.
Společnost Amazon miliardáře Jeffa Bezose vypustila na oběžnou dráhu první várku družic svého projektu Kuiper, který má z vesmíru poskytovat vysokorychlostní internetové připojení po celém světě a snažit se konkurovat nyní dominantnímu Starlinku nejbohatšího muže planety Elona Muska.
Poslední aktualizací začal model GPT-4o uživatelům příliš podlézat. OpenAI jej tak vrátila k předchozí verzi.
Google Chrome 136 byl prohlášen za stabilní. Nejnovější stabilní verze 136.0.7103.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 8 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Úvodní upozornění: tento text se netýká Linuxu, zabývá se automatickým ovládáním Wireguardu na Windows.
Wireguardu jsem už pár let odolávala. Vadilo mi, že není v jádře, že je kolem něj neskutečný humbuk, že ho neumí RouterOS... Časem ovšem humbuk trochu utichl, jádro už patchovat není potřeba a i ten Mikrotik už ho má v betaverzích RouterOS7. Což ještě nemusí nic znamenat, ale příslib tu je.
A tak jsem zkusila. A zamilovala se...
Dnes na něj mám z IPSecu převedenou většinu tunelů používaných pro propojení zabbixových proxy s centrálním serverem, používám ho pro připojení notebooku do své soukromé VPNky a nakonec jsem začala i zkoumat, jestli by nešel smysluplně využít na klientských stanicích se systémem od Microsoftu.
U implementace pro Windows mě příjemně překvapilo, že je možné přes wireguardí tunel - po drobné úpravě nastavení - využívat skupinové politiky aplikované při startu (čili automatické instalace a updaty aplikací, či spouštění startovacích skriptů), čímž je tento software do jisté míry schopen suplovat microsoftí Always On VPN device tunnel, obsažený v nejvyšších edicích Windows. V dnešní době, kdy všichni i s počítači zmizeli z kanceláří na home office, se podobná funkčnost hodí.
Jediná chyba na kráse byla v absenci ekvivalentu Trusted Network Detection, který u AOVPN automaticky shazuje VPNku v případě, že se počítač připojí do interní firemní sítě. Ne každý má potřebu protunelovávat se gigabitovými linkami uvnitř firmy. V Linuxu není problém si automatické shazování a nahazování tunelů naskriptovat v Network Manageru, ale jak na to ve Windows?
Na prvním místě se nabízelo spouštění ovládacího skriptu přes naplánované úlohy [Scheduled Tasks]. Windows umějí spouštět naplánované úlohy v reakci na zápisy do eventlogu, takže jsem začala pátrat a celkem rychle se dobrala k eventu 4004
v protokolu Microsoft-Windows-NetworkProfile
, který se objevuje v okamžiku, kdy Windows detekují změny stavu sítě.
Na tento event jsem tedy navázala ovládací powershellový skript, který jsem nakonec vyrobila ve dvou variantách. První varianta detekuje interní síť podle DNS suffixu servírovaného DHCP serverem (podobně jako to dělá AOVPN), druhá funguje jen u firemních sítí s podporou IPv6 a orientuje se podle připojených šestkových prefixů.
Trusted Network Detection v AOVPN ověřuje přítomnost ve firemní síti podle přípony DNS, kterou počítač dostane od DHCP serveru. V první chvíli jsem se tedy vydala tímto směrem. V úvodu skriptu je nejprve potřeba nastavit několik proměnných:
$tunnelIf
je název wireguardového tunelu používaného pro připojení, čili to, co v okně windowsího Wireguardu vidíte na kartě "Tunnels" v levém sloupečku.$domain
je DNS suffix, podle nějž se identifikuje firemní síť. Firemní DHCP servery pochopitelně musí tuto volbu klientovi posílat, jinak to fungovat nebude.$checkCost
očekává hodnoty $true
nebo $false
; pokud je nastaven na $true
, shodí tunel, kdykoli nalezne aktivní připojení účtované podle objemu stažených dat. Ne každý uživatel ocení, když mu firemní WSUS propasíruje půl giga aktualizací přes soukromou předplacenku.$logFile
umožnuje hlášky, vypisované na konzoli, paralelně zapisovat i do souboru, jehož název je nastaven v této proměnné. Hodí se, když potřebujeme zkontrolovat, jestli nám naplánovaná úloha vůbec něco dělá.Vlastní skript, v mém případě pojmenovaný wgchange-dns.ps1
, pak vypadá takto:
# Nazev WG tunelu $tunnelIf = "wg-pokus" # Domena, podle jejiz pritomnosti v prohledavanych suffixech # se rozhoduje, zda shodit ci nahodit tunel $domain = "janaj.firma" # Pokud je nastaveno na true, bude pred nahozenim WG # kontrolovat existenci pocitanych pripojeni $checkCost = $true # Cesta k souboru, do ktereho je zapisovana aktualni cinnost. # Pokud neni nastaveno, nezapisuje se nikam. $logFile = "" $wgDir = "$([Environment]::GetEnvironmentVariable("ProgramFiles"))\WireGuard" $wgExe = "$($wgDir)\wireguard.exe" $wgConfig = "$($wgDir)\Data\Configurations\$($tunnelIf).conf" $wgConfigEncrypted = "$($wgConfig).dpapi" # Pripadne donacteni lokalnich zmen konfigurace z externiho souboru $configFile = "$(split-path -parent $MyInvocation.MyCommand.Definition)\wgchange-dns.config.ps1" if ( Test-Path -Path $configFile -PathType Leaf ) { . ($configFile) } # -------------------------------------------------- # Zapise aktualni cas a zpravu na standardni vystup, # pripadne do souboru $logFile # -------------------------------------------------- function Write-Log { param ( $msg ) Get-Date -Format "HH:mm:ss" | Write-Host -NoNewline Write-Host ": $($msg)" if($logFile -ne "") { Get-Date -Format "HH:mm:ss" | Out-File -Append -FilePath $logFile -NoNewline -Force Write-Output ": $($msg)" | Out-File -Append -FilePath $logFile -Force } } # ----------- # Shodi tunel # ----------- function Down { Write-Log "Vypinam tunel." & $wgExe /uninstalltunnelservice $tunnelIf } # ------------ # Nahodi tunel # ------------ function Up { $uninstallManager = 0 if(Test-Path -PathType Leaf -Path $wgConfig) { Write-Log "Zapinam ManagerService pro aktualizaci konfigurace." & $wgExe /installmanagerservice $uninstallManager = 1 Start-Sleep -Seconds 1 } if(Test-Path -PathType Leaf -Path $wgConfig) { Write-Log "Aktualizuji a nahazuji tunel." & $wgExe /installtunnelservice $wgConfig } else { Write-Log "Nahazuji tunel." & $wgExe /installtunnelservice $wgConfigEncrypted } if($uninstallManager -eq 1) { Write-Log "Vypinam ManagerService." Stop-Service -Name "WireguardManager" & $wgExe /uninstallmanagerservice } } # ------------------------------------------------------ # Spocte pocet adapteru s nazvem odpovidajicim $tunnelIf # (logicky 1 nebo 0) # ------------------------------------------------------ function Get-WgCount { Get-NetAdapter | where { $_.Name -match $tunnelIf } | Measure-Object -Line | Select-Object -ExpandProperty Lines } # Pokud se system vypina, nereagujeme. if ([ System.Environment ]:: HasShutdownStarted) { Wrile-Log "System se vypina, stav propojeni neresim. Konec" exit 0 } $netAdapters = Get-NetAdapter # Spocitani pripojenych adapteru, pokud neni pripojeny zadny, shodime tunel. $activeCount = $netAdapters | where { $_.Status -match "Up" } | where { $_.Name -notmatch $tunnelIf } | Measure-Object -Line | Select-Object -ExpandProperty Lines if ( $activeCount -eq 0 ) { # Pokud nechceme shazovat tunel pri odpojene siti, # můzeme tuhle podminku smazat if ( Get-WgCount -gt 0) { Write-Log "Vsechny adaptery jsou odpojene, shazuji tunel." Down exit 0 } Write-Log "Vsechny adaptery jsou odpojene, koncim." exit 0 } # Kontrola pocitanych spojeni, pokud existuje nejake aktivni, shodime Wireguard if ($checkCost) { $b = $false [void][Windows.Networking.Connectivity.NetworkInformation, Windows, ContentType = WindowsRuntime] $profiles = [Windows.Networking.Connectivity.NetworkInformation]::GetConnectionProfiles() if ( $profiles -ne $null ) { $activeProfiles = Get-NetConnectionProfile $profiles | ForEach-Object { $profile = $_ $cost = $_.GetConnectionCost() $ac = $activeProfiles | where { $_.Name -eq $profile.ProfileName } | Measure-Object -Line | Select-Object -ExpandProperty Lines $rc = $cost.NetworkCostType -ne "Unrestricted" | where { $_ -ne $false } | Measure-Object -Line | Select-Object -ExpandProperty Lines $bd = $costs.BackgroundDataUsageRestricted | where { $_ -ne $false } | Measure-Object -Line | Select-Object -ExpandProperty Lines $rm = $costs.Roaming | where { $_ -ne $false } | Measure-Object -Line | Select-Object -ExpandProperty Lines if( $ac -gt 0 ) { if( ($rc -ne 0) -or ($bd -ne 0) -or ($rm -ne 0) ) { $b = $true } } } } if( $b ) { if( Get-WgCount -gt 0) { Write-Log "Nektere spojeni je pocitane, shazuji tunel." Down exit 0 } else { Write-Log "Nektere spojeni je pocitane, nechavam tunel shozeny." exit 0 } } } # Zjisteni poctu adapteru, ktere maji nastaveny suffix zadany v $domain $domainCount = 0 $dnsClient = Get-DnsClient $netAdapters | ForEach-Object { $netAdapter = $_ $dnsClient | ForEach-Object { if ( ($_.InterfaceIndex -eq $netAdapter.InterfaceIndex) ` -and ($_.ConnectionSpecificSuffix -cmatch "^$($domain)\.{0,1}$" )` -and $($netAdapter.Status -match "Up") ) { $domainCount++ } } } # Spocteni aktivnich WG tunelu $wgCount = Get-WgCount # Pokud zadne adaptery nevyhledavaji v $domain a zaroven neni nahozeny WG, nahodime ho. if( ($domainCount -eq 0) -and ($wgCount -eq 0) ) { Up } # Pokud naopak takovy adapter existuje a WG je nahozeny, shodime ho. elseif ( ($domainCount -gt 0) -and ($wgCount -gt 0) ) { Down } # Jinak jen zapiseme hlasku. else { Write-Log "Neni potreba cokoli menit." }
Hodí se tam, kde je ve firemní síti nasazený protokol IPv6. Šestkový prefix by teoreticky měl být jedinečný a není závislý na rozmarech DHCPka či SLAAC. Oproti DNSkové variantě zmizela proměnná $domain
, kterou nahradila proměnná $prefix
. Prefix je porovnáván jako prostý řetězec proti zkrácenému zápisu adres z powershellového příkazu Get-NetIPAddress
, pokud tedy například chceme identifikovat firemní ULA prefix fd0a:4eec:658e::/48
, vložíme do proměnné $prefix
řetězec fd0a:4eec:658e:
.
Skript wgchange-ipv6.ps1
je zde:
# Nazev WG tunelu $tunnelIf = "wg-pokus" # Prefix IPv6, podle jehoz pritomnosti mezi lokalne nastavenymi # adresami se rozhoduje, zda shodit ci nahodit tunel. $prefix = "fd0a:4eec:658e:" # Pokud je nastaveno na true, bude pred nahozenim WG # kontrolovat existenci pocitanych pripojeni $checkCost = $true # Cesta k souboru, do ktereho je zapisovana aktualni cinnost. # Pokud neni nastaveno, nezapisuje se nikam. $logFile = "" $wgDir = "$([Environment]::GetEnvironmentVariable("ProgramFiles"))\WireGuard" $wgExe = "$($wgDir)\wireguard.exe" $wgConfig = "$($wgDir)\Data\Configurations\$($tunnelIf).conf" $wgConfigEncrypted = "$($wgConfig).dpapi" # Pripadne donacteni zmen konfigurace z externiho souboru $configFile = "$(split-path -parent $MyInvocation.MyCommand.Definition)\wgchange-ipv6.config.ps1" if ( Test-Path -Path $configFile -PathType Leaf ) { . ($configFile) } # -------------------------------------------------- # Zapise aktualni cas a zpravu na standardni vystup, # pripadne do souboru $logFile # -------------------------------------------------- function Write-Log { param ( $msg ) Get-Date -Format "HH:mm:ss" | Write-Host -NoNewline Write-Host ": $($msg)" if($logFile -ne "") { Get-Date -Format "HH:mm:ss" | Out-File -Append -FilePath $logFile -NoNewline -Force Write-Output ": $($msg)" | Out-File -Append -FilePath $logFile -Force } } # ----------- # Shodi tunel # ----------- function Down { Write-Log "Vypinam tunel." & $wgExe /uninstalltunnelservice $tunnelIf } # ------------ # Nahodi tunel # ------------ function Up { $uninstallManager = 0 if(Test-Path -PathType Leaf -Path $wgConfig) { Write-Log "Zapinam ManagerService pro aktualizaci konfigurace." & $wgExe /installmanagerservice $uninstallManager = 1 Start-Sleep -Seconds 1 } if(Test-Path -PathType Leaf -Path $wgConfig) { Write-Log "Aktualizuji a nahazuji tunel." & $wgExe /installtunnelservice $wgConfig } else { Write-Log "Nahazuji tunel." & $wgExe /installtunnelservice $wgConfigEncrypted } if($uninstallManager -eq 1) { Write-Log "Vypinam ManagerService." Stop-Service -Name "WireguardManager" & $wgExe /uninstallmanagerservice } } # ------------------------------------------------------ # Spocte pocet adapteru s nazvem odpovidajicim $tunnelIf # (logicky 1 nebo 0) # ------------------------------------------------------ function Get-WgCount { Get-NetAdapter | where { $_.Name -match $tunnelIf } | Measure-Object -Line | Select-Object -ExpandProperty Lines } # Pokud se system vypina, nereagujeme. if ([ System.Environment ]:: HasShutdownStarted) { Wrile-Log "System se vypina, stav propojeni neresim. Konec" exit 0 } # Spocitani pripojenych adapteru, pokud neni pripojeny zadny, shodime tunel. $activeCount = Get-NetAdapter | where { $_.Status -match "Up" } | where { $_.Name -notmatch $tunnelIf } | Measure-Object -Line | Select-Object -ExpandProperty Lines if ( $activeCount -eq 0 ) { # Pokud nechceme shazovat tunel pri odpojene siti, # můzeme tuhle podminku smazat if ( Get-WgCount -gt 0) { Write-Log "Vsechny adaptery jsou odpojene, shazuji tunel." Down exit 0 } Write-Log "Vsechny adaptery jsou odpojene, koncim." exit 0 } # Kontrola pocitanych spojeni, pokud existuje nejake aktivni, shodime Wireguard if ($checkCost) { $b = $false [void][Windows.Networking.Connectivity.NetworkInformation, Windows, ContentType = WindowsRuntime] $profiles = [Windows.Networking.Connectivity.NetworkInformation]::GetConnectionProfiles() if ( $profiles -ne $null ) { $activeProfiles = Get-NetConnectionProfile $profiles | ForEach-Object { $profile = $_ $cost = $_.GetConnectionCost() $ac = $activeProfiles | where { $_.Name -eq $profile.ProfileName } | Measure-Object -Line | Select-Object -ExpandProperty Lines $rc = $cost.NetworkCostType -ne "Unrestricted" | where { $_ -ne $false } | Measure-Object -Line | Select-Object -ExpandProperty Lines $bd = $costs.BackgroundDataUsageRestricted | where { $_ -ne $false } | Measure-Object -Line | Select-Object -ExpandProperty Lines $rm = $costs.Roaming | where { $_ -ne $false } | Measure-Object -Line | Select-Object -ExpandProperty Lines if( $ac -gt 0 ) { if( ($rc -ne 0) -or ($bd -ne 0) -or ($rm -ne 0) ) { $b = $true } } } } if( $b ) { if( Get-WgCount -gt 0) { Write-Log "Vychozi spojeni je pocitane, shazuji tunel." Down exit 0 } else { Write-Log "Vychozi spojeni je pocitane, nechavam tunel shozeny." exit 0 } } } # Zjisteni indexu wireguardiho adapteru, podle nej pak bude v nasledujicim # prikazu tento adapter vyrazen z vyhledavani $wgIndex = Get-NetAdapter | where { $_.Name -match $tunnelIf } | Select-Object -ExpandProperty ifIndex if("$($wgIndex)" -eq "") { $wgIndex = -1 } # Spocteni aktivnich adres odpovidajicich hledanemu prefixu $addrCount = Get-NetIPAddress | where { $_.InterfaceIndex -notmatch $wgIndex } | where { $_.AddressState -notmatch "Deprecated" } | Select-Object -ExpandProperty IPAddress | where { $_ -cmatch "^$($prefix)" } | Measure-Object -Line | Select-Object -ExpandProperty Lines # Spocteni aktivnich WG tunelu $wgCount = Get-WgCount # Pokud zadne adaptery nemaji adresu odpovidajici prefixu a neni nahozeny tunel, nahodime ho. if( ($addrCount -eq 0) -and ($wgCount -eq 0) ) { Up } # Pokud naopak takovy adapter existuje a WG je nahozeny, shodime ho. elseif ( ($addrCount -gt 0) -and ($wgCount -gt 0) ) { Down } # Jinak jen zapiseme hlasku. else { Write-Log "Neni potreba cokoli menit." }
Při zkušebním spuštění skriptu nejspíš napoprvé skončíme hláškou že spouštění skriptů není povolené. Toto chování lze ovlivnit poweshellovým příkazem Set-ExecutionPolicy
, ovšem to ovlivní všechny spouštěné skripty. Včetně těch, které uživatel dostane mailem odněkud z Číny a poklepe na ně.
Proto raději použijeme parametr příkazového řádku:
poweshell.exe -executionpolicy remotesigned -File "wgchange-ipv6.ps1"
Pokud máme nastaveno a otestováno, můžeme přistoupit k automatickému spouštění. Otevřeme si MMC snap-in Správa počítače [Computer Management] (případně rovnou spustíme compmgmt.msc
) a v plánovači úloh vytvoříme novou úlohu. Zadáme název, účet pod kterým to celé má běžet, povolíme spouštění nezávisle na přihlášení a spouštění s nejvyššími oprávněními.
Přepneme se na kartu Aktivační události [Triggers]
a vytvoříme novou událost. Listbox Začátek úlohy [Begin the task]
přepneme na Při události [On an event]
, v listboxu Protokol [Log]
vyhledáme Microsoft-Windows-NetworkProfile/Operational
, Zdroj [Source]
přepneme na Network Profile
a do ID události [Event ID]
zapíšeme 4004
. Můžeme pro jistotu nastavit i položku Zastavit úlohu spuštěnou déle než [Stop task if running longer than]
.
Přepneme se na kartu Akce [Actions]
a vytvoříme novou akci. Do textového pole Program či skript [Program/script]
vepíšeme
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe
a do Přidat argumenty [Add arguments]
zadáme
-executionpolicy remotesigned -File "Disk:\cesta\k\nasemu\skriptu\wgchange-ipv6.ps1"
Cestu ke skriptu a jeho název je samozřejmě nutné upravit tak, aby odpovídaly skutečnosti.
Na kartě Podmínky [Conditions]
zrušíme Spustit úlohu pouze při připojení k napájení [Start the task only if the computer is on AC power]
.
Všechno uložíme a zkusíme, co to bude dělat. Není špatné si pro první testy zapnout ve spouštěném skriptu logování nastavením proměnné $logFile
.
Pokud vše funguje, můžeme si celé nastavení zkusit zautomatizovat přes skupinové politiky.
Pokud máte firemní síť s dualstackem a tunel chcete - třeba kvůli případným konfliktům síťových rozsahů - provozovat jen přes IPv6 ULA rozsah, bude vhodné přidat prefix tohoto rozsahu do tabulky prefixových politik tak, aby mu počítač dával přednost před prefixem ::ffff:0:0/96, to jest před adresami IPv4.
Nějaké povídání na toto téma najdete zde, já k tomu jen doplním, že podle mě je lepší místo manipulace s celým prefixem fc00::/7
přidat jen ten jeden konkrétní firemní prefix na pozici vyšší než 35. S adresami uvedenými ve skriptu by tedy úprava proběhla pomocí příkazu netsh interface ipv6 add prefixpolicy fd0a:4eec:658e::/48 37 25 store=persistent
. Alespoň tedy teoreticky. V praxi se všechno tvářilo pohodově do chvíle, než jsem počítač restartovala; pak jsem skončila s tabulkou obsahující jen ten jeden přidaný prefix.
C:\WINDOWS\system32>netsh interface ipv6 show prefixpolicies Querying active state... Precedence Label Prefix ---------- ----- -------------------------------- 37 25 fd0a:4eec:658e::/48
Řešením bylo přidat ten jeden prefix a ostatní explicitně znovu nastavit. Vypadalo by to nějak takto:
netsh interface ipv6 set prefixpolicy ::1/128 50 0 store=persistent netsh interface ipv6 set prefixpolicy ::/0 40 1 store=persistent netsh interface ipv6 add prefixpolicy fd0a:4eec:658e::/48 37 25 store=persistent netsh interface ipv6 set prefixpolicy ::ffff:0:0/96 35 4 store=persistent netsh interface ipv6 set prefixpolicy 2002::/16 30 2 store=persistent netsh interface ipv6 set prefixpolicy 2001::/32 5 5 store=persistent netsh interface ipv6 set prefixpolicy fc00::/7 3 13 store=persistent netsh interface ipv6 set prefixpolicy fec0::/10 1 11 store=persistent netsh interface ipv6 set prefixpolicy 3ffe::/16 1 12 store=persistent netsh interface ipv6 set prefixpolicy ::/96 1 3 store=persistent
Pokud chceme spouštět skupinové politiky při startu přes tunel, je vhodné nastavit dobu čekání na dostupnost Active Directory. Toho můžeme dosáhnout pomocí skupinových politik (či lokálně přes gpedit.msc) v položce 'Konfigurace počítače/Šablony pro správu/Systém/Zásady skupiny/Zadat dobu čekání pro zpracování zásad při spuštění' [Computer Configuration/Adminitrative templates/System/Group policy/Specify startup policy processing wait time]. Podle dokumentace by ve výchozím nenastaveném stavu měl systém používat hodnotu 30 sekund, ale při testech to jaksi nefungovalo, nečekalo. Poté, co jsem tam těch třicet sekund explicitně zadala, se aplikace politik chytla.
A ještě k DNS - pokud se používají DNS za tunelem, Wireguard si podle všeho při nahození tunelu zapne i blokování DNS komunikace mimo tunel, patrně kvůli ochraně proti případným DNS leakům. A protože Wireguard nijak nedetekuje, jestli je tunel průchozí nebo ne, může nastat situace, kdy firemní síť přestane odpovídat (výpadek spojení, problém se serverem atd.) a uživatel se najednou nedostane ani na Seznam/Novinky/Facebook/atd.
Řešením samozřejmě je buď umístit druhou stranu tunelu na opravdu spolehlivou linku (například někam do datacentra), nebo raději mít k dispozici druhý nameserver, přístupný přes druhého nezávislého peera (třeba v jiné pobočce firmy).
Nasazení do ostrého provozu plánuji po novém roce, uvidíme, co na mě pak ještě vypadne. Kdyžtak to sem doplním.
Testováno s Wireguardem 0.3.4 a Windows 10 rel. 1909 a 20H2.
Edit 12.4.2021: Opravila jsem u obou skriptů rozpoznávání počítaných spojení, které v původní verzi shazovalo wifinu i v případě, že byl na daný adaptér navázaný jakýkoli profil se zapnutým počítáním dat bez ohledu na to, jestli se právě používal.
Edit 5.7.2022:
- do funkce "Up" jsem doplnila přešifrování konfiguračního souboru v případě, že uživatel s administrátorskými právy vypnul ikonku Wireguardu v tray liště.
- u připojení závislém na DNS suffixu jsem opravila chybu, která nastávala v případě, že bylo nahozené VPN spojení se stejným DNS suffixem (z nějakého důvodu Windows neberou VPNky jako síťový adaptér).
Edit 10.7.2022:
Metoda GetInternetConnectionProfile() objektu NetworkInformation nevrací připojení s výchozí routou do Internetu, takže orientovat se podle ní u detekce počítaného spojení není vhodné. Přepsala jsem to tak, aby se tunel shodil, pokud je kterékoli ze spojení nastavené jako počítané.
Edit 18.10.2022:
Po předchozí úpravě to shazovalo spojení i v okamžiku, kdy bylo spojení, nastavené jako počítané, neaktivní. Opraveno.
Tiskni
Sdílej:
sem toteďka myslela že *.ps1 sou zdrojáky v pascalu :D
Tímhle způsobem je správné přistupovat ke každým Windows (nebo jinému proprietárnímu OS). Ideálně virtualizovat, udělat obraz disku a když něco ve Windows shnije, tak se prostě obnoví celý disk. Ta virtuálka nebo fyzický počítač pak běží v oddělené síti, za firewallem, nemůže s nikým komunikovat a nic nemůže komunikovat s ní – kromě počítače, který slouží jako překladiště pro výměnu dat.
Díky tomu odpadá i ten problém s VPN – ten případný VPN klient běží jinde než na těch Windows (dávat do nich heslo k firemní VPN nebo soukromé klíče je hazard).
Já zásadně nic nepřeinstalovávám, vždy se snažím vše vyřešit a kápnout na problém, i když bych to měl řešit celý den. Výsledkem je, že jsem tím ve finále ušetřil spoustu času nejen sobě, ale i jiným správcům, co si přišli pro radu.
Tohle mi dává smysl u svobodného softwaru, kde máš možnost se podívat dovnitř a zjistit, jak to tam funguje (byť i to může zabrat dost času). Ale ne u proprietárního softwaru, který funguje jako černá skříňka, kde se věci prostě dějí a ty často nemáš šanci zjistit proč, natož, abys to chování mohl změnit.
Já se do něj párkrát dívat musel nebo jsem i něco měnil. Ale i když to sám neděláš a jen třeba najdeš hotové řešení na internetu, tak toto řešení dost často pochází od někoho, kdo se do těch zdrojáků podíval – a v případě proprietární černé skříňky tohle nikdo udělat nemůže – jen výrobce toho softwaru, který na to má monopol a na kterého jsi odkázaný.