Configuration-wise, the simplest one is SSTP but it needs certificates (or at least it is quite insecure not to use them). L2TP/IPsec is equally easy to set up as SSTP if you are happy with the defaults for encryption and authentication. Bare IPsec is powerful but by far the most complicated to grasp the concept (rather than just configure, once you get the concept, the configuration is not that complicated per se).
So why not Wireguard.
You have three keys: the private one, the public one (each peer has an own pair of these) and optionally the pre-shared one which is common for both peers; unlike IPsec, the pre-shared key is used together with the private/public pairs, not instead of them.
Each peer signs the authentication messages using its private key; anyone who has got (offline) the matching public key can verify the identity of the sender of these messages by verifying the signature using the public key.
So when adding a Wireguard interface, you do not specify either of the keys, the system generates the private key automatically, and computes also the matching public one. When configuring a peer, you set the public key value to the one of the remote “interface”. So for the CHR and Starlink-1, the configuration will look as follows:
CHR:
/interface/wireguard/add name=wg1
/interface/wireguard/print
Ctrl-C the value of public-key
Starlink-1:
/interface/wireguard/add name=wg1
/interface/wireguard/peers/add interface=wg1 public-key= endpoint-address=ip.of.the.chr endpoint-port=13231 allowed-address=0.0.0.0/0 persistent-keepalive=30s
/interface/wireguard/print
Ctrl-C the value of public-key
CHR:
/interface/wireguard/peer add interface=wg1 public-key= is-responder=yes allowed-address=lan.subnet.of.starlink-1/mask-length
After this, the Wireguard connection should go up. Next, you must set up the routing - on the CHR, you add a route dst-address=lan.subnet.of.starlink-1 gateway=wg1; on the Starlink-1 router, you add routes to all the other LAN subnets as well as the range of road warrior addresses via wg1.
On the Starlink-X to which the PBX is connected, you will need to use policy routing:
/routing/table/add via-wg fib
/ip/route/add gateway=wg routing-table=via-wg
/routing/rule/add src-address=ip.of.the.pbx action=lookup-only-in-table table=main min-prefix=0
/routing/rule/add src-address=ip.of.the.pbx action=lookup-only-in-table table=via-wg
The purpose is that the PBX would use the default route via the Wireguard tunnel but still could talk to local destinations.