From 104d1f11bf4118e295aa408fd755d8e0d6a3e582 Mon Sep 17 00:00:00 2001 From: Franziska Kunsmann Date: Fri, 22 Mar 2024 22:52:12 +0100 Subject: [PATCH] bundles/wireguard: support s2s connection to other services --- bundles/wireguard/files/wg.netdev | 2 ++ bundles/wireguard/items.py | 2 +- bundles/wireguard/metadata.py | 6 ++++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/bundles/wireguard/files/wg.netdev b/bundles/wireguard/files/wg.netdev index 375bada..c6abf78 100644 --- a/bundles/wireguard/files/wg.netdev +++ b/bundles/wireguard/files/wg.netdev @@ -10,7 +10,9 @@ ListenPort=${port} [WireGuardPeer] PublicKey=${pubkey} AllowedIPs=0.0.0.0/0 +% if psk: PresharedKey=${psk} +% endif % if endpoint: Endpoint=${endpoint} % endif diff --git a/bundles/wireguard/items.py b/bundles/wireguard/items.py index 4298dde..0d8d13d 100644 --- a/bundles/wireguard/items.py +++ b/bundles/wireguard/items.py @@ -25,7 +25,7 @@ for peer, config in sorted(node.metadata.get('wireguard/peers', {}).items()): 'peer': peer, 'port': config['my_port'], 'privatekey': node.metadata.get('wireguard/privatekey'), - 'psk': config['psk'], + 'psk': config.get('psk'), 'pubkey': config['pubkey'], 'specials': repo.libs.s2s.WG_AUTOGEN_SETTINGS.get(peer, {}), }, diff --git a/bundles/wireguard/metadata.py b/bundles/wireguard/metadata.py index 3c055ba..1aa6e4a 100644 --- a/bundles/wireguard/metadata.py +++ b/bundles/wireguard/metadata.py @@ -253,7 +253,7 @@ def interface_ips(metadata): my_ip = '{}/31'.format(config['my_ip']) ips = {my_ip} - if snat_ip: + if snat_ip and peer in repo.libs.s2s.WG_AUTOGEN_NODES: ips.add(snat_ip) their_ip = config['their_ip'] @@ -289,12 +289,14 @@ def snat(metadata): forward.add(f'iifname wg_{config["iface"]} accept') forward.add(f'oifname wg_{config["iface"]} accept') - if snat_ip: + if snat_ip and peer in repo.libs.s2s.WG_AUTOGEN_NODES: postrouting.add('ip saddr {} ip daddr != {} snat to {}'.format( config['my_ip'], config['their_ip'], snat_ip, )) + elif config.get('masquerade', False): + postrouting.add(f'oifname wg_{peer} masquerade') return { 'nftables': {