
gotatun v0.9.2
Реализация WireGuard® в пользовательском пространстве на Rust
GotaTun
Реализация WireGuard® в пользовательском пространстве и форк BoringTun.
Лицензия
Весь исходный код в этом репозитории подчиняется условиям Mozilla Public License версии 2.0, если не указано иное. Копию этой лицензии можно найти в файле "LICENSE" или по адресу https://www.mozilla.org/MPL/2.0/.
Вклад, внесённый до 5 марта 2026 года, лицензируется по старой лицензии BSD 3-clause. Копию этой лицензии можно найти в файле "LICENSE-CLOUDFLARE".
Вклад
Если вы явно не заявите об ином, любой вклад, намеренно представленный вами для включения в работу, как определено в лицензии MPL-2.0, будет лицензирован в соответствии с вышеуказанными условиями без каких-либо дополнительных условий.
Сборка
- Только библиотека:
cargo build --lib --no-default-features --release [--target $(TARGET_TRIPLE)] - Исполняемый файл:
cargo build --bin gotatun --release [--target $(TARGET_TRIPLE)]
Установка
По умолчанию исполняемый файл помещается в папку ./target/release. Вы можете скопировать его в нужное место вручную или установить с помощью cargo install --bin gotatun --path ..
Nix
Чтобы собрать исполняемый файл, просто выполните nix build .#gotatun. Итоговый бинарный файл будет находиться в result/bin/gotatun.
Запуск
Согласно спецификации, для запуска туннеля используйте:
gotatun [-f/--foreground] INTERFACE-NAME
Затем туннель можно настроить с помощью wg как обычный туннель WireGuard или любым другим инструментом.
Также можно использовать с wg-quick, установив переменную окружения WG_QUICK_USERSPACE_IMPLEMENTATION в значение gotatun. Например:
sudo WG_QUICK_USERSPACE_IMPLEMENTATION=gotatun WG_SUDO=1 wg-quick up CONFIGURATION
Обратите внимание, что wg-quick проигнорирует WG_QUICK_USERSPACE_IMPLEMENTATION в Linux, если у вас установлен модуль ядра wireguard.
Тестирование
Для тестирования этого проекта есть несколько требований:
sudo: требуется для создания туннелей. При запускеcargo testу вас запросят пароль.- Docker: его можно установить здесь. Если вы используете Ubuntu/Debian, можно выполнить
apt-get install docker.io.
Поддерживаемые платформы
| Целевой триплет | Бинарный файл | Библиотека |
|---|---|---|
| x86_64-unknown-linux-gnu | ✓ | ✓ |
| aarch64-unknown-linux-gnu | ✓ | ✓ |
| riscv64gc-unknown-linux-gnu | ✓ | ✓ |
| aarch64-apple-darwin | ✓ | ✓ |
| x86_64-pc-windows-msvc | ✓ | ✓ |
| x86_64-pc-windows-gnullvm | ✓ | ✓ |
| aarch64-pc-windows-msvc | ✓ | ✓ |
| aarch64-pc-windows-gnullvm | ✓ | ✓ |
| x86_64-linux-android | ✓ | |
| aarch64-linux-android | ✓ | |
| aarch64-apple-ios | ✓ |
Другие цели могут работать, но мы тестируем только эти
Linux
Поддерживаются архитектуры x86-64 и aarch64. Поведение должно быть идентично поведению wireguard-go со следующим отличием:
gotatun сбрасывает привилегии при запуске. После сброса привилегий установить fwmark невозможно. Если требуется fwmark, например при использовании wg-quick, запускайте с --disable-drop-privileges или установите переменную окружения WG_SUDO=1.
Вам нужно будет предоставить исполняемому файлу возможность CAP_NET_ADMIN с помощью: sudo setcap cap_net_admin+epi gotatun. sudo не требуется.
macOS
Поведение аналогично поведению wireguard-go. В частности, имя интерфейса должно быть utun[0-9]+ для явного имени интерфейса или utun, чтобы ядро выбрало наименьшее доступное. Если вы выберете utun в качестве имени интерфейса и определена переменная окружения WG_TUN_NAME_FILE, то фактическое имя интерфейса, выбранное ядром, записывается в файл, указанный этой переменной.
Расширения UAPI
См. UAPI для расширений протокола конфигурации wg.
Аудиты
В проекте проводились независимые аудиты безопасности. См. каталог audit.
WireGuard является зарегистрированным товарным знаком Jason A. Donenfeld. GotaTun не спонсируется и не одобряется Jason A. Donenfeld.