WARNING: untranslated string: wg edit peer = Edit Peer
WARNING: untranslated string: wg invalid endpoint address = Invalid endpoint address
WARNING: untranslated string: wg invalid endpoint port = Invalid endpoint port
+WARNING: untranslated string: wg invalid keepalive interval = Invalid Keepalive Interval (Must be between 0 and 65535)
WARNING: untranslated string: wg invalid local subnet = Invalid local subnet
WARNING: untranslated string: wg invalid name = Invalid name (Only letters, numbers, space and hyphen are allowed)
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 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 remote subnets = No remote subnets given
WARNING: untranslated string: wg edit peer = Edit Peer
WARNING: untranslated string: wg invalid endpoint address = Invalid endpoint address
WARNING: untranslated string: wg invalid endpoint port = Invalid endpoint port
+WARNING: untranslated string: wg invalid keepalive interval = Invalid Keepalive Interval (Must be between 0 and 65535)
WARNING: untranslated string: wg invalid local subnet = Invalid local subnet
WARNING: untranslated string: wg invalid name = Invalid name (Only letters, numbers, space and hyphen are allowed)
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 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 remote subnets = No remote subnets given
WARNING: untranslated string: wg edit peer = Edit Peer
WARNING: untranslated string: wg invalid endpoint address = Invalid endpoint address
WARNING: untranslated string: wg invalid endpoint port = Invalid endpoint port
+WARNING: untranslated string: wg invalid keepalive interval = Invalid Keepalive Interval (Must be between 0 and 65535)
WARNING: untranslated string: wg invalid local subnet = Invalid local subnet
WARNING: untranslated string: wg invalid name = Invalid name (Only letters, numbers, space and hyphen are allowed)
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 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 remote subnets = No remote subnets given
WARNING: untranslated string: wg edit peer = Edit Peer
WARNING: untranslated string: wg invalid endpoint address = Invalid endpoint address
WARNING: untranslated string: wg invalid endpoint port = Invalid endpoint port
+WARNING: untranslated string: wg invalid keepalive interval = Invalid Keepalive Interval (Must be between 0 and 65535)
WARNING: untranslated string: wg invalid local subnet = Invalid local subnet
WARNING: untranslated string: wg invalid name = Invalid name (Only letters, numbers, space and hyphen are allowed)
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 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 remote subnets = No remote subnets given
WARNING: untranslated string: wg edit peer = Edit Peer
WARNING: untranslated string: wg invalid endpoint address = Invalid endpoint address
WARNING: untranslated string: wg invalid endpoint port = Invalid endpoint port
+WARNING: untranslated string: wg invalid keepalive interval = Invalid Keepalive Interval (Must be between 0 and 65535)
WARNING: untranslated string: wg invalid local subnet = Invalid local subnet
WARNING: untranslated string: wg invalid name = Invalid name (Only letters, numbers, space and hyphen are allowed)
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 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 remote subnets = No remote subnets given
WARNING: untranslated string: wg edit peer = Edit Peer
WARNING: untranslated string: wg invalid endpoint address = Invalid endpoint address
WARNING: untranslated string: wg invalid endpoint port = Invalid endpoint port
+WARNING: untranslated string: wg invalid keepalive interval = Invalid Keepalive Interval (Must be between 0 and 65535)
WARNING: untranslated string: wg invalid local subnet = Invalid local subnet
WARNING: untranslated string: wg invalid name = Invalid name (Only letters, numbers, space and hyphen are allowed)
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 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 remote subnets = No remote subnets given
WARNING: untranslated string: wg edit peer = Edit Peer
WARNING: untranslated string: wg invalid endpoint address = Invalid endpoint address
WARNING: untranslated string: wg invalid endpoint port = Invalid endpoint port
+WARNING: untranslated string: wg invalid keepalive interval = Invalid Keepalive Interval (Must be between 0 and 65535)
WARNING: untranslated string: wg invalid local subnet = Invalid local subnet
WARNING: untranslated string: wg invalid name = Invalid name (Only letters, numbers, space and hyphen are allowed)
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 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 remote subnets = No remote subnets given
WARNING: untranslated string: wg edit peer = Edit Peer
WARNING: untranslated string: wg invalid endpoint address = Invalid endpoint address
WARNING: untranslated string: wg invalid endpoint port = Invalid endpoint port
+WARNING: untranslated string: wg invalid keepalive interval = Invalid Keepalive Interval (Must be between 0 and 65535)
WARNING: untranslated string: wg invalid local subnet = Invalid local subnet
WARNING: untranslated string: wg invalid name = Invalid name (Only letters, numbers, space and hyphen are allowed)
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 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 remote subnets = No remote subnets given
WARNING: untranslated string: wg edit peer = Edit Peer
WARNING: untranslated string: wg invalid endpoint address = Invalid endpoint address
WARNING: untranslated string: wg invalid endpoint port = Invalid endpoint port
+WARNING: untranslated string: wg invalid keepalive interval = Invalid Keepalive Interval (Must be between 0 and 65535)
WARNING: untranslated string: wg invalid local subnet = Invalid local subnet
WARNING: untranslated string: wg invalid name = Invalid name (Only letters, numbers, space and hyphen are allowed)
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 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 remote subnets = No remote subnets given
< wg edit peer
< wg invalid endpoint address
< wg invalid endpoint port
+< wg invalid keepalive interval
< wg invalid local subnet
< wg invalid name
< wg invalid psk
< wg invalid public key
< wg invalid remote subnet
+< wg keepalive interval
< wg name is already used
< wg no local subnets
< wg no remote subnets
< wg edit peer
< wg invalid endpoint address
< wg invalid endpoint port
+< wg invalid keepalive interval
< wg invalid local subnet
< wg invalid name
< wg invalid psk
< wg invalid public key
< wg invalid remote subnet
+< wg keepalive interval
< wg name is already used
< wg no local subnets
< wg no remote subnets
< wg edit peer
< wg invalid endpoint address
< wg invalid endpoint port
+< wg invalid keepalive interval
< wg invalid local subnet
< wg invalid name
< wg invalid psk
< wg invalid public key
< wg invalid remote subnet
+< wg keepalive interval
< wg name is already used
< wg no local subnets
< wg no remote subnets
< wg edit peer
< wg invalid endpoint address
< wg invalid endpoint port
+< wg invalid keepalive interval
< wg invalid local subnet
< wg invalid name
< wg invalid psk
< wg invalid public key
< wg invalid remote subnet
+< wg keepalive interval
< wg name is already used
< wg no local subnets
< wg no remote subnets
< wg edit peer
< wg invalid endpoint address
< wg invalid endpoint port
+< wg invalid keepalive interval
< wg invalid local subnet
< wg invalid name
< wg invalid psk
< wg invalid public key
< wg invalid remote subnet
+< wg keepalive interval
< wg name is already used
< wg no local subnets
< wg no remote subnets
< wg edit peer
< wg invalid endpoint address
< wg invalid endpoint port
+< wg invalid keepalive interval
< wg invalid local subnet
< wg invalid name
< wg invalid psk
< wg invalid public key
< wg invalid remote subnet
+< wg keepalive interval
< wg name is already used
< wg no local subnets
< wg no remote subnets
< wg edit peer
< wg invalid endpoint address
< wg invalid endpoint port
+< wg invalid keepalive interval
< wg invalid local subnet
< wg invalid name
< wg invalid psk
< wg invalid public key
< wg invalid remote subnet
+< wg keepalive interval
< wg name is already used
< wg no local subnets
< wg no remote subnets
< wg edit peer
< wg invalid endpoint address
< wg invalid endpoint port
+< wg invalid keepalive interval
< wg invalid local subnet
< wg invalid name
< wg invalid psk
< wg invalid public key
< wg invalid remote subnet
+< wg keepalive interval
< wg name is already used
< wg no local subnets
< wg no remote subnets
require "${General::swroot}/header.pl";
require "${General::swroot}/location-functions.pl";
-my $DEFAULT_PORT = 51820;
+my $DEFAULT_PORT = 51820;
+my $DEFAULT_KEEPALIVE = 25;
my $INTF = "wg0";
my @errormessages = ();
"REMARKS" => &decode_base64($peers{$key}[7]),
"LOCAL_SUBNETS" => join(", ", @local_subnets),
"PSK" => $peers{$key}[9],
+ "KEEPALIVE" => $peers{$key}[10],
);
# Jump to the editor
push(@errormessages, $Lang::tr{'wg invalid endpoint port'});
}
+ # Check keepalive
+ unless (&keepalive_is_valid($cgiparams{'KEEPALIVE'})) {
+ push(@errormessages, $Lang::tr{'wg invalid keepalive interval'});
+ }
+
# Check local subnets
if (defined $cgiparams{'LOCAL_SUBNETS'}) {
@local_subnets = split(/,/, $cgiparams{'LOCAL_SUBNETS'});
&encode_subnets(@local_subnets),
# 9 = PSK
$cgiparams{"PSK"} || "",
+ # 10 = Keepalive
+ $cgiparams{"KEEPALIVE"} || 0,
];
# Store the configuration
"LOCAL_SUBNETS" =>
$Network::ethernet{"GREEN_NETADDRESS"}
. "/" . $Network::ethernet{"GREEN_NETMASK"},
+ "KEEPALIVE" => $DEFAULT_KEEPALIVE,
});
}
value="$cgiparams{'PSK'}" />
</td>
</tr>
+
+ <tr>
+ <td>
+ $Lang::tr{'wg keepalive interval'}
+ </td>
+
+ <td>
+ <input type="number" name="KEEPALIVE"
+ value="$cgiparams{'KEEPALIVE'}" required
+ min="0" max="65535" />
+ </td>
+ </tr>
</table>
<h6>$Lang::tr{'routing'}</h6>
return length($key) == 32;
}
+sub keepalive_is_valid($) {
+ my $keepalive = shift;
+
+ # Must be a number
+ return 0 unless ($keepalive =~ m/^[0-9]+$/);
+
+ # Must be between 0 and 65535 (inclusive)
+ return 0 if ($keepalive lt 0);
+ return 0 if ($keepalive gt 65535);
+
+ return 1;
+}
+
sub encode_remarks($) {
my $remarks = shift;
'wg edit peer' => 'Edit Peer',
'wg invalid endpoint address' => 'Invalid endpoint address',
'wg invalid endpoint port' => 'Invalid endpoint port',
+'wg invalid keepalive interval' => 'Invalid Keepalive Interval (Must be between 0 and 65535)',
'wg invalid local subnet' => 'Invalid local subnet',
'wg invalid name' => 'Invalid name (Only letters, numbers, space and hyphen are allowed)',
'wg invalid psk' => 'Invalid pre-shared key',
'wg invalid public key' => 'Invalid public key',
'wg invalid remote subnet' => 'Invalid remote subnet',
+'wg keepalive interval' => 'Keepalive Interval',
'wg name is already used' => 'The name is already in use',
'wg no local subnets' => 'No local subnets given',
'wg no remote subnets' => 'No remote subnets given',
local remarks
local local_subnets
local psk
+ local keepalive
local _rest
local route
ip route flush dev "${INTF}"
while read -r id enabled type name pubkey endpoint port routes \
- remarks local_subnets psk _rest; do
+ remarks local_subnets psk keepalive _rest; do
# Skip peers that are not enabled
[ "${enabled}" = "on" ] || continue
done
fi
fi
+
+ # Set keepalive
+ if [ -n "${keepalive}" ]; then
+ echo "PersistentKeepalive = ${keepalive}"
+ fi
done < /var/ipfire/wireguard/peers
}