Пренасочване на портове в точка за достъп Android: трите входни точки
Телефонът, пътят през оператора и изходът на VPN показват различни граници. Разберете коя машина държи слушащия сокет, преди да отворите порт.
Включихте точката за достъп, свързахте VPN, отворихте порт в приложението, а другото устройство пак не може да се свърже. Липсващото парче почти никога не е самият порт, а въпросът коя машина държи слушащия сокет и кой адрес трябва да достигне другото устройство. Започвам от телефона навън, защото екранът пред вас показва коя от трите входни точки тествате.
Започнете там, където услугата наистина работи
Отворете приложението, което трябва да приема връзката, и прочетете страницата му със състоянието. Ако пише, че слуша, запишете адреса, към който е вързано, защото тази подробност решава повечето случаи по-долу. Приложение, вързано към 127.0.0.1, е достъпно само от телефона и нито клиент на точката за достъп, нито преобразуване при оператора, нито изход на VPN ще го промени.
После потвърдете кое устройство изпълнява услугата. Ако е телефонът, сокетът е на приложението; ако е лаптоп зад точката за достъп, слушателят и защитната стена са на лаптопа, а телефонът само препраща пакети. Това са различни схеми и смесването им е причината порт, отворен на едно място, да не прави нищо на друго.
Във версия, удобна за отстраняване, adb shell изброява сокети през /proc/net/tcp, но за повечето хора собственото състояние на приложението е честният източник.
Първа входна точка: друго устройство в точката за достъп
Това е локалният случай и най-лесният. Другото устройство достига телефона на адреса, който вижда като свой шлюз, на порта, на който слуша приложението, и нищо извън точката за достъп не участва. Не е нужно преобразуване при оператора, защото трафикът не напуска локалния сегмент.
Две неща го чупят: приложението е вързано към loopback, или клиентската политика на телефона не разрешава локалната връзка. Тествайте със собствения протокол на приложението, а не с гол TCP, защото слушател, който приема и после отхвърля, изглежда отдалеч като затворен порт.
Ако услугата е на свързан лаптоп, адресът на точката за достъп на телефона изобщо не е дестинацията; трябват адресът на лаптопа в интерфейса на точката за достъп и слушател там.
Втора входна точка: пътят през оператора
Достигането на телефона от мобилната мрежа е друг проблем и най-често просто не работи за IPv4. Операторите слагат апаратите зад споделено преобразуване и затова RFC 6598 отделя споделен диапазон от адреси точно за такава схема. Непоискана входяща връзка няма преобразуване, през което да пристигне, и никаква локална настройка не го създава, защото преобразувателят не е вашето устройство.
Root достъпът също не променя това; той дава контрол над стека на телефона, не над преобразувателя на оператора. Ако операторът предлага публичен префикс IPv6, входящ път може да съществува, но слушателят и защитната стена пак искат изрично разрешение.
Трета входна точка: изходът на VPN
Адресът, който сайт показва при включен тунел, е адресът на изхода за покрития изходящ трафик. Това не е адрес, който приема входящи връзки от ваше име. Използването му навътре изисква функция, която доставчикът наистина предлага, например пренасочен порт, плюс работещ път от изхода до клиента.
Локално правило за разрешение не създава това преобразуване. То променя пътя на отговорите на приложението, което има значение, когато приложението е изключено от тунела: заявката и отговорът може да попаднат в различни мрежови контексти и връзката се проваля като проблем със защитната стена.
Тествайте един път от край до край, после назовете собственика
Запишете набора преди теста: желан източник, адрес на дестинацията, транспорт, порт и машината, която държи слушащия сокет. Ако някой елемент е догадка, тестът няма да ви каже нищо полезно.
После тествайте този един разрешен път, без да нарушавате удостоверяването на приложението. Не публикувайте широк слушател и не изключвайте странични контроли само за да отговори двусмислена проверка на адрес, защото и двете промени остават след теста.
Подсистемата за тетъринг на Android предава низходящия трафик по свой път, отделно от обичайното прихващане на VPN, така че работещ браузър на свързан лаптоп не казва нищо за входящ достъп до услуга на телефона. Преди да кажете, че работи:
- Слушателят е на адрес, достижим за другия край, а не на loopback.
- Другият край използва адреса на тази входна точка, а не адрес на изхода от страница със състояние.
- Всяко преобразуване при оператора или доставчика е поддържана функция, а не локално добавено правило.
- Заявка и отговор минават през един контекст и удостоверяването минава.