]> git.ipfire.org Git - ipfire-2.x.git/commitdiff
wireguard.cgi: Implement option to configure keepalive
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 24 Apr 2024 22:22:40 +0000 (00:22 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 22 Apr 2025 14:48:31 +0000 (16:48 +0200)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
13 files changed:
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
doc/language_missings
html/cgi-bin/wireguard.cgi
langs/en/cgi-bin/en.pl
src/initscripts/system/wireguard

index cc40436f47ec83f48132e16b448dc8871c34e0cb..53540a0b805e573a17cc0eda59aeeff0ebe50b2b 100644 (file)
@@ -1038,11 +1038,13 @@ WARNING: untranslated string: wg create peer = Create A New Peer
 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
index 4f527dc2743b7a0e44bc35734368d48769478ae8..1d39d085c2b3dc623e3352db98d4e45bf35acf7e 100644 (file)
@@ -2145,11 +2145,13 @@ WARNING: untranslated string: wg create peer = Create A New Peer
 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
index facbd5aa6df50414b64d366302e310d82e6306f3..8b591e379b5e60a88ff5c1b09641110b21ead0fd 100644 (file)
@@ -1105,11 +1105,13 @@ WARNING: untranslated string: wg create peer = Create A New Peer
 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
index cb0bea9060f05791d71fdd8107e64bdf8186f965..6d32700c5bc2c7985385b8798c46a43581240329 100644 (file)
@@ -1045,11 +1045,13 @@ WARNING: untranslated string: wg create peer = Create A New Peer
 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
index 40363f9b6296667c612a1420469d3590048523d0..f0e1a2e0c01e6830ae066ff1437f2f3cb8224839 100644 (file)
@@ -1391,11 +1391,13 @@ WARNING: untranslated string: wg create peer = Create A New Peer
 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
index dc0f9b4c94ccfbb4df43c225a82e0d065b48a2f7..e136e5e48697353dd9ce90cd757f1c3aa488fede 100644 (file)
@@ -1412,11 +1412,13 @@ WARNING: untranslated string: wg create peer = Create A New Peer
 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
index 610d8e29cfce9f52ea170e1d0686dffa7de4ef66..b7bc9972e70e1fa94cd700c680b0feb3486f4963 100644 (file)
@@ -1654,11 +1654,13 @@ WARNING: untranslated string: wg create peer = Create A New Peer
 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
index 61808edb47686530d8734b3f2eeec67b16b221e4..12b7a642e7bade70eab1996c520ed47d0842f0f0 100644 (file)
@@ -1647,11 +1647,13 @@ WARNING: untranslated string: wg create peer = Create A New Peer
 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
index 45516c4ff6aaac6ed13dcb2574c06d210c30ed75..59f5cf651c4388831e5859f1e204619906bd0fa9 100644 (file)
@@ -1274,11 +1274,13 @@ WARNING: untranslated string: wg create peer = Create A New Peer
 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
index 98e28608dcaa62a68b42313d9b2a7e7de07161eb..cb46f879ad0fd35ab9e293e8b415700ae52c4ed8 100644 (file)
 < 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
index e2e70256fb659370df3e5bf236a2356ebdbc7b5b..235404555c39a1cc64ba9f84c8f96b7660fb49de 100644 (file)
@@ -30,7 +30,8 @@ require "/var/ipfire/general-functions.pl";
 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 = ();
@@ -133,6 +134,7 @@ if ($cgiparams{"ACTION"} eq $Lang::tr{'save'}) {
                "REMARKS"                       => &decode_base64($peers{$key}[7]),
                "LOCAL_SUBNETS"         => join(", ", @local_subnets),
                "PSK"                           => $peers{$key}[9],
+               "KEEPALIVE"                     => $peers{$key}[10],
        );
 
        # Jump to the editor
@@ -177,6 +179,11 @@ if ($cgiparams{"ACTION"} eq $Lang::tr{'save'}) {
                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'});
@@ -234,6 +241,8 @@ if ($cgiparams{"ACTION"} eq $Lang::tr{'save'}) {
                &encode_subnets(@local_subnets),
                # 9 = PSK
                $cgiparams{"PSK"} || "",
+               # 10 = Keepalive
+               $cgiparams{"KEEPALIVE"} || 0,
        ];
 
        # Store the configuration
@@ -531,6 +540,7 @@ EDITOR:
                        "LOCAL_SUBNETS" =>
                                $Network::ethernet{"GREEN_NETADDRESS"}
                                . "/" . $Network::ethernet{"GREEN_NETMASK"},
+                       "KEEPALIVE"             => $DEFAULT_KEEPALIVE,
                });
        }
 
@@ -604,6 +614,18 @@ EDITOR:
                                                        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>
@@ -784,6 +806,19 @@ sub publickey_is_valid($) {
        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;
 
index ff735f215b604f9b110c21acbfc67f36089d6ed5..613a5e1472f0bac3090223b6ec811fa37ea286a3 100644 (file)
 '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',
index 6c44b770d7355e20f9222eb1cd532a29c7bde2d1..baf829248112c26e29130dad759da6cf3ee4579f 100644 (file)
@@ -48,6 +48,7 @@ generate_config() {
        local remarks
        local local_subnets
        local psk
+       local keepalive
        local _rest
 
        local route
@@ -56,7 +57,7 @@ generate_config() {
        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
 
@@ -84,6 +85,11 @@ generate_config() {
                                done
                        fi
                fi
+
+               # Set keepalive
+               if [ -n "${keepalive}" ]; then
+                       echo "PersistentKeepalive = ${keepalive}"
+               fi
        done < /var/ipfire/wireguard/peers
 }