NetworkManager/src
Thomas Haller 10e05bf8ab wireguard: support configuring policy routing to avoid routing loops
For WireGuard (like for all IP-tunnels and IP-based VPNs), the IP addresses of
the peers must be reached outside the tunnel/VPN itself.

For VPN connections, NetworkManager usually adds a direct /32 route to
the external VPN gateway to the underlying device. For WireGuard that is
not done, because injecting a route to another device is ugly and error
prone. Worse: WireGuard with automatic roaming and multiple peers makes this
more complicated.

This is commonly a problem when setting the default-route via the VPN,
but there are also other subtle setups where special care must be taken
to prevent such routing loops.

WireGuard's wg-quick provides a simple, automatic solution by adding two policy
routing rules and relying on the WireGuard packets having a fwmark set (see [1]).

Let's also do that. Add new properties "wireguard.ip4-auto-default-route"
and "wireguard.ip6-auto-default-route" to enable/disable this. Note that
the default value lets NetworkManager automatically choose whether to
enable it (depending on whether there are any peers that have a default
route). This means, common scenarios should now work well without additional
configuration.

Note that this is also a change in behavior and upon package upgrade
NetworkManager may start adding policy routes (if there are peers that
have a default-route). This is a change in behavior, as the user already
clearly had this setup working and configured some working solution
already.

The new automatism picks the rule priority automatically and adds the
default-route to the routing table that has the same number as the fwmark.
If any of this is unsuitable, then the user is free to disable this
automatism. Note that since 1.18.0 NetworkManager supports policy routing (*).
That means, what this automatism does can be also achieved via explicit
configuration of the profile, which gives the user more flexibility to
adjust all parameters explicitly).

(*) but only since 1.20.0 NetworkManager supports the "suppress_prefixlength"
rule attribute, which makes it impossible to configure exactly this rule-based
solution with 1.18.0 NetworkManager.

[1] https://www.wireguard.com/netns/#improved-rule-based-routing
2019-07-29 20:45:49 +02:00
..
devices wireguard: support configuring policy routing to avoid routing loops 2019-07-29 20:45:49 +02:00
dhcp dhcp: nettools: check if addr is in the lease when bound 2019-07-25 11:42:12 +02:00
dns all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
dnsmasq all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
initrd initrd/tests: add some more variations of possible BOOTIF= variables 2019-07-03 09:16:52 +02:00
ndisc all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
platform platform: add NMP_OBJECT_CAST_LNK_WIREGUARD() macro 2019-07-29 18:39:49 +02:00
ppp core/pppd-plugin: wait to recover port settings before notifying death 2019-06-14 13:29:45 +02:00
settings settings: fix priority for settings-storages for tombstones 2019-07-25 23:27:49 +02:00
supplicant supplicant-config: add support for joining a Mesh 2019-07-29 10:28:22 +02:00
systemd systemd: merge branch systemd into master 2019-07-26 15:00:08 +02:00
tests src/tests: show exit status in test failure of test_nm_utils_kill_child() 2019-06-13 11:27:32 +02:00
vpn all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
main-utils.c all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
main-utils.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
main.c all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
meson.build settings: rework tracking settings connections and settings plugins 2019-07-16 19:09:08 +02:00
NetworkManagerUtils.c libnm,core: add support for "suppress_prefixlength" rule attribute 2019-07-16 10:03:17 +02:00
NetworkManagerUtils.h core: add flag to nm_shutdown_wait_obj_register_full() for freeing allcated message string 2019-06-26 12:26:11 +02:00
nm-act-request.c all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-act-request.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-active-connection.c settings: rework tracking settings connections and settings plugins 2019-07-16 19:09:08 +02:00
nm-active-connection.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-audit-manager.c settings: add audit-logging for connection load and reload 2019-07-16 12:35:36 +02:00
nm-audit-manager.h settings: add audit-logging for connection load and reload 2019-07-16 12:35:36 +02:00
nm-auth-manager.c all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-auth-manager.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-auth-subject.c all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-auth-subject.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-auth-utils.c auth-chain: track auth-chains in embedded CList 2019-06-13 16:10:53 +02:00
nm-auth-utils.h auth-chain: track auth-chains in embedded CList 2019-06-13 16:10:53 +02:00
nm-checkpoint-manager.c all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-checkpoint-manager.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-checkpoint.c settings/trivial: rename NM_SETTINGS_CONNECTION_PERSIST_MODE_DISK to NM_SETTINGS_CONNECTION_PERSIST_MODE_TO_DISK 2019-07-25 22:02:00 +02:00
nm-checkpoint.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-config-data.c config: simplify no-auto-default list handling and sort entries 2019-07-25 10:52:47 +02:00
nm-config-data.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-config.c config: simplify no-auto-default list handling and sort entries 2019-07-25 10:52:47 +02:00
nm-config.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-connectivity.c connectivity: make platform argument to nm_connectivity_check_start() optional 2019-06-18 15:49:09 +02:00
nm-connectivity.h device: don't start connectivity check on unconfigured devices 2019-06-18 15:49:09 +02:00
nm-core-utils.c core: add and use NM_MATCH_SPEC_*_TAG defines instead of plain strings 2019-07-25 10:48:40 +02:00
nm-core-utils.h core: add and use NM_MATCH_SPEC_*_TAG defines instead of plain strings 2019-07-25 10:48:40 +02:00
nm-dbus-manager.c all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-dbus-manager.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-dbus-object.c all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-dbus-object.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-dbus-utils.c all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-dbus-utils.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-dcb.c all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-dcb.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-dhcp4-config.c all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-dhcp4-config.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-dhcp6-config.c all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-dhcp6-config.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-dispatcher.c all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-dispatcher.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-firewall-manager.c all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-firewall-manager.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-hostname-manager.c all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-hostname-manager.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-iface-helper.c dhcp: pass broadcast address to clients 2019-07-05 11:06:01 +02:00
nm-ip4-config.c all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-ip4-config.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-ip6-config.c core: fix mangling static IPv6 routes in nm_ip6_config_merge_setting() 2019-07-09 14:33:57 +02:00
nm-ip6-config.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-keep-alive.c core: add and use nm_keep_alive_destroy() 2019-06-27 13:25:40 +02:00
nm-keep-alive.h core: add and use nm_keep_alive_destroy() 2019-06-27 13:25:40 +02:00
nm-logging.c all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-logging.h core: avoid plain pointer values in logging output 2019-06-25 13:26:37 +02:00
nm-manager.c settings/trivial: rename NM_SETTINGS_CONNECTION_PERSIST_MODE_DISK to NM_SETTINGS_CONNECTION_PERSIST_MODE_TO_DISK 2019-07-25 22:02:00 +02:00
nm-manager.h libnm,core: Add ConnectivityCheckUri property and accessors 2019-07-22 21:03:09 +02:00
nm-netns.c policy-routing: take ownership of externally configured rules 2019-07-16 10:16:07 +02:00
nm-netns.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-pacrunner-manager.c all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-pacrunner-manager.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-policy.c settings: rework tracking settings connections and settings plugins 2019-07-16 19:09:08 +02:00
nm-policy.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-proxy-config.c all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-proxy-config.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-rfkill-manager.c all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-rfkill-manager.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-session-monitor.c all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-session-monitor.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-sleep-monitor.c all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-sleep-monitor.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-test-utils-core.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
nm-types.h all: drop emacs file variables from source files 2019-06-11 10:04:00 +02:00
org.freedesktop.NetworkManager.conf wifi-p2p: rename Wi-Fi P2P 2019-02-01 17:02:57 +01:00