Skip to content

Configuration Reference

This document details all available configuration options in Infrarust.

Configuration Structure

Infrarust uses two types of configuration files:

infrarust/
├── config.yaml         # Global configuration
└── proxies/           # Server configurations
    ├── hub.yml
    ├── survival.yml
    └── creative.yml

Main Configuration (config.yaml)

The main configuration file supports the following options:

yaml
# Basic Configuration
bind: "0.0.0.0:25565"           # Address to bind the proxy to
keepAliveTimeout: 30s           # Connection keepalive timeout

# File Provider Configuration
file_provider:
  proxies_path: ["./proxies"]   # Path to proxy configurations
  file_type: "yaml"             # File type (currently only yaml supported)
  watch: true                   # Enable hot-reload of configurations

# Docker Provider Configuration
docker_provider:
  docker_host: "unix:///var/run/docker.sock"  # Docker daemon socket
  label_prefix: "infrarust"                   # Label prefix for containers
  polling_interval: 10                        # Polling interval in seconds
  watch: true                                 # Watch for container changes
  default_domains: []                         # Default domains for containers

# Server Managers Configuration
managers_config:
  pterodactyl:
    enabled: true
    api_key: "your_api_key"
    base_url: "https://pterodactyl.example.com"
  crafty:
    enabled: true
    api_key: "your_api_key"
    base_url: "https://crafty.example.com"

# Proxy Protocol Configuration (Receive)
proxy_protocol:
  enabled: true                    # Enable proxy protocol support
  receive_enabled: true            # Accept incoming proxy protocol
  receive_timeout_secs: 5          # Timeout for receiving proxy protocol header
  receive_allowed_versions: [1, 2] # Allowed proxy protocol versions

# Cache Configuration
cache:
  status_ttl_seconds: 30        # TTL for status cache entries
  max_status_entries: 1000      # Maximum number of status cache entries

# Telemetry Configuration
telemetry:
  enabled: false               # Enable telemetry collection
  export_interval_seconds: 30  # Export interval
  export_url: "http://..."     # Export destination (optional)
  enable_metrics: false        # Enable metrics collection
  enable_tracing: false        # Enable distributed tracing

# Logging Configuration
logging:
  debug: true                  # Enable debug mode
  use_color: true              # Use colors in console output
  use_icons: true              # Use icons in console output
  show_timestamp: true         # Show timestamps in logs
  time_format: "%Y-%m-%d %H:%M:%S"  # Timestamp format
  show_target: true            # Show log target
  show_fields: true            # Show log fields
  template: "{timestamp} [{level}] {message}"  # Log template
  regex_filter: "^(pattern)"   # Filter logs by regex pattern
  min_level: "info"            # Global minimum log level
  log_types:                   # Per-component log levels
    supervisor: "info"
    server_manager: "info"
    packet_processing: "debug"
    proxy_protocol: "debug"
    ban_system: "info"
    authentication: "info"
    filter: "info"
    config_provider: "info"
    cache: "debug"
    motd: "warn"
    telemetry: "error"
  exclude_types:               # Exclude noisy log types
    - "tcp_connection"
    - "packet_processing"
    - "cache"

# Filter Configuration
filters:
  rate_limiter:
    enabled: true
    requests_per_minute: 600   # Maximum requests per minute
    burst_size: 10             # Burst size for rate limiting

# Default MOTD Configuration
motds:
  unreachable:
    version_name: "Infrarust Unreachable"
    protocol_version: 760
    max_players: 100
    online_players: 0
    text: "Server Unreachable"
    favicon: ""

