mitmproxy, DevTools, Gradle: VPN артындағы үш қабат
Loopback туннельге ешқашан кірмейді. Симптомды тыңдаушыға, сенім қоймасына немесе пакет сүзгісіне жатқызып, шын мәнінде істен шыққан қабатты жөндеңіз.
VPN қосылады, және өзара байланысы жоқ үш құрал үш түрлі жолмен істен шығады сол түстен кейін. mitmproxy сұраныстарды көруді тоқтатады, Chrome дәлелдеушіден бас тартады, ал Gradle BindException жергілікті сокетті байланыстырған кезде лақтырады. Ортақ күдік — туннель localhost-ты блоктайды. Ол мұны істей алмайды: 127.0.0.1 ядроның ішінде өңделеді және ешқашан адаптерге жетпейді, қақпаға келсек, одан да бетер.
Үш қабат, үш түрлі ақау
Клиентпен өзгерген нәрсе — loopback-қа барар жол емес. Бұл жергілікті прокси, машинаның сенім қоймасы және пакет сүзгісі, және олардың әрқайсысы әзірлеушінің жұмыс ағынының әртүрлі бөлігін бұзады. Симптомды дұрыс жолға қою — диагностиканың көп бөлігі:
| 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? |
Бұл түрдегі әрбір дерлік есеп соңғы жолдан басталып, жоғары қарай жүреді, бұл керісінше. Туннель — loopback трафигін көре алмайтыны дәлелденген жалғыз қабат, сондықтан ол ең аз күдікке лайық. Процестің нені байланыстырғанынан бастаңыз, содан кейін ол қандай сертификаттарға сенетінін сұраңыз, тек содан кейін ғана машинадағы саясатқа қараңыз.
Туннельден емес, тыңдаушыдан бастаңыз
Қашан 127.0.0.1:8080 мекенжайындағы прокси трафикті қабылдауды тоқтатса, үш нәрсенің біреуі болды: ол ешқашан іске қосылмады, басқа портты байланыстырды немесе сүзгі loopback байланысын тастады. Тыңдап тұрған сокеттерді тізімдеу мұны бір командамен жауаптайды, сонымен қатар екі құрал кім бірінші болғаны туралы келіспегенде қай процесс портқа ие екенін көрсетеді.
Маршрутты іздеудегі жергілікті мекенжай дәл сол нәрсені екінші жақтан растайды. ip route get loopback межелісіне қарай loopback құрылғысын хабарлайды, туннельді ешқашан емес, бұл біреу маршрутты өзгертуді шешім ретінде ұсынғанда дайын ұстауға пайдалы сөйлем.
Прокси қабаты: орта — конфигурация емес
Көптеген корпоративтік клиенттер HTTP проксисін іске қосады және қосымшалар оны пайдаланады деп күтеді. Орнату HTTPS_PROXY shell ішінде оны құрметтейтін пәрмен жолы құралдарын түзейді, бірақ өз параметрлер файлын оқитын құралға ештеңе істемейді. Gradle, Selenium және gRPC әрқайсысы өз конфигурациясымен кеңеседі, ал бір терминалда экспортталған прокси IDE іске қосқан демонға көрінбейді.
Контейнер құралдары — бұл көрінетін әдеттегі орын. Контейнердің loopback-ы өзінікі, сондықтан 127.0.0.1 контейнер ішіндегі мекенжай ешқашан хост проксиін білдірмейді; хост мекенжайы немесе хост желісінің параметрі қажет. Shell-де жұмыс істеп, құрастыруда сәтсіз болатын түзету әдетте осы жол, туннель емес.
Сенім қабаты: құрал басқа қойманы оқиды
Ұстау — екінші өзгеріс және ең адасушы қателерді туғызады. Клиент тексерілетін қосылымдар үшін өз сертификатын ұсынады, сондықтан корпоративтік түбірге сенетін браузер сәтті болады, ал кіріктірілген CA қоймасы бар құрал сәтсіз болады. certifi арқылы Python requests — классикалық жағдай: операциялық жүйе қоймасы дұрыс болуы мүмкін, бірақ сұраныс бәрібір сәтсіз болады, өйткені ол орындау ортасы оны ешқашан оқымайды. Қате мәтіні ұстауды сирек атайды, сондықтан бұл жол қате түрде бұзылған соңғы нүкте деп диагностикаланады.
Соңғы нүктенің шын мәнінде ұсынатынын құралдың растағанымен салыстырыңыз. openssl s_client сервер жіберген тізбекті көрсетеді; құралдың өз растау шығысы оның не шешкенін көрсетеді. Олар сәйкес келмесе, REQUESTS_CA_BUNDLE немесе SSL_CERT_FILE сол орындау ортасы үшін тұтқа болып табылады, ал корпоративтік түбір сол орта оқитын қоймаға тиесілі, тек кейбір құралдар құрметтейтін жаһандық орынға емес.
SSL қатесін түзететін нұсқа өзгерісі — VPN туралы емес, сенім мен шифр саясаты туралы дәлел. SOAP клиентін іске қосқан Python нұсқасының төмендеуі кіріктірілген CA қоймасын және әдепкі TLS параметрлерін өзгертті; желі жолы қозғалмады.
Сүзгі қабаты: ол loopback-ты да тастай алады
Үшінші өзгеріс — пакет сүзгісі, және кейбір өнімдер туннельге кірмейтін трафикті тастайтын ережелерді орнатады. Жергілікті тыңдаушылар да қамтылуы мүмкін. Бұл жұмыс істеп тұрған сокетті қабылданбаған немесе уақыты өткен қосылымға айналдырады, ал пайда болған қате машинадағы саясат емес, қосымшадағы ақау сияқты көрінеді.
Портқа иелік — бұл қабаттың екінші жартысы. BindException сокетті ашу мүмкін болмағанын білдіреді, бұл қосылымның қабылданбауынан өзгеше сәтсіздік. Сүзгіні кінәламас бұрын портты басқа процесс ұстап тұрмағанын тексеріңіз, содан кейін жергілікті трафикті тастайтын ережені іздеп, өнім қолдайтын ең тар рұқсатты қосыңыз. Бір дәлелдеу порты үшін бәсекелесетін екі құрал саясат блогымен бірдей хабарлама шығарады, және олардың тек біреуі өрт қабырғасын өзгертумен түзеледі.
Chrome-ның дәлелдеу порты сол отбасында сәтсіз болады. Браузер іске қосылады, драйвер DevTools соңғы нүктесіне жете алмайды, ал хабарлама желіні емес, DevTools-ты атайды. Қосымша іске қосу жалаушалары мен артық драйвер менеджері қай процестің портқа ие екенін өзгертеді, сондықтан оларды алып тастау кейде VPN-ды түзеткендей көрінеді.
Істен шыққан қабатты жөндеңіз
Туннельді емес, істен шыққан қабатты жөндеңіз. Қолжетімсіз loopback тыңдаушысына оның тыңдаушысын немесе портын түзету қажет. Сенімсіз сертификатқа корпоративтік түбірді сол нақты орындау ортасы қарайтын жерге орнату қажет, ерекшелік тар ұсталып. Жергілікті трафикті тастайтын сүзгіге өшірілген сүзгі емес, нақты рұқсат ережесі қажет, өйткені өшіру ол қорғаған қалғанның бәрін де қайта ашады.
VPN-ды қайта қосу бұл қабаттардың ешқайсысын тексермейді. Ол тек оларды бұзған өзгерісті қайта іске қосады, сондықтан сол үш ақау әр қайта қосылудан кейін қайтады және клиентті белсенді емес қалдыратын әр қайта жүктеуден кейін жоғалады.