Руководство
Как настроить VPN в Linux
Клиент провайдера из его собственного репозитория, альтернатива в виде файла конфигурации для системных инструментов, DNS-нюанс, из-за которого утечки в Linux случаются чаще, чем где-либо ещё, и проверки из терминала. Инструкция написана для Ubuntu 26.04 LTS и NetworkManager.
Перед началом
Эта инструкция не выбирает провайдера за вас
Все описанные ниже шаги одинаковы для любого провайдера, поэтому здесь не назван ни один из них. Выбор — отдельная задача. Он делается в реестре, где решение принимается на основе опубликованного балла, а не страницы загрузки.
Устанавливайте клиент из собственного репозитория провайдера, используя ключ подписи из его собственной инструкции. Никогда не вставляйте в терминал однострочную команду установки с форума или из блога: команда выполняется с правами root, и вы не знаете, что именно она загрузила. Пакет из подписанного репозитория можно проверить, а скрипт, переданный в оболочку через конвейер, — нельзя.
Установите клиент
В Linux есть два варианта, и оба вполне рабочие. Первый — собственный клиент провайдера: вместе с ним вы получаете аварийное отключение, выбор сервера и обработку DNS. Второй — файл конфигурации для системных инструментов; в конце этой инструкции объясняется, чем за него приходится платить.
- Войдите на сайт провайдера и откройте инструкции для Linux в разделе аккаунта. В них указаны репозиторий, ключ и пакет; следуйте им и ничему другому.
- Добавьте репозиторий и его ключ, затем установите пакет с помощью менеджера пакетов дистрибутива. Ключ позволяет менеджеру пакетов отклонить изменённый пакет, поэтому репозиторий, добавленный без ключа, — это репозиторий, которому вы решили доверять без проверки.
- Включите службу клиента, чтобы она запускалась при загрузке системы. Обычно клиент состоит из фоновой службы с правами root и настольного приложения, которое с ней взаимодействует; служба управляет туннелем, а аварийное отключение, которое должно работать с момента загрузки, требует, чтобы служба тоже запускалась с момента загрузки.
- Войдите в клиент — через приложение или из командной строки с помощью токена из раздела аккаунта — и назовите устройство так, чтобы по имени нельзя было вас идентифицировать.
- Пока не подключайтесь. Сначала откройте настройки. В большинстве клиентов два из трёх параметров ниже по умолчанию отключены.
Три настройки, которые стоит проверить
Меню клиентов различаются, но настройки остаются теми же. Для каждого из трёх параметров есть статья в глоссарии, если его название вам незнакомо.
Аварийное отключение
Оно блокирует весь трафик при разрыве туннеля, вместо того чтобы незаметно вернуть соединение в обычную сеть. В Linux это набор правил брандмауэра, которые записывает клиент: отбрасывается всё, кроме интерфейса туннеля и его собственного конечного узла. Включите эту функцию и выберите постоянный режим или режим lockdown, если клиент его предлагает, чтобы правила действовали с момента загрузки, а не только во время подключения. О назначении этой функции рассказывается на отдельной странице.
DNS внутри туннеля
Запросы имён могут покидать устройство вне туннеля, даже когда всё остальное проходит внутри него. В Linux это самая частая утечка, потому что резолвер является динамической частью системы. В Ubuntu эту роль выполняет systemd-resolved: у каждого интерфейса свои резолверы, а тот, у которого есть маршрут по умолчанию для DNS, отвечает на все запросы, не соответствующие более специфичному домену. Клиент должен направлять этот маршрут по умолчанию к резолверу провайдера через интерфейс туннеля. Укажите в клиенте собственный DNS провайдера, а не DNS третьей стороны: тот, кто видит только запросы, становится ещё одной стороной, которой вы их раскрываете. О том, как возникает утечка, рассказывается на странице об утечках DNS.
Протокол
Оставьте современный вариант, используемый по умолчанию, если только что-то не работает, — на странице протоколов указано, какие из них актуальны, а какие устарели. Если клиент предлагает старый вариант для устранения проблемы с подключением, это осознанный компромисс, который затем нужно отменить: в реестре отмечен самый слабый протокол, который провайдер всё ещё предлагает, а его ручной выбор означает, что вы сами выбираете именно этот вариант.
Убедитесь, что всё действительно работает
Подключитесь, а затем проверьте, а не делайте предположения. Выполните в терминале три проверки в таком порядке:
- Ваш адрес изменился. Выполните с помощью
curlзапрос к любому сервису «какой у меня IP» или откройте такой сервис в браузере и убедитесь, что страна совпадает с выбранной точкой выхода. Командаip route getдля публичного адреса должна указать интерфейс туннеля, а не интерфейс Wi-Fi или Ethernet. - Запросы проходят внутри туннеля. Выполните
resolvectl status: интерфейс туннеля должен использовать резолвер провайдера и иметь маршрут DNS по умолчанию, а резолвер физического интерфейса не должен использоваться. Проверка утечек DNS в браузере даст второе мнение; если там указан ваш интернет-провайдер, настройка DNS не сработала. - Аварийное отключение делает то, что обещано. При работающей загрузке остановите службу клиента командой
systemctl stopили отключите интерфейс туннеля командойip link set … down, чтобы туннель разорвался без команды от клиента. Передача данных должна немедленно прекратиться. Если она продолжается, функция аварийного отключения существует лишь для вида.
Расширенный набор проверок и описание того, что каждая из них может и не может показать, приведены в отдельной инструкции.
Что доказывают эти проверки
+Ваш трафик выходит через сервер точки выхода в выбранной вами стране
+На ваши запросы отвечает резолвер провайдера внутри туннеля
+При разрыве туннеля соединение блокируется, а не незаметно возвращается в обычную сеть
Чего они не доказывают
−Они ничего не говорят о том, что хранит провайдер, — это вопрос документов, на который отвечают страницы о хранении данных
−Они не делают вас анонимным: браузер и ваши учётные данные не меняются; см. от чего VPN вас не защищает
−Успешная проверка сегодня не является обещанием насчёт следующего обновления пакета или следующего ядра
Вариант с файлом конфигурации и его цена
Большинство провайдеров публикуют файлы конфигурации для двух распространённых протоколов в разделе аккаунта. Файл WireGuard можно импортировать в NetworkManager через редактор подключений или с помощью nmcli connection import; он так же хорошо работает с wg-quick. Файл OpenVPN импортируется аналогично, если установлен плагин OpenVPN. Вы получаете туннель, собственный переключатель интерфейса в системе и ничего сверх того, что провайдер поместил в файл.
Остальная часть клиента вам недоступна. Аварийного отключения нет, если только вы сами не напишете правила брандмауэра; если импортированное в NetworkManager подключение разорвётся, трафик просто вернётся в обычную сеть. Обработки DNS нет, кроме строки DNS в файле, а файл без такой строки становится причиной утечки, которую нужно проверять в первую очередь. Выбора сервера нет: каждый файл соответствует одной точке выхода, и для смены точки выхода нужен другой файл. Создавайте файлы в разделе аккаунта и храните их в тайне: файл WireGuard содержит закрытый ключ, который служит вашим идентификатором для провайдера.
Этот вариант подходит для сервера, машины без графического интерфейса или дистрибутива, который клиент не поддерживает. На ноутбуке лучше использовать клиент: именно переключатель, который он предоставляет, недоступен при работе с файлом конфигурации.
Если что-то не работает
Туннель работает, но DNS по-прежнему направляется к моему интернет-провайдеру
Классическая утечка в Linux. Файл конфигурации без настроенного DNS оставляет systemd-resolved использовать резолвер, предоставленный сетью, вне туннеля. Выполните resolvectl status: в списке для интерфейса туннеля должен быть резолвер провайдера и маршрут DNS по умолчанию, отмеченный знаком «плюс».
Добавьте строку DNS в конфигурацию или укажите DNS для подключения в NetworkManager, затем подключитесь снова. Собственный клиент провайдера делает это сам — это одна из причин предпочесть его.
Когда туннель разрывается, всё перестаёт работать, и это раздражает
Так работает аварийное отключение: разорванный туннель означает отсутствие соединения, а не незаметный возврат в обычную сеть. Подключитесь снова, а не отключайте эту функцию.
Если в одной сети туннель разрывается часто, а в других — редко, один раз смените протокол и попробуйте более близкую точку выхода. Если в этой сети не работает ни один протокол, значит, она блокирует VPN-трафик, и на этом инструкция заканчивается.
Клиент каждый раз запрашивает sudo или пароль
Создание сетевого интерфейса требует привилегий, поэтому клиент, который не устанавливает фоновую службу, должен запрашивать их при каждом запуске. Большинство клиентов устанавливают такую службу — работающий с правами root фоновый процесс и настольное приложение, которое с ним взаимодействует. Повторяющийся запрос означает, что служба не запущена или не включена.
Проверьте это командами systemctl status и с именем службы из инструкции провайдера, затем включите службу, чтобы она запускалась при загрузке системы.
На странице проверки появляются IPv6-адреса
Туннель передаёт IPv4, но у устройства по-прежнему есть маршрут IPv6 за пределами туннеля, поэтому всё, что предпочитает IPv6, обходит VPN. Провайдеры, которые не передают IPv6 через туннель, должны отключать его на интерфейсе; в хороших клиентах это делается автоматически.
Если вы создали подключение из файла, отключите IPv6 для подключения в NetworkManager или выключите его с помощью sysctl, затем выполните проверку снова. Туннель, оставляющий открытым второе семейство адресов, — лишь половина туннеля.
Те же шаги, другие устройства
Остальные платформы
У каждой платформы своё отдельное руководство, а не вкладка в этом. Шаги расходятся сразу после запуска установщика, а страница, отвечающая сразу на три платформы, не отвечает толком ни на одну.