]> git.ipfire.org Git - people/ms/ipfire-2.x.git/commitdiff
wireguard.cgi: Allow to edit the port and automatically chose one
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 30 Sep 2024 18:04:05 +0000 (20:04 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 22 Apr 2025 14:48:53 +0000 (16:48 +0200)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
13 files changed:
config/cfgroot/wireguard-functions.pl
doc/language_issues.de
doc/language_issues.en
doc/language_issues.es
doc/language_issues.fr
doc/language_issues.it
doc/language_issues.nl
doc/language_issues.pl
doc/language_issues.ru
doc/language_issues.tr
html/cgi-bin/wireguard.cgi
langs/de/cgi-bin/de.pl
langs/en/cgi-bin/en.pl

index b2d9c14a06914869267abb7d4675691b920dd849..210423204d4ab3f8e18f8241b5e8bf189402c483 100644 (file)
@@ -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;
index eff641863e6d50a16d9f01cdbe3269a49bbd58f1..4e4ea81da1cb17bcf0ad1e9e9480436b19b26167 100644 (file)
@@ -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
index 2ccf371b56150713554e4981852f11e165bd5912..78cdcebbe41f7b9817a2fa5e7738d8e1bbef3234 100644 (file)
@@ -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
index 37623809f25b53a9ea419d5e013725ecf9fa2a65..2660dc9604271fc518d2d34cdfdba5b72e520818 100644 (file)
@@ -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
index 3a5a949ec8fa9b3e1c3063b663be71a9863f4065..a667bb97f8366535d4488753715fb8229a4b886e 100644 (file)
@@ -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
index 459723c53216ba6e2021a12a8f8bd9379335cf08..65995c6dc96d468c94d0865f331e72517c31a6db 100644 (file)
@@ -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
index 640172f9fa0a2272971e3071fd2b29d4e95e783a..855dad8853b3845e6ebbac377737119110570a2e 100644 (file)
@@ -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
index 55725f2b627d5c40ca24cea458e9c42277497165..aec158084f9b8c786585041e02834b27c1bc1e4d 100644 (file)
@@ -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
index 5ec2515324ece55d8d73250a868919566c3d9d00..535f4a98303272e6430231d03a5ea75cf4563d7c 100644 (file)
@@ -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
index 7ad028fe8db9416bb88e722fedd69a3f4b6a9188..4b60ad12dc11db593d7c9a852e8f61c0f040f696 100644 (file)
@@ -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
index dfb95a062afd00daaedd62efac66516098ee730b..eb7511d6bd3b42d79f9e1fd5b6612e254168fb78 100644 (file)
@@ -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:
                                        </td>
                                </tr>
 
+                               <tr>
+                                       <td>
+                                               $Lang::tr{'local port'}
+                                       </td>
+
+                                       <td>
+                                               <input type="number" name="PORT"
+                                                       value="$cgiparams{'PORT'}" min="1" max="65535"
+                                                       placeholder="$Lang::tr{'wg leave empty to automatically select'}" />
+                                       </td>
+                               </tr>
+
                                <tr>
                                        <td>$Lang::tr{'public key'}</td>
                                        <td>
index 5ae43272139ca1fd52ad2663fddbf8ac2a8886f1..9fb601c0a47b6e25f61b0b617f80ec18f1bcdc96 100644 (file)
@@ -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',
index af2c3b33825c777153126a79455c265e62a26c68..8d49f9c0e4766a8bfe0975a6652e8dbf826ca1bf 100644 (file)
 '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',