Commit Graph
27 Commits
Author SHA1 Message Date
Alexandr Stelnykovych ee8cde31f6 feat: Add Split Tunnel feature (Windows PoC)
Implement initial proof-of-concept for split tunnel functionality on Windows,
allowing applications to route traffic through a designated network interface
while bypassing default system routing.

Features:
- Split tunnel module with TCP/UDP proxy infrastructure
- Firewall integration with split tunnel verdict handling
- SplitTunneling context attached to connections
- Configuration options: enable toggle, interface selection, and policy rules
- UI display of split tunnel connection details in connection info panel
- Subsystem configuration for user-level access

Windows-specific implementation:
- Uses proxy-based interface routing on Windows
- Automatic or manual interface detection and binding
- Support for IPv4 and IPv6 traffic

Note: Linux implementation is under development. SPN takes precedence over
split tunnel when both are enabled, ensuring SPN connections bypass this feature.
2026-04-24 18:04:01 +03:00
Alexandr Stelnykovych 2252fd17ed ivpn/linux: route SPN hub traffic around VPN tunnel (split tunnel)
Add a synchronous HookMgr[T] that lets callers register pre-connect
hooks before SPN dials a home hub. The IVPN interop layer subscribes
to this hook and uses Linux ip-rule/ip-route to steer SPN hub IPs
through a dedicated routing table (717) pointing to the non-VPN default
gateway, preventing SPN control traffic from being tunnelled into IVPN.

- service/mgr: add generic HookMgr[T] (synchronous, cancellable)
- spn/captain: expose HookSPNConnecting; invoke it in connectToHomeHub
- service/netenv: add GatewayInfo + GatewaysInfo() with interface/mask
- service/interop/ivpn: add ensureSpnHubBypassVpnRoutes managing policy
  routing; call it from the SPN pre-connect hook and on VPN stop/connect
- nfq/packet: add hex comments next to mark constants

https://github.com/safing/portmaster-shadow/issues/34
2026-03-26 23:20:34 +02:00
Alexandr Stelnykovych 73460f522d interop/ivpn: bugfixes and refactor connection state management
Bugs fixed:
- Inbound UDP from VPN server incorrectly blocked
- Firewall verdicts possible before client status initialized

Also: move interop before interception in startup order, simplify DNS state tracking.
2026-03-01 21:00:03 +02:00
Alexandr Stelnykovych 168c6ac3b5 service/interop: IVPN client interoperability
Allow Portmaster to cooperate with the IVPN client:
- Accept IVPN VPN tunnel and service process connections
- Delegate DNS control to Portmaster when custom DNS is configured
- Auto-connect to IVPN daemon on startup and on ping
- Hook into firewall verdict pipeline via new ExtVerdictHandler
2026-02-27 00:32:33 +02:00
Alexandr Stelnykovych 14be84d2d0 fix(instance): re-add dnsmonitor to serviceGroupInterception module 2025-11-11 18:20:10 +02:00
Alexandr Stelnykovych 2c67b27b4a refactor: remove SPNGroup from 'control.instance' interface and update pause logic 2025-11-07 16:51:58 +02:00
Alexandr Stelnykovych 4d2d91972b feat: refactor interception modules into pausable group
- Add GroupModule to wrap interception, dnsmonitor, and compat modules
- Simplify pause/resume operations by grouping related modules
- Update worker info collection to handle nested module groups
- Remove deprecated flags and improve module lifecycle management
- Add proper atomic state tracking for nfqueue interception

