Skip to content

About

Unofficial PdaNet+ Wi-Fi Direct transparent proxy and system tray client for Linux, tested on Pop!_OS and Debian-family desktops.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

PdaNet Linux

An unofficial PdaNet+ Wi-Fi Direct client for Linux desktops. PdaNet Linux turns the Android app's HTTP CONNECT proxy into system-wide IPv4 TCP access, so browsers, code editors, Git, SSH-over-TCP tools, remote-management clients, and other desktop applications can connect without individual proxy settings.

The included GTK 3 system tray indicator automatically enables transparent networking when Linux joins a DIRECT-*-PDANET Wi-Fi network and restores normal networking after it disconnects. The icon is green while transparent mode is active and gray while it is off.

Important

This project is developed and live-tested on Pop!_OS and is intended first for Debian-family distributions using NetworkManager, systemd-resolved, iptables, GTK 3, and Ayatana AppIndicator. Ubuntu, Debian, Linux Mint, and similar systems may work with little or no adjustment. Fedora, Arch Linux, openSUSE, and other distributions are YMMV/best effort: package names, service paths, firewall backends, DNS integration, and system-tray support differ. Review the installer before running it and keep a normal network connection available for recovery.

What it does

  • Uses PdaNet+'s Wi-Fi Direct proxy at 192.168.49.1:8000.
  • Transparently redirects public IPv4 TCP connections through redsocks and HTTP CONNECT.
  • Sends system DNS through a small DNS-over-HTTPS forwarder, with bounded concurrency to avoid overwhelming the phone proxy after reconnecting.
  • Rejects QUIC and DNS-over-QUIC on the PdaNet interface so compatible apps promptly fall back to TCP.
  • Preserves localhost, private LANs, Docker/libvirt networks, and the PdaNet proxy subnet instead of redirecting them.
  • Provides pdanet-on, pdanet-off, pdanet-status, and pdanet-state CLI commands.
  • Provides a GNOME/Unity-compatible AppIndicator tray menu with automatic Wi-Fi switching, manual controls, status, and desktop notifications.
  • Rolls back its own firewall, DNS, runtime, and service changes if activation fails.
  • Creates backups before installation and includes a defensive uninstaller.

PdaNet Linux does not intercept TLS, install a certificate authority, or read application traffic. HTTPS remains end-to-end encrypted between each application and its destination.

How it works

Linux application TCP
  -> iptables nat/OUTPUT (public IPv4 on the PdaNet Wi-Fi interface only)
  -> redsocks on 127.0.0.1:12345
  -> HTTP CONNECT at 192.168.49.1:8000
  -> Internet destination

Linux application DNS
  -> systemd-resolved
  -> temporary pdanet-dns0 link at 10.254.254.1:5300
  -> DNS-over-HTTPS through the PdaNet HTTP proxy
  -> Cloudflare DoH, with Google DoH fallback

The controller creates dedicated PDANET_TPROXY, PDANET_DNS, and PDANET_UDP iptables chains. Its jumps are tagged pdanet-transparent and scoped to the selected Wi-Fi interface. It does not flush the host firewall or replace the complete ruleset.

Compatibility

Platform Expected status Notes
Pop!_OS Tested Primary development platform.
Ubuntu Expected Install the Ayatana AppIndicator GI package if it is not already present.
Debian Expected GNOME may need an AppIndicator/KStatusNotifier extension.
Linux Mint Expected Cinnamon generally exposes AppIndicator tray icons.
Fedora Best effort / YMMV Install equivalent packages; verify systemd-resolved and iptables compatibility.
Arch Linux Best effort / YMMV Install equivalent packages; package/service paths can differ.
openSUSE Best effort / YMMV Manual dependency and firewall adjustments may be needed.
Windows, macOS, ChromeOS, WSL Unsupported This program depends on Linux NetworkManager, systemd, netfilter, and a desktop status-notifier host.

Desktop tray compatibility

The tray uses GTK 3 plus Ayatana AppIndicator (with Ubuntu AppIndicator as a fallback). Pop!_OS, Ubuntu, Unity, Cinnamon, and many KDE Plasma installations normally show it. Plain GNOME may require an AppIndicator/KStatusNotifier shell extension. Xfce, MATE, and other panels need a compatible status-notifier or indicator plugin. Tray behavior outside the tested Debian-family desktop is YMMV even if the networking controller itself works.

Requirements

Android

  • The official PdaNet+ app from June Fabrics.
  • Wi-Fi Direct Hotspot enabled in PdaNet+.
  • The phone must expose the usual 192.168.49.1:8000 HTTP proxy.

