- JavaScript 44%
- Python 24.6%
- Go 15.6%
- PowerShell 10.8%
- CSS 2.2%
- Other 2.7%
| .forgejo/workflows | ||
| ci | ||
| docs | ||
| engine | ||
| extension | ||
| scripts | ||
| tests | ||
| .dockerignore | ||
| .gitattributes | ||
| .gitignore | ||
| CHANGELOG.md | ||
| LICENSE | ||
| package.json | ||
| README.md | ||
Amnezia Browser
Клиент AmneziaWG 2.0 внутри Firefox. Импортируйте .conf, выберите вкладку и включите VPN круглой кнопкой. Отдельный VPN-процесс, Native Messaging, системный TUN и сервер-посредник не нужны: официальный AWG-движок и TCP/IP-стек работают в WebAssembly внутри браузера.
Это независимый проект. Знак Amnezia взят из официального клиента; проект не является официальным выпуском Amnezia VPN.
Текущие версии распространяются как проверочные сборки. Обнаружено ограничение модели с общими авторизациями сайтов: сетевые запросы общего service worker могут пройти обычным путём даже для VPN-вкладки. Полноценный релиз отложен до выбора и проверки изоляции таких запросов.
Возможности
- Компактный интерфейс и значок Amnezia с индикатором состояния.
- VPN для выбранных вкладок; остальные используют обычное соединение.
- Несколько конфигов с независимыми AWG-туннелями: разные вкладки могут одновременно использовать разные серверы.
- Логотип Amnezia рядом с иконкой сайта отмечает вкладки с работающим VPN. При выключении или обрыве метка исчезает; иконка и заголовок сайта сохраняются.
- Дочерняя вкладка наследует сервер и режим источника. Переключение родителя не меняет уже открытые дочерние вкладки.
- Общие cookies и авторизации сайтов: отдельные контейнеры не создаются.
- HTTP, HTTPS, WebSocket и DNS назначения через AWG.
- При обнаружении обрыва новые запросы переходят на обычное соединение. Выбор VPN-вкладок сохраняется; повторное включение восстанавливает туннель.
Зелёная кнопка означает подтверждённый VPN для выбранной вкладки, красная — обычное соединение, жёлтая — подключение. Переключение режима перезагружает выбранную страницу, чтобы создать новые сетевые соединения. Совершенно новые вкладки по умолчанию используют обычное соединение.
Поддерживаемый браузер
Текущая проверенная цель — Firefox Developer Edition на Windows. Используются доверенные WebExtension Experiments для UDP к AWG endpoint, TCP-слушателей на loopback, отображения логотипа на вкладках и шифрования конфигов ключом профиля Firefox. Обычный Firefox Release пока не поддерживается; обычная подпись AMO не предоставляет эти API.
- В
about:configзадайтеxpinstall.signatures.required=falseиextensions.experiments.enabled=true, затем перезапустите Developer Edition. - В
about:addonsвыберите установку дополнения из файла и установите XPI из Releases. - Откройте Amnezia и выберите один или несколько
.confлибо импортируйте конфиг текстом. Форма импорта открывается в отдельном окне расширения и сохраняется при открытии системного диалога выбора файлов. После выбора нажмите «Импортировать». - На вкладке с сайтом выберите сервер и включите VPN. В других вкладках можно выбрать другие серверы.
Для установки из исходников есть scripts/start-developer-prototype.cmd. По умолчанию он использует отдельный тестовый профиль. scripts/start-developer-prototype.ps1 -ExistingProfile <полный путь> устанавливает XPI в закрытый существующий профиль текущего Windows-пользователя. Другие профили не меняются.
Конфигурация и ограничения
Один [Interface] и один [Peer]; поддерживаются AWG 2.0 Jc/Jmin/Jmax, S1–S4, H1–H4, I1–I5, PresharedKey, DNS, MTU и PersistentKeepalive. Команды PreUp/PostUp/PreDown/PostDown не выполняются. Форматы vpn://, экспорт Amnezia и AWG 3.x не поддерживаются.
Для браузерного доступа нужен числовой DNS внутри AllowedIPs. Проверенный сценарий использует полный IPv4-маршрут 0.0.0.0/0. Поддерживается до 32 сохранённых конфигов и до 8 одновременно подключённых серверов.
Конфиги с ключами шифруются встроенным NSS Secret Decoder Ring и хранятся в storage.local этого профиля Firefox. Ключ шифрования хранится самим Firefox; при установленном основном пароле Firefox может потребовать его ввод. Данные не записываются в storage.sync, открытый .conf, журналы или сообщения состояния. Интерфейс получает только названия, параметры сервера и счётчики. Удаление расширения штатно удаляет его локальное хранилище.
После перезапуска конфиги загружаются без повторного импорта, а назначения серверов восстанавливаются вместе с вкладками сессии Firefox. До нажатия кнопки подключения используется обычное соединение. При обнаруженном обрыве затрагивается только соответствующий туннель, остальные продолжают работать.
Loopback-адреса используют обычное соединение. Служебные запросы без определяемой вкладки тоже идут обычным путём. Произвольный UDP/QUIC и другие приложения не входят в поддерживаемый маршрут. Уже открытое TCP-соединение нельзя перенести между маршрутами; ему требуется переподключение.
Настройки webRTCIPHandlingPolicy=proxy_only и предзагрузки сети действуют на весь профиль, пока туннель работает. Видеозвонки в обычных вкладках могут быть ограничены. После остановки или ошибки собственные изменения настроек снимаются. Для приватных окон требуется разрешение дополнения; отдельная проверка этого режима пока не проведена.
Проверка доступности отправляет запрос определения внешнего IP в api.ipify.org. Конфиги этому сервису не передаются.
Сборка и проверки
На Windows:
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\build.ps1
node --test tests/*.test.mjs
node engine/test-wasm.cjs
python tests/firefox/test_tab_routing.py
python tests/firefox/test_tab_markers.py
python tests/firefox/test_profiles.py
python tests/firefox/test_file_import.py
Go 1.27.3 загружается в .tools с проверкой закреплённого SHA256. Зависимости закреплены в engine/go.mod и engine/go.sum. В XPI попадают только файлы extension/; Go нужен для сборки.
tests/firefox/test_tab_routing.py --live-json-stdin принимает JSON с configText через stdin и проверяет IP разных вкладок, наследование, обычное соединение после обрыва и ручное восстановление. Реальный конфиг не сохраняется. Используйте отдельный тестовый профиль AWG, не подключённый одновременно в другом клиенте.
tests/firefox/test_tab_markers.py проверяет нативную полосу вкладок в отдельном профиле Developer Edition с синтетическим состоянием маршрута: исходные иконки, наследование, навигацию, перемещение между окнами, закрепление и очистку меток при отключении расширения. Подключение к VPN-серверу для этой проверки не требуется.
tests/firefox/test_file_import.py открывает настоящую панель расширения, проверяет переход к устойчивому окну импорта и передаёт пути тестовых файлов штатному файловому полю через Marionette. Проверяются выбранные имена, импорт нескольких файлов, сохранение формы при потере фокуса и сообщения об ошибках. Системный диалог Windows в этом тесте не управляется; DataTransfer и искусственные события change не используются.
tests/firefox/test_profiles.py подключает реальные WASM-клиенты к двум локальным AWG-ответчикам с тестовыми ключами. Проверяются разные выходы у вкладок, независимая остановка, наследование сервера, импорт из интерфейса и расшифровка после полного перезапуска. Перед тестом соберите опциональный ответчик: .tools/go/bin/go.exe test -c -o ../.tools/browser-fixtures.exe ./internal/bridge из engine/. Ответчик запускается только тестом с AWG_BROWSER_FIXTURE=1; в XPI его нет. Только в тестовом XPI URL проверки IP заменяется на локальный источник внутри туннеля.
Выпуск версии в Forgejo
- Измените версию в
extension/manifest.jsonиpackage.json, добавьте запись вCHANGELOG.md. - Зафиксируйте исходники и создайте тег
vX.Y.Zна этом коммите. - Отправьте тег в Forgejo. Для ручного выпуска используйте Actions → build → Run workflow, укажите существующий тег и включите
publish(по умолчанию он выключен).
Обычные коммиты не выпускают версию. Сборка тега запускает native Go, JS и WASM-проверки, затем создаёт XPI из исходников в Docker. Releases содержит XPI, SHA256SUMS, package-info.json и release-manifest.json с коммитом и проверками. Проверка реального браузера выполняется отдельно на Windows и не требует передачи пользовательского конфига в CI. Опубликованные версии неизменяемы.
Для проверочной сборки текущей ветки запустите workflow вручную и отключите publish. XPI сохранится в артефактах Actions; релиз и тег созданы не будут. Образы инструментов сборки закреплены по digest.
Устройство проекта
extension/lib/tab-policy.js— выбор вкладок, наследование и восстановление меток.extension/lib/browser-route.js— маршрутизация запросов и проверка доступа через SOCKS.extension/lib/controller.js— жизненный цикл одного AWG-туннеля.extension/lib/profile-manager.js— сохранённые профили и отдельный контроллер на каждый сервер.extension/lib/profile-storage.js— атомарная запись зашифрованных конфигов.extension/lib/route-scopes.js— единый proxy listener, изоляция сокетов и совместное управление privacy-настройками.extension/experiments/— ограниченные UDP, loopback TCP API Gecko и метки вкладок.extension/ui/— компактное окно и импорт.engine/— официальныйamneziawg-go v0.2.19и gVisor TCP/IP в WASM.ci/,.forgejo/,scripts/build-release.sh— выпуск XPI.
Лицензия
GPL-3.0-only, см. LICENSE. Лицензии зависимостей и исходного знака Amnezia перечислены в extension/licenses/NOTICE.txt и поставляются в XPI. Исходные уведомления upstream сохранены.