Прослеђивање портова на Android хотспоту: три улазне тачке
Телефон, пут оператера и VPN излаз откривају различите границе. Утврдите која машина поседује сокет за слушање пре него што отворите било који порт.
Укључили сте хотспот, повезали VPN, отворили порт у апликацији, а други уређај и даље не може да се повеже. Део који недостаје скоро никада није сам порт. Питање је која машина поседује сокет за слушање и коју адресу други уређај треба да достигне. Ово пролазим од телефона ка споља, јер екран на коме се налазите говори вам коју од три улазне тачке заиста тестирате.
Почните тамо где услуга заиста ради
Отворите апликацију која би требало да прихвати везу и прочитајте њену страницу статуса. Ако пише да слуша, забележите адресу на коју је везана, јер тај један детаљ одлучује већину случајева у наставку. Апликација везана на 127.0.0.1 доступна је само са телефона, и то неће променити ниједан хотспот клијент, мапирање оператера ни VPN излаз.
Затим потврдите који уређај покреће услугу. То је или телефон, и тада сокет припада тој апликацији, или преносни рачунар иза хотспота, и тада слушалац и његов заштитни зид припадају преносном рачунару, а телефон само прослеђује пакете. То су различити дизајни са различитим власницима, а њихово мешање је разлог зашто порт отворен на једном месту не ради ништа на другом.
На градњи која се може дебаговати, adb shell може да излиста сокете кроз /proc/net/tcp, али за већину људи поштен извор је статус саме апликације. То такође избегава замку тестирања сокета који је апликација отворила на адреси коју нисте очекивали.
Прва улазна тачка: други уређај на хотспоту
Ово је локални случај и најлакше га је исправно поставити. Други уређај достиже телефон на адреси коју види као свој гејтвеј, на порту на ком апликација слуша, и ништа изван хотспота не мора бити укључено. Мапирање оператера није потребно и ниједна функција провајдера не мора постојати, јер саобраћај никада не напушта локални сегмент.
Две ствари то кваре. Апликација је везана на loopback, или клијентска политика на телефону не дозвољава локалну везу. Тестирајте протоколом саме апликације уместо пуке TCP везе ако апликација врши аутентификацију, јер слушалац који прихвати па одбије издалека изгледа исто као затворен порт.
Ако услуга уместо тога ради на преносном рачунару повезаном са телефоном, адреса хотспота телефона уопште није одредиште. Потребна вам је адреса преносног рачунара на хотспот интерфејсу и слушалац на преносном рачунару, а телефон више није власник ничега осим прослеђивања.
Друга улазна тачка: пут оператера
Доћи до телефона из мобилне мреже други је проблем и најчешће једноставно не ради за IPv4. Оператери стављају телефоне иза заједничког превођења, зато је RFC 6598 издвојио заједнички опсег адреса управо за такав распоред. Незатражена долазна веза нема мапирање кроз које би стигла, и никаква локална конфигурација га не ствара, јер преводилац није ваш уређај.
Root приступ то такође не мења. Он вам даје контролу над стеком телефона, не над преводиоцем оператера, а рецепти који обећавају супротно обично претпостављају јавну адресу коју оператер никада није доделио. Тамо где оператер нуди јавни IPv6 префикс, долазни пут може постојати, али слушаоцу и заштитном зиду телефона и даље је потребно свесно одобрење пре него што било шта одговори.
Трећа улазна тачка: VPN излаз
Адреса коју веб-сајт пријави док је тунел активан је адреса излаза за обухваћени одлазни саобраћај. То није исто што и адреса која прихвата долазне везе у ваше име. Коришћење за долазни саобраћај захтева функцију коју провајдер стварно нуди, попут прослеђеног порта или долазног мапирања везаног за ваш налог, плус употребљив пут од излаза до клијента.
Локално правило дозволе не може створити такво мапирање. Оно може променити којим путем иду одговори апликације, што је важно када је апликација изузета из тунела: захтев и одговор могу завршити у различитим мрежним контекстима, а веза пада на начин који изгледа као проблем заштитног зида.
Тестирајте један пут од почетка до краја, затим именујте власника
Запишите торку пре тестирања: намеравани извор, одредишна адреса, транспорт, порт и машина која поседује сокет за слушање. Ако је било који елемент нагађање, тест вам неће рећи ништа корисно, и на крају ћете променити други слој да бисте објаснили први.
Затим тестирајте тај један одобрени пут са нетакнутом аутентификацијом апликације. Избегавајте објављивање широког слушаоца или искључивање неповезаних контрола само да би двосмислена провера јавне адресе одговорила, јер обе промене надживе тест и ниједна не доказује да дизајн ради.
Android-ов потсистем tethering-а прослеђује силазни саобраћај својим путем, одвојено од уобичајеног VPN хватања апликација, па прегледач који ради на повезаном преносном рачунару не говори ништа о долазном приступу услузи на телефону. Пре него што то назовете радним:
- Сокет за слушање је на адреси коју намеравани партнер може достићи, а не на loopback-у.
- Партнер користи адресу која припада тој улазној тачки, а не излазну адресу са странице статуса.
- Свако мапирање на страни оператера или провајдера је подржана функција, а не правило које сте додали локално.
- Захтев и одговор пролазе кроз исти мрежни контекст, а аутентификација апликације и даље пролази.