diff --git a/interface-definitions/dns-dynamic.xml.in b/interface-definitions/dns-dynamic.xml.in
index 58dd48f9d..3e77e2540 100644
--- a/interface-definitions/dns-dynamic.xml.in
+++ b/interface-definitions/dns-dynamic.xml.in
@@ -1,279 +1,201 @@
 <?xml version="1.0"?>
 <interfaceDefinition>
   <node name="service">
     <children>
       <node name="dns">
         <properties>
           <help>Domain Name System related services</help>
         </properties>
         <children>
           <node name="dynamic" owner="${vyos_conf_scripts_dir}/dynamic_dns.py">
             <properties>
               <help>Dynamic DNS</help>
             </properties>
             <children>
               <tagNode name="interface">
                 <properties>
-                  <help>Interface to send DDNS updates for</help>
+                  <help>Interface to send Dynamic DNS updates for</help>
                   <completionHelp>
                     <script>${vyos_completion_dir}/list_interfaces</script>
                   </completionHelp>
+                  <valueHelp>
+                    <format>txt</format>
+                    <description>Interface name</description>
+                  </valueHelp>
+                  <constraint>
+                    #include <include/constraint/interface-name.xml.i>
+                  </constraint>
                 </properties>
                 <children>
                   <tagNode name="rfc2136">
                     <properties>
                       <help>RFC2136 Update name</help>
                     </properties>
                     <children>
                       <leafNode name="key">
                         <properties>
                           <help>File containing the secret key shared with remote DNS server</help>
                           <valueHelp>
                             <format>filename</format>
                             <description>File in /config/auth directory</description>
                           </valueHelp>
                         </properties>
                       </leafNode>
                       <leafNode name="record">
                         <properties>
                           <help>Record to be updated</help>
                           <multi/>
                         </properties>
                       </leafNode>
                       <leafNode name="server">
                         <properties>
                           <help>Server to be updated</help>
                         </properties>
                       </leafNode>
                       <leafNode name="ttl">
                         <properties>
                           <help>Time To Live (default: 600)</help>
                           <valueHelp>
                             <format>u32:1-86400</format>
                             <description>DNS forwarding cache size</description>
                           </valueHelp>
                           <constraint>
                             <validator name="numeric" argument="--range 1-86400"/>
                           </constraint>
                         </properties>
                         <defaultValue>600</defaultValue>
                       </leafNode>
                       <leafNode name="zone">
                         <properties>
                           <help>Zone to be updated</help>
                         </properties>
                       </leafNode>
                     </children>
                   </tagNode>
                   <tagNode name="service">
                     <properties>
                       <help>Service being used for Dynamic DNS</help>
                       <completionHelp>
                         <list>afraid changeip cloudflare dnspark dslreports dyndns easydns namecheap noip sitelutions zoneedit</list>
                       </completionHelp>
                       <valueHelp>
                         <format>txt</format>
                         <description>Dynanmic DNS service with a custom name</description>
                       </valueHelp>
                       <valueHelp>
                         <format>afraid</format>
                         <description>afraid.org Services</description>
                       </valueHelp>
                       <valueHelp>
                         <format>changeip</format>
                         <description>changeip.com Services</description>
                       </valueHelp>
                       <valueHelp>
                         <format>cloudflare</format>
                         <description>cloudflare.com Services</description>
                       </valueHelp>
                       <valueHelp>
                         <format>dnspark</format>
                         <description>dnspark.com Services</description>
                       </valueHelp>
                       <valueHelp>
                         <format>dslreports</format>
                         <description>dslreports.com Services</description>
                       </valueHelp>
                       <valueHelp>
                         <format>dyndns</format>
                         <description>dyndns.com Services</description>
                       </valueHelp>
                       <valueHelp>
                         <format>easydns</format>
                         <description>easydns.com Services</description>
                       </valueHelp>
                       <valueHelp>
                         <format>namecheap</format>
                         <description>namecheap.com Services</description>
                       </valueHelp>
                       <valueHelp>
                         <format>noip</format>
                         <description>noip.com Services</description>
                       </valueHelp>
                       <valueHelp>
                         <format>sitelutions</format>
                         <description>sitelutions.com Services</description>
                       </valueHelp>
                       <valueHelp>
                         <format>zoneedit</format>
                         <description>zoneedit.com Services</description>
                       </valueHelp>
                       <constraint>
                         <regex>(custom|afraid|changeip|cloudflare|dnspark|dslreports|dyndns|easydns|namecheap|noip|sitelutions|zoneedit|\w+)</regex>
                       </constraint>
                       <constraintErrorMessage>You can use only predefined list of services or word characters (_, a-z, A-Z, 0-9) as service name</constraintErrorMessage>
                     </properties>
                     <children>
                       <leafNode name="host-name">
                         <properties>
