From 142ea68c0649b69df9713a900afb8406835ba770 Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Thu, 30 Dec 2021 19:07:16 +0100 Subject: [PATCH] dns/ddclient - work in progress, replacement for dyndns using ddclient package --- .../DynDNS/Api/SettingsController.php | 49 ++++++++++++ .../OPNsense/DynDNS/IndexController.php | 1 + .../OPNsense/DynDNS/forms/settings.xml | 16 ++++ .../mvc/app/models/OPNsense/DynDNS/DynDNS.xml | 22 ++++++ .../app/models/OPNsense/DynDNS/Menu/Menu.xml | 5 +- .../mvc/app/views/OPNsense/DynDNS/index.volt | 53 +++++++++---- .../OPNsense/Syslog/local/ddclient.conf | 6 ++ .../templates/OPNsense/ddclient/ddclient.conf | 77 ++++++++++++------- 8 files changed, 183 insertions(+), 46 deletions(-) create mode 100644 dns/ddclient/src/opnsense/mvc/app/controllers/OPNsense/DynDNS/Api/SettingsController.php create mode 100644 dns/ddclient/src/opnsense/mvc/app/controllers/OPNsense/DynDNS/forms/settings.xml create mode 100644 dns/ddclient/src/opnsense/service/templates/OPNsense/Syslog/local/ddclient.conf diff --git a/dns/ddclient/src/opnsense/mvc/app/controllers/OPNsense/DynDNS/Api/SettingsController.php b/dns/ddclient/src/opnsense/mvc/app/controllers/OPNsense/DynDNS/Api/SettingsController.php new file mode 100644 index 000000000..b6d14516b --- /dev/null +++ b/dns/ddclient/src/opnsense/mvc/app/controllers/OPNsense/DynDNS/Api/SettingsController.php @@ -0,0 +1,49 @@ + [ + 'general' => $data['ddclient']['general'] + ] + ]; + } +} diff --git a/dns/ddclient/src/opnsense/mvc/app/controllers/OPNsense/DynDNS/IndexController.php b/dns/ddclient/src/opnsense/mvc/app/controllers/OPNsense/DynDNS/IndexController.php index 12b1df3bb..4214f012f 100644 --- a/dns/ddclient/src/opnsense/mvc/app/controllers/OPNsense/DynDNS/IndexController.php +++ b/dns/ddclient/src/opnsense/mvc/app/controllers/OPNsense/DynDNS/IndexController.php @@ -40,6 +40,7 @@ class IndexController extends \OPNsense\Base\IndexController { // link dialogs $this->view->formDialogAccount = $this->getForm("dialogAccount"); + $this->view->formSettings = $this->getForm("settings"); // choose template $this->view->pick('OPNsense/DynDNS/index'); } diff --git a/dns/ddclient/src/opnsense/mvc/app/controllers/OPNsense/DynDNS/forms/settings.xml b/dns/ddclient/src/opnsense/mvc/app/controllers/OPNsense/DynDNS/forms/settings.xml new file mode 100644 index 000000000..38fadde58 --- /dev/null +++ b/dns/ddclient/src/opnsense/mvc/app/controllers/OPNsense/DynDNS/forms/settings.xml @@ -0,0 +1,16 @@ +
+ + ddclient.general.enabled + + checkbox + Enable ddclient + + + ddclient.general.checkip + + dropdown + + How to determine the address to uswe for this host + + +
diff --git a/dns/ddclient/src/opnsense/mvc/app/models/OPNsense/DynDNS/DynDNS.xml b/dns/ddclient/src/opnsense/mvc/app/models/OPNsense/DynDNS/DynDNS.xml index 82614c0a6..b9896be22 100644 --- a/dns/ddclient/src/opnsense/mvc/app/models/OPNsense/DynDNS/DynDNS.xml +++ b/dns/ddclient/src/opnsense/mvc/app/models/OPNsense/DynDNS/DynDNS.xml @@ -10,6 +10,28 @@ 1 Y + + Y + web_dyndns + An IP service type is required. + + dyndns + freedns + googledomains + he + ip4only.me + ip4only.me + ipify-ipv4 + ipify-ipv6 + loopia + myonlineportal + noip-ipv4 + noip-ipv6 + nsupdate.info-ipv4 + nsupdate.info-ipv4 + zoneedit + + diff --git a/dns/ddclient/src/opnsense/mvc/app/models/OPNsense/DynDNS/Menu/Menu.xml b/dns/ddclient/src/opnsense/mvc/app/models/OPNsense/DynDNS/Menu/Menu.xml index 633e9ccc1..e2ed79307 100644 --- a/dns/ddclient/src/opnsense/mvc/app/models/OPNsense/DynDNS/Menu/Menu.xml +++ b/dns/ddclient/src/opnsense/mvc/app/models/OPNsense/DynDNS/Menu/Menu.xml @@ -1,5 +1,8 @@ - + + + + diff --git a/dns/ddclient/src/opnsense/mvc/app/views/OPNsense/DynDNS/index.volt b/dns/ddclient/src/opnsense/mvc/app/views/OPNsense/DynDNS/index.volt index e4811c564..9a40d6f8a 100644 --- a/dns/ddclient/src/opnsense/mvc/app/views/OPNsense/DynDNS/index.volt +++ b/dns/ddclient/src/opnsense/mvc/app/views/OPNsense/DynDNS/index.volt @@ -38,15 +38,29 @@ POSSIBILITY OF SUCH DAMAGE. toggle:'/api/dyndns/accounts/toggle_item/' } ); + let data_get_map = {'frm_settings':"/api/dyndns/settings/get"}; + mapDataToFormUI(data_get_map).done(function(){ + formatTokenizersUI(); + $('.selectpicker').selectpicker('refresh'); + updateServiceControlUI('dyndns'); + }); - $("#reconfigureAct").SimpleActionButton(); - updateServiceControlUI('dyndns'); + $("#reconfigureAct").SimpleActionButton({ + onPreAction: function() { + const dfObj = new $.Deferred(); + saveFormToEndpoint("/api/dyndns/settings/set", 'frm_settings', function(){ + dfObj.resolve(); + }); + return dfObj; + } + }); });
@@ -75,22 +89,29 @@ POSSIBILITY OF SUCH DAMAGE.
-
- -
- -

