diff --git a/net/ndp-proxy-go/Makefile b/net/ndp-proxy-go/Makefile index 0feb84ad1..76068232f 100644 --- a/net/ndp-proxy-go/Makefile +++ b/net/ndp-proxy-go/Makefile @@ -1,5 +1,5 @@ PLUGIN_NAME= ndp-proxy-go -PLUGIN_VERSION= 1.1 +PLUGIN_VERSION= 1.2 PLUGIN_COMMENT= IPv6 Neighbor Discovery Protocol (NDP) Proxy PLUGIN_MAINTAINER= cedrik@pischem.com PLUGIN_DEPENDS= ndp-proxy-go diff --git a/net/ndp-proxy-go/pkg-descr b/net/ndp-proxy-go/pkg-descr index 3df98f3a3..9bd61a764 100644 --- a/net/ndp-proxy-go/pkg-descr +++ b/net/ndp-proxy-go/pkg-descr @@ -6,6 +6,10 @@ DOC: https://docs.opnsense.org/manual/ndp-proxy-go.html Plugin Changelog ================ +1.2 + +* Add firewall alias support + 1.1 * Add experimental point-to-point device upstream support (e.g. PPPoE) diff --git a/net/ndp-proxy-go/src/opnsense/mvc/app/controllers/OPNsense/NdpProxy/Api/GeneralController.php b/net/ndp-proxy-go/src/opnsense/mvc/app/controllers/OPNsense/NdpProxy/Api/GeneralController.php index 34d1fb3fe..f932bb2fb 100644 --- a/net/ndp-proxy-go/src/opnsense/mvc/app/controllers/OPNsense/NdpProxy/Api/GeneralController.php +++ b/net/ndp-proxy-go/src/opnsense/mvc/app/controllers/OPNsense/NdpProxy/Api/GeneralController.php @@ -37,4 +37,30 @@ class GeneralController extends ApiMutableModelControllerBase { protected static $internalModelName = 'ndpproxy'; protected static $internalModelClass = 'OPNsense\NdpProxy\NdpProxy'; + + public function searchAliasAction() + { + return $this->searchBase('aliases.alias'); + } + + public function setAliasAction($uuid) + { + return $this->setBase('alias', 'aliases.alias', $uuid); + } + + public function addAliasAction() + { + return $this->addBase('alias', 'aliases.alias'); + } + + public function getAliasAction($uuid = null) + { + return $this->getBase('alias', 'aliases.alias', $uuid); + } + + public function delAliasAction($uuid) + { + return $this->delBase('aliases.alias', $uuid); + } + } diff --git a/net/ndp-proxy-go/src/opnsense/mvc/app/controllers/OPNsense/NdpProxy/GeneralController.php b/net/ndp-proxy-go/src/opnsense/mvc/app/controllers/OPNsense/NdpProxy/GeneralController.php index cb1038617..5ce88c373 100644 --- a/net/ndp-proxy-go/src/opnsense/mvc/app/controllers/OPNsense/NdpProxy/GeneralController.php +++ b/net/ndp-proxy-go/src/opnsense/mvc/app/controllers/OPNsense/NdpProxy/GeneralController.php @@ -37,6 +37,9 @@ class GeneralController extends IndexController public function indexAction() { $this->view->pick('OPNsense/NdpProxy/general'); - $this->view->generalForm = $this->getForm("general"); + $this->view->generalForm = $this->getForm('general'); + + $this->view->formDialogAlias = $this->getForm('dialogAlias'); + $this->view->formGridAlias = $this->getFormGrid('dialogAlias'); } } diff --git a/net/ndp-proxy-go/src/opnsense/mvc/app/controllers/OPNsense/NdpProxy/forms/dialogAlias.xml b/net/ndp-proxy-go/src/opnsense/mvc/app/controllers/OPNsense/NdpProxy/forms/dialogAlias.xml new file mode 100644 index 000000000..455afc62f --- /dev/null +++ b/net/ndp-proxy-go/src/opnsense/mvc/app/controllers/OPNsense/NdpProxy/forms/dialogAlias.xml @@ -0,0 +1,22 @@ +
+ + alias.interface + + dropdown + Add IPv6 addresses to the firewall alias that belong to this proxied interface. When choosing any, all IPv6 addresses will be added. + + any + + + + alias.alias + + dropdown + Choose an "external (advanced)" type alias from "Firewall - Aliases". Whenever a client is discovered, the IPv6 address will be automatically added to the chosen alias. When the neighbor cache lifetime expires, the IPv6 address will be removed from the alias. + + + alias.description + + text + +
diff --git a/net/ndp-proxy-go/src/opnsense/mvc/app/models/OPNsense/NdpProxy/NdpProxy.xml b/net/ndp-proxy-go/src/opnsense/mvc/app/models/OPNsense/NdpProxy/NdpProxy.xml index c9239abfc..4298f1d53 100644 --- a/net/ndp-proxy-go/src/opnsense/mvc/app/models/OPNsense/NdpProxy/NdpProxy.xml +++ b/net/ndp-proxy-go/src/opnsense/mvc/app/models/OPNsense/NdpProxy/NdpProxy.xml @@ -37,5 +37,27 @@ Y + + + + any + + + + + OPNsense.Firewall.Alias + aliases.alias + name + + /^[Ee]xternal.*/ + /^(?!bogons$|bogonsv6$|virusprot$|sshlockout$|__.*).*/ + + + + Y + + + + diff --git a/net/ndp-proxy-go/src/opnsense/mvc/app/views/OPNsense/NdpProxy/general.volt b/net/ndp-proxy-go/src/opnsense/mvc/app/views/OPNsense/NdpProxy/general.volt index 821abbedb..4c36c5e87 100644 --- a/net/ndp-proxy-go/src/opnsense/mvc/app/views/OPNsense/NdpProxy/general.volt +++ b/net/ndp-proxy-go/src/opnsense/mvc/app/views/OPNsense/NdpProxy/general.volt @@ -39,10 +39,41 @@ }, }); + $("#{{formGridAlias['table_id']}}").UIBootgrid({ + search:'/api/ndpproxy/general/search_alias/', + get:'/api/ndpproxy/general/get_alias/', + set:'/api/ndpproxy/general/set_alias/', + add:'/api/ndpproxy/general/add_alias/', + del:'/api/ndpproxy/general/del_alias/', + options: { + formatters:{ + any: function(column, row) { + if (row[column.id] !== '') { + return row[`%${column.id}`] || row[column.id]; + } else { + return '{{ lang._('any') }}'; + } + }, + }, + }, + }); + }); -
- {{ partial("layout_partials/base_form", ['fields': generalForm, 'id': 'frm_GeneralSettings']) }} + + +
+
+ {{ partial('layout_partials/base_form', ['fields': generalForm, 'id': 'frm_GeneralSettings']) }} +
+
+ {{ partial('layout_partials/base_bootgrid_table', formGridAlias)}} +
+ {{ partial('layout_partials/base_apply_button', {'data_endpoint': '/api/ndpproxy/service/reconfigure', 'data_service_widget': 'ndpproxy'}) }} +{{ partial('layout_partials/base_dialog',['fields':formDialogAlias,'id':formGridAlias['edit_dialog_id'],'label':lang._('Edit Alias')])}} diff --git a/net/ndp-proxy-go/src/opnsense/service/templates/OPNsense/NdpProxy/ndp_proxy_go b/net/ndp-proxy-go/src/opnsense/service/templates/OPNsense/NdpProxy/ndp_proxy_go index c75534e6a..884649915 100644 --- a/net/ndp-proxy-go/src/opnsense/service/templates/OPNsense/NdpProxy/ndp_proxy_go +++ b/net/ndp-proxy-go/src/opnsense/service/templates/OPNsense/NdpProxy/ndp_proxy_go @@ -30,6 +30,14 @@ ndp_proxy_go_downstream="{{ downstream_interfaces|join(' ') }}" {% if general.pcap_timeout %} {% do flags.append('--pcap-timeout ' ~ general.pcap_timeout ~ 'ms') %} {% endif %} +{% for alias in helpers.toList('OPNsense.ndpproxy.aliases.alias') %} +{% set iface = alias.interface|default('') %} +{% if iface == '' %} +{% do flags.append('--pf=:' ~ helpers.getUUID(alias.alias).name) %} +{% else %} +{% do flags.append('--pf=' ~ helpers.physical_interface(iface) ~ ':' ~ helpers.getUUID(alias.alias).name) %} +{% endif %} +{% endfor %} {% if flags|length > 0 %} ndp_proxy_go_flags="{{ flags|join(' ') }}" {% endif %}