-                          <help>Hostname registered with DDNS service</help>
+                          <help>Hostname to register with Dynamic DNS service</help>
                           <multi/>
                         </properties>
                       </leafNode>
                       <leafNode name="login">
                         <properties>
-                          <help>Login for DDNS service</help>
+                          <help>Login for Dynamic DNS service (not used by all protocols, or referred as api-token in some cases)</help>
                         </properties>
                       </leafNode>
                       <leafNode name="password">
                         <properties>
-                          <help>Password for DDNS service</help>
+                          <help>Password for Dynamic DNS service (referred as api-token, global-token or api-secret in some cases)</help>
                         </properties>
                       </leafNode>
                       <leafNode name="protocol">
                         <properties>
-                          <help>ddclient protocol used for DDNS service</help>
+                          <help>ddclient protocol used for Dynamic DNS service</help>
                           <completionHelp>
-                            <list>changeip cloudflare dnsmadeeasy dnspark dondominio dslreports1 dtdns duckdns dyndns2 easydns freedns freemyip googledomains hammernode1 namecheap nfsn noip sitelutions woima yandex zoneedit1</list>
+                            <script>${vyos_completion_dir}/list_ddclient_protocols.sh</script>
                           </completionHelp>
-                          <valueHelp>
-                            <format>changeip</format>
-                            <description>ChangeIP protocol</description>
-                          </valueHelp>
-                          <valueHelp>
-                            <format>cloudflare</format>
-                            <description>Cloudflare protocol</description>
-                          </valueHelp>
-                          <valueHelp>
-                            <format>dnsmadeeasy</format>
-                            <description>DNS Made Easy protocol</description>
-                          </valueHelp>
-                          <valueHelp>
-                            <format>dnspark</format>
-                            <description>DNS Park protocol</description>
-                          </valueHelp>
-                          <valueHelp>
-                            <format>dondominio</format>
-                            <description>DonDominio protocol</description>
-                          </valueHelp>
-                          <valueHelp>
-                            <format>dslreports1</format>
-                            <description>DslReports protocol</description>
-                          </valueHelp>
-                          <valueHelp>
-                            <format>dtdns</format>
-                            <description>DtDNS protocol</description>
-                          </valueHelp>
-                          <valueHelp>
-                            <format>duckdns</format>
-                            <description>DuckDNS protocol</description>
-                          </valueHelp>
-                          <valueHelp>
-                            <format>dyndns2</format>
-                            <description>DynDNS protocol v2</description>
-                          </valueHelp>
-                          <valueHelp>
-                            <format>easydns</format>
-                            <description>easyDNS protocol</description>
-                          </valueHelp>
-                          <valueHelp>
-                            <format>freedns</format>
-                            <description>FreeDNS protocol</description>
-                          </valueHelp>
-                          <valueHelp>
-                            <format>freemyip</format>
-                            <description>freemyip protocol</description>
-                          </valueHelp>
-                          <valueHelp>
-                            <format>googledomains</format>
-                            <description>Google domains protocol</description>
-                          </valueHelp>
-                          <valueHelp>
-                            <format>hammernode1</format>
-                            <description>Hammernode protocol</description>
-                          </valueHelp>
-                          <valueHelp>
-                            <format>namecheap</format>
-                            <description>Namecheap protocol</description>
-                          </valueHelp>
-                          <valueHelp>
-                            <format>nfsn</format>
-                            <description>NearlyFreeSpeech DNS protocol</description>
-                          </valueHelp>
-                          <valueHelp>
-                            <format>noip</format>
-                            <description>No-IP protocol</description>
-                          </valueHelp>
-                          <valueHelp>
-                            <format>sitelutions</format>
-                            <description>Sitelutions protocol</description>
-                          </valueHelp>
-                          <valueHelp>
-                            <format>woima</format>
-                            <description>WOIMA protocol</description>
-                          </valueHelp>
-                          <valueHelp>
-                            <format>yandex</format>
-                            <description>Yandex.DNS protocol</description>
-                          </valueHelp>
-                          <valueHelp>
-                            <format>zoneedit1</format>
-                            <description>Zoneedit protocol</description>
-                          </valueHelp>
                           <constraint>
