mitmproxy, DevTools, Gradle: tri sloja iza VPN-a
Loopback nikad ne ulazi u tunel. Razvrstajte simptom u slušač, trust store ili paketni filtar i popravite sloj koji je stvarno pao.
VPN se povezuje, a tri nepovezana alata padaju na tri različita načina istog poslijepodneva. mitmproxy prestaje viđati zahtjeve, Chrome odbija debugger, a Gradle baca BindException dok veže lokalni socket. Zajednička sumnja je da tunel blokira localhost. Ne može: 127.0.0.1 obrađuje se unutar kernela i nikada ne dolazi do adaptera, a kamoli do pristupnika.
Tri sloja, tri različita kvara
Ono što se promijenilo s klijentom nije ruta do loopbacka. To su lokalni proxy, mašinski trust store i paketni filtar, i svaki od njih kvari drugi dio razvojnog toka. Razvrstavanje simptoma u pravi red većina je dijagnoze:
| Symptom | Layer | First check |
|---|---|---|
| Proxy sees no traffic | Local proxy or listener | ss -lntp, or netstat -ano on Windows |
| TLS error in one tool only | Trust store | Which CA bundle does that runtime read? |
| Local bind or connect refused | Packet filter or port owner | Who holds the port, and what rule drops it? |
Gotovo svaki ovakav izvještaj počinje od zadnjeg reda i ide prema gore, što je naopako. Tunel je jedini sloj koji dokazivo ne može vidjeti loopback promet, pa zaslužuje najmanje sumnje. Počnite od onoga što je proces vezao, zatim pitajte kojim certifikatima vjeruje i tek onda pogledajte politiku na mašini.
Počnite sa slušačem, ne s tunelom
Kada proxy na 127.0.0.1:8080 prestane primati promet, dogodilo se jedno od troje: nikad nije pokrenut, vezao je drugi port ili je filtar ispustio loopback vezu. Popis slušajućih socketa odgovara na to jednom naredbom, a pokazuje i koji proces drži port kada se dva alata ne slažu oko toga tko je bio prvi.
Lokalna adresa u pretrazi rute potvrđuje istu stvar s druge strane. ip route get prema loopback odredištu prijavljuje loopback uređaj, nikada tunel, što je korisna rečenica koju treba držati spremnom kada netko predloži promjenu usmjeravanja kao rješenje.
Sloj proxyja: okruženje nije konfiguracija
Mnogi korporativni klijenti pokreću HTTP proxy i očekuju da ga aplikacije koriste. Postavljanje HTTPS_PROXY u ljusci popravlja naredbene alate koji ga poštuju, a ne čini ništa za alat koji čita vlastitu datoteku postavki. Gradle, Selenium i gRPC svaki se savjetuje s vlastitom konfiguracijom, a proxy izvezen u jednom terminalu nevidljiv je za demona kojeg pokrene IDE.
Alati za kontejnere uobičajeno su mjesto gdje to postaje vidljivo. Loopback kontejnera njegov je vlastiti, pa 127.0.0.1 unutar kontejnera nikada ne znači proxy hosta; potrebna je adresa hosta ili postavka host mreže. Popravak koji radi u ljusci a pada u buildu obično je ovaj red, ne tunel.
Sloj povjerenja: alat čita drugi store
Presretanje je druga promjena i stvara najzavodljivije pogreške. Klijent predstavlja vlastiti certifikat za pregledane veze, pa preglednik koji vjeruje korporativnom korijenu uspijeva, dok alat s ugrađenim CA storeom pada. Python requests kroz certifi klasičan je slučaj: store operacijskog sustava može biti ispravan a zahtjev ipak pada, jer to okruženje nikada ga ne čita. Tekst pogreške rijetko spominje presretanje, zato se ovaj red pogrešno dijagnosticira kao pokvarena završna točka.
Usporedite što završna točka doista predstavlja s onim što je alat validirao. openssl s_client prikazuje lanac koji je poslao poslužitelj; vlastiti izlaz validacije alata prikazuje što je odlučio. Kada se ne slažu, REQUESTS_CA_BUNDLE ili SSL_CERT_FILE je poluga za to okruženje, a korporativni korijen pripada u store koji to okruženje čita, a ne na globalno mjesto koje poštuju samo neki alati.
Promjena verzije koja popravi SSL pogrešku dokaz je o politici povjerenja i šifri, ne o VPN-u. Spuštanje verzije Pythona zbog kojeg SOAP klijent proradi promijenilo je ugrađeni CA store i zadane TLS postavke; mrežna staza nije se pomaknula.
Sloj filtra: i on može ispustiti loopback
Treća promjena je paketni filtar, a neki proizvodi instaliraju pravila koja ispuštaju promet koji ne ulazi u tunel. Lokalni slušači mogu biti uključeni. To pretvara radni socket u odbijenu ili isteklu vezu, a nastala pogreška izgleda kao bug u aplikaciji, ne kao politika na mašini.
Vlasništvo nad portom druga je polovica ovog sloja. BindException znači da socket nije mogao biti otvoren, što je drugačiji neuspjeh od odbijene veze. Provjerite drži li port već drugi proces prije nego optužite filtar, zatim potražite pravilo koje ispušta lokalni promet i dodajte najuže dopuštenje koje proizvod podržava. Dva alata koja se natječu za isti debug port daju točno istu poruku kao blokada politikom, a samo jedan od njih popravlja se promjenom vatrozida.
Debug port Chromea pada u istoj obitelji. Preglednik se pokrene, upravljački program ne može doći do DevTools završne točke, a poruka imenuje DevTools, ne mrežu. Dodatne zastavice pokretanja i suvišan upravitelj upravljačkih programa mijenjaju koji proces drži port, zato se njihovo uklanjanje ponekad čini kao popravak VPN-a.
Popravite sloj koji je pao
Popravite sloj koji je pao, ne tunel. Nedostupnom loopback slušaču treba popraviti slušač ili port. Nepovjerenom certifikatu treba korporativni korijen instaliran tamo gdje to konkretno okruženje gleda, uz usko izuzeće. Filtru koji ispušta lokalni promet treba konkretno pravilo dopuštenja, a ne isključen filtar, jer isključivanje ponovno otvara i sve drugo što je štitio.
Ponovno povezivanje VPN-a ne testira nijedan od ovih slojeva. Ono samo ponovno pokreće promjenu koja ih je pokvarila, zato se ista tri kvara vraćaju nakon svakog ponovnog povezivanja i nestaju nakon svakog restarta koji ostavi klijent neaktivnim.