Перанакіраванне партоў у кропцы доступу Android: тры кропкі ўваходу
Тэлефон, шлях аператара і выхад VPN паказваюць розныя межы. Вызначце, якая машына трымае слухаючы сокет, перш чым адкрываць порт.
Вы ўключылі кропку доступу, падключылі VPN, адкрылі порт у праграме, а іншая прылада ўсё роўна не можа злучыцца. Не хапае звычайна не самога порта, а адказу на пытанне, якая машына трымае слухаючы сокет і які адрас павінна дасягнуць іншая прылада. Я іду ад тэлефона вонкі, бо экран, на якім вы знаходзіцеся, паказвае, якую з трох кропак уваходу вы насамрэч правяраеце.
Пачніце там, дзе служба сапраўды працуе
Адкрыйце праграму, якая павінна прымаць злучэнне, і прачытайце яе старонку стану. Калі там сказана, што яна слухае, запішыце адрас, да якога яна прывязана, бо гэтая дэталь вырашае большасць выпадкаў ніжэй. Праграма, прывязаная да 127.0.0.1, даступная толькі з тэлефона, і ні кліент кропкі доступу, ні адлюстраванне аператара, ні выхад VPN гэтага не зменяць.
Затым пацвердзіце, якая прылада запускае службу. Калі тэлефон, сокет належыць гэтай праграме; калі ноўтбук за кропкай доступу, слухач і яго міжсеткавы экран належаць ноўтбуку, а тэлефон толькі перасылае пакеты. Гэта розныя схемы, і іх змешванне прыводзіць да таго, што порт, адкрыты ў адным месцы, нічога не робіць у іншым.
У адладкаванай зборцы adb shell пералічвае сокеты праз /proc/net/tcp, але для большасці людзей сумленнай крыніцай з’яўляецца ўласны стан праграмы.
Першая кропка ўваходу: іншая прылада ў кропцы доступу
Гэта лакальны выпадак і самы просты. Іншая прылада дасягае тэлефона па адрасе, які бачыць як свой шлюз, на порце, які слухае праграма, і нічога па-за кропкай доступу не ўдзельнічае. Адлюстраванне аператара не патрэбна, бо трафік не пакідае лакальны сегмент.
Дзве рэчы ламаюць гэта: праграма прывязана да loopback, або кліенцкая палітыка на тэлефоне не дазваляе лакальнае злучэнне. Правярайце ўласным пратаколам праграмы, а не голым TCP, бо слухач, які прымае і потым адхіляе, здалёк выглядае як зачынены порт.
Калі служба на падключаным ноўтбуку, адрас кропкі доступу тэлефона зусім не мэта; патрэбны адрас ноўтбука на інтэрфейсе кропкі доступу і слухач на ім, а тэлефон трымае толькі перасылку.
Другая кропка ўваходу: шлях аператара
Дасягнуць тэлефона з мабільнай сеткі іншая задача, і часцей за ўсё яна не працуе для IPv4. Аператары ставяць апараты за супольнае пераўтварэнне, і менавіта таму RFC 6598 выдзеліў для такога парадку супольны дыяпазон адрасоў. Незапытанае ўваходнае злучэнне не мае адлюстравання, праз якое магло б прыйсці, і ніякая лакальная налада яго не стварае, бо пераўтваральнік не ваша прылада.
Root таксама гэтага не зменіць; ён дае кантроль над стэкам тэлефона, а не над пераўтваральнікам аператара. Калі аператар дае публічны прэфікс IPv6, уваходны шлях можа існаваць, але слухач і міжсеткавы экран усё роўна патрабуюць відавочнага дазволу.
Трэцяя кропка ўваходу: выхад VPN
Адрас, які сайт паказвае пры ўключаным тунелі, гэта адрас выхаду для пакрытага зыходнага трафіку. Гэта не адрас, які прымае ўваходныя злучэнні за вас. Каб выкарыстоўваць яго на ўваход, патрэбна функцыя, якую пастаўшчык сапраўды прапануе, напрыклад перанакіраваны порт, плюс працоўны шлях ад выхаду да кліента.
Лакальнае правіла дазволу не стварае такога адлюстравання. Яно змяняе шлях, якім ідуць адказы праграмы, а гэта важна, калі праграма выключана з тунеля: запыт і адказ могуць апынуцца ў розных кантэкстах, і злучэнне падае як праблема міжсеткавага экрана.
Праверце адзін шлях ад пачатку да канца, потым назавіце ўладальніка
Запішыце набор да праверкі: меркаваная крыніца, адрас прызначэння, транспарт, порт і машына, якая трымае слухаючы сокет. Калі хоць адзін элемент здагадка, праверка нічога карыснага не скажа, і вы пачняце мяняць другі пласт, каб апраўдаць першы.
Затым праверце гэты адзіны дазволены шлях, не парушаючы аўтэнтыфікацыю праграмы. Не публікуйце шырокі слухач і не выключайце староннія сродкі кантролю толькі дзеля няпэўнай праверкі адраса, бо абодва змены застануцца пасля праверкі.
Падсістэма тэтэрынгу Android перадае сыходны трафік сваім шляхам, асобна ад звычайнага захопу VPN, таму працоўны браўзер на падключаным ноўтбуку нічога не кажа пра ўваходны доступ да службы на тэлефоне. Перад тым як сказаць, што гэта працуе:
- Слухач на адрасе, дасяжным для патрэбнага боку, а не на loopback.
- Бок выкарыстоўвае адрас гэтай кропкі ўваходу, а не адрас выхаду са старонкі стану.
- Любое адлюстраванне на баку аператара падтрыманая функцыя, а не лакальна дададзенае правіла.
- Запыт і адказ ідуць праз адзін кантэкст, і аўтэнтыфікацыя праходзіць.