diff --git a/LICENSE b/LICENSE index 21ff04e94..90d5ccd21 100644 --- a/LICENSE +++ b/LICENSE @@ -35,7 +35,7 @@ Copyright (c) 2003-2006 Manuel Kasper Copyright (c) 2012 Marcello Coutinho Copyright (c) 2018 Martin Wasley Copyright (c) 2010-2015 Michael Bostock -Copyright (c) 2019 Michael Muenz +Copyright (c) 2019-2021 Michael Muenz Copyright (c) 2019 Pascal Mathis Copyright (c) 2005-2006 Paul Taylor Copyright (c) 2005-2006 Peter Allgeyer diff --git a/plist b/plist index a108b1309..3984e04aa 100644 --- a/plist +++ b/plist @@ -370,12 +370,13 @@ /usr/local/opnsense/mvc/app/controllers/OPNsense/TrafficShaper/forms/dialogQueue.xml /usr/local/opnsense/mvc/app/controllers/OPNsense/TrafficShaper/forms/dialogRule.xml /usr/local/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/DiagnosticsController.php -/usr/local/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/DnsblController.php -/usr/local/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/MiscellaneousController.php /usr/local/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/ServiceController.php +/usr/local/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/SettingsController.php /usr/local/opnsense/mvc/app/controllers/OPNsense/Unbound/DnsblController.php +/usr/local/opnsense/mvc/app/controllers/OPNsense/Unbound/DotController.php /usr/local/opnsense/mvc/app/controllers/OPNsense/Unbound/MiscellaneousController.php /usr/local/opnsense/mvc/app/controllers/OPNsense/Unbound/StatsController.php +/usr/local/opnsense/mvc/app/controllers/OPNsense/Unbound/forms/dialogDot.xml /usr/local/opnsense/mvc/app/controllers/OPNsense/Unbound/forms/dnsbl.xml /usr/local/opnsense/mvc/app/controllers/OPNsense/Unbound/forms/miscellaneous.xml /usr/local/opnsense/mvc/app/library/Google/API/Drive.php @@ -558,10 +559,8 @@ /usr/local/opnsense/mvc/app/models/OPNsense/TrafficShaper/TrafficShaper.xml /usr/local/opnsense/mvc/app/models/OPNsense/Unbound/ACL/ACL.xml /usr/local/opnsense/mvc/app/models/OPNsense/Unbound/Menu/Menu.xml -/usr/local/opnsense/mvc/app/models/OPNsense/Unboundplus/Dnsbl.php -/usr/local/opnsense/mvc/app/models/OPNsense/Unboundplus/Dnsbl.xml -/usr/local/opnsense/mvc/app/models/OPNsense/Unboundplus/Miscellaneous.php -/usr/local/opnsense/mvc/app/models/OPNsense/Unboundplus/Miscellaneous.xml +/usr/local/opnsense/mvc/app/models/OPNsense/Unbound/Unbound.php +/usr/local/opnsense/mvc/app/models/OPNsense/Unbound/Unbound.xml /usr/local/opnsense/mvc/app/views/OPNsense/CaptivePortal/clients.volt /usr/local/opnsense/mvc/app/views/OPNsense/CaptivePortal/index.volt /usr/local/opnsense/mvc/app/views/OPNsense/CaptivePortal/vouchers.volt @@ -601,6 +600,7 @@ /usr/local/opnsense/mvc/app/views/OPNsense/TrafficShaper/index.volt /usr/local/opnsense/mvc/app/views/OPNsense/TrafficShaper/statistics.volt /usr/local/opnsense/mvc/app/views/OPNsense/Unbound/dnsbl.volt +/usr/local/opnsense/mvc/app/views/OPNsense/Unbound/dot.volt /usr/local/opnsense/mvc/app/views/OPNsense/Unbound/miscellaneous.volt /usr/local/opnsense/mvc/app/views/OPNsense/Unbound/stats.volt /usr/local/opnsense/mvc/app/views/layout_partials/base_dialog.volt diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Diagnostics/LogController.php b/src/opnsense/mvc/app/controllers/OPNsense/Diagnostics/LogController.php index e980961f2..037d7a097 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Diagnostics/LogController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Diagnostics/LogController.php @@ -49,6 +49,9 @@ class LogController extends IndexController case 'ipsec': $this->view->service = 'ipsec'; break; + case 'resolver': + $this->view->service = 'unbound'; + break; case 'suricata': $this->view->service = 'ids'; break; diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/MiscellaneousController.php b/src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/MiscellaneousController.php deleted file mode 100644 index f5571e7a8..000000000 --- a/src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/MiscellaneousController.php +++ /dev/null @@ -1,38 +0,0 @@ - - * Copyright (C) 2020 Deciso B.V. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -namespace OPNsense\Unbound\Api; - -use OPNsense\Base\ApiMutableModelControllerBase; - -class MiscellaneousController extends ApiMutableModelControllerBase -{ - protected static $internalModelClass = '\OPNsense\Unboundplus\Miscellaneous'; - protected static $internalModelName = 'miscellaneous'; -} diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/ServiceController.php b/src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/ServiceController.php index 5ff4ae152..eca989e1c 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/ServiceController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/ServiceController.php @@ -31,12 +31,10 @@ namespace OPNsense\Unbound\Api; use OPNsense\Base\ApiMutableServiceControllerBase; use OPNsense\Core\Backend; -use OPNsense\Unboundplus\Dnsbl; -use OPNsense\Unboundplus\Miscellaneous; class ServiceController extends ApiMutableServiceControllerBase { - protected static $internalServiceClass = '\OPNsense\Unboundplus\Dnsbl'; + protected static $internalServiceClass = '\OPNsense\Unbound\Unbound'; protected static $internalServiceTemplate = 'OPNsense/Unbound/*'; protected static $internalServiceEnabled = 'service_enabled'; protected static $internalServiceName = 'unbound'; diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/DnsblController.php b/src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/SettingsController.php similarity index 61% rename from src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/DnsblController.php rename to src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/SettingsController.php index ee7d88e5e..f1eaf5337 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/DnsblController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/SettingsController.php @@ -31,8 +31,38 @@ namespace OPNsense\Unbound\Api; use OPNsense\Base\ApiMutableModelControllerBase; -class DnsblController extends ApiMutableModelControllerBase +class SettingsController extends ApiMutableModelControllerBase { - protected static $internalModelClass = '\OPNsense\Unboundplus\Dnsbl'; - protected static $internalModelName = 'dnsbl'; + protected static $internalModelClass = '\OPNsense\Unbound\Unbound'; + protected static $internalModelName = 'unbound'; + + public function searchDotAction() + { + return $this->searchBase('dots.dot', array('enabled', 'server', 'port', 'verify')); + } + + public function getDotAction($uuid = null) + { + return $this->getBase('dot', 'dots.dot', $uuid); + } + + public function addDotAction() + { + return $this->addBase('dot', 'dots.dot'); + } + + public function delDotAction($uuid) + { + return $this->delBase('dots.dot', $uuid); + } + + public function setDotAction($uuid) + { + return $this->setBase('dot', 'dots.dot', $uuid); + } + + public function toggleDotAction($uuid, $enabled = null) + { + return $this->toggleBase('dots.dot', $uuid, $enabled); + } } diff --git a/src/opnsense/mvc/app/models/OPNsense/Unboundplus/Miscellaneous.php b/src/opnsense/mvc/app/controllers/OPNsense/Unbound/DotController.php similarity index 79% rename from src/opnsense/mvc/app/models/OPNsense/Unboundplus/Miscellaneous.php rename to src/opnsense/mvc/app/controllers/OPNsense/Unbound/DotController.php index 9cc112378..418564372 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Unboundplus/Miscellaneous.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Unbound/DotController.php @@ -1,7 +1,7 @@ + * Copyright (C) 2021 Michael Muenz * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,10 +26,15 @@ * POSSIBILITY OF SUCH DAMAGE. */ -namespace OPNsense\Unboundplus; +namespace OPNsense\Unbound; -use OPNsense\Base\BaseModel; +use OPNsense\Base\IndexController; -class Miscellaneous extends BaseModel +class DotController extends IndexController { + public function indexAction() + { + $this->view->formDialogEdit = $this->getForm('dialogDot'); + $this->view->pick('OPNsense/Unbound/dot'); + } } diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Unbound/forms/dialogDot.xml b/src/opnsense/mvc/app/controllers/OPNsense/Unbound/forms/dialogDot.xml new file mode 100644 index 000000000..8b5100692 --- /dev/null +++ b/src/opnsense/mvc/app/controllers/OPNsense/Unbound/forms/dialogDot.xml @@ -0,0 +1,26 @@ +
+ + dot.enabled + + checkbox + Enable or disable this server. + + + dot.server + + text + IP address of DNS server to forward all requests. + + + dot.port + + text + Port of DNS server, for usual DNS use 53, if you use DoT set it to 853. + + + dot.verify + + text + Verfiy if CN in certficate matches this value. + +
diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Unbound/forms/dnsbl.xml b/src/opnsense/mvc/app/controllers/OPNsense/Unbound/forms/dnsbl.xml index 8b110d908..45c236a63 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Unbound/forms/dnsbl.xml +++ b/src/opnsense/mvc/app/controllers/OPNsense/Unbound/forms/dnsbl.xml @@ -1,18 +1,18 @@
- dnsbl.enabled + unbound.dnsbl.enabled checkbox Enable the usage of DNS blocklists. - dnsbl.type + unbound.dnsbl.type select_multiple Select which kind of DNSBL you want to use. - dnsbl.lists + unbound.dnsbl.lists select_multiple @@ -21,7 +21,7 @@ List of domains from where blacklist will be downloaded. - dnsbl.whitelists + unbound.dnsbl.whitelists select_multiple diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Unbound/forms/miscellaneous.xml b/src/opnsense/mvc/app/controllers/OPNsense/Unbound/forms/miscellaneous.xml index 899ceb390..e8e968a03 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Unbound/forms/miscellaneous.xml +++ b/src/opnsense/mvc/app/controllers/OPNsense/Unbound/forms/miscellaneous.xml @@ -1,18 +1,10 @@ - miscellaneous.privatedomain + unbound.miscellaneous.privatedomain select_multiple true List of domains to mark as private. You only need this for some DNSBL lists which resolve to private addresses. - - miscellaneous.dotservers - - select_multiple - - true - List of nameservers to use for DoT. Use syntax ip@port like 9.9.9.9@853 - diff --git a/src/opnsense/mvc/app/models/OPNsense/Unbound/Menu/Menu.xml b/src/opnsense/mvc/app/models/OPNsense/Unbound/Menu/Menu.xml index 5644df516..f80337e02 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Unbound/Menu/Menu.xml +++ b/src/opnsense/mvc/app/models/OPNsense/Unbound/Menu/Menu.xml @@ -11,6 +11,7 @@ + diff --git a/src/opnsense/mvc/app/models/OPNsense/Unboundplus/Dnsbl.php b/src/opnsense/mvc/app/models/OPNsense/Unbound/Unbound.php similarity index 91% rename from src/opnsense/mvc/app/models/OPNsense/Unboundplus/Dnsbl.php rename to src/opnsense/mvc/app/models/OPNsense/Unbound/Unbound.php index b8bd973ef..35de26ad9 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Unboundplus/Dnsbl.php +++ b/src/opnsense/mvc/app/models/OPNsense/Unbound/Unbound.php @@ -1,7 +1,7 @@ + * Copyright (C) 2021 Michael Muenz * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,10 +26,10 @@ * POSSIBILITY OF SUCH DAMAGE. */ -namespace OPNsense\Unboundplus; +namespace OPNsense\Unbound; use OPNsense\Base\BaseModel; -class Dnsbl extends BaseModel +class Unbound extends BaseModel { } diff --git a/src/opnsense/mvc/app/models/OPNsense/Unbound/Unbound.xml b/src/opnsense/mvc/app/models/OPNsense/Unbound/Unbound.xml new file mode 100644 index 000000000..8820390c3 --- /dev/null +++ b/src/opnsense/mvc/app/models/OPNsense/Unbound/Unbound.xml @@ -0,0 +1,81 @@ + + //OPNsense/unboundplus + Unbound configuration + 0.0.0 + + + unbound.enable + + + + 0 + Y + + + N + Y + + AdAway List + AdGuard List + Blocklist.site Abuse + Blocklist.site Ads + Blocklist.site Crypto + Blocklist.site Drugs + Blocklist.site Fraud + Blocklist.site Facebook + Blocklist.site Gambling + Blocklist.site Malware + Blocklist.site Phishing + Blocklist.site Piracy + Blocklist.site Porn + Blocklist.site Ransomware + Blocklist.site Redirect + Blocklist.site Scam + Blocklist.site Tiktok + Blocklist.site Torrent + Blocklist.site Tracking + Blocklist.site Youtube + EasyList + EasyPrivacy + NoCoin List + PornTop1M List + Simple Ad List + Simple Tracker List + Steven Black List + WindowsSpyBlocker (spy) + WindowsSpyBlocker (update) + WindowsSpyBlocker (extra) + YoYo List + + + + N + + + N + + + + + + Y + 1 + + + Y + + + Y + + + N + + + + + + N + + + + diff --git a/src/opnsense/mvc/app/models/OPNsense/Unboundplus/Dnsbl.xml b/src/opnsense/mvc/app/models/OPNsense/Unboundplus/Dnsbl.xml deleted file mode 100644 index a508cda2a..000000000 --- a/src/opnsense/mvc/app/models/OPNsense/Unboundplus/Dnsbl.xml +++ /dev/null @@ -1,57 +0,0 @@ - - //OPNsense/unboundplus/dnsbl - Unbound DNSBL configuration - 0.0.1 - - - unbound.enable - - - 0 - Y - - - N - Y - - AdAway List - AdGuard List - Blocklist.site Abuse - Blocklist.site Ads - Blocklist.site Crypto - Blocklist.site Drugs - Blocklist.site Fraud - Blocklist.site Facebook - Blocklist.site Gambling - Blocklist.site Malware - Blocklist.site Phishing - Blocklist.site Piracy - Blocklist.site Porn - Blocklist.site Ransomware - Blocklist.site Redirect - Blocklist.site Scam - Blocklist.site Tiktok - Blocklist.site Torrent - Blocklist.site Tracking - Blocklist.site Youtube - EasyList - EasyPrivacy - NoCoin List - PornTop1M List - Simple Ad List - Simple Tracker List - Steven Black List - WindowsSpyBlocker (spy) - WindowsSpyBlocker (update) - WindowsSpyBlocker (extra) - YoYo List - - - - N - - - N - - - diff --git a/src/opnsense/mvc/app/models/OPNsense/Unboundplus/Miscellaneous.xml b/src/opnsense/mvc/app/models/OPNsense/Unboundplus/Miscellaneous.xml deleted file mode 100644 index 1ae1f590a..000000000 --- a/src/opnsense/mvc/app/models/OPNsense/Unboundplus/Miscellaneous.xml +++ /dev/null @@ -1,14 +0,0 @@ - - //OPNsense/unboundplus/miscellaneous - Unbound Miscellaneous configuration - 0.0.2 - - - N - - - N - /^[a-fA-F0-9\.\,\:\@]{1,512}$/ - - - diff --git a/src/opnsense/mvc/app/views/OPNsense/Unbound/dnsbl.volt b/src/opnsense/mvc/app/views/OPNsense/Unbound/dnsbl.volt index 3c2bf3dbf..4adc9acb8 100644 --- a/src/opnsense/mvc/app/views/OPNsense/Unbound/dnsbl.volt +++ b/src/opnsense/mvc/app/views/OPNsense/Unbound/dnsbl.volt @@ -27,7 +27,7 @@ diff --git a/src/opnsense/mvc/app/views/OPNsense/Unbound/dot.volt b/src/opnsense/mvc/app/views/OPNsense/Unbound/dot.volt new file mode 100644 index 000000000..ef2fb615c --- /dev/null +++ b/src/opnsense/mvc/app/views/OPNsense/Unbound/dot.volt @@ -0,0 +1,139 @@ +{# + # Copyright (c) 2014-2015 Deciso B.V. + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without modification, + # are permitted provided that the following conditions are met: + # + # 1. Redistributions of source code must retain the above copyright notice, + # this list of conditions and the following disclaimer. + # + # 2. Redistributions in binary form must reproduce the above copyright notice, + # this list of conditions and the following disclaimer in the documentation + # and/or other materials provided with the distribution. + # + # THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + # AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + # OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + # POSSIBILITY OF SUCH DAMAGE. + #} + + + + + +
+
+ + + + + + + + + + + + + + + + + + + +
{{ lang._('Enabled') }}{{ lang._('Address') }}{{ lang._('Port') }}{{ lang._('Hostname') }}{{ lang._('Edit') }} | {{ lang._('Delete') }}{{ lang._('ID') }}
+ + +
+
+
+
+ +

+
+
+ +{# include dialog #} +{{ partial("layout_partials/base_dialog",['fields':formDialogEdit,'id':'DialogEdit','label':lang._('Edit server')])}} diff --git a/src/opnsense/mvc/app/views/OPNsense/Unbound/miscellaneous.volt b/src/opnsense/mvc/app/views/OPNsense/Unbound/miscellaneous.volt index 41b09aaa0..7c9c8f1ca 100644 --- a/src/opnsense/mvc/app/views/OPNsense/Unbound/miscellaneous.volt +++ b/src/opnsense/mvc/app/views/OPNsense/Unbound/miscellaneous.volt @@ -27,7 +27,7 @@ diff --git a/src/opnsense/mvc/app/views/OPNsense/Unbound/stats.volt b/src/opnsense/mvc/app/views/OPNsense/Unbound/stats.volt index 5a29b6886..4b8067e17 100644 --- a/src/opnsense/mvc/app/views/OPNsense/Unbound/stats.volt +++ b/src/opnsense/mvc/app/views/OPNsense/Unbound/stats.volt @@ -137,9 +137,9 @@ // initial fetch updateStats(); + + updateServiceControlUI('unbound'); }); - -
diff --git a/src/opnsense/service/conf/actions.d/actions_unbound.conf b/src/opnsense/service/conf/actions.d/actions_unbound.conf index c1d17f7c3..4b5a36e44 100644 --- a/src/opnsense/service/conf/actions.d/actions_unbound.conf +++ b/src/opnsense/service/conf/actions.d/actions_unbound.conf @@ -40,18 +40,26 @@ parameters:%s type:script message:Unbound cache %s -[reload] -command:/usr/local/sbin/unbound-control -c /var/unbound/unbound.conf reload -parameters: -type:script -message:Reloading Unbound - [start] command:/usr/local/bin/flock -n -E 0 -o /tmp/unbound_start.lock /usr/local/opnsense/scripts/unbound/start.sh parameters: type:script message:Starting Unbound +[stop] +command:/usr/local/sbin/unbound-control -c /var/unbound/unbound.conf stop +parameters: +type:script +message:Stopping Unbound + +[restart] +command: + /usr/local/sbin/unbound-control -c /var/unbound/unbound.conf stop && + /usr/local/bin/flock -n -E 0 -o /tmp/unbound_start.lock /usr/local/opnsense/scripts/unbound/start.sh +parameters: +type:script +message:Restarting Unbound + [check] command:/usr/local/opnsense/scripts/unbound/check.sh parameters: diff --git a/src/opnsense/service/templates/OPNsense/Unbound/core/dot.conf b/src/opnsense/service/templates/OPNsense/Unbound/core/dot.conf index f932ae02d..0f27be58d 100644 --- a/src/opnsense/service/templates/OPNsense/Unbound/core/dot.conf +++ b/src/opnsense/service/templates/OPNsense/Unbound/core/dot.conf @@ -1,10 +1,19 @@ -{% if not helpers.empty('OPNsense.unboundplus.miscellaneous.dotservers') %} +{% if not helpers.empty('OPNsense.unboundplus.dots.dot') %} +{% set dots = [] %} +{% for dot in helpers.toList('OPNsense.unboundplus.dots.dot') %} +{% if dot.enabled == '1' %} +{% do dots.append(dot) %} +{% endif %} +{% endfor %} +{% if dots|length > 0 %} server: tls-cert-bundle: /etc/ssl/cert.pem forward-zone: name: "." forward-tls-upstream: yes -{% for dot in OPNsense.unboundplus.miscellaneous.dotservers.split(',') %} - forward-addr: {{ dot }} -{% endfor %} +{% for dot in dots %} + forward-addr: {{ dot.server }}@{{ dot.port }}{% if dot.verify != '' %}{{ dot.verify }}{% endif %} + +{% endfor %} +{% endif %} {% endif %}