mirror of
https://github.com/amnezia-vpn/amnezia-client.git
synced 2026-10-15 05:42:07 +00:00
[GH-ISSUE #3098] Kill Switch causes "General failure" / ERR_NETWORK_ACCESS_DENIED / infinite "Connection" status — while same server works perfectly with Windscribe's Kill Switch #1436
Open
opened 2026-10-13 20:42:28 +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#1436
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 @nkubisoftacc2000 on GitHub (Aug 31, 2026).
Original GitHub issue: https://github.com/amnezia-vpn/amnezia-client/issues/3098
Problem Description
When Kill Switch is effectively ON:
AllowedIPs = 0.0.0.0/0ping 8.8.8.8returns "General failure" (not "Request timed out")ERR_NETWORK_ACCESS_DENIED/ "Your Internet access is blocked" on some websites and fail to load entirelyWhen Kill Switch is effectively OFF (config manually edited):
AllowedIPschanges to0.0.0.0/1, 128.0.0.0/1Expected Behavior
Comparison with Windscribe
I tested the exact same server by importing the WireGuard config into Windscribe, which also has a Kill Switch / Firewall mode:
This confirms the server-side configuration is correct (NAT, IP forwarding, firewall rules all verified). The issue is strictly in how the AmneziaWG Windows client enforces the Kill Switch at the OS level.
Questions
General failureand broken routing, while Windscribe's WFP-based implementation works flawlessly on the same machine?@DimitriiKorol commented on GitHub (Sep 1, 2026):
Can you add in title that KillSwitch can cause infinite "Connection" status? Cause I was looking for it and didn't find, end up reporting similar issue with kill switch
@lookingglass commented on GitHub (Sep 2, 2026):
Broken feature on Linux. Causes long connection to AWG 3.1 / 2.0 containers
@HeisLuka commented on GitHub (Sep 9, 2026):
I checked this against the exact
5.0.1.5Windows code and currentdev.I think the
0.0.0.0/0vs0.0.0.0/1 + 128.0.0.0/1observation is especially useful, but it points to a routing/WFP interaction rather than simply “the Kill Switch implementation blocks the VPN”.There are also separate source-confirmed bugs in the Windows WFP DNS filters.
1.
AllowedIPsis not the Kill Switch switch in AmneziaThe desktop WireGuard/AWG activation path passes these independently:
LocalSocketController::activate()builds the route prefixes fromAllowedIPs, while separately passing:So changing:
to:
changes the routing topology.
It does not, by itself, disable Amnezia's WFP Kill Switch.
This distinction matters because the exact routing difference provides a strong clue to the failure.
2.
/0and/1 + /1behave very differently in the Windows route tableFor:
Amnezia manually installs a Windows route through the AWG interface with:
That sounds like the VPN route must win, but
MIB_IPFORWARD_ROW2::Metricis only the route metric offset.Windows route preference uses the route metric together with the associated interface metric.
Therefore the actual comparison can be:
For two
/0routes, the physical route can win if:This is important because Amnezia does not currently establish the normal full-tunnel interface-metric invariant during initial AWG startup.
3. Amnezia removes the Peer before starting the Windows tunnel service
WireguardUtilsWindows::addInterface()generates the configuration and explicitly does:Only later does
updatePeer()send through UAPI:The AWG Windows implementation normally detects a default AllowedIP during interface configuration:
and then:
But the configuration initially supplied by Amnezia contains no
[Peer].Therefore at initial interface configuration:
and that full-tunnel interface metric setup is not performed.
Amnezia later installs the route itself with route metric
0, but that is not equivalent to setting the interface metric to0.4. This gives a direct explanation for why
/1 + /1fixes the connectionConsider an ordinary physical default route:
With the Amnezia config:
both candidates have the same prefix length.
Windows must then choose between them using route/interface preference.
But if the config is changed to:
every ordinary public IPv4 address matches an AWG
/1and the physical interface only has/0.Longest-prefix routing wins before the default-route metric competition matters:
This makes the reported A/B result very significant:
It is exactly what I would expect if the AWG
/0is losing a same-prefix route competition on that machine.5. The Kill Switch then turns the routing bug from fail-open into fail-closed
The Windows AWG path enables the firewall with the actual VPN interface index:
The firewall creates an explicit permit for the VPN interface:
and
enablePeerTraffic()creates block rules covering the configured VPN ranges.For a full-tunnel configuration that includes:
the intended model is effectively:
Now combine that with the route selection above.
Without enforcement:
With Kill Switch:
So the Kill Switch may be exposing the underlying routing failure rather than causing it.
This also explains a common diagnostic pattern:
That is preferable to silently leaking, but the underlying route selection still has to be fixed.
6. One runtime snapshot can confirm this on the affected machine
While connected with the failing
0.0.0.0/0configuration:The useful values are:
If the AWG
/0exists but:selects Ethernet/Wi-Fi, this report is runtime-confirmed.
An especially useful A/B test is:
and compare only:
If A chooses the physical adapter while B chooses AWG, the
/0metric competition is isolated.7. There is also an independent source-confirmed WFP DNS bug
While looking at the Kill Switch implementation I found a separate deterministic problem.
The helper used to permit the configured DNS server on port 53 builds one WFP filter containing:
and then:
WFP filter conditions are conjunctive.
Therefore this filter requires one connection to be simultaneously:
which can never happen.
So the intended high-priority rule:
cannot match either UDP DNS or TCP DNS.
There is also a small type inconsistency:
although the larger logical problem is already the contradictory protocol conditions.
8.
blockTrafficOnPort()contains the same protocol-condition mistakeThe generic:
helper creates:
inside one filter.
So that rule is also unsatisfiable as written.
This means both sides of the intended explicit DNS policy are malformed:
Both should instead create separate TCP and UDP filters.
For example, conceptually:
not:
This is present in the reported
5.0.1.5source and remains unchanged in currentdev.I would treat this as a separate source-confirmed defect exposed while investigating #3098; it is not sufficient by itself to explain
ping 8.8.8.8 -> General failure.9. The routing fix should establish a postcondition, not just add another route
For Windows full tunnel, the important invariant is:
Before reporting the tunnel healthy, something equivalent to:
should confirm that the result uses the AWG interface.
The endpoint itself is the deliberate exception:
while:
should always hold.
For the current Windows AWG implementation, explicitly establishing:
for a full-tunnel interface would restore the same interface invariant that
amneziawg-windowsnormally applies when it sees a default AllowedIP in its initial configuration.Alternatively, preserve enough default-route intent in the startup configuration for
amneziawg-windowsto perform its normal setup, while continuing to keep route ownership in Amnezia ifTable=offis required.10. Suggested regression matrix
Routing
Expected:
Test with:
/0vs/1Both:
and:
must result in the same intended full-tunnel data plane.
The
/1workaround should not be required to overcome interface metric selection.Kill Switch
With Kill Switch OFF:
With Kill Switch ON:
Kill Switch must not be the component compensating for a wrong route winner.
DNS
Test separately:
and verify the actual WFP filters match those flows.
Failure mode
Deliberately make the physical
/0more attractive than the AWG/0.Expected:
Forbidden:
Classification
I would classify the source defects as confirmed on current
dev.For this reporter specifically, I would call the
/0metric path highly consistent but requiring oneFind-NetRoutesnapshot for final runtime confirmation.The key distinction is:
Kill Switch ON is probably not destroying an otherwise-correct tunnel. The
0.0.0.0/0route can lose to the physical Windows default route because Amnezia sets only the route metric while its peerless startup prevents the normal AWG full-tunnel interface-metric setup. WFP then correctly blocks that wrongly selected physical path, turning a potential leak intoGeneral failure.The
/1 + /1workaround avoids the metric competition because those routes are more specific than the physical/0.Separately, the Windows WFP DNS permit/block helpers contain impossible
UDP AND TCPconditions and should be fixed independently.