
Реализация WireGuard® в пользовательском пространстве на Rust
Реализация WireGuard® в пространстве пользователя, форк BoringTun.
Весь исходный код в этом репозитории, если не указано иное, распространяется на условиях Mozilla Public License версии 2.0. Копию этой лицензии можно найти в файле «LICENSE» или по адресу https://www.mozilla.org/MPL/2.0/.
Вклады, сделанные до 5 марта 2026 года, распространяются на условиях старой лицензии BSD (3 пункта). Копию этой лицензии можно найти в файле «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 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 у вас запросят пароль.apt-get install docker.io.Другие целевые платформы могут работать, но мы тестируем только перечисленные
Поддерживаются архитектуры x86-64 и aarch64. Поведение должно быть идентично поведению wireguard-go, за исключением следующего отличия:
При запуске gotatun сбрасывает привилегии. После сброса привилегий установить fwmark невозможно. Если fwmark требуется, например при использовании wg-quick, запускайте с флагом --disable-drop-privileges или установите переменную окружения WG_SUDO=1.
Вам нужно выдать исполняемому файлу capability CAP_NET_ADMIN с помощью: sudo setcap cap_net_admin+epi gotatun. sudo не требуется.
Поведение аналогично поведению wireguard-go. В частности, имя интерфейса должно быть utun[0-9]+ для явного имени или utun, чтобы ядро выбрало наименьший доступный номер. Если вы выберете utun в качестве имени интерфейса и будет определена переменная окружения WG_TUN_NAME_FILE, фактическое имя интерфейса, выбранное ядром, будет записано в файл, указанный этой переменной.
См. UAPI — расширения протокола конфигурации wg.
По проекту были проведены независимые аудиты безопасности. См. каталог audit.
WireGuard является зарегистрированным товарным знаком Джейсона А. Доненфельда. GotaTun не спонсируется и не поддерживается Джейсоном А. Доненфельдом.
| Целевая тройка | Бинарный файл | Библиотека |
|---|
| x86_64-unknown-linux-gnu | ✓ | ✓ |
| aarch64-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 | ✓ |