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 = ();
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;
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 '') {
</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>
'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',
'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',