mirror of
https://github.com/outbackdingo/firezone.git
synced 2026-01-27 18:18:55 +00:00
At present, the definition of `Device` is heavily nested with conditional code. I've found this hard to understand and navigate. Recent refactorings now made it possible to remove a lot of these layers so we primarily deal with two concepts: - A `Device` which offers async read and non-blocking write functions - A `Tun` abstraction which is platform-specific Instead of dedicated modules, I chose to feature-flag individual functions on `Device` with `#[cfg(target_family = "unix")]` and `#[cfg(target_family = "windows")]`. I find this easier to understand because the code is right next to each other. In addition, changing the module hierarchy of `Device` allows us to remove `async` from the public API which is only introduced by the use of `rtnetlink` in Linux. Instead of making functions across all `Tun` implementations `async`, we embed a "worker" within the `linux::Tun` implementation that gets polled before `poll_read`. --------- Co-authored-by: Gabi <gabrielalejandro7@gmail.com>
gateway
This crate houses the Firezone gateway.
Building
You can build the gateway using: cargo build --release --bin firezone-gateway
You should then find a binary in target/release/firezone-gateway.
Running
The Firezone Gateway supports Linux only. To run the Gateway binary on your Linux host:
- Generate a new Gateway token from the "Gateways" section of the admin portal and save it in your secrets manager.
- Ensure the
FIREZONE_TOKEN=<gateway_token>environment variable is set securely in your Gateway's shell environment. The Gateway requires this variable at startup. - Set
FIREZONE_IDto a unique string to identify this gateway in the portal, e.g.export FIREZONE_ID=$(uuidgen). The Gateway requires this variable at startup. - Now, you can start the Gateway with:
firezone-gateway
If you're running as a non-root user, you'll need the CAP_NET_ADMIN capability
to open /dev/net/tun. You can add this to the gateway binary with:
sudo setcap 'cap_net_admin+eip' /path/to/firezone-gateway
Ports
The gateway requires no open ports. Connections automatically traverse NAT with STUN/TURN via the relay.