From 3679c7a0d4f8881679c72abd321a90e75febc2c3 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 30 Sep 2024 20:04:05 +0200 Subject: [PATCH] wireguard.cgi: Allow to edit the port and automatically chose one Signed-off-by: Michael Tremer --- config/cfgroot/wireguard-functions.pl | 28 ++++++++++++++++++++++++--- doc/language_issues.de | 2 ++ doc/language_issues.en | 2 ++ doc/language_issues.es | 2 ++ doc/language_issues.fr | 2 ++ doc/language_issues.it | 2 ++ doc/language_issues.nl | 2 ++ doc/language_issues.pl | 2 ++ doc/language_issues.ru | 2 ++ doc/language_issues.tr | 2 ++ html/cgi-bin/wireguard.cgi | 24 +++++++++++++++++++---- langs/de/cgi-bin/de.pl | 2 ++ langs/en/cgi-bin/en.pl | 2 ++ 13 files changed, 67 insertions(+), 7 deletions(-) diff --git a/config/cfgroot/wireguard-functions.pl b/config/cfgroot/wireguard-functions.pl index b2d9c14a0..210423204 100644 --- a/config/cfgroot/wireguard-functions.pl +++ b/config/cfgroot/wireguard-functions.pl @@ -27,9 +27,9 @@ use MIME::Base64; require "/var/ipfire/general-functions.pl"; require "/var/ipfire/network-functions.pl"; -our $DEFAULT_PORT = 51820; -our $DEFAULT_KEEPALIVE = 25; -our $INTF = "wg0"; +our @DEFAULT_PORTRANGE = (60000, 62000); +our $DEFAULT_PORT = 51820; +our $DEFAULT_KEEPALIVE = 25; # Read the global configuration our %settings = (); @@ -526,4 +526,26 @@ sub parse_configuration($) { return %peer, @errormessages; } +sub get_free_port() { + my @used_ports = (); + + my $tries = 100; + + # Collect all ports that are already in use + foreach my $key (keys %peers) { + push(@used_ports, $peers{$key}[5]); + } + + my ($port_start, $port_end) = @DEFAULT_PORTRANGE; + + while ($tries-- > 0) { + my $port = $port_start + int(rand($port_end - $port_start)); + + # Return the port unless it is already in use + return $port unless (grep { $port == $_ } @used_ports); + } + + return undef; +} + 1; diff --git a/doc/language_issues.de b/doc/language_issues.de index eff641863..4e4ea81da 100644 --- a/doc/language_issues.de +++ b/doc/language_issues.de @@ -1008,6 +1008,7 @@ WARNING: untranslated string: ipsec dns server address is invalid = Invalid DNS WARNING: untranslated string: ipsec invalid ip address or fqdn for rw endpoint = Invalid IP address or FQDN for Host-to-Net Endpoint WARNING: untranslated string: ipsec roadwarrior endpoint = Host-to-Net Endpoint WARNING: untranslated string: link-layer encapsulation = Link-Layer Encapsulation +WARNING: untranslated string: local port = unknown string WARNING: untranslated string: local subnets = Local Subnets WARNING: untranslated string: log drop hostile in = Log dropped packets FROM hostile networks WARNING: untranslated string: log drop hostile out = Log dropped packets TO hostile networks @@ -1054,6 +1055,7 @@ WARNING: untranslated string: wg invalid psk = Invalid pre-shared key WARNING: untranslated string: wg invalid public key = Invalid public key WARNING: untranslated string: wg invalid remote subnet = Invalid remote subnet WARNING: untranslated string: wg keepalive interval = Keepalive Interval +WARNING: untranslated string: wg leave empty to automatically select = unknown string WARNING: untranslated string: wg name is already used = The name is already in use WARNING: untranslated string: wg no local subnets = No local subnets given WARNING: untranslated string: wg no more free addresses in pool = No more free addresses in pool diff --git a/doc/language_issues.en b/doc/language_issues.en index 2ccf371b5..78cdcebbe 100644 --- a/doc/language_issues.en +++ b/doc/language_issues.en @@ -1227,6 +1227,7 @@ WARNING: untranslated string: link-layer encapsulation = Link-Layer Encapsulatio WARNING: untranslated string: load average = Load Average WARNING: untranslated string: local ip address = Local IP Address WARNING: untranslated string: local ntp server specified but not enabled = Local NTP server specified but not enabled +WARNING: untranslated string: local port = unknown string WARNING: untranslated string: local subnet = Local subnet: WARNING: untranslated string: local subnet is invalid = Local subnet is invalid. WARNING: untranslated string: local subnets = Local Subnets @@ -2172,6 +2173,7 @@ WARNING: untranslated string: wg invalid psk = Invalid pre-shared key WARNING: untranslated string: wg invalid public key = Invalid public key WARNING: untranslated string: wg invalid remote subnet = Invalid remote subnet WARNING: untranslated string: wg keepalive interval = Keepalive Interval +WARNING: untranslated string: wg leave empty to automatically select = unknown string WARNING: untranslated string: wg name is already used = The name is already in use WARNING: untranslated string: wg no local subnets = No local subnets given WARNING: untranslated string: wg no more free addresses in pool = No more free addresses in pool diff --git a/doc/language_issues.es b/doc/language_issues.es index 37623809f..2660dc960 100644 --- a/doc/language_issues.es +++ b/doc/language_issues.es @@ -1077,6 +1077,7 @@ WARNING: untranslated string: invalid network = Invalid Network WARNING: untranslated string: ips throughput = Throughput WARNING: untranslated string: last updated = Last Updated WARNING: untranslated string: load average = Load Average +WARNING: untranslated string: local port = unknown string WARNING: untranslated string: local subnets = Local Subnets WARNING: untranslated string: log drop hostile in = Log dropped packets FROM hostile networks WARNING: untranslated string: log drop hostile out = Log dropped packets TO hostile networks @@ -1131,6 +1132,7 @@ WARNING: untranslated string: wg invalid psk = Invalid pre-shared key WARNING: untranslated string: wg invalid public key = Invalid public key WARNING: untranslated string: wg invalid remote subnet = Invalid remote subnet WARNING: untranslated string: wg keepalive interval = Keepalive Interval +WARNING: untranslated string: wg leave empty to automatically select = unknown string WARNING: untranslated string: wg name is already used = The name is already in use WARNING: untranslated string: wg no local subnets = No local subnets given WARNING: untranslated string: wg no more free addresses in pool = No more free addresses in pool diff --git a/doc/language_issues.fr b/doc/language_issues.fr index 3a5a949ec..a667bb97f 100644 --- a/doc/language_issues.fr +++ b/doc/language_issues.fr @@ -1030,6 +1030,7 @@ WARNING: untranslated string: invalid network = Invalid Network WARNING: untranslated string: ips throughput = Throughput WARNING: untranslated string: last updated = Last Updated WARNING: untranslated string: load average = Load Average +WARNING: untranslated string: local port = unknown string WARNING: untranslated string: local subnets = Local Subnets WARNING: untranslated string: malformed preshared key = Malformed Pre-Shared Key WARNING: untranslated string: malformed private key = Malformed Private Key @@ -1071,6 +1072,7 @@ WARNING: untranslated string: wg invalid psk = Invalid pre-shared key WARNING: untranslated string: wg invalid public key = Invalid public key WARNING: untranslated string: wg invalid remote subnet = Invalid remote subnet WARNING: untranslated string: wg keepalive interval = Keepalive Interval +WARNING: untranslated string: wg leave empty to automatically select = unknown string WARNING: untranslated string: wg name is already used = The name is already in use WARNING: untranslated string: wg no local subnets = No local subnets given WARNING: untranslated string: wg no more free addresses in pool = No more free addresses in pool diff --git a/doc/language_issues.it b/doc/language_issues.it index 459723c53..65995c6dc 100644 --- a/doc/language_issues.it +++ b/doc/language_issues.it @@ -1232,6 +1232,7 @@ WARNING: untranslated string: last updated = Last Updated WARNING: untranslated string: link-layer encapsulation = Link-Layer Encapsulation WARNING: untranslated string: load average = Load Average WARNING: untranslated string: local ip address = Local IP Address +WARNING: untranslated string: local port = unknown string WARNING: untranslated string: local subnets = Local Subnets WARNING: untranslated string: location = Location WARNING: untranslated string: locationblock = Location Block @@ -1417,6 +1418,7 @@ WARNING: untranslated string: wg invalid psk = Invalid pre-shared key WARNING: untranslated string: wg invalid public key = Invalid public key WARNING: untranslated string: wg invalid remote subnet = Invalid remote subnet WARNING: untranslated string: wg keepalive interval = Keepalive Interval +WARNING: untranslated string: wg leave empty to automatically select = unknown string WARNING: untranslated string: wg name is already used = The name is already in use WARNING: untranslated string: wg no local subnets = No local subnets given WARNING: untranslated string: wg no more free addresses in pool = No more free addresses in pool diff --git a/doc/language_issues.nl b/doc/language_issues.nl index 640172f9f..855dad885 100644 --- a/doc/language_issues.nl +++ b/doc/language_issues.nl @@ -1239,6 +1239,7 @@ WARNING: untranslated string: last updated = Last Updated WARNING: untranslated string: link-layer encapsulation = Link-Layer Encapsulation WARNING: untranslated string: load average = Load Average WARNING: untranslated string: local ip address = Local IP Address +WARNING: untranslated string: local port = unknown string WARNING: untranslated string: local subnets = Local Subnets WARNING: untranslated string: location = Location WARNING: untranslated string: locationblock = Location Block @@ -1438,6 +1439,7 @@ WARNING: untranslated string: wg invalid psk = Invalid pre-shared key WARNING: untranslated string: wg invalid public key = Invalid public key WARNING: untranslated string: wg invalid remote subnet = Invalid remote subnet WARNING: untranslated string: wg keepalive interval = Keepalive Interval +WARNING: untranslated string: wg leave empty to automatically select = unknown string WARNING: untranslated string: wg name is already used = The name is already in use WARNING: untranslated string: wg no local subnets = No local subnets given WARNING: untranslated string: wg no more free addresses in pool = No more free addresses in pool diff --git a/doc/language_issues.pl b/doc/language_issues.pl index 55725f2b6..aec158084 100644 --- a/doc/language_issues.pl +++ b/doc/language_issues.pl @@ -1386,6 +1386,7 @@ WARNING: untranslated string: lifetime = Lifetime: WARNING: untranslated string: link-layer encapsulation = Link-Layer Encapsulation WARNING: untranslated string: load average = Load Average WARNING: untranslated string: local ip address = Local IP Address +WARNING: untranslated string: local port = unknown string WARNING: untranslated string: local subnets = Local Subnets WARNING: untranslated string: location = Location WARNING: untranslated string: locationblock = Location Block @@ -1680,6 +1681,7 @@ WARNING: untranslated string: wg invalid psk = Invalid pre-shared key WARNING: untranslated string: wg invalid public key = Invalid public key WARNING: untranslated string: wg invalid remote subnet = Invalid remote subnet WARNING: untranslated string: wg keepalive interval = Keepalive Interval +WARNING: untranslated string: wg leave empty to automatically select = unknown string WARNING: untranslated string: wg name is already used = The name is already in use WARNING: untranslated string: wg no local subnets = No local subnets given WARNING: untranslated string: wg no more free addresses in pool = No more free addresses in pool diff --git a/doc/language_issues.ru b/doc/language_issues.ru index 5ec251532..535f4a983 100644 --- a/doc/language_issues.ru +++ b/doc/language_issues.ru @@ -1382,6 +1382,7 @@ WARNING: untranslated string: lifetime = Lifetime: WARNING: untranslated string: link-layer encapsulation = Link-Layer Encapsulation WARNING: untranslated string: load average = Load Average WARNING: untranslated string: local ip address = Local IP Address +WARNING: untranslated string: local port = unknown string WARNING: untranslated string: local subnets = Local Subnets WARNING: untranslated string: location = Location WARNING: untranslated string: locationblock = Location Block @@ -1673,6 +1674,7 @@ WARNING: untranslated string: wg invalid psk = Invalid pre-shared key WARNING: untranslated string: wg invalid public key = Invalid public key WARNING: untranslated string: wg invalid remote subnet = Invalid remote subnet WARNING: untranslated string: wg keepalive interval = Keepalive Interval +WARNING: untranslated string: wg leave empty to automatically select = unknown string WARNING: untranslated string: wg name is already used = The name is already in use WARNING: untranslated string: wg no local subnets = No local subnets given WARNING: untranslated string: wg no more free addresses in pool = No more free addresses in pool diff --git a/doc/language_issues.tr b/doc/language_issues.tr index 7ad028fe8..4b60ad12d 100644 --- a/doc/language_issues.tr +++ b/doc/language_issues.tr @@ -1168,6 +1168,7 @@ WARNING: untranslated string: last updated = Last Updated WARNING: untranslated string: link-layer encapsulation = Link-Layer Encapsulation WARNING: untranslated string: load average = Load Average WARNING: untranslated string: local ip address = Local IP Address +WARNING: untranslated string: local port = unknown string WARNING: untranslated string: local subnets = Local Subnets WARNING: untranslated string: log drop hostile in = Log dropped packets FROM hostile networks WARNING: untranslated string: log drop hostile out = Log dropped packets TO hostile networks @@ -1300,6 +1301,7 @@ WARNING: untranslated string: wg invalid psk = Invalid pre-shared key WARNING: untranslated string: wg invalid public key = Invalid public key WARNING: untranslated string: wg invalid remote subnet = Invalid remote subnet WARNING: untranslated string: wg keepalive interval = Keepalive Interval +WARNING: untranslated string: wg leave empty to automatically select = unknown string WARNING: untranslated string: wg name is already used = The name is already in use WARNING: untranslated string: wg no local subnets = No local subnets given WARNING: untranslated string: wg no more free addresses in pool = No more free addresses in pool diff --git a/html/cgi-bin/wireguard.cgi b/html/cgi-bin/wireguard.cgi index dfb95a062..eb7511d6b 100644 --- a/html/cgi-bin/wireguard.cgi +++ b/html/cgi-bin/wireguard.cgi @@ -200,10 +200,14 @@ if ($cgiparams{"ACTION"} eq $Lang::tr{'save'}) { push(@errormessages, $Lang::tr{'wg invalid psk'}); } - # Check port - #unless (&General::validport($cgiparams{'PORT'})) { - # push(@errormessages, $LANG::tr{'invalid port'}); - #} + # Select a new random port if none given + if ($cgiparams{'PORT'} eq "") { + $cgiparams{'PORT'} = &Wireguard::get_free_port(); + + # If a port was given we check that it is valid + } elsif (!&General::validport($cgiparams{'PORT'})) { + push(@errormessages, $LANG::tr{'invalid port'}); + } # Check the endpoint address if ($cgiparams{'ENDPOINT_ADDRESS'} eq '') { @@ -920,6 +924,18 @@ EDITNET: + + + $Lang::tr{'local port'} + + + + + + + $Lang::tr{'public key'} diff --git a/langs/de/cgi-bin/de.pl b/langs/de/cgi-bin/de.pl index 5ae432721..9fb601c0a 100644 --- a/langs/de/cgi-bin/de.pl +++ b/langs/de/cgi-bin/de.pl @@ -14,6 +14,8 @@ 'Captive 1week' => '1 Woche', 'Captive ACTIVATE' => 'AKTIVIEREN', 'Captive GAIN ACCESS' => 'ZUGANG', +'wg leave empty to automatically select' => 'Leer lassen für automatische Wahl', +'local port' => 'Lokaler Port', 'Captive WiFi coupon' => 'WLAN-Gutschein', 'Captive activate' => 'Aktivieren', 'Captive activated' => 'Aktiviert', diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl index af2c3b338..8d49f9c0e 100644 --- a/langs/en/cgi-bin/en.pl +++ b/langs/en/cgi-bin/en.pl @@ -2059,6 +2059,8 @@ 'ovpn port in root range' => 'A port number of 1024 or higher is required.', 'ovpn reneg sec' => 'Session key lifetime:', 'ovpn roadwarrior server' => 'OpenVPN Roadwarrior Server', +'wg leave empty to automatically select' => 'Leave empty to automatically select', +'local port' => 'Local Port', 'ovpn routes push' => 'Routes (one per line) e.g. 192.168.10.0/255.255.255.0 192.168.20.0/24', 'ovpn routes push options' => 'Route push options', 'ovpn rw connection log' => 'OpenVPN Roadwarrior Connections Log', -- 2.39.5