New in version 1.6.7
- Fix: a DNS query carried over TCP (remote DNS enabled, with the query itself sent through the tunnel) was never released. The connection record and its buffer stayed allocated, and the session counter only ever went up. After 512 of them the client would refuse every new TCP connection — DNS and ping still worked, everything else was dead, and restarting the tunnel brought it back. The session now releases itself as soon as the answer has been written back, and a regression test asserts the se
Android SOCKS5 TUN tunnel client — routes the device's entire network traffic through a remote SOCKS5 server using a TUN virtual interface. No root required.
Features:
- User-space TCP state machine forwarded via SOCKS5 CONNECT
- UDP / DNS / QUIC relay via SOCKS5 UDP ASSOCIATE (UDP-in-UDP or UDP-in-TCP 0x04)
- Remote DNS (fakedns) with fake IPv4 (198.18.0.0/15) and fake IPv6
- IPv4 + IPv6 dual-stack support
- Per-App routing modes: Global, Allowlist, or Exclusion
- Auto-reconnect with exponential backoff on connection drop
- Live traffic statistics (up/down bytes & session count) in persistent notification
- Custom primary & secondary DNS servers
- Start tunnel on boot
- Quick Settings tile for one-tap tunnel toggle
- Multiple profile management with JSON export/import via clipboard
- Native C (epoll) engine + JNI + Kotlin UI
Privacy notes:
- While the tunnel is up, the proxy server's hostname is re-resolved outside the tunnel (needed to follow DDNS / IP changes without tearing the TUN interface down). That lookup is sent to the DNS servers of the network the tunnel actually runs over. The custom DNS servers above are used only as a fallback when that resolver gives no answer, and the fallback is written to the log.
- With Remote DNS enabled, DNS queries from apps are relayed to the proxy exit instead of being answered locally.
Open source (MIT), reproducible builds.
Donate
Versions
Although APK downloads are available below to give you the choice, you should be aware that by installing that way you will not receive update notifications and it's a less secure way to download. We recommend that you install the F-Droid client and use that.
Download F-Droid
-
arm64-v8a
armeabi-v7a
x86_64
This version requires Android 8.0 or newer.
It is built and signed by the original developer, and guaranteed to correspond to this source tarball.
Permissions
-
view network connections
Allows the app to view information about network connections such as which networks exist and are connected.
-
android.permission.BIND_QUICK_SETTINGS_TILE
-
run foreground service
Allows the app to make use of foreground services.
-
run foreground service with the type "specialUse"
Allows the app to make use of foreground services with the type "specialUse"
-
have full network access
Allows the app to create network sockets and use custom network protocols. The browser and other applications provide means to send data to the internet, so this permission is not required to send data to the internet.
-
show notifications
Allows the app to show notifications
-
query all packages
Allows an app to see all installed packages.
-
run at startup
Allows the app to have itself started as soon as the system has finished booting. This can make it take longer to start the phone and allow the app to slow down the overall phone by always running.
-
ask to ignore battery optimizations
Allows an app to ask for permission to ignore battery optimizations for that app.
-
display notifications as full screen activities on a locked device
Allows the app to display notifications as full screen activities on a locked device
-
com.tokyoxpa3.socksclient.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION
Download APK
2 MiB
PGP Signature
|
Build Log
New in version 1.6.6
- Fix: IPv6 link-local detection (fe80::/10) now compares the numeric value of the first hextet instead of a textual prefix, so an address such as fe8::1 is no longer misread as link-local and dropped — it is really 0fe8::, which is outside fe80::/10 (over-filtering reported in the F-Droid 1.6.5 review; the existing test had asserted the buggy behaviour)
- Fix: when Wi-Fi and mobile data are both up with different DNS servers, re-resolution after a network change only ever worked for the first o
-
arm64-v8a
armeabi-v7a
x86_64
This version requires Android 8.0 or newer.
It is built and signed by the original developer, and guaranteed to correspond to this source tarball.
Permissions
-
view network connections
Allows the app to view information about network connections such as which networks exist and are connected.
-
android.permission.BIND_QUICK_SETTINGS_TILE
-
run foreground service
Allows the app to make use of foreground services.
-
run foreground service with the type "specialUse"
Allows the app to make use of foreground services with the type "specialUse"
-
have full network access
Allows the app to create network sockets and use custom network protocols. The browser and other applications provide means to send data to the internet, so this permission is not required to send data to the internet.
-
show notifications
Allows the app to show notifications
-
query all packages
Allows an app to see all installed packages.
-
run at startup
Allows the app to have itself started as soon as the system has finished booting. This can make it take longer to start the phone and allow the app to slow down the overall phone by always running.
-
ask to ignore battery optimizations
Allows an app to ask for permission to ignore battery optimizations for that app.
-
display notifications as full screen activities on a locked device
Allows the app to display notifications as full screen activities on a locked device
-
com.tokyoxpa3.socksclient.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION
Download APK
2 MiB
PGP Signature
|
Build Log
New in version 1.6.5
- Fix: after a network change, the DNS servers used to re-resolve the proxy server's hostname were the tunnel's own advertised servers (8.8.8.8 / 1.1.1.1 by default), not the DNS of the network the tunnel actually runs over. The intended "fall back to the local network's DHCP DNS" step had never taken effect, because it read the active network — which, for a VPN app, is its own VPN network. The underlying network's resolver is now tried first, so the hostname is not handed to a third-party resol
-
arm64-v8a
armeabi-v7a
x86_64
This version requires Android 8.0 or newer.
It is built and signed by the original developer, and guaranteed to correspond to this source tarball.
Permissions
-
view network connections
Allows the app to view information about network connections such as which networks exist and are connected.
-
android.permission.BIND_QUICK_SETTINGS_TILE
-
run foreground service
Allows the app to make use of foreground services.
-
run foreground service with the type "specialUse"
Allows the app to make use of foreground services with the type "specialUse"
-
have full network access
Allows the app to create network sockets and use custom network protocols. The browser and other applications provide means to send data to the internet, so this permission is not required to send data to the internet.
-
show notifications
Allows the app to show notifications
-
query all packages
Allows an app to see all installed packages.
-
run at startup
Allows the app to have itself started as soon as the system has finished booting. This can make it take longer to start the phone and allow the app to slow down the overall phone by always running.
-
ask to ignore battery optimizations
Allows an app to ask for permission to ignore battery optimizations for that app.
-
display notifications as full screen activities on a locked device
Allows the app to display notifications as full screen activities on a locked device
-
com.tokyoxpa3.socksclient.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION
Download APK
2 MiB
PGP Signature
|
Build Log