-                            <regex>(changeip|cloudflare|dnsmadeeasy|dnspark|dondominio|dslreports1|dtdns|duckdns|dyndns2|easydns|freedns|freemyip|googledomains|hammernode1|namecheap|nfsn|noip|sitelutions|woima|yandex|zoneedit1)</regex>
+                            <validator name="ddclient-protocol"/>
                           </constraint>
-                          <constraintErrorMessage>Please choose from the list of allowed protocols</constraintErrorMessage>
                         </properties>
                       </leafNode>
                       #include <include/server-ipv4-fqdn.xml.i>
                       <leafNode name="zone">
                         <properties>
-                          <help>DNS zone to update (only available with CloudFlare)</help>
+                          <help>DNS zone to update (not used by all protocols)</help>
                         </properties>
                       </leafNode>
                     </children>
                   </tagNode>
                   <node name="use-web">
                     <properties>
-                      <help>Web check used for obtaining the external IP address</help>
+                      <help>Use http(s) web request to obtain the external IP address instead of the IP address associated with the interface</help>
                     </properties>
                     <children>
                       <leafNode name="skip">
                         <properties>
-                          <help>Skip everything before this on the given URL</help>
+                          <help>Text pattern to skip from the respose of the given URL to extract the external IP address</help>
                         </properties>
                       </leafNode>
                       <leafNode name="url">
                         <properties>
-                          <help>URL to obtain the current external IP address</help>
+                          <help>Custom URL to obtain the current external IP address over http(s) web request, overriding ddclient default</help>
                         </properties>
                       </leafNode>
                     </children>
                   </node>
                   <leafNode name="ipv6-enable">
                     <properties>
-                      <help>Allow explicit IPv6 addresses for Dynamic DNS for this interface</help>
+                      <help>Explicitly use IPv6 address instead of IPv4 address to update the Dynamic DNS IP address</help>
                       <valueless/>
                     </properties>
                   </leafNode>
                 </children>
               </tagNode>
             </children>
           </node>
         </children>
       </node>
     </children>
   </node>
 </interfaceDefinition>
diff --git a/src/completion/list_ddclient_protocols.sh b/src/completion/list_ddclient_protocols.sh
new file mode 100755
index 000000000..75fb0cf44
--- /dev/null
+++ b/src/completion/list_ddclient_protocols.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+#
+# Copyright (C) 2023 VyOS maintainers and contributors
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 or later as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+echo -n $(ddclient -list-protocols)
diff --git a/src/validators/ddclient-protocol b/src/validators/ddclient-protocol
new file mode 100755
index 000000000..6f927927b
--- /dev/null
+++ b/src/validators/ddclient-protocol
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# Copyright (C) 2023 VyOS maintainers and contributors
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 or later as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+ddclient -list-protocols | grep -qw $1
+
+if [ $? -gt 0 ]; then
+    echo "Error: $1 is not a valid protocol, please choose from the supported list of protocols"
+    exit 1
+fi
+
+exit 0