Domeno ste dodali na seznam dovoljenih, poizvedba pride do vaše aplikacije, ujemalnik vrne dovoljeno, stran pa se še vedno nikoli ne naloži. V tem trenutku večina začne prepisovati ujemalnik in dodajati primerjave z nadomestnimi znaki. Po mojih izkušnjah je ujemalnik običajno pravilen, napaka pa leži eno plast nižje: v odgovoru DNS, ki ste ga sintetizirali, na poti, ki ste jo namestili, ali v vtičnici, s katero ste poizvedbo posredovali. Seznam je lažji del; pot paketa je mesto, kjer se seznami dovoljenih zlomijo.

Ujemalnik je redko krivec

Najprej je treba ločiti blokirano od pokvarjenega. Blokirano ime bi moralo hitro in vidno odpovedati, ker brskalnik dobi odgovor, da ime ne obstaja, in se ustavi. Pokvarjeno ime visi, poskuša znova prek IPv6, preklopi na drug prenos in vas pusti z vrtljivim indikatorjem. Če vidite vrtljivi indikator, vaš seznam dovoljenih verjetno odgovarja z nečim, s čimer odjemalec ne more ničesar storiti.

Prazen zapis A je klasična napaka. Vračanje NOERROR z nič odgovori je videti kot veljaven odgovor, zato ga stub razreševalnik sprejme, brskalnik poskusi znova, poskusi AAAA, poskusi drug razreševalnik in obupa veliko pozneje. Koda odgovora 3, to je NXDOMAIN, s ponovljenim razdelkom vprašanja in kopiranim ID-jem transakcije pogovor konča takoj. Uporabite jo za vsako ime, ki ga namerno zavrnete.

IPv6 si zasluži enako odločitev in ne privzeto vrednost. Če na A odgovorite z NXDOMAIN in spustite AAAA, lahko odjemalec doseže blokirano ime prek IPv6 in filter pušča. Nekatere izvedbe na blokirane poizvedbe AAAA odgovorijo z naslovom loopback, da povezava takoj odpove, namesto da bi prešla na rezervo. Izberite eno politiko, uporabite jo za oba tipa zapisov in beležite oba.

Pot, ki ujame vse, ima v lasti vse

Zasnova samo z DNS nikoli ne doda addRoute("0.0.0.0", 0), zato v vmesnik TUN vstopijo le poizvedbe, vse ostalo pa še naprej uporablja spodnje omrežje. To je varna oblika in pojasnjuje tudi, zakaj nekateri seznami dovoljenih delujejo v omrežju Wi-Fi in odpovejo v mobilnem omrežju.

V trenutku, ko obstaja privzeta pot, je vsak tok vaš. Paket TCP, ki prispe na vmesnik in ni ne posredovan ne odgovorjen, stoji v čakalni vrsti, dokler odjemalcu ne poteče čas, in nobene napake ni za beleženje, ker ni nič odpovedalo. Videl sem nekoga, ki je popoldne preživel ob pokvarjenem seznamu dovoljenih, ki je bil v resnici manjkajoči posredovalnik za vrata 443. Beležite protokol in cilj vsakega paketa, ki se ga odločite zavreči.

Vtičnica razreševalnika mora zapustiti tunel

Posredovanje je mesto naslednje pasti. Razreševalniki operaterja pogosto živijo na zasebnem naslovu, do katerega tunel ne seže, zato posredovana poizvedba ne gre nikamor in aplikacija sporoči potek časa branja. Odobrene poizvedbe pošljite razreševalniku, za katerega veste, da je dosegljiv, in najprej predajte to vtičnico v VpnService.protect(). Nezaščitena vtičnica pošlje poizvedbo nazaj v vaš lastni tunel, kjer znova prispe do aplikacije in kroži, dokler se ne sproži časovna omejitev.