https://github.com/safing/portmaster/issues/2050
2025-11-06 17:28:38 +02:00
Alexandr Stelnykovych c063bda700 feat(WIP): add pause and resume functionality for Portmaster/SPN
https://github.com/safing/portmaster/issues/2050
2025-10-24 18:15:27 +03:00
Daniel 438f43156f Add upgrade locking mechanism to core ui serving module 2025-04-07 15:26:35 +02:00
Vladimir Stoilov 49e1fc8c31 [service] Ensure pemission for all directories 2025-01-15 11:43:14 +02:00
Vladimir Stoilov 374c1c2748 Merge branch 'develop' into feature/new-installer 2024-11-28 13:23:13 +02:00
Daniel 706ce222d0 WIP 2024-11-27 16:16:15 +01:00
Vladimir Stoilov 1a1bc14804 Feature/systemd query events (#1728)
* [service] Subscribe to systemd-resolver events

* [service] Add disabled state to the resolver

* [service] Add ETW DNS event listener

* [service] DNS listener refactoring

* [service] Add windows core dll project

* [service] DNSListener refactoring, small bugfixes

* [service] Change dns bypass rule

* [service] Update gitignore

* [service] Remove shim from integration module

* [service] Add DNS packet analyzer

* [service] Add self-check in dns monitor

* [service] Fix go linter errors

* [CI] Add github workflow for the windows core dll

* [service] Minor fixes to the dns monitor
2024-11-27 17:10:47 +02:00
Daniel ddf7ba170e Fix tests and issues 2024-11-08 14:39:58 +01:00
Daniel c22814e6e1 Improve start and shutdown controls and flow 2024-11-07 16:20:58 +01:00
Daniel 7bc1c3b764 Replace dataroot module with BinDir and DataDir on instance, adapt modules 2024-11-06 10:48:02 +01:00
Daniel 0f3f3c360f [WIP] Simplify update system 2024-10-31 16:38:12 +01:00
Vladimir Stoilov f0272766c1 [WIP] Add restart service command for windows 2024-09-27 17:07:01 +03:00
Vladimir Stoilov 61babe2822 [WIP] Add restart command to instance 2024-09-26 13:51:42 +03:00
Vladimir Stoilov 1b6ee722f3 [WIP] Fix edge upgrade edge cases 2024-09-25 16:33:45 +03:00
Vladimir Stoilov b3ff6f14f1 [WIP] Error and state handleing improvments, better logs 2024-09-19 12:38:23 +03:00
Vladimir Stoilov 84a15b5fb3 [WIP] updater rafactoring, minor improvments 2024-09-17 12:36:44 +03:00
Vladimir Stoilov 83ec18f552 [WIP] Updater support for windows 2024-09-11 18:52:36 +03:00
Vladimir Stoilov 701505ae75 [WIP] working download and replace. 2024-09-05 10:25:57 +03:00
Daniel 7f0b5ca149 [service] Fix starting and stopping of SPN 2024-08-27 16:42:22 +02:00
Daniel 2fd7c61acb Fix and improve start order 2024-08-23 10:18:33 +02:00
Daniel HååviandVladimir Stoilov 80664d1a27 Restructure modules (#1572)
* Move portbase into monorepo

* Add new simple module mgr

* [WIP] Switch to new simple module mgr

* Add StateMgr and more worker variants

* [WIP] Switch more modules

* [WIP] Switch more modules

* [WIP] swtich more modules

* [WIP] switch all SPN modules

* [WIP] switch all service modules

* [WIP] Convert all workers to the new module system

* [WIP] add new task system to module manager

* [WIP] Add second take for scheduling workers

* [WIP] Add FIXME for bugs in new scheduler

* [WIP] Add minor improvements to scheduler

* [WIP] Add new worker scheduler

* [WIP] Fix more bug related to new module system

* [WIP] Fix start handing of the new module system

* [WIP] Improve startup process

* [WIP] Fix minor issues

* [WIP] Fix missing subsystem in settings

* [WIP] Initialize managers in constructor

* [WIP] Move module event initialization to constrictors

* [WIP] Fix setting for enabling and disabling the SPN module

* [WIP] Move API registeration into module construction

* [WIP] Update states mgr for all modules

* [WIP] Add CmdLine operation support

* Add state helper methods to module group and instance

* Add notification and module status handling to status package

* Fix starting issues

* Remove pilot widget and update security lock to new status data

* Remove debug logs

* Improve http server shutdown

* Add workaround for cleanly shutting down firewall+netquery

* Improve logging

* Add syncing states with notifications for new module system

* Improve starting, stopping, shutdown; resolve FIXMEs/TODOs

* [WIP] Fix most unit tests

* Review new module system and fix minor issues

* Push shutdown and restart events again via API

* Set sleep mode via interface

* Update example/template module

* [WIP] Fix spn/cabin unit test

* Remove deprecated UI elements

* Make log output more similar for the logging transition phase

* Switch spn hub and observer cmds to new module system

* Fix log sources

* Make worker mgr less error prone

* Fix tests and minor issues

* Fix observation hub

* Improve shutdown and restart handling

* Split up big connection.go source file

* Move varint and dsd packages to structures repo

* Improve expansion test

* Fix linter warnings

* Fix interception module on windows

* Fix linter errors

---------

Co-authored-by: Vladimir Stoilov <vladimir@safing.io>
2024-08-09 18:15:48 +03:00