Server Configuration (proxies/*.yml)

Each server configuration file in the proxies directory can contain:

yaml
domains:
  - "play.example.com"      # Domain names for this server
addresses:
  - "localhost:25566"       # Target server addresses

sendProxyProtocol: false    # Send PROXY protocol to backend
proxy_protocol_version: 2   # PROXY protocol version to use (1 or 2)

proxyMode: "passthrough"    # Proxy mode (passthrough/client_only/offline/server_only)

# Server Manager Configuration (optional)
server_manager:
  provider_name: Local       # Local | Pterodactyl | Crafty | Docker
  server_id: "my_server"
  empty_shutdown_time: 300   # Shutdown after idle time (seconds)
  local_provider:            # Only for Local provider
    executable: "java"
    working_dir: "/path/to/server"
    args:
      - "-jar"
      - "server.jar"
    startup_string: 'For help, type "help"'

# MOTD Configuration (per-server)
motds:
  online:
    enabled: true
    text: "Welcome to our server!"
    version_name: "Paper 1.20.4"
    max_players: 100
    online_players: 42
    protocol_version: 765
    favicon: "./icons/server.png"
    samples:
      - name: "Steve"
        id: "069a79f4-44e9-4726-a5be-fca90e38aaf5"
  offline:
    enabled: true
    text: "Server Sleeping - Connect to wake it up!"
  # Other states: starting, stopping, shutting_down, crashed, unreachable, unable_status

# Per-server Filter Configuration
filters:
  rate_limiter:
    enabled: true
    requests_per_minute: 600
    burst_size: 10
  ip_filter:
    enabled: true
    whitelist: ["127.0.0.1"]
    blacklist: []
  id_filter:
    enabled: true
    whitelist: ["uuid1", "uuid2"]
    blacklist: []
  name_filter:
    enabled: true
    whitelist: ["player1"]
    blacklist: []
  ban:
    enabled: true
    storage_type: "file"
    file_path: "bans.json"

# Per-server Cache Configuration
caches:
  status_ttl_seconds: 30
  max_status_entries: 1000

For complete server configuration examples, see the config_examples on GitHub.

Feature Reference

Proxy Modes

ModeDescription
passthroughDirect proxy, compatible with all Minecraft versions
client_onlyFor premium clients connecting to offline servers
server_onlyFor scenarios where server authentication needs handling
offlineFor offline clients and servers

Server Managers

Infrarust can automatically start and stop Minecraft servers based on player activity.

Pterodactyl Integration

yaml
managers_config:
  pterodactyl:
    enabled: true
    api_key: "your_api_key"
    base_url: "https://pterodactyl.example.com"

Then in your server config:

yaml
server_manager:
  provider_name: Pterodactyl
  server_id: "your_server_uuid"
  empty_shutdown_time: 300

Crafty Controller Integration

yaml
managers_config:
  crafty:
    enabled: true
    api_key: "your_api_key"
    base_url: "https://crafty.example.com"

Then in your server config:

yaml
server_manager:
  provider_name: Crafty
  server_id: "your_server_uuid"

Local Server Management

For locally managed servers:

yaml
server_manager:
  provider_name: Local
  server_id: "local_server"
  empty_shutdown_time: 300
  local_provider:
    executable: "java"
    working_dir: "/path/to/server"
    args:
      - "-jar"
      - "server.jar"
    startup_string: 'For help, type "help"'

Docker Integration

Infrarust can automatically proxy Minecraft containers:

yaml
docker_provider:
  docker_host: "unix:///var/run/docker.sock"
  label_prefix: "infrarust"
  polling_interval: 10
  watch: true
  default_domains: ["docker.local"]

Container configuration is done through Docker labels:

  • infrarust.enable=true - Enable proxying for the container
  • infrarust.domains=mc.example.com,mc2.example.com - Domains for the container
  • infrarust.port=25565 - Minecraft port inside the container
  • infrarust.proxy_mode=passthrough - Proxy mode
  • infrarust.proxy_protocol=true - Enable PROXY protocol

Proxy Protocol

Configure PROXY protocol for receiving client information from load balancers:

yaml
proxy_protocol:
  enabled: true
  receive_enabled: true
  receive_timeout_secs: 5
  receive_allowed_versions: [1, 2]

To send PROXY protocol to backend servers, configure in the server config:

yaml
sendProxyProtocol: true
proxy_protocol_version: 2

Telemetry

Telemetry configuration allows monitoring of the proxy via OpenTelemetry:

yaml
telemetry:
  enabled: true
  export_interval_seconds: 10
  export_url: "http://localhost:4317"
  enable_metrics: true
  enable_tracing: true

MOTD Configuration

Configure server list display for different server states:

StateDescription
onlineServer is running and reachable
offlineServer is sleeping/stopped
startingServer is starting up
stoppingServer is gracefully stopping
shutting_downCountdown to shutdown (supports ${seconds_remaining} placeholder)
crashedServer crashed
unreachableCannot reach server
unable_statusCannot get server status

MOTD fields:

  • enabled - Enable this MOTD state
  • text - Server description (supports Minecraft color codes)
  • version_name - Version text to display
  • protocol_version - Minecraft protocol version number
  • max_players - Maximum player count
  • online_players - Current player count
  • favicon - Server icon (base64 encoded PNG or file path)
  • samples - Player list samples (array of {name, id})

For complete MOTD examples, see local-server.yaml.

Cache Configuration

Configure status caching:

yaml
cache:
  status_ttl_seconds: 30    # Time-to-live for status cache entries
  max_status_entries: 1000  # Maximum number of status cache entries

Filter Configuration

Rate Limiter

Controls the number of connections from a single source:

yaml
rate_limiter:
  enabled: true
  requests_per_minute: 600  # Maximum requests per minute
  burst_size: 10            # Burst size allowance

Access Lists

Available for IP addresses, UUIDs, and player names:

yaml
ip_filter:  # or id_filter / name_filter
  enabled: true
  whitelist: ["value1", "value2"]
  blacklist: ["value3"]

Ban System

Configure persistent player bans:

yaml
ban:
  enabled: true
  storage_type: "file"  # file, redis, or database
  file_path: "bans.json"
  enable_audit_log: true
  audit_log_path: "bans_audit.log"
  audit_log_rotation:
    max_size: 10485760  # 10MB
    max_files: 5
    compress: true
  auto_cleanup_interval: 3600  # 1 hour
  cache_size: 10000

Logging Configuration

Fine-tune log output:

yaml
logging:
  debug: true
  use_color: true
  use_icons: true
  show_timestamp: true
  time_format: "%Y-%m-%d %H:%M:%S"
  show_target: true
  show_fields: true
  template: "{timestamp} [{level}] {message}"
  regex_filter: "^(pattern)"
  min_level: "info"
  log_types:
    supervisor: "info"
    server_manager: "info"
    packet_processing: "debug"
    ban_system: "info"
    authentication: "info"
    telemetry: "warn"
  exclude_types:
    - "tcp_connection"
    - "cache"

Available log types: tcp_connection, supervisor, server_manager, packet_processing, ban_system, authentication, telemetry, config_provider, proxy_protocol, cache, filter, proxy_mode, motd

Advanced Features

Hot Reload

When file_provider.watch is enabled, configuration changes are automatically detected and applied without restart.

Active by default

Docker Integration

When docker_provider.watch is enabled, container changes are automatically detected and proxies are updated accordingly.

Ban System

The ban system provides persistent bans with flexible storage options and audit logging.

Need Help?

Released under the AGPL-3.0 License.