#!/usr/bin/env bash set -euo pipefail hostname=$(hostname) FIREZONE_NAME=${FIREZONE_NAME:-$hostname} FIREZONE_ID=${FIREZONE_ID:-} FIREZONE_TOKEN=${FIREZONE_TOKEN:-} FIREZONE_API_URL=${FIREZONE_API_URL:-wss://api.firezone.dev} RUST_LOG=${RUST_LOG:-info} # Can be used to download a specific version of the gateway from a custom URL FIREZONE_VERSION=${FIREZONE_VERSION:-latest} FIREZONE_ARTIFACT_URL=${FIREZONE_ARTIFACT_URL:-https://www.firezone.dev/dl/firezone-gateway} # Optional environment variables to configure logging and tracing FIREZONE_OTLP_GRPC_ENDPOINT=${OTLP_GRPC_ENDPOINT:-} FIREZONE_GOOGLE_CLOUD_PROJECT_ID=${GOOGLE_CLOUD_PROJECT_ID:-} FIREZONE_LOG_FORMAT=${FIREZONE_LOG_FORMAT:-} if [ -z "$FIREZONE_TOKEN" ]; then echo "FIREZONE_TOKEN is required" exit 1 fi if [ -z "$FIREZONE_ID" ]; then echo "FIREZONE_ID is required" exit 1 fi # Setup user and group sudo groupadd -f firezone id -u firezone >/dev/null 2>&1 || sudo useradd -r -g firezone -s /sbin/nologin firezone # Create systemd unit file cat < /dev/null 2>&1 || iptables -I FORWARD 1 -i tun-firezone -j ACCEPT iptables -C FORWARD -o tun-firezone -j ACCEPT > /dev/null 2>&1 || iptables -I FORWARD 1 -o tun-firezone -j ACCEPT iptables -t nat -C POSTROUTING -s 100.64.0.0/11 -o e+ -j MASQUERADE > /dev/null 2>&1 || iptables -t nat -A POSTROUTING -s 100.64.0.0/11 -o e+ -j MASQUERADE iptables -t nat -C POSTROUTING -s 100.64.0.0/11 -o w+ -j MASQUERADE > /dev/null 2>&1 || iptables -t nat -A POSTROUTING -s 100.64.0.0/11 -o w+ -j MASQUERADE ip6tables -C FORWARD -i tun-firezone -j ACCEPT > /dev/null 2>&1 || ip6tables -I FORWARD 1 -i tun-firezone -j ACCEPT ip6tables -C FORWARD -o tun-firezone -j ACCEPT > /dev/null 2>&1 || ip6tables -I FORWARD 1 -o tun-firezone -j ACCEPT ip6tables -t nat -C POSTROUTING -s fd00:2021:1111::/107 -o e+ -j MASQUERADE > /dev/null 2>&1 || ip6tables -t nat -A POSTROUTING -s fd00:2021:1111::/107 -o e+ -j MASQUERADE ip6tables -t nat -C POSTROUTING -s fd00:2021:1111::/107 -o w+ -j MASQUERADE > /dev/null 2>&1 || ip6tables -t nat -A POSTROUTING -s fd00:2021:1111::/107 -o w+ -j MASQUERADE # Enable packet forwarding for IPv4 and IPv6 sysctl -w net.ipv4.ip_forward=1 sysctl -w net.ipv4.conf.all.src_valid_mark=1 sysctl -w net.ipv6.conf.all.disable_ipv6=0 sysctl -w net.ipv6.conf.all.forwarding=1 sysctl -w net.ipv6.conf.default.forwarding=1 EOF # Make ExecStartPre script executable sudo chmod +x /usr/local/bin/firezone-gateway-init # Reload systemd sudo systemctl daemon-reload # Enable the service to start on boot sudo systemctl enable firezone-gateway # Start the service sudo systemctl start firezone-gateway echo "Firezone Gateway installed successfully!" echo "Run 'sudo systemctl status firezone-gateway' to check the status."