# Overlay Networks This guide provides detailed instructions for configuring [ZeroTier VPN](https://zerotier.com) within Clan. Follow the outlined steps to set up a machine as a VPN controller (``) and to include a new machine into the VPN. ## 1. Setting Up the VPN Controller The VPN controller is initially essential for providing configuration to new peers. Once addresses are allocated, the controller's continuous operation is not essential. ### Instructions 1. **Designate a Machine**: Label a machine as the VPN controller in the clan, referred to as `` henceforth in this guide. 1. **Add Configuration**: Input the following configuration to the NixOS configuration of the controller machine: ```nix clan.networking.zerotier.controller = { enable = true; public = true; }; ``` 1. **Update the Controller Machine**: Execute the following: ```bash $ clan machines update ``` Your machine is now operational as the VPN controller. ## 2. Integrating a New Machine to the VPN To introduce a new machine to the VPN, adhere to the following steps: ### Instructions: 1. **Update Configuration**: On the new machine, incorporate the following to its configuration, substituting `` with the controller machine name: ```nix { config, ... }: { clan.networking.zerotier.networkId = builtins.readFile (config.clanCore.clanDir + "/machines//facts/zerotier-network-id"); } ``` 1. **Update the New Machine**: Execute: ```bash $ clan machines update ``` Replace `` with the designated new machine name. 1. **Retrieve the ZeroTier ID**: On the `new_machine`, execute: ```bash $ sudo zerotier-cli info ``` Example Output: ```{.console, .no-copy} 200 info d2c71971db 1.12.1 OFFLINE ``` , where `d2c71971db` is the ZeroTier ID. 1. **Authorize the New Machine on the Controller**: On the controller machine, execute: ```bash $ sudo zerotier-members allow ``` Substitute `` with the ZeroTier ID obtained previously. 1. **Verify Connection**: On the `new_machine`, re-execute: ```bash $ sudo zerotier-cli info ``` The status should now be "ONLINE": ```{.console, .no-copy} 200 info d2c71971db 1.12.1 ONLINE ``` !!! success "Congratulations!" The new machine is now part of the VPN, and the ZeroTier configuration on NixOS within the Clan project is complete. ## Decision We chose zerotier because in our tests it was the easiest solution to bootstrap. You can selfhost a controller and the controller doesn't need to be globally reachable. In the future we plan to add additional network technologies like tinc, head/tailscale, yggdrassil and mycelium. ## Specification By default all machines within one clan are connected via the chosen network technology. ``` Clan Node A <-> (zerotier / mycelium / ...) Node B ``` If you select multiple network technologies at the same time. e.g. (zerotier + yggdrassil) One of them is the primary network and the above statement holds for the primary network.