A macOS app (SwiftUI) to manage system proxy via SSH SOCKS tunnels. It reads your ~/.ssh/config, lets you add manual connections with optional saved credentials, and keeps the tunnel alive with automatic reconnect.
- SSH config – Lists hosts from
~/.ssh/config(Host, HostName, User, Port). - Manual connections – Add any host with name, host, port, user, and optional password.
- Secure credentials – Passwords are stored in the system Keychain (Keychain Access).
- SOCKS tunnel – Runs
ssh -D 1080 -Nwith keep-alive options; reconnects automatically if the connection drops. - System proxy – Optionally sets macOS SOCKS proxy to
127.0.0.1:1080when connected (vianetworksetup). - VPN awareness – Detects active VPN connections on macOS and shows a best-effort provider hint for supported apps.
- macOS 14.0+
- Xcode 15+ (to build)
- SSH config at
~/.ssh/config(optional; for “From SSH config” list) - Admin rights – Changing system proxy uses
networksetupand may require administrator privileges. If proxy toggling fails, run the app with appropriate permissions or set the proxy manually in System Settings → Network → your service → Details → Proxies.
- Open
Proximeter.xcodeprojin Xcode. - Select the Proximeter scheme and run (⌘R).
Or from the command line:
cd /Volumes/Projects/proximeter
xcodebuild -scheme Proximeter -configuration Debug build -derivedDataPath ./build
open build/Build/Products/Debug/Proximeter.appIf xcodebuild fails with a plug-in load error (for example IDESimulatorFoundation), run xcodebuild -runFirstLaunch once, then build again.
- From SSH config – Hosts from
~/.ssh/configappear in the first section. Use Connect to start a SOCKS tunnel (key-based auth only; no password from the app). - Manual connections – Click Add connection…, fill host, user, port, and optionally password; check Save password in Keychain to store it. Then use Connect.
- System proxy – In Settings (Proximeter → Settings or ⌘,), enable Use system proxy when tunnel is connected and pick the Network service (e.g. Wi‑Fi). When you connect a tunnel, the app will set the SOCKS proxy to
127.0.0.1:1080; when you disconnect, it will turn the proxy off. - Reconnect – If the SSH process exits (network drop, server restart, etc.), the app will try to reconnect after a short delay and keep the tunnel (and proxy) in use.
- VPN awareness – Proximeter shows whether a VPN is active and may identify Mullvad, Amnezia, Proton VPN, Windscribe, or Surfshark when macOS exposes enough detail. It does not start VPN connections.
- Passwords are stored with Keychain Services under the app’s bundle ID.
- The app is not sandboxed so it can run
sshandnetworksetup. For a stricter setup you could sandbox and use a privileged helper for proxy changes only.
Use and modify as you like.