Skip to content

Instantly share code, notes, and snippets.

@andysmithfal
Last active January 21, 2022 23:16
Show Gist options
  • Save andysmithfal/99e5b628577d28a69e33366855d393ff to your computer and use it in GitHub Desktop.
Save andysmithfal/99e5b628577d28a69e33366855d393ff to your computer and use it in GitHub Desktop.
Configuring a ZeroTier Network Gateway on an Ubuntu VM

Configuring a ZeroTier Network Gateway on an Ubuntu VM

We will set up an Ubuntu VM that will act as a gateway to an existing network. Clients will be assigned IP addresses within the existing network subnet by ZeroTier, and traffic will be routable to hosts within the network. You need to ensure you have a block of IP addresses available outside of the current DHCP pool, but within the subnet to assign to VPN clients.

This guide is based on ZeroTier's guide for Raspbian.

We will be using the following - make notes of the following for your own network:

Parameter Value
Existing network 192.168.1.0/24
ZeroTier VM 192.168.1.3
Existing DHCP pool 192.168.1.20-220
New ZeroTier client pool 192.168.1.221-240
DNS servers 192.168.1.1
Gateway 192.168.1.1

Create new ZeroTier network at my.zerotier.com. Now change the following:

  • Delete all managed routes.
  • Set IPv4 auto assign to advanced
  • Delete the existing pool
  • Set the new DHCP pool (221-240).
  • Add a route for the network. Subnet mask should be one wider than the current network, for instance if current network is /24, use /23. (this means if you're physically connected to the network with ZT active, your OS will prefer the more specific route provided by your local connection DHCP and won't route traffic via ZeroTier - see this
  • You can also add a route for 0.0.0.0/0, and list the 'via' as your gateway (192.168.1.1 in this case). This will give you the option on each client to 'Allow default route', which will send all internet traffic over the VPN. You can toggle this option on and off as desired.
  • Under IPv4, you can enter DNS to provide to clients. Using these is an optional feature on the client. This may interfere with name resolution for intranet services when connected to enterprise networks whilst connected to the VPN.

Make notes of the following:

Parameter Value
ZeroTier network ID ab01cd34xxxxx

Install Ubuntu Server VM. Assign static IP.

Do all as root

sudo -s

Install ZeroTier

curl -s https://install.zerotier.com | bash

Join the network, and disable managed routes:

zerotier-cli join ab01cd34xxxxx
zerotier-cli set ab01cd34xxxxx allowManaged=0

Establish interface names

ip a

Make notes of the following:

Parameter Value
Ethernet interface ens18
ZeroTier interface ztwf123abc

On the ZeroTier portal, select the spanner icon next to the gateway to change client options, and check the following and approve the join request:

  • Allow Bridging
  • Do Not Auto Assign

Now create configuration files.

Connect your LAN interface to the bridge - N.B. change the name to match your LAN interface

nano /etc/systemd/network/25-bridge-br0-en.network
[Match]
Name=ens18

[Network]
Bridge=br0

Define the bridge - this IP configuration will replace your existing IP configuration.

nano /etc/systemd/network/25-bridge-br0.network
[Match]
Name=br0

[Network]
Address=192.168.1.3/24
Gateway=192.168.1.1
DNS=192.168.1.1

Connect the ZeroTier interface to the bridge - N.B. update the interface name

nano /etc/systemd/network/25-bridge-br0-zt.network
[Match]
Name=ztwf123abc

[Network]
Bridge=br0

Create the bridge device

nano /etc/systemd/network/br0.netdev
[NetDev]
Name=br0
Kind=bridge

Now remove the current network configuration defined by netplan. Delete this file if you're feeling brave, move it out to a different directory, or comment it out. I'll move it. N.B. the name of the file may be different.

mv /etc/netplan/00-installer-config.yaml /root

Verify your new network config:

tail -n+0 /etc/systemd/network/*

Now reboot - be prepared to use console access if you have misconfigured your network settings.

reboot

Check that you have LAN connectivity to the gateway. Then join another device to the ZeroTier network (e.g. smartphone via mobile data) and verify connectivity to your LAN over the VPN.

Done!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment