This tree contains an application split-tunneling implementation for Windows that routes configured applications through WireGuard while leaving other processes on the host path.
- Matching is by absolute executable path.
- The configuration surface is
IncludedApplicationsin[Interface]. - Selected applications are redirected to a local split-tunnel proxy.
- The proxy reconstructs the original destination and opens the outbound connection bound to the WireGuard interface.
- Unselected applications continue to use ordinary Windows routing.
Split mode is only accepted when all of the following are true:
IncludedApplicationscontains one or more absolute.exepaths.DNSis present in[Interface].- the tunnel is full-tunnel for the enabled family, for example
AllowedIPs = 0.0.0.0/0 Table = offis not used
Example:
[Interface]
PrivateKey = ...
Address = 10.6.0.3/32
DNS = 10.6.0.1
IncludedApplications = C:\Program Files\VideoLAN\VLC\vlc.exe
[Peer]
PublicKey = ...
AllowedIPs = 0.0.0.0/0
Endpoint = example.com:51820
PersistentKeepalive = 25Split tunneling uses three Windows components:
WireGuardTunnel$NAMEWireGuardSplitTunnelWireGuardSplitTunnelDriver
The control service speaks to the driver over an internal device interface and to the tunnel service over a named pipe.
Build and install the driver:
powershell -ExecutionPolicy Bypass -File .\scripts\install-wgsplitdrv.ps1Install the split-tunnel service:
.\wireguard.exe /installsplittunnelserviceHealth and status:
.\wireguard.exe /splittunnelhealth
.\wireguard.exe /splittunnelquery <tunnel-name>
.\wireguard.exe /splittunnelstats <tunnel-name>The repository contains bounded test helpers under scripts\:
scripts\test-vlc-split.ps1scripts\inspect-vlc-path.ps1scripts\compare-selected-vs-unselected.ps1
These were used to validate:
- selected VLC traffic redirected through the proxy and out via the WireGuard address
- unselected
curl.exetraffic remained on the host address - nonpaged pool stayed stable during bounded runs
The local development path uses a test certificate created by the install script. On development machines, Windows may require test-signing mode before a test-signed kernel driver can be loaded.
If split tunneling is configured and the control service or driver is unavailable, tunnel activation fails closed instead of silently degrading to ordinary full-tunnel behavior.