This commit is contained in:
DivineHawk 2026-03-31 11:25:24 +00:00 committed by GitHub
commit 29b8531bc6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 90 additions and 2 deletions

View file

@ -105,6 +105,10 @@ class NetworkController extends ApiMutableModelControllerBase
$mdlZerotier->serializeToConfig();
Config::getInstance()->save();
$result["result"] = "saved";
$this->setZerotierNetwork($network->networkId, 'allowManaged', $network->allowManaged);
$this->setZerotierNetwork($network->networkId, 'allowGlobal', $network->allowGlobal);
$this->setZerotierNetwork($network->networkId, 'allowDefault', $network->allowDefault);
$this->setZerotierNetwork($network->networkId, 'allowDNS', $network->allowDNS);
}
}
}
@ -192,8 +196,10 @@ class NetworkController extends ApiMutableModelControllerBase
private function toggleZerotierNetwork($networkId, $enabled)
{
$backend = new Backend();
$backend->configdRun("template reload OPNsense/zerotier");
$action = $enabled ? 'join' : 'leave';
return trim((new Backend())->configdRun("zerotier $action $networkId"));
return trim($backend->configdpRun("zerotier", [$action, $networkId]));
}
private function listZerotierNetwork($networkId)
@ -207,4 +213,9 @@ class NetworkController extends ApiMutableModelControllerBase
}
return gettext("Unable to obtain Zerotier information for network") . " " . $networkId . "! " . gettext("Is the network enabled?");
}
private function setZerotierNetwork($networkId, $setting, $value)
{
return trim((new Backend())->configdpRun("zerotier", ["set", $networkId, $setting, $value]));
}
}

View file

@ -11,4 +11,48 @@
<type>text</type>
<help>Local Description to help identify this network</help>
</field>
<field>
<id>network.allowManaged</id>
<label>Allow Managed</label>
<type>checkbox</type>
<help>Allow ZeroTier to set IP Addresses and Routes (local/private ranges only)</help>
<grid_view>
<visible>false</visible>
<type>boolean</type>
<formatter>boolean</formatter>
</grid_view>
</field>
<field>
<id>network.allowGlobal</id>
<label>Allow Global</label>
<type>checkbox</type>
<help>Allow ZeroTier to set Global/Public/Not-Private range IPs and Routes</help>
<grid_view>
<visible>false</visible>
<type>boolean</type>
<formatter>boolean</formatter>
</grid_view>
</field>
<field>
<id>network.allowDefault</id>
<label>Allow Default</label>
<type>checkbox</type>
<help>Allow ZeroTier to set the Default Route on the system</help>
<grid_view>
<visible>false</visible>
<type>boolean</type>
<formatter>boolean</formatter>
</grid_view>
</field>
<field>
<id>network.allowDNS</id>
<label>Allow DNS</label>
<type>checkbox</type>
<help>Allow ZeroTier to set DNS servers</help>
<grid_view>
<visible>false</visible>
<type>boolean</type>
<formatter>boolean</formatter>
</grid_view>
</field>
</form>

View file

@ -1,7 +1,7 @@
<model>
<mount>//OPNsense/zerotier</mount>
<description>Zerotier configuration</description>
<version>1.3.0</version>
<version>1.3.1</version>
<items>
<enabled type="BooleanField">
<Default>0</Default>
@ -19,6 +19,22 @@
<Required>Y</Required>
</networkId>
<description type="TextField"/>
<allowManaged type="BooleanField">
<Default>1</Default>
<Required>Y</Required>
</allowManaged>
<allowGlobal type="BooleanField">
<Default>0</Default>
<Required>Y</Required>
</allowGlobal>
<allowDefault type="BooleanField">
<Default>0</Default>
<Required>Y</Required>
</allowDefault>
<allowDNS type="BooleanField">
<Default>0</Default>
<Required>Y</Required>
</allowDNS>
</network>
</networks>
</items>

View file

@ -34,6 +34,12 @@ parameters: leave %s
type:script_output
message:Leaving Zerotier Network
[set]
command:/usr/local/bin/zerotier-cli
parameters: set %s %s=%s
type:script_output
message:Setting Zerotier Network
[info]
command:/usr/local/bin/zerotier-cli info
parameters:

View file

@ -1,2 +1,3 @@
zerotier:/etc/rc.conf.d/zerotier
local.conf:/var/db/zerotier-one/local.conf
networks-local.conf:/var/db/zerotier-one/networks.d/[OPNsense.zerotier.networks.network.%.networkId].local.conf

View file

@ -0,0 +1,10 @@
{% if helpers.exists('OPNsense.zerotier.networks') %}
{% for network in helpers.toList('OPNsense.zerotier.networks.network') %}
{% if TARGET_FILTERS['OPNsense.zerotier.networks.network.' ~ loop.index0] or TARGET_FILTERS['OPNsense.zerotier.networks.network'] %}
allowManaged={{ network.allowManaged }}
allowGlobal={{ network.allowGlobal }}
allowDefault={{ network.allowDefault }}
allowDNS={{ network.allowDNS }}
{% endif %}
{% endfor %}
{% endif %}