Paklauskite, ar Windows ugniasienė gali viena atlikti avarinio jungiklio vaidmenį, ir gausite du užtikrintus bei nesuderinamus atsakymus. Vienas sako, kad sąsajos tipo taisyklė atlieka visą darbą; kitas – kad be scenarijų ji neveikia. Abu aprašo pusę to paties mechanizmo. Ugniasienė gali išreikšti blokavimą, o ar rezultatas tikrai suveikia uždarai, priklauso nuo trijų dalykų: kaip Windows klasifikuoja tunelio adapterį, ar išlieka galinio taško išimtis ir ar padengta vardų skyra bei IPv6. Suklyskite bent viename ir mašina arba nutekės, arba praras visą ryšį.

Trys sąlygos, šia tvarka

Pirmoji sąlyga – klasifikacija, ir ji sprendžia, ar norimą taisyklę apskritai galima išreikšti. Windows ugniasienės taisykles galima apriboti pagal sąsajos tipą: laidinę, belaidę arba nuotolinę prieigą. Politika, kuri blokuoja išeinantį srautą fiziniuose tipuose ir leidžia tunelį, veikia tik jei Windows atpažįsta tunelį kaip nuotolinę prieigą.

Antroji sąlyga – galinio taško išimtis. Prieš atsirandant bet kokiam tuneliui, klientas turi pasiekti VPN serverį per fizinį adapterį, todėl visiškas to adapterio blokavimas užkerta būtent tą ryšį, kuris blokavimą padarytų nereikalingą. Išimtis turi įvardyti serverį ir jo prievadą, o paketas turi išeiti per fizinę šliuzą, o ne į dar nepakeltą tunelį.

Trečioji – aprėptis. Taisyklių rinkinys, kuris blokuoja IPv4 ir pamiršta IPv6, arba leidžia vietiniam sprendėjui ieškoti galinio taško ir tuo leidžia bet kokią kitą paiešką, atvirai nepavyksta būtent tame lange, kuriam avarinis jungiklis egzistuoja. Tai projektavimo spraga, o ne ugniasienės klaida. Tai ir spraga, kuri išgyvena kiekvieną bandymą ant stalo.

Klasifikacija – pirmieji vartai

Pažiūrėkite, ką Windows mano apie adapterius, prieš rašydami nors vieną taisyklę. Natyvus Windows VPN ryšys paprastai pasirodo kaip nuotolinė prieiga. Trečiosios šalies klientas, kuris susikuria savo virtualų adapterį, dažnai pasirodo kaip laidinis, o tai reiškia, kad blokavimas, apribotas laidiniams adapteriams, blokuoja ir tunelį.

Get-NetConnectionProfile | Select-Object Name,InterfaceAlias,NetworkCategory
Get-NetAdapter | Select-Object Name,InterfaceDescription,Status,ifIndex
Get-NetFirewallProfile | Select-Object Name,Enabled,DefaultOutboundAction

Trečioji komanda parodo, ar jau galioja numatytasis išeinančio srauto blokavimas, o tai keičia visą dizaino formą. Jei numatytasis jau yra blokavimas, rašote leidimo taisykles, o ne išimtis leidžiančiai bazei, ir tai daug lengviau apmąstoma pozicija.

Jei jūsų tunelio adapteris praneša esąs laidinis, viena ugniasienė nėra tinkamas įrankis uždarai nepavykstančiam dizainui, ir joks taisyklių derinimas to nepakeis. Tai atvejis, kai antroji nuomonė kiekvienoje forumo temoje yra teisinga.

Galinio taško išimčiai reikia ne tik taisyklės, bet ir maršruto

Tarkime, klasifikacija veikia. Išimtis susideda iš dviejų dalių, ir jos gyvena skirtingose posistemėse. Ugniasienės taisyklė leidžia srautą; pagrindinio kompiuterio maršrutas leidžia jam išeiti per tinkamą sąsają, kol tunelis nuleistas.

New-NetFirewallRule -DisplayName "VPN endpoint allow" -Direction Outbound -Action Allow \
  -Protocol TCP -RemoteAddress 203.0.113.9 -RemotePort 443 -InterfaceType Wired,Wireless
