feat: add VPN DNS split routing

Implement VPN DNS discovery and split routing for intercept mode:
- Discover VPN DNS servers from F5 BIG-IP, Tailscale, Network
  Extension VPNs, and traditional VPN adapters
- Exit mode detection (split vs full tunnel) via routing table
- Interface-scoped pf exemptions for VPN DNS traffic (macOS)
- Windows VPN adapter filtering with routable address check
- AD domain controller detection with retry on transient failure
- Cleanup of stale exemptions on VPN disconnect

Squashed from intercept mode development on v1.0 branch (#497).
This commit is contained in:
Codescribe
2026-03-03 14:29:31 +07:00
committed by Cuong Manh Le
parent 768cc81855
commit e7040bd9f9
6 changed files with 865 additions and 0 deletions
+15
View File
@@ -0,0 +1,15 @@
//go:build !windows && !darwin && !linux
package ctrld
import (
"context"
)
// DiscoverVPNDNS is a stub implementation for unsupported platforms.
// Returns nil to indicate no VPN DNS configurations found.
func DiscoverVPNDNS(ctx context.Context) []VPNDNSConfig {
logger := *ProxyLogger.Load()
Log(ctx, logger.Debug(), "VPN DNS discovery not implemented for this platform")
return nil
}