Skip to content

dangeroustech/ZeroTierBridge

Repository files navigation

ZeroTierBridge

A container to provide out-of-the-box bridging functionality to a ZeroTier network.

Running

Prerequisites

  • Docker running as your logged in user (if docker ps runs then you're good, if not follow the link ->) - Linux instructions here

ZeroTier UI Changes

Once running, log into your ZeroTier interface and approve the new device. Click the wrench next to the name and select 'Allow Ethernet Bridging.'

brave_RxG5EgQinY

You also need to add a static route into ZeroTier so that the traffic is routed correctly. Add this a bit larger than normal because of longest prefix matching.

brave_4wHd9zo193

Docker Compose

You need to edit the ZT_NETWORKS and ARCH variable in the docker-compose.yml file first to add your networks and make sure your acrhitecture is correct (see this page for examples, usually either amd64 or arm64)

Easiest way to bring up is via Docker Compose. Rename docker-compose.yml.example to docker-compose.yml and run docker compose up -d.

If you want to disable bridging, set ZT_BRIDGE=false. This can be done after the initial networks have been joined (just change the environment variable in the docker-compose.yml file and run `), as the ZeroTier config persists but IPTables forwarding is done on each container startup.

OG Docker

docker build -t zerotierbridge .

docker run --privileged -e ZT_NETWORKS=NETWORK_1 NETWORK_2 -e ZT_BRIDGE=true zerotierbridge:latest

Add your network ID(s) into the ZT_NETWORKS argument, space separated.

Disable bridging by passing ZT_BRIDGE=false. This can be done after the initial networks have been joined (just rebuild the container), as the ZeroTier config persists but IPTables forwarding is done on each container startup.

Persistent Storage

If you would like the container to retain the same ZeroTier client ID on reboot, attach a volume as per the below.

docker run --privileged -e ZT_NETWORKS=NETWORK_ID_HERE ZT_BRIDGE=true -v zt_config:/var/lib/zerotier-one/ zerotierbridge:latest

Caveat: Architecture

If you need to run this on a device with different architecture (a raspberry pi, for instance), then just edit line 3 of the Dockerfile.

If you were using a Raspberry Pi 4, you would change this to ARCH=arm64 and the container will pull the correct ZeroTier installer.