Добро пожаловать в хранилище исходного кода клиентского приложения Mullvad VPN. Это клиентское программное обеспечение VPN для службы Mullvad VPN. Для получения дополнительной информации об услуге посетите наш веб-сайт mullvad.net (также доступен через Tor в нашем onion-сервисе).
Этот репозиторий содержит весь исходный код для настольной и мобильной версий приложения. Для настольных компьютеров это включает системную службу/демон ( mullvad-daemon
), графический интерфейс пользователя (GUI) и интерфейс командной строки (CLI). Приложение Android использует ту же службу поддержки системы для туннеля и безопасности, но имеет специальный интерфейс в android/. iOS представляет собой полностью автономную реализацию, которая находится в каталоге ios/.
На нашем веб-сайте и на Github доступны готовые и подписанные выпуски для macOS, Windows, Linux и Android. Приложение для Android также доступно в Google Play и F-Droid, а версия для iOS — в App Store.
Вы можете найти наши ключи подписи кода, а также инструкции по криптографической проверке загрузки на странице открытого исходного кода Mullvad.
Это операционные системы и их версии, которые официально поддерживает приложение. Возможно, он будет работать и на многих других версиях, но мы не проверяем их и не можем гарантировать качество и безопасность.
ОС/Платформа | Поддерживаемые версии |
---|---|
Окна | 10 и 11 |
macOS | Три последних крупных релиза |
Линукс (Убунту) | Два последних выпуска LTS и последние выпуски без LTS. |
Линукс (Федора) | Версии, которые еще не EOL |
Линукс (Дебиан) | 11 и новее |
Андроид | 8 и новее |
iOS | 15.0 и новее |
В Linux мы тестируем с использованием среды рабочего стола Gnome. Приложение должно работать и, вероятно, работает в других средах разработки, но мы не тестируем их регулярно.
Вот таблица, содержащая функции приложения на разных платформах. Это предназначено для отражения текущего состояния последней версии кода в git, а не обязательно какой-либо существующей версии.
Окна | Линукс | macOS | Андроид | iOS | |
---|---|---|---|---|---|
ОпенВПН | ✓ | ✓ | ✓ | ||
WireGuard | ✓ | ✓ | ✓ | ✓ | ✓ |
Квантово-устойчивые туннели | ✓ | ✓ | ✓ | ✓ | ✓ |
ДАИТА | ✓ | ✓ | ✓ | ✓ | ✓ |
WireGuard многопереходный | ✓ | ✓ | ✓ | ✓ | |
WireGuard через TCP | ✓ | ✓ | ✓ | ✓ | ✓ |
WireGuard поверх Shadowsocks | ✓ | ✓ | ✓ | ✓ | |
OpenVPN через Shadowsocks | ✓ | ✓ | ✓ | ||
Разделенное туннелирование | ✓ | ✓ | ✓ | ✓ | |
Пользовательский DNS-сервер | ✓ | ✓ | ✓ | ✓ | ✓ |
Блокировщики контента (рекламы и т. д.) | ✓ | ✓ | ✓ | ✓ | ✓ |
Дополнительный доступ к локальной сети | ✓ | ✓ | ✓ | ✓ | ✓* |
Внешний аудит | ✓ | ✓ | ✓ | ✓ | ✓ |
* Локальная сеть всегда доступна на iOS с текущей реализацией.
Это приложение представляет собой VPN-клиент, сохраняющий конфиденциальность. Таким образом, он делает все возможное, чтобы остановить утечку трафика. И в основном все настройки по умолчанию настроены на более безопасный/конфиденциальный вариант. При желании пользователь должен явно разрешить более свободные правила. Подробную информацию о том, что приложение блокирует и разрешает, а также о том, как оно это делает, см. в специальном документе по безопасности.
Этот репозиторий содержит подмодули, необходимые для сборки приложения. Однако некоторые из этих подмодулей также имеют дополнительные подмодули, которые довольно велики и не нужны для создания приложения. Поэтому, если вам не нужен исходный код OpenSSL, OpenVPN и некоторых других проектов, вам следует избегать рекурсивного клонирования репозитория. Вместо этого клонируйте репозиторий обычным образом, а затем получите один уровень подмодулей:
git clone https://github.com/mullvad/mullvadvpn-app.git
cd mullvadvpn-app
git submodule update --init
На Android, Linux и macOS вы также можете рекурсивно проверить подмодуль Wireguard-go:
git submodule update --init --recursive --depth=1 wireguard-go-rs
Более подробную информацию о том, почему это необходимо, можно найти в ящике Wireguard-go-rs.
Мы подписываем каждый коммит в main
ветке, а также теги выпуска. Если вы хотите подтвердить свой заказ, вы можете найти наши ключи разработчика на странице открытого исходного кода Mullvad.
В этом репозитории есть подмодуль git по адресу dist-assets/binaries
. Этот подмодуль содержит двоичные файлы и сценарии сборки для стороннего кода, который нам нужно объединить с приложением. Такие как OpenVPN, Wintun и т. д.
Этот подмодуль соответствует тем же стандартам целостности/безопасности, что и этот репозиторий. Каждый коммит слияния должен быть подписан. И этот основной репозиторий должен всегда указывать только на подписанный коммит слияния подмодуля двоичных файлов.
Дополнительную информацию об этом репозитории см. в README подмодуля двоичных файлов.
См. инструкции по сборке, чтобы получить помощь в создании приложения на настольных платформах.
Для создания приложения для Android см. инструкции для Android.
Для создания приложения для iOS см. инструкции для iOS.
См. здесь инструкции о том, как сделать новый выпуск.
TALPID_FIREWALL_DEBUG
— помогает отладить брандмауэр. Делает разные вещи в зависимости от платформы:
"1"
, чтобы добавить счетчики пакетов во все правила брандмауэра.pflog0
."all"
, чтобы добавить журналирование ко всем правилам."pass"
, чтобы добавить ведение журнала в правила, разрешающие пакеты."drop"
, чтобы добавить ведение журнала в правила, блокирующие пакеты. TALPID_FIREWALL_DONT_SET_SRC_VALID_MARK
— заставляет демон не устанавливать конфигурацию src_valid_mark
в Linux. Опция конфигурации ядра установлена, поскольку в противном случае строгая фильтрация обратного пути может помешать передаче ретрансляционного трафика достичь демона. Если rp_filter
установлено значение 1
на интерфейсе, который будет получать ретрансляционный трафик, а src_valid_mark
не установлено значение 1
, демон не сможет получать ретрансляционный трафик.
TALPID_DNS_MODULE
— позволяет изменить метод, который будет использоваться для настройки DNS. По умолчанию это определяется автоматически, но вы можете установить один из вариантов ниже, чтобы выбрать конкретный метод.
Линукс
"static-file"
: изменить файл /etc/resolv.conf
напрямую."resolvconf"
: используйте программу resolvconf
"systemd"
: использовать resolved
службу systemd через DBus."network-manager"
: используйте службу NetworkManager
через DBus.Окна
iphlpapi
: использовать вспомогательный API IPnetsh
: используйте программу netsh
tcpip
: установить параметры TCP/IP в реестре. TALPID_FORCE_USERSPACE_WIREGUARD
— заставляет демон использовать реализацию WireGuard в пользовательском пространстве в Linux.
TALPID_DISABLE_OFFLINE_MONITOR
— заставляет демон всегда предполагать, что хост находится в сети.
TALPID_NET_CLS_MOUNT_DIR
— в Linux заставляет демон смонтировать контроллер net_cls
в указанном каталоге, если он еще не смонтирован.
MULLVAD_MANAGEMENT_SOCKET_GROUP
— в Linux и macOS это ограничивает доступ к UDS-сокету интерфейса управления пользователями из указанной группы. Это означает, что только пользователи из этой группы могут использовать интерфейс командной строки и графический интерфейс. По умолчанию доступ к сокету есть у всех.
MULLVAD_API_HOST
— установите имя хоста, которое будет использоваться в запросах API. Например, api.mullvad.net
.
MULLVAD_API_ADDR
— установите IP-адрес и порт, которые будут использоваться в запросах API. Например, 10.10.1.2:443
.
MULLVAD_API_DISABLE_TLS
— используйте простой HTTP для запросов API.
MULLVAD_CONNCHECK_HOST
— установите имя хоста, которое будет использоваться в запросах на проверку соединения. Например, am.i.mullvad.net
.
Используйте setx
из оболочки с повышенными правами:
setx TALPID_DISABLE_OFFLINE 1 /m
Чтобы изменения вступили в силу, перезапустите демон:
sc.exe stop mullvadvpn
sc.exe start mullvadvpn
Отредактируйте файл модуля systemd с помощью systemctl edit mullvad-daemon.service
:
[Service]
Environment = " TALPID_DISABLE_OFFLINE_MONITOR=1 "
Чтобы изменения вступили в силу, перезапустите демон:
sudo systemctl restart mullvad-daemon
Используйте launchctl
:
sudo launchctl setenv TALPID_DISABLE_OFFLINE_MONITOR 1
Чтобы изменения вступили в силу, перезапустите демон:
launchctl unload -w /Library/LaunchDaemons/net.mullvad.daemon.plist
launchctl load -w /Library/LaunchDaemons/net.mullvad.daemon.plist
MULLVAD_PATH
— позволяет изменить путь к папке с помощью инструмента mullvad-problem-report
при работе в режиме разработки. По умолчанию: /target/debug/
.MULLVAD_DISABLE_UPDATE_NOTIFICATION
— если установлено значение 1
, уведомление графического интерфейса будет отключено, когда будет доступно обновление. $ npm run develop
— разработать приложение с включенной перезагрузкой в реальном времени.$ npm run lint
— код lint$ npm run pack:
— подготовить приложение к распространению на вашей платформе. Где
может быть linux
, mac
или win
$ npm test
— запустить тесты Требования к отображению значка на панели задач различаются в зависимости от среды рабочего стола. Если значок на панели задач не отображается, попробуйте установить один из этих пакетов:
libappindicator3-1
libappindicator1
libappindicator
Если вы используете GNOME, попробуйте установить одно из этих расширений оболочки GNOME:
TopIconsFix
TopIcons Plus
electron-builder
Демон реализован на Rust и реализован в нескольких крейтах. Основным (или верхним) контейнером, в котором создается окончательный двоичный файл демона, является mullvad-daemon
, который затем зависит от остальных.
В общем, можно рассматривать демона как разделенного на две части: ящики, начинающиеся с talpid
, и ящики, начинающиеся с mullvad
. Предполагается, что talpid
ящики совершенно не связаны с конкретными вещами Муллвада. Крейту talpid
не разрешается ничего знать об API, через который демон получает данные учетной записи Mullvad или, например, загружает списки VPN-серверов. Компоненты talpid
следует рассматривать как универсальный VPN-клиент с дополнительными функциями сохранения конфиденциальности и анонимности. С другой стороны, ящики, в названии которых есть mullvad
используют talpid
-компоненты для создания безопасного VPN-клиента, специфичного для Mullvad.
Пояснения к некоторым общим словам, используемым в документации и коде в этом репозитории.
mullvad-daemon
Rust. Эта безголовая программа предоставляет интерфейс управления, который можно использовать для управления демоном.mullvad
, представляющая собой терминальный интерфейс для приложения Mullvad VPN. Список путей к файлам, записываемых и читаемых различными компонентами приложения Mullvad VPN.
В Windows, когда процесс запускается как системная служба, переменная %LOCALAPPDATA%
расширяется до C:Windowssystem32configsystemprofileAppDataLocal
.
Все пути к каталогам определяются и извлекаются из крейта mullvad-paths
.
Каталог настроек можно изменить, задав переменную среды MULLVAD_SETTINGS_DIR
.
Платформа | Путь |
---|---|
Линукс | /etc/mullvad-vpn/ |
macOS | /etc/mullvad-vpn/ |
Окна | %LOCALAPPDATA%Mullvad VPN |
Андроид | getFilesDir() |
Каталог журнала можно изменить, установив переменную среды MULLVAD_LOG_DIR
.
Платформа | Путь |
---|---|
Линукс | /var/log/mullvad-vpn/ + systemd |
macOS | /var/log/mullvad-vpn/ |
Окна | C:ProgramDataMullvad VPN |
Андроид | getFilesDir() |
Каталог кэша можно изменить, установив переменную среды MULLVAD_CACHE_DIR
.
Платформа | Путь |
---|---|
Линукс | /var/cache/mullvad-vpn/ |
macOS | /Library/Caches/mullvad-vpn/ |
Окна | C:ProgramDataMullvad VPNcache |
Андроид | getCacheDir() |
Полный путь к файлу адреса RPC можно изменить, задав переменную среды MULLVAD_RPC_SOCKET_PATH
.
Платформа | Путь |
---|---|
Линукс | /var/run/mullvad-vpn |
macOS | /var/run/mullvad-vpn |
Окна | //./pipe/Mullvad VPN |
Андроид | getNoBackupFilesDir() |
Графический интерфейс имеет специальный файл настроек, который настраивается для каждого пользователя. Путь задается в файле gui/packages/desktop/main/gui-settings.ts
.
Платформа | Путь |
---|---|
Линукс | $XDG_CONFIG_HOME/Mullvad VPN/gui_settings.json |
macOS | ~/Library/Application Support/Mullvad VPN/gui_settings.json |
Окна | %LOCALAPPDATA%Mullvad VPNgui_settings.json |
Андроид | Присутствует в logcat Android |
Информацию о значках см. в графическом файле README.
Инструкции по работе с локалями и переводами можно найти здесь.
Инструкции для приложения Android см. здесь.
Mullvad привлек сторонние компании, занимающиеся тестированием на проникновение, для проведения аудита безопасности этого VPN-приложения. Подробнее о них читайте в файле readme по аудиту.
Авторские права (C) 2024 Mullvad VPN AB
Эта программа является свободным программным обеспечением: вы можете распространять ее и/или изменять в соответствии с условиями Стандартной общественной лицензии GNU, опубликованной Фондом свободного программного обеспечения, либо версии 3 Лицензии, либо (по вашему выбору) любой более поздней версии.
Полную версию лицензионного соглашения можно найти в файле LICENSE.md.
Исходный код приложения для iOS имеет лицензию GPL-3, как и все остальное в этом репозитории. Но распространяемое приложение в Apple App Store не имеет лицензии GPL, оно подпадает под действие EULA Apple App Store.