Skip to content

Split tunneling option visible, but does not work on CachyOS #143

Description

@Goldkraw

We are happy to answer your questions about the code or discuss technical ideas.

Please complete the following checklist (by adding [x]):

  • I have searched open and closed issues for duplicates
  • This isn't a feature request
  • This is not a report about my app not working as expected

Kernel Version: 6.18.9-2 cachyos, also tested with 6.12.69-2 cachyos and 6.12.69-1 unpatched kernel.

Expected Behaviour: With split tunneling enabled, traffic should only be tunneled through the VPN for the included apps.

Actual Behaviour: Split tunneling shows up as enabled in the app, but upon connecting to the VPN, the specified rules are not applied.

in ~/.cache/Proton/VPN/logs/vpn-app.log, the following is logged when connecting:


2026-02-08T22:22:34.462467+00:00 | proton.vpn.connection.states:314 | ERROR | Error setting split tunnel configuration
Traceback (most recent call last):
  File "/usr/lib/python3.14/site-packages/proton/vpn/daemon/split_tunneling/client.py", line 148, in set_config
    await _backwards_compatible_asyncio_timeout(
    ...<3 lines>...
    )
  File "/usr/lib/python3.14/site-packages/proton/vpn/daemon/split_tunneling/client.py", line 94, in _backwards_compatible_asyncio_timeout
    await func(*args)
  File "/usr/lib/python3.14/site-packages/dbus_fast/aio/proxy_object.py", line 111, in method_fn
    BaseProxyInterface._check_method_return(msg, intr_method.out_signature)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.14/site-packages/dbus_fast/proxy_object.py", line 85, in _check_method_return
    raise DBusError._from_message(msg)
dbus_fast.errors.DBusError: The service interface raised an error: Failed to attach BPF program b'syscall__execve' to kprobe b'sys_execve', it's not traceable (either non-existing, inlined, or marked as "notrace").
['  File "/usr/lib/python3.14/site-packages/dbus_fast/aio/message_bus.py", line 490, in _done\n    result = fut.result()\n', '  File "/usr/lib/python3.14/site-packages/proton/vpn/daemon/split_tunneling/service.py", line 97, in set_config\n    await self._service.set_config(uid, config)\n', '  File "/usr/lib/python3.14/site-packages/proton/vpn/daemon/split_tunneling/split_tunneling.py", line 53, in set_config\n    self._app_split_tunneling.start(self._config_by_uid)\n    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^\n', '  File "/usr/lib/python3.14/site-packages/proton/vpn/daemon/split_tunneling/apps/service.py", line 66, in start\n    return self._process_monitor.start(config_by_uid=config_by_uid)\n           ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n', '  File "/usr/lib/python3.14/site-packages/proton/vpn/daemon/split_tunneling/apps/process_monitor.py", line 106, in start\n    self._attach_bpf()\n    ~~~~~~~~~~~~~~~~^^\n', '  File "/usr/lib/python3.14/site-packages/proton/vpn/daemon/split_tunneling/apps/process_monitor.py", line 157, in _attach_bpf\n    self._bpf.attach_kprobe(event=execve_fnname, fn_name="syscall__execve")\n    ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n', '  File "/usr/lib/python3.14/site-packages/bcc/__init__.py", line 883, in attach_kprobe\n    raise Exception("Failed to attach BPF program %s to kprobe %s"\n                    ", it\'s not traceable (either non-existing, inlined, or marked as \\"notrace\\")" %\n                    (fn_name, event))\n']

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/lib/python3.14/site-packages/proton/vpn/connection/states.py", line 307, in run_tasks
    await self.context.split_tunneling.set_config(
    ...<2 lines>...
    )
  File "/usr/lib/python3.14/site-packages/proton/vpn/daemon/split_tunneling/client.py", line 158, in set_config
    raise exceptions.SplitTunnelingError(
    ...<2 lines>...
    ) from excp
proton.vpn.split_tunneling.exceptions.SplitTunnelingError: Error setting new split tunneling configuration for 1000
2026-02-08T22:22:34.463617+00:00 | proton.vpn.core.connection:508 | INFO | CONN:STATE_CHANGED | Connected

Additionally, systemctl status proton.VPN shows the following:

feb 09 00:22:11 cachyos-x8664 systemd[1]: Starting Proton VPN Daemon...
feb 09 00:22:11 cachyos-x8664 python3[999]: 2026-02-08T22:22:11.491973+00:00 | __main__:41 | INFO | Starting Proton VPN daemon v0.13.4
feb 09 00:22:11 cachyos-x8664 systemd[1]: Started Proton VPN Daemon.
feb 09 00:22:28 cachyos-x8664 python3[999]: 2026-02-08T22:22:28.469843+00:00 | proton.vpn.daemon.split_tunneling.split_tunneling:63 | INFO | Clearing config for user 1000
feb 09 00:22:30 cachyos-x8664 python3[999]: 2026-02-08T22:22:30.695170+00:00 | proton.vpn.daemon.split_tunneling.split_tunneling:49 | INFO | Setting SplitTunnelingConfig(mode=<SplitTunnelingMode.INCLUDE: >
feb 09 00:22:30 cachyos-x8664 python3[999]: 2026-02-08T22:22:30.696620+00:00 | proton.vpn.daemon.split_tunneling.apps.socket_monitor:114 | INFO | Starting socket monitor (with fwmark 13501235)
feb 09 00:22:30 cachyos-x8664 python3[999]: 2026-02-08T22:22:30.696798+00:00 | proton.vpn.daemon.split_tunneling.apps.process_monitor:100 | INFO | Starting process monitor
feb 09 00:22:30 cachyos-x8664 python3[999]: 2026-02-08T22:22:30.768985+00:00 | proton.vpn.daemon.split_tunneling.apps.process_matcher:134 | INFO | Existing processes inspected in 72 ms
feb 09 00:22:34 cachyos-x8664 python3[999]: cannot attach kprobe, Invalid argument

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions