Слово портативный описывает установщик, а не ядро. Клиент может прибыть одним исполняемым файлом на USB-носителе и всё равно потребовать туннельное устройство, запись в таблице маршрутов и запись в резолвер, прежде чем сдвинется первый пакет. То, к чему из этих трёх целевая машина даст вам прикоснуться, и решает, работает ли эта сборка там вообще. Проверки ниже отвечают на вопрос в том порядке, в котором клиент с ними столкнётся.

Портативность охватывает три разных обещания, и только одно из них бесплатно

Без установщика означает, что поставщик не зарегистрировал службу, не поставил деинсталлятор и не добавил пункт меню. Без администратора означает, что обычная учётная запись может запустить клиент и завершить подключение. Без изменений в хосте означает, что машина выглядит так же после выхода. Страницы загрузки, которые говорят портативный, обычно обещают только первое из этого, а два других — это то место, где развёртывания ломаются. Сборка может быть портативной и в узком смысле: она работает с носителя только для чтения без каких-либо записей точечных файлов, что всё равно ничего не говорит о сетевом стеке.

Дорогие обещания — второе и третье. Один исполняемый файл, которому нужен адаптер, маршрут или запись в резолвер, просит у операционной системы полномочия, которые ярлык портативный никогда не покрывал.

Найдите привилегированного помощника, которого вызовет клиент

Почти ни один VPN-клиент не двигает пакеты сам. В Windows путь данных идёт через фильтры WFP и Base Filtering Engine, в macOS — через поставщика NetworkExtension, которого пользователь одобряет в Настройках системы, а в Linux — через устройство tun плюс стек маршрутизации. Скопированный вами двоичный файл — это поверхность управления для этих компонентов, а не их замена. Спросите, какой компонент ожидает клиент, затем подтвердите, что он установлен, работает и доступен вашей учётной записи.

Linux — самое простое место, чтобы это доказать, потому что проверка — один системный вызов. Открыть /dev/net/tun и попросить у ядра устройство требует CAP_NET_ADMIN, а документация ядра по TUN/TAP указывает и правило владения, и возможность. Запустите проверку от учётной записи, которая запустит клиент, а не от root.

ls -l /dev/net/tun
ip tuntap add dev vpntest mode tun
ip link delete vpntest

Ошибка прав в средней строке — это и есть ответ, который вы искали: эта учётная запись не может создать туннельный интерфейс, поэтому любой клиент в пользовательском пространстве, которому он нужен, падает при подключении, а не при загрузке. Последняя строка удаляет тестовое устройство и ничего не печатает, когда всё работает. Если обе строки успешны, хост ничего не изменил навсегда.

Проверьте изменения маршрута и резолвера до первого подключения

Раздельное туннелирование превращает подключение в решение о маршрутизации, а полный туннель превращает его в замену маршрута по умолчанию. И то, и другое — записи в сетевой стек хоста, и оба терпят неудачу для непривилегированной учётной записи, даже когда сам клиент стартует чисто. Резолвер — третья запись, и на хостах с systemd обычно именно он ломается последним. Этот порядок важен, когда вы решаете, куда потратить установку с повышенными правами.

Проверке маршрута нужен пункт назначения, который вам действительно важен, поэтому подставьте вместо заполнителя ниже подсеть из собственного профиля. Имя устройства должно существовать, чтобы маршрут мог к чему-то прикрепиться.

ip route add 10.20.0.0/16 dev vpntest
ip route del 10.20.0.0/16
resolvectl query intranet.example.internal

Если первая строка возвращает RTNETLINK answers: Operation not permitted, учётная запись не может установить частный маршрут, которого требует профиль. Вторая строка доказывает то же право в обратную сторону, и это важно, потому что клиент, который умеет добавлять маршруты, но не удалять их, оставляет после себя сломанную таблицу. Затем запрос к резолверу показывает, разрешаются ли частные имена через туннель или утекают к тому резолверу, которому хост уже доверяет.

Выполните все три, пока тестовое устройство ещё существует, а затем удалите его. Маршрут, указывающий на исчезнувшее устройство, — самая частая причина потери связи ноутбуком после неудачного подключения.

Решите, что должно пережить сеанс

Удаление папки — не план уборки. Адаптеры, маршруты, настройки резолвера, доверенные сертификаты и сохранённые учётные данные могут каждый пережить процесс, а служба при загрузке может восстановить некоторые из них, не спрашивая. Запишите, что клиенту разрешено оставить после себя, до его запуска, а не после первого неудачного отключения.

Практическое правило — снять снимок трёх поверхностей, которые вы собираетесь изменить, и сравнить их после. Запишите интерфейсы, основную таблицу маршрутизации и состояние резолвера до первого подключения, а затем повторите те же три чтения, когда клиент завершит работу.

ip -brief addr show
ip route show table main
resolvectl status

Всё, что присутствует во втором снимке и отсутствует в первом, нуждается во владельце. Либо клиент удаляет это при выходе, либо вы удаляете это теми же командами, которые его создали, и это удаление относится к заметкам о развёртывании, а не к чьей-то памяти о том, что произошло. В Windows эквивалентные чтения — Get-NetAdapter, Get-NetRoute и Get-DnsClientServerAddress, они не требуют повышения прав, но показывают те же остатки.

Похожие статьи