+
+ {{ partial("layout_partials/base_form",['fields':formSettings,'id':'frm_settings'])}}
+
+
+
+
+ + +

+
+
+
{# include dialogs #} {{ partial("layout_partials/base_dialog",['fields':formDialogAccount,'id':'DialogAccount','label':lang._('Edit Account')])}} diff --git a/dns/ddclient/src/opnsense/service/templates/OPNsense/Syslog/local/ddclient.conf b/dns/ddclient/src/opnsense/service/templates/OPNsense/Syslog/local/ddclient.conf new file mode 100644 index 000000000..7dc55b077 --- /dev/null +++ b/dns/ddclient/src/opnsense/service/templates/OPNsense/Syslog/local/ddclient.conf @@ -0,0 +1,6 @@ +################################################################### +# Local syslog-ng configuration filter definition [ddclient]. +################################################################### +filter f_local_ddclient { + program("ddclient"); +}; diff --git a/dns/ddclient/src/opnsense/service/templates/OPNsense/ddclient/ddclient.conf b/dns/ddclient/src/opnsense/service/templates/OPNsense/ddclient/ddclient.conf index d6ee57eff..3e5b2baaf 100644 --- a/dns/ddclient/src/opnsense/service/templates/OPNsense/ddclient/ddclient.conf +++ b/dns/ddclient/src/opnsense/service/templates/OPNsense/ddclient/ddclient.conf @@ -2,44 +2,63 @@ daemon=300 # check every 300 seconds syslog=yes # log update msgs to syslog pid=/var/run/ddclient.pid # record PID in file. -{% set websettings = { - 'noip': 'use=web,', - 'nsupdate': 'use=web, web=http://ipv4.nsupdate.info/myip,' -} %} - +# +# setup how we expect to retrieve an IP address +# +{% if not helpers.empty('OPNsense.DynDNS.general.checkip') and OPNsense.DynDNS.general.checkip.startswith('web_') %} +{% set checkip = OPNsense.DynDNS.general.checkip.lstrip('web_') %} +{% if checkip == 'dyndns' %} +use=web, web=http://checkip.dyndns.org/, web-skip="Current IP Address:" +{% elif checkip == 'freedns' %} +use=web, web=https://freedns.afraid.org/dynamic/check.php +{% elif checkip == 'googledomains' %} +use=web, web=https://domains.google.com/checkip +{% elif checkip == 'he' %} +use=web, web=http://checkip.dns.he.net/ +{% elif checkip == 'ip4only.me' %} +use=web, web=http://ip4only.me/api/ +{% elif checkip == 'ip6only.me' %} +use=web, web=http://ip6only.me/api/ +{% elif checkip == 'ipify-ipv4' %} +use=web, web=https://api.ipify.org/ +{% elif checkip == 'ipify-ipv6' %} +use=web, web=https://api6.ipify.org/ +{% elif checkip == 'loopia' %} +use=web, web=http://dns.loopia.se/checkip/checkip.php, web-skip="Current IP Address:" +{% elif checkip == 'myonlineportal' %} +use=web, web=https://myonlineportal.net/checkip +{% elif checkip == 'noip-ipv4' %} +use=web, web=http://ip1.dynupdate.no-ip.com/ +{% elif checkip == 'noip-ipv6' %} +use=web, web=http://ip1.dynupdate6.no-ip.com/ +{% elif checkip == 'nsupdate.info-ipv4' %} +use=web, web=https://ipv4.nsupdate.info/myip +{% elif checkip == 'nsupdate.info-ipv6' %} +use=web, web=https://ipv6.nsupdate.info/myip +{% elif checkip == 'zoneedit' %} +use=web, web=http://dynamic.zoneedit.com/checkip.html +{% endif %} +{% endif %} {% if helpers.exists('OPNsense.DynDNS.accounts.account') %} {% for account in helpers.toList('OPNsense.DynDNS.accounts.account') %} {% if account.enabled|default('0') == '1' %} {% if account.service == 'noip' %} - -protocol=noip, \ -use=web, \ -ssl=yes, \ -login={{account.username}}, \ -password={{account.password}} \ -{{account.hostnames}} - +protocol=noip +ssl=yes {% elif account.service == 'nsupdatev4' %} - -protocol=dyndns2, \ -use=web, web=https://ipv4.nsupdate.info/myip, \ -ssl=yes, \ -server=ipv4.nsupdate.info, \ -login={{account.username}}, \ -password='{{account.password}}' \ -{{account.hostnames}} - +protocol=dyndns2 +ssl=yes +server=ipv4.nsupdate.info {% elif account.service == 'nsupdatev6' %} -protocol=dyndns2, \ -use=web, web=https://ipv6.nsupdate.info/myip, \ -ssl=yes, \ -server=ipv6.nsupdate.info, \ -login={{account.username}}, \ -password='{{account.password}}' \ +protocol=dyndns2 +ssl=yes +server=ipv6.nsupdate.info +{% endif %} +login={{account.username}} +password={{account.password}} {{account.hostnames}} -{% endif %} {% endif %} {% endfor %} {% endif %}