Linux

  • Python 3.10 or newer.
  • NetworkManager (nmcli).
  • systemd and systemd-resolved (systemctl, resolvectl).
  • iptables, iproute2, curl, DNS utilities (dig), sudo, and PolicyKit.
  • redsocks.
  • PyGObject/GTK 3 and Ayatana AppIndicator for the tray.
  • Root access for installation and network-mode changes.

Installation

Pop!_OS, Ubuntu, Debian, and Linux Mint

Install dependencies (the exact package set can vary by release):

sudo apt update
sudo apt install -y \
  redsocks iptables curl dnsutils iproute2 network-manager sudo policykit-1 \
  python3 python3-gi gir1.2-gtk-3.0 \
  gir1.2-ayatanaappindicator3-0.1 gir1.2-notify-0.7

Clone and install:

git clone https://github.com/brisksystems-us/pdanet-linux.git
cd pdanet-linux
sudo ./install.sh

The installer detects the first NetworkManager Wi-Fi interface, installs root-owned executables and service files, validates its narrow sudoers rules, backs up relevant firewall/configuration state under /var/lib/pdanet-transparent/backups, and finishes in normal networking mode.

Start the tray without logging out:

pdanet-tray

It is also installed in the current desktop user's autostart directory for future logins.

Fedora

Install equivalents for these components before running the installer:

redsocks, iptables, curl, bind-utils, iproute, NetworkManager,
python3-gobject, gtk3, libayatana-appindicator-gtk3, libnotify, sudo, polkit

Then clone the repository, review transparent/config/ and the systemd unit paths, and run sudo ./install.sh. Fedora releases can default to different firewall and DNS arrangements; this is best-effort and must be tested with pdanet-status immediately after activation.

Arch Linux and derivatives

Install equivalents for these components before running the installer:

redsocks, iptables-nft (or iptables), curl, bind, iproute2, networkmanager,
python-gobject, gtk3, libayatana-appindicator, libnotify, sudo, polkit

Enable NetworkManager and systemd-resolved if your installation does not use them. Review the service paths and resolvectl behavior before running sudo ./install.sh. Arch-based systems are untested and explicitly YMMV.

Other Linux distributions

Install packages providing all commands checked near the top of install.sh, plus the GTK/AppIndicator typelibs used by pdanet-tray. The controller assumes NetworkManager, systemd-resolved, and iptables-compatible netfilter behavior. If your distribution uses another network manager, DNS resolver, init system, or firewall stack, the installer is not directly compatible.

Android and Linux setup

  1. Open PdaNet+ on Android.
  2. Enable WiFi Direct Hotspot.
  3. In Linux network settings, join the shown DIRECT-…-PdaNet SSID using the password displayed by the phone.
  4. Leave PdaNet+ running on the phone.
  5. The tray checks state every five seconds and turns transparent mode on.
  6. When Linux leaves that PdaNet SSID, the tray turns transparent mode off and restores the active NetworkManager DNS information.

If the phone proxy is still starting, the tray waits for readiness. A failed automatic attempt is retried after a short cooldown. The DNS forwarder limits concurrent upstream requests so the initial desktop lookup burst does not saturate PdaNet.

Uncheck Automatic PdaNet switching in the tray menu for temporary manual control.

Commands

pdanet-on       # Enable transparent mode after joining PdaNet Wi-Fi
pdanet-off      # Restore normal networking
pdanet-status   # Full privileged health and connectivity checks
pdanet-state    # Fast unprivileged state used by the tray
pdanet-tray     # Start the desktop indicator

pdanet-on refuses to modify the system unless:

  • the configured Wi-Fi interface is connected;
  • its SSID matches DIRECT-*-PDANET case-insensitively;
  • 192.168.49.0/24 is directly attached to that interface;
  • 192.168.49.1:8000 accepts TCP; and
  • an HTTPS request succeeds through that proxy.

Configuration lives at /etc/pdanet-transparent.conf. The default values are:

PDANET_INTERFACE="wlo1"
PDANET_SSID_GLOB="DIRECT-*-PDANET"
PDANET_PROXY_IP="192.168.49.1"
PDANET_PROXY_PORT="8000"
PDANET_PROXY_SUBNET="192.168.49.0/24"
PDANET_REDSOCKS_PORT="12345"
PDANET_DNS_ADDRESS="10.254.254.1"
PDANET_DNS_PORT="5300"