Napaka je videti enako kot prekinitev omrežja, zato v poročilih o napakah preživi tako dolgo. Vodite števce poslanih poizvedb in prejetih odgovorov: če prvo število raste, drugo pa ostane na nič, gledate vtičnico, ne seznama.

Velikost in kontrolne vsote odpovejo brez sporočila

Tiha zavrženja prihajajo tudi od velikosti. Odgovor DNS z velikim naborom odgovorov ali rokovanje TCP z velikodušnimi možnostmi lahko preseže MTU poti, ki ga nikoli niste izrecno nastavili; fragment izgine gorvodno in odjemalec bodisi poskusi znova z manjšim bodisi preneha poskušati. Nastavitev MTU vmesnika na 1280 je konzervativna izbira, ki preživi večino mobilnih poti, in izrecnost je boljša od podedovane privzete vrednosti, ki je nihče ni izmeril.

Če pakete sestavljate sami, je kontrolna vsota drugi tihi morilec. Kontrolna vsota UDP, izračunana čez psevdo glavo, ki izpušča dolžino UDP ali polje protokola, ustvari paket, ki je na vaši strani videti pravilen, prejemnik pa ga zavrže brez sledi. Primerjajte svojo psevdo glavo s specifikacijo polje za poljem in med odpravljanjem napak izpišite izračunano kontrolno vsoto za en znan tok.

Česa VpnService ne bo storil za vas

Dve omejitvi velja poznati, preden oblikujete okoli njiju. Nobena običajna aplikacija ne more namestiti sistemskega posredovalnika ali datoteke PAC zunaj Wi-Fi, in ta del se ni spremenil. Pot za posamezne aplikacije se je spremenila: pred API 29 VpnService.Builder sploh ni mogel nositi posredovalnika, od API 29 pa setHttpProxy(ProxyInfo.buildPacProxy(uri)) platformi preda skript PAC za ocenjevanje za omrežje VPN. Pravila ocenjujte v svoji kodi, ko ciljate starejše API ali ko model PAC ne more izraziti pravila. Tudi UDP ni brezplačen: brskalniki pošiljajo skozi posredovalnik SOCKS samo TCP, in večina odjemalcev SOCKS5 nikoli ne izvede UDP ASSOCIATE, zato zasnova, ki temelji na posredovalniku, zavrže ali spusti UDP, medtem ko je TCP videti zdrav.

Ta druga omejitev je razlog, da lahko protokol, ki temelji na UDP, deluje v običajnem omrežju in odpove v trenutku, ko se poveže vaš VPN. Če naj bi tunel prenašal UDP, mora posredovalnik izvesti posredovalno pot zanj, ne le poti TCP z drugim tipom vtičnice.

Preverjajte v tem vrstnem redu

Pojdite po seznamu po vrsti in se ustavite pri prvem koraku, ki odpove, ker je vsako poznejše preverjanje šum, dokler prejšnje ne zdrži.

  1. Naštejte nameščene poti in potrdite, ali paketi, ki niso DNS, sploh vstopajo v vmesnik TUN.
  2. Zabeležite ime poizvedbe, odločitev in kodo odgovora za eno blokirano in eno odobreno ime.
  3. Potrdite, da je vtičnica razreševalnika zaščitena in da izbrani razreševalnik odgovarja iz notranjosti tunela.
  4. Potrdite MTU vmesnika in kontrolno vsoto enega ročno sestavljenega odgovora.
  5. Ponovite isto stran v Wi-Fi in mobilnem omrežju, ker se razreševalniki operaterja in MTU poti razlikujejo.

Če vseh pet zdrži in se stran še vedno obesi, je naslednji osumljenec posredovalnik sam: primerjajte zajeto zahtevo z zajetim odgovorom in poiščite manjkajoče število bajtov ali napol zaprto vtičnico. Referenca VpnService.Builder pokriva pogodbe o poti, DNS in MTU, protect() pa je ločen klic VpnService in ne možnost graditelja; povezan vmesnik pomeni le, da je prva pogodba izpolnjena.

Sorodni članki