Skip to content

Commit ddd9f6b

Browse files
authored
fix(wireguard): adjustments pre-release (#1385)
1 parent d1f42f8 commit ddd9f6b

File tree

4 files changed

+70
-2
lines changed

4 files changed

+70
-2
lines changed

packages/ns-api/Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,9 @@ define Package/ns-api/install
189189
$(INSTALL_BIN) ./files/uci-defaults/19-ns-api.wizard $(1)/etc/uci-defaults
190190
$(INSTALL_BIN) ./files/uci-defaults/99-ns-api.synflood $(1)/etc/uci-defaults
191191
$(INSTALL_BIN) ./files/uci-defaults/99-ns-api.dnsmasq $(1)/etc/uci-defaults
192+
$(INSTALL_BIN) ./files/uci-defaults/99-ns-api.wireguard $(1)/etc/uci-defaults
193+
$(INSTALL_DIR) $(1)/usr/libexec
194+
$(INSTALL_BIN) ./files/misc/wireguard-migrate.py $(1)/usr/libexec/wireguard-migrate
192195
endef
193196

194197
$(eval $(call BuildPackage,ns-api))
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#!/usr/bin/env python
2+
3+
#
4+
# Copyright (C) 2025 Nethesis S.r.l.
5+
# SPDX-License-Identifier: GPL-2.0-only
6+
#
7+
8+
# this script is supposed to be run by the 99-ns-api.wireguard uci defaults
9+
10+
from euci import EUci
11+
12+
13+
def main():
14+
e_uci = EUci()
15+
wireguard_sections = []
16+
for wg_id in e_uci.get("network"):
17+
if (e_uci.get("network", wg_id, "proto", dtype=str, default="") == "wireguard"
18+
and e_uci.get("network", wg_id, "ns_type", dtype=str, default=None) is None):
19+
wireguard_sections.append(wg_id)
20+
21+
associations = {}
22+
for wg_id in wireguard_sections:
23+
peers = []
24+
for peer_id in e_uci.get("network"):
25+
if e_uci.get("network", peer_id, default="").endswith(wg_id):
26+
peers.append(peer_id)
27+
associations[wg_id] = peers
28+
29+
for wg_id in associations:
30+
e_uci.set("network", wg_id, "ns_type", "server")
31+
for peer_id in associations[wg_id]:
32+
e_uci.set("network", peer_id, "ns_local_routes", e_uci.get("network", wg_id, "ns_routes", dtype=str, default=[], list=True))
33+
e_uci.delete("network", wg_id, "ns_routes")
34+
e_uci.set("network", peer_id, "ns_name", e_uci.get("network", peer_id, "description", dtype=str, default=""))
35+
e_uci.delete("network", peer_id, "description")
36+
e_uci.delete("network", peer_id, "ns_client_to_client")
37+
38+
e_uci.save("network")
39+
e_uci.commit("network")
40+
41+
42+
if __name__ == "__main__":
43+
main()

packages/ns-api/files/ns.wireguard

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ def add_server(args):
282282
)
283283
zone = f"{instance}vpn"
284284
firewall.add_trusted_zone(e_uci, zone, link=f"network/{instance}")
285-
firewall.add_device_to_zone(e_uci, instance, zone)
285+
firewall.add_interface_to_zone(e_uci, instance, zone)
286286

287287
return {"result": "success"}
288288

@@ -426,6 +426,7 @@ def add_peer(args):
426426
e_uci.set('network', peer_section, 'public_key', public_key)
427427
e_uci.set('network', peer_section, 'private_key', private_key)
428428
e_uci.set('network', peer_section, 'persistent_keepalive', 25)
429+
e_uci.set('network', peer_section, 'route_allowed_ips', True)
429430
e_uci.set('network', peer_section, 'ns_link', f'network/{args["instance"]}')
430431
e_uci.save('network')
431432

