The joys of new networking equipment 
I sorted out a tonne of things.
I needed a SNAT rule to allow LAN devices to connect to each other.
It does feel like the ziti-router needs to say that it cannot connect instead of failing silently.
I also found that running ziti edge re-enroll edge-router produces a functional jwt, but using the ZAC and clicking on re-enroll, followed by downloading the jwt does not.
The router says that it is an invalid token if downloaded from the ZAC.
Now, when I bring up the controller, I see this on repeat in the logs:
{"_context":"tls:0.0.0.0:1280","error":"local error: tls: bad record MAC","file":"github.com/openziti/transport/v2@v2.0.214/tls/listener.go:269","func":"github.com/openziti/transport/v2/tls.(*sharedListener).processConn","level":"error","msg":"handshake failed","remote":"10.0.0.53:41668","time":"2026-03-19T20:22:55.358Z"}
Installing the router shows this in the controller logs:
{"_context":"tls:0.0.0.0:1280","error":"local error: tls: bad record MAC","file":"github.com/openziti/transport/v2@v2.0.214/tls/listener.go:269","func":"github.com/openziti/transport/v2/tls.(*sharedListener).processConn","level":"error","msg":"handshake failed","remote":"10.0.0.53:34228","time":"2026-03-19T20:35:00.536Z"}
{"_context":"tls:0.0.0.0:1280","error":"not handler for requested protocols [ziti-ctrl]","file":"github.com/openziti/transport/v2@v2.0.214/tls/listener.go:269","func":"github.com/openziti/transport/v2/tls.(*sharedListener).processConn","level":"error","msg":"handshake failed","remote":"10.0.0.53:34234","time":"2026-03-19T20:35:02.184Z"}
{"_context":"tls:0.0.0.0:1280","error":"not handler for requested protocols [ziti-ctrl]","file":"github.com/openziti/transport/v2@v2.0.214/tls/listener.go:269","func":"github.com/openziti/transport/v2/tls.(*sharedListener).processConn","level":"error","msg":"handshake failed","remote":"10.0.0.53:34248","time":"2026-03-19T20:35:02.263Z"}
{"_context":"tls:0.0.0.0:1280","error":"not handler for requested protocols [ziti-ctrl]","file":"github.com/openziti/transport/v2@v2.0.214/tls/listener.go:269","func":"github.com/openziti/transport/v2/tls.(*sharedListener).processConn","level":"error","msg":"handshake failed","remote":"10.0.0.53:34254","time":"2026-03-19T20:35:02.363Z"}
{"_context":"tls:0.0.0.0:1280","error":"not handler for requested protocols [ziti-ctrl]","file":"github.com/openziti/transport/v2@v2.0.214/tls/listener.go:269","func":"github.com/openziti/transport/v2/tls.(*sharedListener).processConn","level":"error","msg":"handshake failed","remote":"10.0.0.53:34262","time":"2026-03-19T20:35:02.459Z"}
{"_context":"tls:0.0.0.0:1280","error":"not handler for requested protocols [ziti-ctrl]","file":"github.com/openziti/transport/v2@v2.0.214/tls/listener.go:269","func":"github.com/openziti/transport/v2/tls.(*sharedListener).processConn","level":"error","msg":"handshake failed","remote":"10.0.0.53:34266","time":"2026-03-19T20:35:02.582Z"}
{"_context":"tls:0.0.0.0:1280","error":"not handler for requested protocols [ziti-ctrl]","file":"github.com/openziti/transport/v2@v2.0.214/tls/listener.go:269","func":"github.com/openziti/transport/v2/tls.(*sharedListener).processConn","level":"error","msg":"handshake failed","remote":"10.0.0.53:45334","time":"2026-03-19T20:35:02.940Z"}
{"_context":"tls:0.0.0.0:1280","error":"not handler for requested protocols [ziti-ctrl]","file":"github.com/openziti/transport/v2@v2.0.214/tls/listener.go:269","func":"github.com/openziti/transport/v2/tls.(*sharedListener).processConn","level":"error","msg":"handshake failed","remote":"10.0.0.53:45344","time":"2026-03-19T20:35:03.488Z"}
{"_context":"tls:0.0.0.0:1280","error":"not handler for requested protocols [ziti-ctrl]","file":"github.com/openziti/transport/v2@v2.0.214/tls/listener.go:269","func":"github.com/openziti/transport/v2/tls.(*sharedListener).processConn","level":"error","msg":"handshake failed","remote":"10.0.0.53:45358","time":"2026-03-19T20:35:04.269Z"}
{"_context":"tls:0.0.0.0:1280","error":"not handler for requested protocols [ziti-ctrl]","file":"github.com/openziti/transport/v2@v2.0.214/tls/listener.go:269","func":"github.com/openziti/transport/v2/tls.(*sharedListener).processConn","level":"error","msg":"handshake failed","remote":"10.0.0.53:45360","time":"2026-03-19T20:35:04.971Z"}
{"_context":"tls:0.0.0.0:1280","error":"local error: tls: bad record MAC","file":"github.com/openziti/transport/v2@v2.0.214/tls/listener.go:269","func":"github.com/openziti/transport/v2/tls.(*sharedListener).processConn","level":"error","msg":"handshake failed","remote":"10.0.0.53:45370","time":"2026-03-19T20:35:05.980Z"}
{"_context":"tls:0.0.0.0:1280","error":"not handler for requested protocols [ziti-ctrl]","file":"github.com/openziti/transport/v2@v2.0.214/tls/listener.go:269","func":"github.com/openziti/transport/v2/tls.(*sharedListener).processConn","level":"error","msg":"handshake failed","remote":"10.0.0.53:45380","time":"2026-03-19T20:35:06.582Z"}
{"_context":"tls:0.0.0.0:1280","error":"not handler for requested protocols [ziti-ctrl]","file":"github.com/openziti/transport/v2@v2.0.214/tls/listener.go:269","func":"github.com/openziti/transport/v2/tls.(*sharedListener).processConn","level":"error","msg":"handshake failed","remote":"10.0.0.53:45384","time":"2026-03-19T20:35:09.089Z"}
{"_context":"tls:0.0.0.0:1280","error":"local error: tls: bad record MAC","file":"github.com/openziti/transport/v2@v2.0.214/tls/listener.go:269","func":"github.com/openziti/transport/v2/tls.(*sharedListener).processConn","level":"error","msg":"handshake failed","remote":"10.0.0.53:45398","time":"2026-03-19T20:35:11.277Z"}
{"_context":"tls:0.0.0.0:1280","error":"not handler for requested protocols [ziti-ctrl]","file":"github.com/openziti/transport/v2@v2.0.214/tls/listener.go:269","func":"github.com/openziti/transport/v2/tls.(*sharedListener).processConn","level":"error","msg":"handshake failed","remote":"10.0.0.53:45404","time":"2026-03-19T20:35:11.967Z"}
{"_context":"tls:0.0.0.0:1280","error":"local error: tls: bad record MAC","file":"github.com/openziti/transport/v2@v2.0.214/tls/listener.go:269","func":"github.com/openziti/transport/v2/tls.(*sharedListener).processConn","level":"error","msg":"handshake failed","remote":"10.0.0.53:43586","time":"2026-03-19T20:35:16.548Z"}
{"_context":"tls:0.0.0.0:1280","error":"not handler for requested protocols [ziti-ctrl]","file":"github.com/openziti/transport/v2@v2.0.214/tls/listener.go:269","func":"github.com/openziti/transport/v2/tls.(*sharedListener).processConn","level":"error","msg":"handshake failed","remote":"10.0.0.53:43602","time":"2026-03-19T20:35:16.672Z"}
{"_context":"tls:0.0.0.0:1280","error":"local error: tls: bad record MAC","file":"github.com/openziti/transport/v2@v2.0.214/tls/listener.go:269","func":"github.com/openziti/transport/v2/tls.(*sharedListener).processConn","level":"error","msg":"handshake failed","remote":"10.0.0.53:43604","time":"2026-03-19T20:35:21.895Z"}
The router logs show this:
{"ctrlId":"","detail":{"endpoints":[{"address":"tls:ziti-controller.domain.com:443"}]},"file":"github.com/openziti/ziti/v2/router/env/ctrls.go:287","func":"github.com/openziti/ziti/v2/router/env.(*networkControllers).connectToControllerWithBackoff","level":"info","msg":"starting connection attempts","time":"2026-03-19T20:36:13.719Z"}
{"ctrlId":"","detail":{"endpoints":[{"address":"tls:ziti-controller.domain.com:443"}]},"endpoint":"tls:ziti-controller.domain.com:443","error":"error connecting ctrl (remote error: tls: internal error)","file":"github.com/openziti/ziti/v2/router/env/ctrls.go:282","func":"github.com/openziti/ziti/v2/router/env.(*networkControllers).connectToControllerWithBackoff.func1","level":"error","msg":"unable to connect controller","time":"2026-03-19T20:36:13.732Z"}
I can only presume that this is a networking issue, but I am not exactly spotting where the issue lies.