@@ -94,6 +94,7 @@ when running HA. Legacy API and service session are now deprecated and will be r
9494* Dial failures now return the circuit ID and error information for easier debugging
9595* Router-to-controller control channels now support multiple underlays with priority-based message routing
9696* The dialing identity's ID and name are now forwarded to the hosting SDK
97+ * Controllers can now dial routers to establish control channels, enabling connectivity when routers are behind firewalls (Beta)
9798
9899## Basic Permission System (BETA)
99100
@@ -745,6 +746,66 @@ established. This allows hosting applications to identify which identity initiat
745746enabling identity-aware request handling on the server side. This will require SDK updates to add this
746747to the API for hosting applications.
747748
749+ # # Controller-Initiated Control Channel Dials (BETA)
750+
751+ Controllers can now dial routers to establish control channels. Previously, routers were solely
752+ responsible for dialing controllers. This is useful in deployments where controllers are behind
753+ firewalls and cannot be reached by all routers, but the controllers can reach the routers.
754+
755+ # ## Router Configuration
756+
757+ Routers can configure one or more control channel listeners. Each listener specifies a bind address,
758+ an advertise address (reported to the controller), and optional groups for matching.
759+
760+ ` ` ` yaml
761+ ctrl:
762+ listeners:
763+ - bind: tls://0.0.0.0:6262
764+ advertise: tls://router.example.com:6262
765+ groups:
766+ - default
767+ ` ` `
768+
769+ The advertise address is stored in the router's `ctrlChanListeners` model field and reported to
770+ the controller. Groups default to `["default"]` if not specified.
771+
772+ Routers will also report their configured `ctrlChanListeners` to the controller when they connect,
773+ and the controller data model will be updated automatically.
774+
775+ The `ctrlChanListeners` field can also be set via the CLI :
776+
777+ ` ` ` bash
778+ ziti edge update edge-router myRouter --ctrl-chan-listener 'tls://router.example.com:6262=group1,group2'
779+ ` ` `
780+
781+ # ## Controller Configuration
782+
783+ The controller dialer is disabled by default and must be explicitly enabled. When enabled, the
784+ controller will dial routers that have control channel listeners configured and are not already
785+ connected.
786+
787+ ` ` ` yaml
788+ ctrl:
789+ dialer:
790+ enabled: true
791+ groups:
792+ - default
793+ dialDelay: 30s
794+ ` ` `
795+
796+ - `enabled` - Enables the controller dialer (default : ` false` )
797+ - `groups` - List of groups to match against router listener groups (default : ` ["default"]` )
798+ - `dialDelay` - Delay before the controller attempts to dial a disconnected router (default : ` 30s` )
799+
800+ The controller will only dial routers whose listener groups overlap with the controller's configured
801+ groups.
802+
803+ # # Current Beta Features
804+
805+ * Basic Permission System
806+ * Alert Events
807+ * Controller-Initiated Control Channel Dials
808+
748809# # Component Updates and Bug Fixes
749810
750811* github.com/openziti/channel/v4: [v4.2.41 -> v4.3.5](https://github.com/openziti/channel/compare/v4.2.41...v4.3.5)
0 commit comments