@@ -504,7 +505,9 @@ def __generate_peer_config(server_id, peer_id):
504505
if e_uci.get('network', peer_id, 'ns_route_all_traffic', dtype=bool, default=False):
505506
config += "AllowedIPs = 0.0.0.0/0, ::/0\n"
506507
else:
507-
config += f"AllowedIPs = {','.join(e_uci.get('network', peer_id, 'allowed_ips', list=True, dtype=str))}\n"
508+
addresses = list(e_uci.get('network', peer_id, 'ns_local_routes', list=True, dtype=str, default=[]))
509+
addresses.append(e_uci.get('network', server_id, 'ns_network', dtype=str))
510+
config += f"AllowedIPs = {','.join(addresses)}\n"
508511
config += f"Endpoint = {e_uci.get('network', server_id, 'ns_public_endpoint')}:{e_uci.get('network', server_id, 'listen_port')}\n"
509512
config += f"PersistentKeepalive = {e_uci.get('network', peer_id, 'persistent_keepalive', default='25')}\n"
510513

@@ -566,9 +569,13 @@ def import_configuration(args):
566569
e_uci.set('network', peer_instance, 'allowed_ips', [ip.strip() for ip in config_parser["Peer"]["AllowedIPs"].split(',')])
567570
e_uci.set('network', peer_instance, 'endpoint_host', config_parser["Peer"]["Endpoint"].split(':')[0])
568571
e_uci.set('network', peer_instance, 'endpoint_port', config_parser["Peer"]["Endpoint"].split(':')[1])
572+
e_uci.set('network', peer_instance, 'route_allowed_ips', True)
569573
e_uci.set('network', peer_instance, 'persistent_keepalive', config_parser["Peer"].get("PersistentKeepalive", "25"))
570574
e_uci.set('network', peer_instance, 'ns_link', f'network/{defaults["instance"]}')
571575
e_uci.save('network')
576+
zone = f"{defaults['instance']}vpn"
577+
firewall.add_trusted_zone(e_uci, zone, link=f"network/{defaults['instance']}")
578+
firewall.add_interface_to_zone(e_uci, defaults['instance'], zone)
572579
except Exception:
573580
return utils.validation_error("config", "invalid_file_format")
574581

@@ -665,11 +672,15 @@ def add_tunnel(args):
665672
e_uci.set('network', peer_instance, 'reserved_ip', args['reserved_ip'])
666673
e_uci.set('network', peer_instance, 'endpoint_host', args['endpoint'])
667674
e_uci.set('network', peer_instance, 'endpoint_port', args['udp_port'])
675+
e_uci.set("network", peer_instance, "route_allowed_ips", True)
668676
e_uci.set('network', peer_instance, 'persistent_keepalive', args.get('persistent_keepalive', '25'))
669677
e_uci.set('network', peer_instance, 'ns_link', f'network/{defaults["instance"]}')
670678
if 'dns' in args:
671679
e_uci.set('network', defaults['instance'], 'dns', args['dns'])
672680
e_uci.save('network')
681+
zone = f"{defaults['instance']}vpn"
682+
firewall.add_trusted_zone(e_uci, zone, link=f"network/{defaults['instance']}")
683+
firewall.add_interface_to_zone(e_uci, defaults["instance"], zone)
673684

674685
return {"result": "success"}
675686

@@ -733,6 +744,7 @@ def delete_tunnel(args):
733744
if e_uci.get('network', entry, 'ns_link', dtype=str, default='') == f'network/{args["id"]}':
734745
e_uci.delete('network', entry)
735746
e_uci.save('network')
747+
firewall.delete_linked_sections(e_uci, f"network/{args['id']}")
736748

737749
return {"result": "success"}
738750

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#!/bin/sh
2+
3+
#
4+
# Copyright (C) 2025 Nethesis S.r.l.
5+
# SPDX-License-Identifier: GPL-2.0-only
6+
#
7+
8+
set -e
9+
10+
/usr/libexec/wireguard-migrate

0 commit comments

Comments
 (0)