New-NetRoute -DestinationPrefix 203.0.113.9/32 -InterfaceIndex 12 -NextHop 192.168.1.1
Get-NetRoute -DestinationPrefix 203.0.113.9/32

Be maršruto išimtis padeda tik tol, kol numatytasis maršrutas dar rodo į fizinę šliuzą. Kai klientas įdiegia savo numatytąjį maršrutą ir tada miršta, leidžiami paketai neturi kur prasmingai eiti ir ryšio atkurti neįmanoma. Ta nesėkmė atrodo kaip sugedęs klientas, o iš tikrųjų tai trūkstamas maršrutas.

Laikykite išimtį kuo siauresnę, kiek klientas leidžia. Vienas adresas ir vienas prievadas yra peržiūrimi; diapazonas, apimantis visą teikėjo tinklą, ne. Ta platesnė taisyklė leidžia ir visa kita, kas talpinama pas tą patį teikėją, o tai paprastai daugiau, nei ketinote.

DNS ir IPv6 yra ten, kur ji atvirai nepavyksta

Vardų skyra yra klasikinė nuotėkis. Jei galinis taškas yra pagrindinio kompiuterio vardas, klientas turi jį išspręsti prieš atsirandant tuneliui, o tai reiškia, kad fiziniam adapteriui turi būti leista pasiekti sprendėją. Ta pati teisė išleidžia bet kokią kitą paiešką, kol tunelis nuleistas, ir vienos paieškos pakanka atskleisti, ką ketinote aplankyti.

IPv6 yra antrasis. Taisyklės, parašytos IPv4, neapima kitos šeimos, o daugelis klientų įdiegia tik IPv4 maršrutus. Todėl mašina su natūraliu IPv6 ryšiu gali toliau kalbėtis su internetu, kol IPv4 pusė tvirtai blokuota, o avarinis jungiklis visą laiką praneša apie sėkmę.

GapWhat leaksControl
Resolver permitted for endpoint lookupEvery name queried while downPin the endpoint as an address, or block non-tunnel DNS
Rules only for IPv4Full IPv6 connectivityAdd the same rules for the other family
Application bound to physical interfaceIts own trafficFirewall cannot fix this; change the binding

Trečią eilutę verta suprasti, o ne apeiti. Ugniasienė sprendžia apie paketus, o ne apie tai, kokios sąsajos programa paprašė, ir programą, kuri aiškiai prisiriša, gali būti sunku suvaldyti. Tai argumentas už kliento pusės avarinį jungiklį, veikiantį žemiau programos, o ne už daugiau taisyklių.

Bandykite sustabdydami klientą, o ne ištraukdami kabelį

Vienintelis prasmingas bandymas yra tas, kuris imituoja nesėkmę, nuo kurios saugotės. Sustabdykite paslaugą, užmuškite procesą arba išjunkite kliento sukurtą adapterį, tada pabandykite pasiekti internetą ir vardą:

Stop-Service -Name "YourVpnService" -Force
Test-NetConnection -ComputerName 1.1.1.1 -Port 443
Resolve-DnsName example.com
Test-NetConnection -ComputerName 2606:4700:4700::1111 -Port 443

Visi trys turėtų nepavykti. Jei pirmasis pavyksta, blokavimas negalioja; jei antrasis pavyksta ten, kur pirmasis nepavyko, turite DNS nuotėkį; jei trečiasis pavyksta, IPv6 nepadengtas. Kiekvienas rezultatas nurodo tiksliai vieną iš aukščiau esančių spragų.

Pakartokite bandymą po miego ir pabudimo, nes ugniasienės profilis gali pasikeisti, kai Windows nusprendžia, kad tinklas viešas ar privatus, o profilį apribotos taisyklės jam seka. Dizainas, kuris laikosi ant stalo ir nepavyksta traukinyje, yra vieną kartą išbandytas dizainas.

Jei klasifikacijos vartai ar DNS reikalavimas daro vien tik ugniasienės požiūrį netinkamą, kliento pusės avarinis jungiklis yra sąžiningas atsakymas. Jei tunelis vietoj to baigiasi maršrutizatoriuje, politika turėtų priklausyti maršrutizatoriui, nes viena taisyklė ten apima kiekvieną įrenginį už jo ir nepriklauso nuo to, kaip Windows vadina adapterį.

Susiję straipsniai