# FIPS Node Configuration node: identity: # By default, a new ephemeral keypair is generated on each start. # Uncomment persistent to keep the same identity across restarts; # on first start a keypair is saved to fips.key/fips.pub next to # this config file (mode 0600/0644). # persistent: true # # Or set an explicit key (overrides persistent): # nsec: "nsec1..." # Mesh-lookup protocol (node.lookup.*): the overlay coordinate-lookup engine # (mesh address -> coordinates). Defaults shown; uncomment to override. # lookup: # ttl: 64 # attempt_timeouts_secs: [1, 2, 4, 8] # recent_expiry_secs: 10 # backoff_base_secs: 0 # backoff_max_secs: 0 # forward_min_interval_secs: 2 rendezvous: # Optional Nostr-mediated overlay endpoint rendezvous. # nostr: # enabled: true # policy: configured_only # disabled | configured_only | open # open_discovery_max_pending: 64 # caps queued open-rendezvous retries # app: "fips-overlay-v1" # advertise: true # advert_relays: # - "wss://relay.damus.io" # - "wss://nos.lol" # - "wss://offchain.pub" # dm_relays: # - "wss://relay.damus.io" # - "wss://nos.lol" # - "wss://offchain.pub" # # Optional override. If omitted, FIPS uses the built-in STUN list. # # Built-in relay/STUN defaults are best-effort and should be # # overridden by operators for production use. # stun_servers: # - "stun:stun.l.google.com:19302" # - "stun:stun.cloudflare.com:3478" # - "stun:global.stun.twilio.com:3478" # # Optional mDNS-based LAN rendezvous for sub-second same-LAN pairing. # Opt-in (default false): default-off avoids a per-LAN identity # broadcast on nodes that have deliberately disabled other rendezvous # channels, and avoids any multicast surprise on upgrade. Requires an # operational UDP transport (the advertised port is the one peers dial). # lan: # enabled: false # # Optional application/network scope carried in the LAN-only TXT # # record. Browsers that set a scope ignore adverts for other scopes. # # Kept separate from the Nostr rendezvous `app` tag so relay-visible # # adverts can stay generic while LAN rendezvous stays per-private-network. # # scope: "lab-floor-3" # # Advanced: overrides the mDNS service type. Leave unset in normal # # use — only needed to run multiple isolated services on one # # interface (e.g. test isolation on loopback). # # service_type: "_fips._udp.local." tun: enabled: true name: fips0 mtu: 1280 dns: enabled: true # bind_addr defaults to "::1" (IPv6 loopback). The shipped # fips-dns-setup script configures systemd-resolved with a global # /etc/systemd/resolved.conf.d/fips.conf drop-in pointing at # [::1]:5354. # # Set "::" to expose the responder to mesh peers as well (e.g. for # gateway hosts that resolve .fips on behalf of LAN clients). The # mesh-interface filter in src/upper/dns.rs will still defend # /etc/fips/hosts aliases from cross-mesh enumeration. # bind_addr: "::1" port: 5354 transports: udp: bind_addr: "0.0.0.0:2121" # advertise_on_nostr: true # public: false # false => advertise udp:nat; true => advertise bound host:port # accept_connections: true # default; refuse inbound msg1 when false # outbound_only: false # true => bind ephemeral, no listener on a # # known port. Forces advertise_on_nostr=false # # and accept_connections=false. Pure-client # # posture; bind_addr is ignored. tcp: # Accepts inbound connections. No static outbound peers. bind_addr: "0.0.0.0:8443" # advertise_on_nostr: true # Ethernet transport — uncomment and set your interface name. # ethernet: # interface: "eth0" # listen: true # announce: true # auto_connect: true # accept_connections: true # Bluetooth Low Energy transport — requires BlueZ and the 'ble' feature. # ble: # adapter: "hci0" # mtu: 2048 # advertise: true # scan: true # auto_connect: true # accept_connections: true # Nym transport — outbound-only connections through the Nym mixnet for # sender/receiver privacy. This is a privacy posture, not a NAT-traversal # or failover transport: it only dials out (no inbound listener) and is # chosen for its anonymity properties. Requires a nym-socks5-client # running separately as its own process; FIPS dials it over SOCKS5. # nym: # socks5_addr: "127.0.0.1:1080" # nym-socks5-client SOCKS5 address # connect_timeout_ms: 300000 # outbound connect timeout (300s); # # mixnet round-trips can take minutes # mtu: 1400 # per-connection MTU # startup_timeout_secs: 120 # wait for nym-socks5-client readiness # Outbound LAN gateway. Allows non-FIPS hosts on the LAN to reach # mesh destinations via DNS-allocated virtual IPs and kernel NAT. # Requires: IPv6 forwarding enabled, fips daemon running with DNS. # gateway: # enabled: true # pool: "fd01::/112" # lan_interface: "eth0" # dns: # listen: "[::1]:5353" # # upstream must match the daemon's dns.bind_addr above. The # # default "[::1]:5354" matches the daemon's default. If you set # # the daemon to bind on a wildcard ("::") or specific address, # # update upstream to match — explicit ::1 sockets do not accept # # v4 traffic. # upstream: "[::1]:5354" # ttl: 60 # pool_grace_period: 60 # conntrack: # tcp_established: 432000 # udp_timeout: 30 # udp_assured: 180 # icmp_timeout: 30 peers: [] # Static peers for bootstrapping (UDP or TCP): # - npub: "npub1qmc3cvfz0yu2hx96nq3gp55zdan2qclealn7xshgr448d3nh6lks7zel98" # alias: "gateway" # via_nostr: true # addresses: # - transport: udp # addr: "test-us01.fips.network:2121" # IP or hostname (e.g., "peer.example.com:2121") # - transport: udp # addr: "nat" # Use node.rendezvous.nostr for Nostr/STUN hole punching # connect_policy: auto_connect