VPN сървър на Android: root не прави телефона достъпен
Три отделни проблема решават дали един телефон може да обслужва VPN клиенти: входящият път, моделът на привилегии и препредаването. Root засяга само средния.
Root променя кои мрежови операции на един процес е разрешено да опитва. Той не дава на телефона публично достъпен адрес, не резервира входящо съответствие при оператора и не поддържа демон жив след рестарт. Ако решавате дали Android телефон може да действа като VPN сървър, разделете три въпроса: може ли предвиденият клиент изобщо да достигне слушателя, какъв модел на привилегии е нужен на сървърната реализация и какво трябва да се препредава, след като тунелът е вдигнат.
Кой трябва да достигне телефона и откъде
Клиент в същата разрешена LAN и клиент на мобилни данни изпитват две различни мрежи. Първо решете коя е предвидената, защото отговорите не се пренасят. При Wi-Fi нежеланият входящ трафик обикновено изисква съответствие на горния рутер и използваем публичен път отвъд него. При мобилната мрежа carrier-grade NAT означава, че входящият IPv4 често е недостъпен, независимо какво разрешава телефонът.
Именно последната точка е тази, до която root не може да се докосне. Локалната защитна стена на телефона и NAT на оператора са различни системи и промяната на първата не влияе на втората. Частен адрес на интерфейс, икона за мобилни данни или слушащ сокет не са доказателство за достъпност. Ако пътят през оператора все пак предлага глобално маршрутизируем IPv6, пак ви трябва целенасочена политика за слушател и защитна стена за него; да имаш адрес не е същото като да приемаш връзки.
| Client path | What actually decides reachability |
|---|---|
| Same LAN | The phone's listener and its local firewall |
| Wi-Fi, from the internet | A mapping on the upstream router plus a usable public path beyond it |
| Cellular IPv4 | The carrier's NAT, which the handset does not control |
| Cellular IPv6 | Address, listener and firewall policy together |
Обслужването и препредаването са два различни успеха
Завършено VPN ръкостискане доказва, че тунелът съществува. То не доказва, че клиентът може да достигне LAN зад телефона, нито че телефонът може да служи като изход към интернет. Това са отделни конфигурации, изградени върху вътрешния план на адресите, маршрутите, поведението при връщане и тясно ограничена политика за препредаване за задачата, която наистина искате.
Режимът на отказ е предвидим: ръкостискането минава, клиентът показва свързан, и нищо не се зарежда. Преди да отстранявате грешки в клиента, решете коя от двете роли изграждате. Отдалечен достъп до устройство в мрежата на телефона и изход към интернет през пълен тунел изискват различни правила за препредаване и разрешаването на двете, когато сте искали едно, разширява излагането, без да добавя възможност, която сте поискали.
Моделът на привилегии е избор, не root или нищо
Обикновен демон OpenVPN, който използва kernel TUN устройство, се нуждае от съответните способности, достъп до възела на устройството и съдействие от политиката за сигурност на Android. Root не е цялостно освобождаване от SELinux; привилегирован процес все още е ограничен от платформената политика. Затова двоичен файл, който работи безпроблемно на Linux сървър, може да се провали на телефон без ясна грешка за разрешения.
Реализация на шлюз в потребителското пространство може да има съвсем различен модел на привилегии, така че разпространеното твърдение, че всеки VPN сървър на Android се нуждае от root, е твърде широко. Root ви дава способността да опитвате повече операции, а не гаранция, че ще бъдат разрешени или че резултатът е достъпен.
Собствената регистрация на VPN услуга в Android е отново отделен механизъм. Тя дава на приложението управляван клиентски интерфейс с определен жизнен цикъл; това не е универсален инсталатор на сървър и стартирането на демон от терминал не му дава управление при постоянно включване, политика за отделни приложения или собствен път за възстановяване.
Ако искате изходна точка, променете архитектурата
Когато целта е просто отдалечен изход към интернет през телефона, а не съвместимост със съществуващ профил на OpenVPN, по-подходящ е поддържан изходен възел в овърлей мрежа. Tailscale документира ролята на изходен възел за Android със собствени стъпки за регистрация, оторизация и избор на клиент.
Компромисът е реален и си струва да се каже направо: приемате различен протокол, различен модел на доверие и зависимост от онзи акаунт и координационна услуга. Това не кара нередактиран OpenVPN клиент да се присъедини към овърлей мрежата и не ви дава OpenVPN слушател на публичен адрес.
Какво още е нужно на внедряването
Който и път да изберете, оперативните основи решават дали ще издържи седмица. Пазете идентификационните данни на сървъра поверителни, издавайте различни клиентски идентичности и планирайте отзоваване, преди да ви потрябва. Решете как пристигат актуализациите, какво поддържа услугата работеща във фонов режим и как се възстановява след рестарт или промяна на мрежата.
Избягвайте удобните на пръв поглед съкращения: остарял статичен двоичен файл, твърдо зададени имена на интерфейси и стартов скрипт, който изчиства съществуващата политика на защитната стена. После приемайте резултата само срещу конкретен тест: оторизиран отдалечен клиент достига предвидения ресурс, забранените дестинации остават недостъпни и устройството се връща само след поддържаното събитие от жизнения цикъл. Root достъпът е една възможна съставка в този резултат и рядко решаващата.