The installer normally replaces wlo1 with the detected Wi-Fi interface. After manual changes, run pdanet-off before testing pdanet-on again.

Testing and verification

Run all offline controller, rollback, DNS, tray, and socket tests:

tests/transparent/test-controller.sh

While connected through PdaNet:

pdanet-status
getent hosts github.com
curl -I https://github.com
git ls-remote https://github.com/openai/codex.git HEAD

Service logs:

journalctl -u pdanet-redsocks -u pdanet-dnscrypt-proxy --since today

Troubleshooting and recovery

The tray does not appear

Confirm the GI modules are installed:

python3 -c 'import gi; gi.require_version("Gtk", "3.0")'

Install or enable your desktop's AppIndicator/KStatusNotifier integration, then run pdanet-tray from a terminal to see import errors.

Transparent mode does not turn on

Confirm Linux is connected to the PdaNet SSID and the phone proxy responds:

nmcli -t -f NAME,DEVICE connection show --active
ip -4 route show
curl --proxy http://192.168.49.1:8000 -I https://example.com
pdanet-status

DNS or applications stop working

Return to normal mode first:

pdanet-off

If the wrapper is unavailable:

sudo /usr/local/libexec/pdanet-transparent off

The controller is designed to make off idempotent and safe to repeat.

Emergency uninstall

From the repository checkout:

sudo ./uninstall.sh

The uninstaller removes only this project's named chains, comments, services, commands, icons, and configuration. Full firewall backups remain under /var/lib/pdanet-transparent/backups for manual review.

Limitations

  • PdaNet's upstream is HTTP CONNECT, so this implementation transports TCP, not arbitrary UDP.
  • DNS is carried separately over HTTPS. QUIC/HTTP3 and DoQ are rejected on the PdaNet link so applications can fall back to TCP.
  • PPTP cannot work through this path: its TCP control channel may connect, but PPTP also requires GRE, which HTTP CONNECT cannot carry.
  • Only public IPv4 TCP is redirected. This project does not claim IPv6 tunnel support.
  • Existing applications may briefly reconnect when transparent mode changes.
  • Software that insists on UDP and offers no TCP fallback will not work.
  • PdaNet+, Android releases, mobile networks, Linux distributions, and desktop environments change independently. There is no guarantee this workaround will work on every device or release.

Security model

  • Installed executables and configuration are root-owned.
  • The desktop user receives passwordless sudo access only to the installed controller's fixed on, off, and status actions—not to scripts in the writable Git checkout.
  • Runtime configuration contains proxy addresses but no credentials.
  • The installer validates sudoers syntax before installing it.
  • The networking controller owns narrowly named firewall chains and restores only state it selected.
  • No PdaNet password, Wi-Fi password, API key, token, certificate, or other secret is stored by this project.

Please inspect privileged networking software before installing it. Use PdaNet+ and your mobile service in accordance with applicable laws and service terms.

Project layout

install.sh                         Installer
uninstall.sh                       Defensive cleanup and uninstall
transparent/bin/                   Controller, command wrapper, DoH, tray
transparent/config/                Default configuration and desktop entries
transparent/icons/                 Gray/off and green/on tray assets
transparent/systemd/               Hardened system services
tests/transparent/                 Focused offline and guarded live tests

Acknowledgements and upstream projects

This release grew from and was inspired by several projects:

  • wtyler2505/pdanet-linux — the original PdaNet Linux project from which this work began. The current focused transparent Wi-Fi Direct controller, rollback model, DoH forwarder, tests, and tray workflow were substantially redesigned after that starting point.
  • darkk/redsocks — provides the transparent TCP-to-HTTP-CONNECT bridge at the center of the data path.
  • DNSCrypt/dnscrypt-proxy — informed the early DNS-over-HTTPS approach. The current release uses its own small per-query DoH forwarder and does not require DNSCrypt Proxy.
  • AyatanaIndicators/libayatana-appindicator — provides the desktop indicator API used by the tray application.
  • PdaNet+ by June Fabrics — provides the Android Wi-Fi Direct hotspot and HTTP proxy this independent Linux integration uses.

Thank you to those maintainers and contributors for making this work possible.

Trademark and affiliation

PdaNet and PdaNet+ are trademarks of June Fabrics Technology Inc. This is an independent, unofficial open-source project. It is not affiliated with, endorsed by, or supported by June Fabrics Technology Inc.

License

MIT. See the license and disclaimer before use.

About

Unofficial PdaNet+ Wi-Fi Direct transparent proxy and system tray client for Linux, tested on Pop!_OS and Debian-family desktops.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages