mirror of
https://github.com/amnezia-vpn/amnezia-client.git
synced 2026-10-15 05:42:07 +00:00
[GH-ISSUE #3117] [Self-hosted][AWG 3.1][iOS] Installer reports success although awg0 fails to start; startup error is hidden #1444
Open
opened 2026-10-13 20:42:37 +00:00 by bsakaguchi
·
3 comments
No Branch/Tag specified
dev
feat/otp-login
feat/api-tests
fix/show-locked-xray-settings-page-for-servers-without-write-access
fix/serialize-log-record-writes-and-pin-log-date-format-locale
fix/libagw-review-fixes
fix/ios-xray-ipv6-leak
fix/macos-xray-ipv6-leak
feat/add-support-include-split-tunnel
fix/win-xray-app-split-tunneling
fix/bug-when-saving-after-canceling
fix/xray-reconnect-crash
fix/share-empty-config-on-ssh-timeout
fix/ssh-credentials-input
fix/updater-verify-signature
fix/async-ssh-threading
fix/xray-check-inet-and-liveness-monitor
fix/selfhosted-server-installations
feat/add-support-ikev2-macos
fix/icons-different-color-themes
feat/add_support_arm_windows
feat/add-deep-link
feat/fixed-push-notifications-on-VPN-connect-disconnect-2
feat/implement-QR-code-generation-and-scanning
feat/file-password-protection
feature/add-local-proxy
feat/add-support-split-tunnel-macos
feat/tests
fix/android-register-unacknowledged-purchase
fix/share_on_linux
mirroring-to-outside
feat_copy_docker_configs
feat/self-diagnostics-log
feat/amnezia-free-vless-switch
fix/conan_build_android_on_win
fix/linux-reconnect-dns-reliability
fix/windows-connection-stability
fix/linux-reconnect-refactoring
fix/ios-groupidentifier-order
feat/xray-subscription-link
fix/minor-fixes
fix/xray-config-inplace-edit
feat/amnezia-sdk-typed-api
feat/amnezia-sdk-integration
feat/force-update-native
refactor/marketplace-update-popup
feat/force-update
fix/valnurability_dev
chore-xcode-version
fix/empty-i1-i5
build_qt_6_10_1
master
feat/protocol-selection
fix/openvpn_install
feat/locations_change
feat/locations_change_rework
feature/local-proxy-integration
fix/filepicker_atv
fix_valnurability
fix/macos-ne-codesign-4.8.19.0
temp-branch-for-testing
fix/rebased_4_8_19_linux_fix_error
feat/proxy-storage-cache
fix/zeroed-params
fix/killswitch-blocknets-linux
update/translation_RU
fix/self_hosted_reinstall_error
feat/selfhosted-dns
fix/agp_version_up
feat/switch_to_alive_protocol
feat/support_multipeer
server_scripts_update
fix/extended-vless-configuration
chore/apple-ci-cd-macos-versions
feat/add-telemt
fix/android_keystore_read_error
feat/add-mtproxy
chore/bump-qt-version
fix/make_dbus_async
feature/dns
rebase/apple-tv-target-on-conan
fix/outbound_freedom_xray_with_dns_fix
feat/apk_support
feat/fallback-proxy
feat/apple-tv-target
fix/dns_reconnection_issue
feat/fixed-push-notifications-on-VPN-connect-disconnect
fix/linux-firewall
docker-regional-locks
appstore-review-popup
feat/storekit2
fix/uninstall-split-tunnelling-driver
revert-2376-chore/license-file
support_16kb_android
bump_version
feat_add_review_android
bugfix/translation-absence-on-subscription-key-page
feat/location-separation-by-region
bugfix/text-moving-when-resing-window
fix_backup
feature/add-purchase-android
bugfix/moved-text-while-resizing-window
bugfix/incorrect-killswitch-restore-from-backup
fix/backup-exclude-secondary-api-configs
feat/proxy-fields-for-dev-console
bugfix/ovpn-ios-fix
bugfix/linux-bundle-libraries
fix/xray-app-split-win
fix/upload-to-s3
chore/add-release-date-upload
feat_add_webview_support
feature/configuration-transfer-through-qr
feat/bot-key-unlink-device
fix/ad-link-lang-support
fix/qsecuresettings-with-android
feat/add-support-arm64-win
spanish-translations
fix/context-menu
feat/add-system-dns-support
fix/qt6-9-support
fix/qt6_9_support
bugfix/strict-killswitch-ui
android-7
chore/minor-bugfixes
feature/awg-net-fix-macos-wakeup
fixbug/ios18
bugfix/ios-ne-crash
fix/linux-tray-quit-button
cryptpad-support
bugfix/disable-linux-killswitch
fix/minor-ui-fixes
feature/setup-guid-tun2socks
feature/linux-ipsec
feature/ipsec-linux
refactoring/server-config-in-classes
feature/macos-ipsec
fix/ui-fixes-after-merge-with-d20ed4a
chore/focus_control_after_qt_6.9_migration
feature/integrate-xray-as-a-library
maxos-awg-fix
feature/add-new-awg-docker-image
chore/update-3rd-prebuild
feature/test-news
fix/api-conf-files
bugfix/split-tunneling-with-api-config
bugfix/ios-awg-new-fields
feature/special-handshake-2
feat/xray-api-support
fix/desktop-entry
bugfix/shadowsocks-cipher-setting-not-changing
feature/update-tap
bugfix/openvpn_import_fix
feature/ability-to-change-port-after-installing-xray
bugfix/strict-mode-ovpn
bugfix/win-ipv6-ovpn
bugfix/subnet-adress-setting
exception-podman-docker
bugfix/fix-listviewtype-scrolling
bugfix/win-disabled-ipv6
bugfix/win-ipv6-disabled-ovpn
feature/killswitch-strict-mode
feature/awg-network-check
feature/empty-split-tunneling-list
feature/support-info
chore/update-go-version
checking-Linux-version
update_server_scripts
bugfix/button-selection-easy-setup-page
feature/old-api-proxy
patch/user-checking
fix/correcting-version
support-podman
support_podman
user-checking-patch
feature/check-docker-version
feature/allowed-dns-list
without_lsof
chore/error-body
Update-amneziavpn_ru_RU
shiroow-patch-8
shiroow-patch-7
shiroow-patch-6
shiroow-patch-5
shiroow-patch-4
shiroow-patch-3
shiroow-patch-2
shiroow-patch-1
check_sudo_permissions
feature/euphoria
add_next_octet_to_ip_settings
bugfix/mobile-controllers-init
euphoria
bugfix/android-crush
feature/macox-network-extension
bugfix/pre-release-hotfixes
bugfix/ipsec-pfs
chore/ios-site-links
checking_sudo_permissions
feature/android-tv
improve_navigation_cpp
bugfix/linux-firewall-install
fixbug/wireguard-handshake-time
ReadmeRu_full
feature/xray-user-management
feature/subscription-end-date
chore/clang-format
feature/ru-in-readme
chore/increased-api-timeout
chore/deploy-workflow
bugfix/services-list-scroll
wheel_group_suppor
chore/bump-xcode-version
fixbug/mac-network-extension
feature/android-gpb
feature/page-home-drawer-country-selection
checking-sudo-users
bugfix/service-info-from-response
fixbug/build-macos-ne-2
android-qt-6.7.3
fixbug/build-macos-ne
bugfix/wg-windows-log-folder
feature/psk-key-api-request
bugfix/user-management-qml-warnings
fix/macos-network-extension
fixbug/macos-NE-build
bugfix/fixed-isDevEnv-initialization
bugfix/revert-ios-ovpn
feature/tun2socksSrv
fix/disable_singleapp
feature/awg-wg-name-resolving
feature/disable-dhcp
bugfix/allowed-ips-old-configs
feature/goodbyedpi
feature/add-exception-log
refactoring/remove-ipv6-from-default-routes
refactoring/singleapplication-submodule
macos-dirty-build
test/gateway
Update-amneziavpn_fa_IR.ts
bugfix/ipsec-win
fix/xray-custom-port
improve-tab-navigation
test-win-11
feature/android-tv-remote-control-support
KsZnak-patch-1
feature/awg-wg-qr
bugfix/fix-loopback-splittunel
fix/setup_host_firewall
feature/android-xray
feature/openvpn-pass
feature/connection-string
fix/clickable-errors
bugfix/api_1100_fix
feature/graphview
testsvg
feature/update-win-awg
feature/open-as-amnezia
feature/update-mozilla-upstream
bugfix/qr-code-cutting
feature/native-wg-psk
test/awg-centos
bugfix/hide_error
feature/add-uninstaller-checkbox
bugfix/cancel-button-on-install-page
bugfix/anchors-page-home-warning
awg-udptlspipe
button-focus-fix
revert-677-fix/logger
bugfix/Revert_PR_596
bugfix/allowed-ips-api-configs
bugfix/on-escape-pressed
feature/auto-scroll-for-server-selection-list
fix/ui-fixes
translations/update_fa_IR.ts
feature/new-awg-docker-container
bugfix/awg_ipv6_fix
feature/tab-navigation
fix/username-no-autocapitalization
sure
refactoring/servers-model-cleanup
feature/wg-mtu-setup-ios
3rd_adaptation_to_diff_OS
sudo_not_found
test/docker-ce
bugfix/double_clear_server_from_amnezia
fix/android
client/3rd-prebuilt
revert-559-KsZnak-translation-ru-ex
KsZnak-translation-ru-ex
KsZnak-br1
KsZnak-text-change
feature/api-awg
feature/error-code-output
feature/win_x32_builds
text/debug-output
feature/ovpn3-desktop-cli
bugfix/secureqsettings-deadlock
refactoring/change-settings-when-connected
files_check
ArchLinux-support
second_adaptation_to_diff_os
sudo
refactoring/android-build
adaptation_to_different_os
feature/online_installer_for_v4
update_to_r2
bugfix/return-after-installation
feature/custom_drawer_component
bugfix/split-tunneling
bugfix/existing-awg-container
revert-370-feature/custom_drawer_component
bugfix/adapted_awg_questiondrawer
bugfix/updated_drawer_height_pageserverdata
bugfix/translated_new_source_strings_to_chinese
feature/split-tunneling-config
feature/accessibility-support
branch_connectivity_change_fix
feature/ikev2_android
android_ss_transport
bugfix/macos_fixes
feature/nextcloud-support
feature/macos_network_extension
android_pt_transport_source
feature/ios-openvpn3-pluggable-transport-Cloak
bugfix/cloak_for_desktops_fix
arm-build-macos
fix-macos-build-brew
bugfix/ios-build-openvpnadapter-from-source
feature/download-native-wireguard-config-on-connect
feature/v2ray-container
bugfix/dpkg-busy-checking-stuck
feature/online-installer
dev-killswitch
dev-netadapters
5.0.3.0
5.0.2.1
5.0.2.0
5.0.1.5
5.0.0.5
5.0.0.2
4.8.21.0
4.8.19.0
4.8.18.0
4.8.17.0
4.8.16.0
4.8.15.4
4.8.15.0
4.8.14.5
4.8.14.1
4.8.12.9
4.8.12.8
4.8.12.7
4.8.12.6
4.8.11.4
4.8.11.3
4.8.11.2
4.8.11.1
4.8.11.0
4.8.10.0
4.8.9.2
4.8.9.1
4.8.9.0
4.8.8.3
4.8.8.2
4.8.8.1
4.8.7.2
4.8.7.1
4.8.7.0
4.8.6.0
4.8.5.0
4.8.4.5
4.8.4.4
4.8.4.3
4.8.4.2
4.8.4.1
4.8.4.0
4.8.3.2
4.8.3.1
4.8.2.3
4.8.1.9
4.8.1.0
4.8.0.5
4.7.0.0
4.6.0.3
4.6.0.1
4.5.3.0
4.5.0.0
4.4.0.0
4.3.0.0
4.2.1.0
4.2.0.1
4.1.2.0_cloak_pt_experimental
4.1.0.1
4.0.8
3.1.0
3.0.8
3.0.7
3.0.5
2.1.2
2.1.0
2.0.10
2.0.9
2.0.8
2.0.7
2.0.6
2.0.5
2.0.1
2.0
1.9.1
1.9
1.8
1.7
1.6
1.5
1.4
1.3
1.2
1.1
1.0
No labels
pull-request
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
amnezia-vpn/amnezia-client#1444
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @trasbe on GitHub (Sep 2, 2026).
Original GitHub issue: https://github.com/amnezia-vpn/amnezia-client/issues/3117
Describe the bug
AmneziaVPN on iOS deploys a self-hosted AmneziaWG 3.1 container and reports the installation as successful. When connecting, the app retries for a long time and eventually displays "Connected", but no traffic passes.
The Docker container remains in the "Up" state, but inside it:
awg0interface does not exist;awg showreturns no interfaces;amneziawg-goprocess is running;The container entrypoint attempts
awg-quick up, ignores its failure, and then runstail -f /dev/null. The container is also launched with--log-driver none, so the startup failure is not visible throughdocker logsand the container appears healthy.An older, manually deployed AmneziaWG 2.0 instance on the same VPS continues to work over UDP, so the VPS and its network connection are reachable.
To Reproduce
amnezia-awg2container./opt/amnezia/start.shexecutes automatically:Expected behavior
The installer should verify that
awg0exists, that the daemon/interface is listening, and that the generated configuration was applied successfully. If startup fails, installation should fail with the real error instead of leaving a permanently "Up" container and showing a false "Connected" state on iOS.If an incompatible host AmneziaWG kernel module is present, the installer should detect it and either upgrade it, reject the installation with a useful message, or force the bundled compatible userspace implementation.
Log files
docker logscannot be read because the container is deliberately created with--log-driver none:Container process list:
Relevant generated configuration values (keys omitted):
Smartphone
Server
6.8.0-138-generic, x86_64amnezia-awg2amneziawg-tools v3.1.20260812amneziawg-go 0.0.20250522Additional context
The host already runs an older manually configured AmneziaWG instance. Since
awg-quickselectsip link add awg0 type amneziawgand fails atawg setconf, while the bundledamneziawg-godaemon never starts, an incompatible pre-existing host kernel module is suspected. Regardless of the underlying compatibility problem, the installer currently fails to validate protocol readiness and suppresses the only useful startup error.No server IP addresses, hostnames, or VPN keys are included in this report.
@trasbe commented on GitHub (Sep 2, 2026):
Additional confirmation after a clean reinstall:
Before reproducing this issue, I used the AmneziaVPN client to remove all AmneziaVPN-managed server installations/containers shown for this VPS, then added the server again and installed AWG 3.1 from scratch. The fresh installation produced exactly the same result, so this does not appear to be stale app-managed container data or an old generated configuration.
The same generated AWG 3.1 configuration starts successfully when the bundled userspace implementation is forced manually:
After that,
awg0is UP,awg show awg0displays the configured peers, and traffic from the iOS client works immediately.This strongly confirms that the failure is specific to the kernel path selected by
awg-quick:ip link add ... type amneziawgsucceeds via the pre-existing host module, butawg setconffails withInvalid argument, so the userspace fallback is never attempted. The workaround is temporary and is lost when the container restarts.@hezeka commented on GitHub (Sep 7, 2026):
Confirmed the same failure mode on Ubuntu 22.04 (Windows 11 + Android clients), and I was able to pin down the root cause: an outdated
amneziawgkernel module on the Docker host.Symptom
Client 5.0.1.5 hangs on "Connecting" indefinitely, then times out. No handshake at all — not a single packet leaves the client, and
tcpdumpon the server sees nothing. Containeramnezia-awg2showsUpfor days, the port is published bydocker-proxy, but nothing is actually listening. Plain WireGuard on the same server works fine.Root cause
run_container.shstarts the container--privileged, with--cap-add=SYS_MODULEand-v /lib/modules:/lib/modules. As a resultawg-quickinside the container uses the host's kernel module instead of the bundled userspaceamneziawg-go:The host module was
1.0.20251009(the AWG 1.5/2.0 branch). AWG 3.1 keys —HeaderProtectionKey,ContentPaddingAddition,RandomTrailers,DisableCookies— requirev3.1.20260812or newer.Importantly,
wg-quick's userspace fallback never triggers: it only fires whenip link addfails. Hereip link addsucceeds and the failure happens on the next step (awg setconf), which has no fallback path.Why it is completely invisible
run_container.shuses--log-driver none, sodocker logsshows nothingstart.shdoes not check the exit code ofawg-quick upand proceeds straight totail -f /dev/nullThe container therefore stays
Upforever, the installer reports success, and the client retries into the void. Reinstalling the container does not help — the broken module lives on the host, so every redeploy reproduces the same failure.This is very likely the same underlying cause behind #3081, #3056, #3055 and #2851.
Fix (user side)
Two traps worth documenting:
sudo apt install amneziawgdoes not upgradeamneziawg-dkms. The metapackage dependency is already satisfied, so apt only upgradesamneziawg-toolsand silently leaves the old module in place.1.0.0across all builds, sodkms statuslooks unchanged before and after. The only reliable check ismodinfo amneziawg | grep ^version.Workaround without touching the host module — forces the container onto userspace
amneziawg-go:Suggested fixes (client side)
awg show, orip link show awg0) and fail the installation with the real error instead of reporting success.start.sh, check the exit code ofawg-quick upand persist the error somewhere readable — e.g./opt/amnezia/awg/startup.log— so it survives--log-driver none.amneziawgmodule before deploying AWG 3.1 and either refuse with a clear message or forceWG_QUICK_USERSPACE_IMPLEMENTATION=amneziawg-go.Environment
amnezia-awg2amneziawg 1.0.20251009(dkms build1.0.0-0~202511041403)amneziawg 3.1.20260812(dkms build1.0.0-0~202609061402)@HeisLuka commented on GitHub (Sep 8, 2026):
I think there is one more failure boundary here beyond the stale host kernel module itself.
In current dev, setupContainer() ultimately returns the result of startupContainerWorker(). The latter starts /opt/amnezia/start.sh using:
sudo docker exec -d $CONTAINER_NAME sh -c
"chmod a+x /opt/amnezia/start.sh && /opt/amnezia/start.sh"
The important part is docker exec -d.
This means the status observed by InstallController is the result of starting the detached exec process, not the eventual exit status of /opt/amnezia/start.sh.
Therefore changing start.sh from the current:
awg-quick up /opt/amnezia/awg/awg0.conf
...
tail -f /dev/null
to something like:
set -e
awg-quick up /opt/amnezia/awg/awg0.conf
would be useful, but by itself would still not close the installer false-success path.
A deterministic regression case is:
stale host amneziawg module
↓
ip link add awg0 type amneziawg succeeds
↓
awg setconf fails
↓
start.sh exits non-zero
↓
detached docker exec was already accepted successfully
↓
installer has no protocol readiness evidence
I think installation success should be gated on an explicit post-start readiness check rather than process/container launch.
Conceptually:
upload start.sh
↓
start protocol
↓
bounded readiness wait
↓
verify awg0 exists
↓
verify
awg show awg0succeeds / expected config is readable↓
only then return installation success
If readiness fails, preserve/capture the startup error and return a protocol-startup failure instead of committing the installation as successful.
The useful invariant would be:
INSTALL_SUCCESS
=>
startup reached protocol readiness
AND awg0 exists
AND applied AWG configuration can be read back
And I would explicitly add this countertest:
start.sh exits non-zero after a successfully accepted
docker exec -dexpected:
installation fails
forbidden:
installer reports success merely because detached exec started
This also separates two independent fixes:
A. compatibility policy
old host kernel module vs bundled amneziawg-go
B. installer correctness
process/container launch != protocol readiness
Fixing A would solve this particular host-module case. Fixing B prevents the same false-success class for future AWG startup failures as well.