From 3758144f7e903baab0cb5c0c4c8320ffa325990b Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 18 Dec 2018 14:32:45 +0100 Subject: [PATCH] dns/dnscryptproxy: add manual server selection (#1077) --- dns/dnscrypt-proxy/Makefile | 3 +- .../Dnscryptproxy/Api/ServerController.php | 65 +++++++++++++++++++ .../Dnscryptproxy/GeneralController.php | 1 + .../forms/dialogEditDnscryptproxyServer.xml | 20 ++++++ .../OPNsense/Dnscryptproxy/forms/general.xml | 8 +++ .../models/OPNsense/Dnscryptproxy/General.xml | 3 + .../models/OPNsense/Dnscryptproxy/Server.php | 31 +++++++++ .../models/OPNsense/Dnscryptproxy/Server.xml | 21 ++++++ .../views/OPNsense/Dnscryptproxy/general.volt | 50 ++++++++++++++ .../Dnscryptproxy/dnscrypt-proxy.toml | 16 ++++- 10 files changed, 215 insertions(+), 3 deletions(-) create mode 100644 dns/dnscrypt-proxy/src/opnsense/mvc/app/controllers/OPNsense/Dnscryptproxy/Api/ServerController.php create mode 100644 dns/dnscrypt-proxy/src/opnsense/mvc/app/controllers/OPNsense/Dnscryptproxy/forms/dialogEditDnscryptproxyServer.xml create mode 100644 dns/dnscrypt-proxy/src/opnsense/mvc/app/models/OPNsense/Dnscryptproxy/Server.php create mode 100644 dns/dnscrypt-proxy/src/opnsense/mvc/app/models/OPNsense/Dnscryptproxy/Server.xml diff --git a/dns/dnscrypt-proxy/Makefile b/dns/dnscrypt-proxy/Makefile index d016001ec..228c89630 100644 --- a/dns/dnscrypt-proxy/Makefile +++ b/dns/dnscrypt-proxy/Makefile @@ -1,6 +1,5 @@ PLUGIN_NAME= dnscrypt-proxy -PLUGIN_VERSION= 1.0 -PLUGINS_REVISION= 1 +PLUGIN_VERSION= 1.1 PLUGIN_COMMENT= Flexible DNS proxy supporting DNSCrypt and DoH PLUGIN_DEPENDS= dnscrypt-proxy2 PLUGIN_MAINTAINER= m.muenz@gmail.com diff --git a/dns/dnscrypt-proxy/src/opnsense/mvc/app/controllers/OPNsense/Dnscryptproxy/Api/ServerController.php b/dns/dnscrypt-proxy/src/opnsense/mvc/app/controllers/OPNsense/Dnscryptproxy/Api/ServerController.php new file mode 100644 index 000000000..a516a0f03 --- /dev/null +++ b/dns/dnscrypt-proxy/src/opnsense/mvc/app/controllers/OPNsense/Dnscryptproxy/Api/ServerController.php @@ -0,0 +1,65 @@ + + * + * 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\Dnscryptproxy\Api; + +use \OPNsense\Base\ApiMutableModelControllerBase; +use \OPNsense\Core\Backend; + +class ServerController extends ApiMutableModelControllerBase +{ + static protected $internalModelName = 'server'; + static protected $internalModelClass = '\OPNsense\Dnscryptproxy\Server'; + + public function searchServerAction() + { + return $this->searchBase('servers.server', array("enabled", "name", "stamp")); + } + public function getServerAction($uuid = null) + { + $this->sessionClose(); + return $this->getBase('server', 'servers.server', $uuid); + } + public function addServerAction() + { + return $this->addBase('server', 'servers.server'); + } + public function delServerAction($uuid) + { + return $this->delBase('servers.server', $uuid); + } + public function setServerAction($uuid) + { + return $this->setBase('server', 'servers.server', $uuid); + } + public function toggleServerAction($uuid) + { + return $this->toggleBase('servers.server', $uuid); + } +} diff --git a/dns/dnscrypt-proxy/src/opnsense/mvc/app/controllers/OPNsense/Dnscryptproxy/GeneralController.php b/dns/dnscrypt-proxy/src/opnsense/mvc/app/controllers/OPNsense/Dnscryptproxy/GeneralController.php index e887e0263..79a9d021e 100644 --- a/dns/dnscrypt-proxy/src/opnsense/mvc/app/controllers/OPNsense/Dnscryptproxy/GeneralController.php +++ b/dns/dnscrypt-proxy/src/opnsense/mvc/app/controllers/OPNsense/Dnscryptproxy/GeneralController.php @@ -36,6 +36,7 @@ class GeneralController extends \OPNsense\Base\IndexController $this->view->formDialogEditDnscryptproxyForward = $this->getForm("dialogEditDnscryptproxyForward"); $this->view->formDialogEditDnscryptproxyCloak = $this->getForm("dialogEditDnscryptproxyCloak"); $this->view->formDialogEditDnscryptproxyWhitelist = $this->getForm("dialogEditDnscryptproxyWhitelist"); + $this->view->formDialogEditDnscryptproxyServer = $this->getForm("dialogEditDnscryptproxyServer"); $this->view->pick('OPNsense/Dnscryptproxy/general'); } } diff --git a/dns/dnscrypt-proxy/src/opnsense/mvc/app/controllers/OPNsense/Dnscryptproxy/forms/dialogEditDnscryptproxyServer.xml b/dns/dnscrypt-proxy/src/opnsense/mvc/app/controllers/OPNsense/Dnscryptproxy/forms/dialogEditDnscryptproxyServer.xml new file mode 100644 index 000000000..b0a38cb77 --- /dev/null +++ b/dns/dnscrypt-proxy/src/opnsense/mvc/app/controllers/OPNsense/Dnscryptproxy/forms/dialogEditDnscryptproxyServer.xml @@ -0,0 +1,20 @@ +
+ + server.enabled + + checkbox + This will enable or disable the server stamp. + + + server.name + + text + Set the name of the stamp. + + + server.stamp + + text + Set the SDNS stamp without sdns:// prefix. + +
diff --git a/dns/dnscrypt-proxy/src/opnsense/mvc/app/controllers/OPNsense/Dnscryptproxy/forms/general.xml b/dns/dnscrypt-proxy/src/opnsense/mvc/app/controllers/OPNsense/Dnscryptproxy/forms/general.xml index 6ad1b353e..cda8bf070 100644 --- a/dns/dnscrypt-proxy/src/opnsense/mvc/app/controllers/OPNsense/Dnscryptproxy/forms/general.xml +++ b/dns/dnscrypt-proxy/src/opnsense/mvc/app/controllers/OPNsense/Dnscryptproxy/forms/general.xml @@ -157,4 +157,12 @@ text Maximum TTL for negatively cached entries. + + general.serverlist + + select_multiple + + true + known servers e.g. if you want to stick with Cisco only. You can also put your manually added servers here. Please use on your own risk.]]> + diff --git a/dns/dnscrypt-proxy/src/opnsense/mvc/app/models/OPNsense/Dnscryptproxy/General.xml b/dns/dnscrypt-proxy/src/opnsense/mvc/app/models/OPNsense/Dnscryptproxy/General.xml index f45478a3f..806459a5b 100644 --- a/dns/dnscrypt-proxy/src/opnsense/mvc/app/models/OPNsense/Dnscryptproxy/General.xml +++ b/dns/dnscrypt-proxy/src/opnsense/mvc/app/models/OPNsense/Dnscryptproxy/General.xml @@ -133,5 +133,8 @@ 86400 Choose a number between 1 and 86400. + + N + diff --git a/dns/dnscrypt-proxy/src/opnsense/mvc/app/models/OPNsense/Dnscryptproxy/Server.php b/dns/dnscrypt-proxy/src/opnsense/mvc/app/models/OPNsense/Dnscryptproxy/Server.php new file mode 100644 index 000000000..d04f50a60 --- /dev/null +++ b/dns/dnscrypt-proxy/src/opnsense/mvc/app/models/OPNsense/Dnscryptproxy/Server.php @@ -0,0 +1,31 @@ + + 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\Dnscryptproxy; + +use OPNsense\Base\BaseModel; + +class Server extends BaseModel +{ +} diff --git a/dns/dnscrypt-proxy/src/opnsense/mvc/app/models/OPNsense/Dnscryptproxy/Server.xml b/dns/dnscrypt-proxy/src/opnsense/mvc/app/models/OPNsense/Dnscryptproxy/Server.xml new file mode 100644 index 000000000..873cfaf6e --- /dev/null +++ b/dns/dnscrypt-proxy/src/opnsense/mvc/app/models/OPNsense/Dnscryptproxy/Server.xml @@ -0,0 +1,21 @@ + + //OPNsense/dnscryptproxy/server + dnscrypt-proxy Server configuration + 1.0.0 + + + + + 1 + Y + + + Y + + + Y + + + + + diff --git a/dns/dnscrypt-proxy/src/opnsense/mvc/app/views/OPNsense/Dnscryptproxy/general.volt b/dns/dnscrypt-proxy/src/opnsense/mvc/app/views/OPNsense/Dnscryptproxy/general.volt index 6bdf106e8..8cd4ac2fb 100644 --- a/dns/dnscrypt-proxy/src/opnsense/mvc/app/views/OPNsense/Dnscryptproxy/general.volt +++ b/dns/dnscrypt-proxy/src/opnsense/mvc/app/views/OPNsense/Dnscryptproxy/general.volt @@ -33,6 +33,7 @@ POSSIBILITY OF SUCH DAMAGE.
  • {{ lang._('Forwarders') }}
  • {{ lang._('Overrides') }}
  • {{ lang._('Whitelists') }}
  • +
  • {{ lang._('Servers') }}
  • @@ -128,11 +129,40 @@ POSSIBILITY OF SUCH DAMAGE.

    +
    + + + + + + + + + + + + + + + + + + +
    {{ lang._('Enabled') }}{{ lang._('Name') }}{{ lang._('SDNS Stamp') }}{{ lang._('ID') }}{{ lang._('Commands') }}
    + +
    +
    +
    + +

    +
    +
    {{ partial("layout_partials/base_dialog",['fields':formDialogEditDnscryptproxyForward,'id':'dialogEditDnscryptproxyForward','label':lang._('Edit Forwarders')])}} {{ partial("layout_partials/base_dialog",['fields':formDialogEditDnscryptproxyCloak,'id':'dialogEditDnscryptproxyCloak','label':lang._('Edit Overrides')])}} {{ partial("layout_partials/base_dialog",['fields':formDialogEditDnscryptproxyWhitelist,'id':'dialogEditDnscryptproxyWhitelist','label':lang._('Edit Whitelists')])}} +{{ partial("layout_partials/base_dialog",['fields':formDialogEditDnscryptproxyServer,'id':'dialogEditDnscryptproxyServer','label':lang._('Edit Servers')])}} diff --git a/dns/dnscrypt-proxy/src/opnsense/service/templates/OPNsense/Dnscryptproxy/dnscrypt-proxy.toml b/dns/dnscrypt-proxy/src/opnsense/service/templates/OPNsense/Dnscryptproxy/dnscrypt-proxy.toml index 75864165a..be120de7a 100644 --- a/dns/dnscrypt-proxy/src/opnsense/service/templates/OPNsense/Dnscryptproxy/dnscrypt-proxy.toml +++ b/dns/dnscrypt-proxy/src/opnsense/service/templates/OPNsense/Dnscryptproxy/dnscrypt-proxy.toml @@ -1,5 +1,9 @@ {% if helpers.exists('OPNsense.dnscryptproxy.general.enabled') and OPNsense.dnscryptproxy.general.enabled == '1' %} +{% if helpers.exists('OPNsense.dnscryptproxy.general.serverlist') and OPNsense.dnscryptproxy.general.serverlist != '' %} +server_names = [{{ "'" + ("','".join(OPNsense.dnscryptproxy.general.serverlist.split(','))) + "'" }}] +{% endif %} + {% if helpers.exists('OPNsense.dnscryptproxy.general.listen_addresses') and OPNsense.dnscryptproxy.general.listen_addresses != '' %} listen_addresses = [{{ "'" + ("','".join(OPNsense.dnscryptproxy.general.listen_addresses.split(','))) + "'" }}] {% else %} @@ -103,7 +107,7 @@ block_ipv6 = false forwarding_rules = 'forwarding-rules.txt' cloaking_rules = 'cloaking-rules.txt' -{% if helpers.exists('OPNsense.dnscryptproxy.cache') and OPNsense.dnscryptproxy.cache == '1' %} +{% if helpers.exists('OPNsense.dnscryptproxy.general.cache') and OPNsense.dnscryptproxy.general.cache == '1' %} cache = true cache_size = {{ OPNsense.dnscryptproxy.general.cache_size }} cache_min_ttl = {{ OPNsense.dnscryptproxy.general.cache_min_ttl }} @@ -135,4 +139,14 @@ cache = false refresh_delay = 72 prefix = '' +[static] +{% if helpers.exists('OPNsense.dnscryptproxy.server.servers.server') %} +{% for server_list in helpers.toList('OPNsense.dnscryptproxy.server.servers.server') %} +{% if server_list.enabled == '1' %} + [static.'{{server_list.name}}'] + stamp = 'sdns://{{server_list.stamp}}' +{% endif %} +{% endfor %} +{% endif %} + {% endif %}