Ова верување е доволно вообичаено за да се третира како факт: Android дозволува само еден VPN, па SSH серверот што работи на телефонот не може да работи низ тој тунел. Првата половина е точна и заклучокот не следи од неа. Ограничувањето на платформата се однесува на тоа колку апликации можат да го држат местото на VPN услугата, а не на тоа колку сокети можат да постојат или кому му е дозволено да се поврзе со телефонот. SSH демон со сокет што слуша е обична апликација со обичен порт, а тунелот е една од патеките по кои може да оди неговиот сообраќај.

Што всушност ограничува правилото за еден VPN

VpnService е ресурс со едно место. Кога апликацијата воспоставува тунел, таа станува VPN на уредот, а втората апликација што се обидува да воспостави тунел се одбива додека првата не исчезне. Тоа е правило за сопственоста на тунелот и објаснува зошто два VPN клиенти не можат да работат истовремено.

Тоа не кажува ништо за сокетите што слушаат. SSH серверот не го повикува VpnService, не пресретнува пакети и не се натпреварува за тоа место. Тој врзува порт и прифаќа врски, што е истото што би го правел без воопшто инсталиран VPN. Значи, митот го меша ограничувањето на давателите на тунели со ограничувањето на мрежните врски, а тие две немаат никаква врска.

Слушателот е одредиште, не дел од тунелот

Кога тунелот постои, телефонот има адреса на него, а партнерскиот уред има маршрута до таа адреса. Дали нешто ќе одговори одлучува слушателот. Демон врзан за loopback е достапен само од самиот телефон; демон врзан за старата адреса на тунелот може да ја задржи својата врска по повторно поврзување иако адресата за која се врзал се променила.

Правилата за врзување се обична SSH конфигурација: адресата и портот за слушање и кој може да се автентицира. На Android тие поставки живеат во конфигурацијата на самата апликација, а на сопственикот на процесот на апликацијата може да не му е дозволено да користи привилегирани портови, па навиката од десктоп да се врзе портот 22 како root не се пренесува непроменета.

ListenAddress 10.90.0.4
Port 2222
AllowUsers alice

Потоа е дозволата на самата патека. Потрошувачки VPN што со задоволство пренесува излезен веб сообраќај воопшто не мора да дозволи влезни врски кон своите клиенти; многумина не дозволуваат, бидејќи тоа би го изложило еден клиент на друг. Ако партнерот не може никаде да ја достигне адресата на тунелот на телефонот, проблемот е во политиката на услугата, а не во телефонот.

Патеката на одговор е местото каде што обично се крши

Да претпоставиме дека партнерот ја достигнува адресата на тунелот на телефонот и SYN пристигнува. Сега одговорот мора да излезе по истата патека, а тоа е одлука за рутирање внатре во телефонот. Ако одговорот излезе преку Wi-Fi бидејќи тоа е стандардната мрежа, партнерот гледа врска што никогаш не се завршува, што изгледа токму како огнен ѕид.

Android го прави ова посложено од десктоп бидејќи стандардната мрежа се избира по процес и може да се промени со политиката на VPN апликацијата. VPN клиент може да рутира само список на дозволени апликации, па серверската апликација што е надвор од тој список продолжува да ја користи физичката мрежа за своите одговори додека партнерот ги очекува низ тунелот.

Апликацијата може и да ги врзе своите сокети за одредена мрежа, што го надминува стандардот. Кога читате извештај дека услугата е достапна од една адреса, а не од друга, обично тоа е механизмот зад него.

Заобиколувањето на VPN не го поправа влезниот сервис

Популарното решение, исклучување на SSH апликацијата од VPN за нејзиниот сообраќај да престане да се пренасочува, е поправка за спротивниот проблем. Помага кога транспортот на излезен SSH клиент постојано се крши поради тунелот. За хостиран сервер може да ги извади одговорите од тунелот што го користи партнерот, што делумен пад го претвора во целосен.

Истото важи и за отворање јавен порт на рутерот. Ако барањето е еден овластен уред да стигне до телефонот преку VPN, изложувањето на SSH на интернет е друг модел на закана, а не поправка.

Прво одлучете ја адресата на услугата: LAN адресата на телефонот, неговата адреса на тунелот или намерно проследена крајна точка. Секоја има свој договор за достапност и изложеност, а нивното мешање е начинот на кој мал проблем со пристап станува трајна дупка.

Дијагностицирајте еден правец одеднаш

Запишете четири факти пред да ја промените конфигурацијата: адресата со која се поврзува партнерот, состојбата на слушателот на телефонот, контекстот на апликацијата и корисникот што го поседува, и патеката забележана во секој правец. Извештај што вели дека VPN го исклучува SSH не содржи ниту еден од нив и не може да разликува проблем со транспортот на клиентот од недостапен сервер.

adb shell ip -br addr
adb shell ip route get 10.90.0.9
nc -vz 10.90.0.4 2222

Извршете ја проверката на портот од партнерот, не од телефонот, и прочитајте го деталниот излез на SSH клиентот за да видите дали паѓа пред или по TCP ракувањето. Сокет што никогаш не се поврзува и одбиено најавување се различни фази со различни одговорни.

Задржете ја проверката на клучот на домаќинот и ограничувањата на сметката недопрени додека дебагирате. Токму ограничувањето на слушателот и дозволените корисници го прави достапниот сервер прифатлив; нивното олабавување за врската да работи менува еден проблем за полош. Референцата за OpenSSH сервер ги опфаќа контролите за слушање и пристап ако вашата Android имплементација ги следи истите имиња на конфигурација.

Поврзани статии