Domain Bypass

Overview

See Domain Bypass

Domain Bypass Configuration

At its core, domain bypass is controlled through a configuration structure that specifies which domains should bypass the VPN. This configuration typically includes three main components:

  1. A boolean flag to enable or disable bypass functionality

  2. A list of domains that should bypass the VPN

  3. An optional DNS server to use for bypassed domains

For example, a basic domain bypass configuration might look like this:

let bypassConfig = BypassConfiguration(
    isBypassEnabled: false,
    bypassDomains: ["*domain1.com", "domain2.net", "domain3.org"],
    bypassDNSServer: nil
)
circle-exclamation

The resulting BypassConfiguration instance may look like this when inspected:

circle-info

The configuration supports wildcards. In the example, *domain1.com will match any domain ending with domain1.com. See the Domain Matching Behavior section for important details on how patterns are matched.

circle-exclamation

Apple Configuration Requirements

For domain bypass to function correctly, ensure that the following are properly configured:

  • Bypass Interface: The network interface for bypassed traffic must be correctly specified and active (e.g., if set to wired ethernet, but the device is using Wi-Fi, bypass will not work as expected).

  • Bypass DNS Server: If specified, the DNS server used for resolving bypassed domains must be reachable and correctly configured.

circle-info

If domain bypass is not working as expected, verify that both the bypass interface and bypass DNS server settings match the actual network configuration of the device.

macOS Network Extension Requirements

When using domain bypass on macOS with Network Extensions (app extensions), you must ensure the App Sandbox capability is properly configured.

App Sandbox Configuration

For macOS apps using Network Extensions (not System Extensions), the main application target must have the App Sandbox capability with "Incoming Connections (Server)" enabled. This corresponds to the com.apple.security.network.server entitlement.

Without this configuration, bypassed domains may fail to load even though the bypass configuration appears correct.

How to Enable

  1. In Xcode, select your Application target

  2. Go to Signing & Capabilities

  3. Ensure App Sandbox is enabled

  4. Under App Sandbox, check "Incoming Connections (Server)" under the Network section

Alternatively, add the following to your application's entitlements file:

circle-info

This requirement applies only to macOS apps using Network Extensions (app extensions). It does not apply to:

  • iOS apps: App Sandbox works differently on iOS

  • macOS apps using System Extensions: System Extensions run in a separate system-managed process with their own entitlements and do not require App Sandbox configuration

Why This Is Required

Network Extensions (app extensions) run with the privileges of the calling application. When domain bypass is configured, the VPN needs to allow certain traffic to flow outside the tunnel, which requires the application to have network server capabilities enabled in its sandbox.

System Extensions, by contrast, run as standalone processes managed by the system with their own entitlements, so they don't inherit sandbox restrictions from the main application.

Last updated

Was this helpful?