Skip to content

Référence de Configuration

Ce document détaille toutes les options de configuration disponibles dans Infrarust.

Structure de Configuration

Infrarust utilise deux types de fichiers de configuration :

infrarust/
├── config.yaml         # Configuration globale
└── proxies/           # Configurations des serveurs
    ├── hub.yml
    ├── survival.yml
    └── creative.yml

Configuration Principale (config.yaml)

Le fichier de configuration principal prend en charge les options suivantes :

yaml
# Configuration de Base
bind: "0.0.0.0:25565"           # Adresse d'écoute du proxy
keepAliveTimeout: 30s           # Délai d'expiration de la connexion

# Configuration du Fournisseur de Fichiers
file_provider:
  proxies_path: ["./proxies"]   # Chemin vers les configurations de proxy
  file_type: "yaml"             # Type de fichier (seul yaml est supporté actuellement)
  watch: true                   # Activer le rechargement à chaud des configurations

# Configuration du Fournisseur Docker
docker_provider:
  docker_host: "unix:///var/run/docker.sock"  # Socket du démon Docker
  label_prefix: "infrarust"                   # Préfixe des étiquettes pour les conteneurs
  polling_interval: 10                        # Intervalle de sondage en secondes
  watch: true                                 # Surveiller les changements de conteneurs
  default_domains: []                         # Domaines par défaut pour les conteneurs

# Configuration des Gestionnaires de Serveurs
managers_config:
  pterodactyl:
    enabled: true
    api_key: "votre_clé_api"
    base_url: "https://pterodactyl.example.com"
  crafty:
    enabled: true
    api_key: "votre_clé_api"
    base_url: "https://crafty.example.com"

# Configuration du Protocole Proxy (Réception)
proxy_protocol:
  enabled: true                    # Activer le support du protocole proxy
  receive_enabled: true            # Accepter le protocole proxy entrant
  receive_timeout_secs: 5          # Délai d'attente pour la réception de l'en-tête
  receive_allowed_versions: [1, 2] # Versions autorisées du protocole proxy

# Configuration du Cache
cache:
  status_ttl_seconds: 30        # Durée de vie des entrées du cache de statut
  max_status_entries: 1000      # Nombre maximal d'entrées dans le cache de statut

# Configuration de la Télémétrie
telemetry:
  enabled: false               # Activer la collecte de télémétrie
  export_interval_seconds: 30  # Intervalle d'exportation
  export_url: "http://..."     # Destination d'exportation (optionnel)
  enable_metrics: false        # Activer la collecte de métriques
  enable_tracing: false        # Activer le traçage distribué

# Configuration des Journaux
logging:
  debug: true                  # Activer le mode débogage
  use_color: true              # Utiliser des couleurs dans la sortie console
  use_icons: true              # Utiliser des icônes dans la sortie console
  show_timestamp: true         # Afficher l'horodatage dans les journaux
  time_format: "%Y-%m-%d %H:%M:%S"  # Format d'horodatage
  show_target: true            # Afficher la cible du journal
  show_fields: true            # Afficher les champs du journal
  template: "{timestamp} [{level}] {message}"  # Modèle de journal
  regex_filter: "^(pattern)"   # Filtrer les journaux par expression régulière
  min_level: "info"            # Niveau de journal minimum global
  log_types:                   # Niveaux de journal par composant
    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:               # Exclure les types de journaux bruyants
    - "tcp_connection"
    - "packet_processing"
    - "cache"

# Configuration des Filtres
filters:
  rate_limiter:
    enabled: true
    requests_per_minute: 600   # Requêtes maximales par minute
    burst_size: 10             # Taille de rafale pour la limitation

# Configuration MOTD par Défaut
motds:
  unreachable:
    version_name: "Infrarust Inaccessible"
    protocol_version: 760
    max_players: 100
    online_players: 0
    text: "Serveur Inaccessible"
    favicon: ""

Configuration des Serveurs (proxies/*.yml)

Chaque fichier de configuration de serveur dans le répertoire proxies peut contenir :

yaml
domains:
  - "play.example.com"      # Noms de domaine pour ce serveur
addresses:
  - "localhost:25566"       # Adresses des serveurs cibles

sendProxyProtocol: false    # Envoyer le protocole PROXY au backend
proxy_protocol_version: 2   # Version du protocole PROXY à utiliser (1 ou 2)

proxyMode: "passthrough"    # Mode proxy (passthrough/client_only/offline/server_only)

# Configuration du Gestionnaire de Serveur (optionnel)
server_manager:
  provider_name: Local       # Local | Pterodactyl | Crafty | Docker
  server_id: "mon_serveur"
  empty_shutdown_time: 300   # Arrêt après temps d'inactivité (secondes)
  local_provider:            # Uniquement pour le fournisseur Local
    executable: "java"
    working_dir: "/chemin/vers/serveur"
    args:
      - "-jar"
      - "server.jar"
    startup_string: 'For help, type "help"'

# Configuration MOTD (par serveur)
motds:
  online:
    enabled: true
    text: "Bienvenue sur notre serveur !"
    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: "Serveur en veille - Connectez-vous pour le réveiller !"
  # Autres états : starting, stopping, shutting_down, crashed, unreachable, unable_status

# Configuration des Filtres par Serveur
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: ["joueur1"]
    blacklist: []
  ban:
    enabled: true
    storage_type: "file"
    file_path: "bans.json"

# Configuration du Cache par Serveur
caches:
  status_ttl_seconds: 30
  max_status_entries: 1000

Pour des exemples complets de configuration de serveur, consultez les config_examples sur GitHub.

Référence des Fonctionnalités

Modes de Proxy

ModeDescription
passthroughProxy direct, compatible avec toutes les versions de Minecraft
client_onlyPour les clients premium se connectant à des serveurs offline
server_onlyPour les scénarios où l'authentification du serveur nécessite une gestion
offlinePour les clients et serveurs offline

Gestionnaires de Serveurs

Infrarust peut automatiquement démarrer et arrêter les serveurs Minecraft en fonction de l'activité des joueurs.

Intégration Pterodactyl

yaml
managers_config:
  pterodactyl:
    enabled: true
    api_key: "votre_clé_api"
    base_url: "https://pterodactyl.example.com"

Puis dans la configuration de votre serveur :

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

Intégration Crafty Controller

yaml
managers_config:
  crafty:
    enabled: true
    api_key: "votre_clé_api"
    base_url: "https://crafty.example.com"

Puis dans la configuration de votre serveur :

yaml
server_manager:
  provider_name: Crafty
  server_id: "votre_uuid_serveur"

Gestion de Serveur Local

Pour les serveurs gérés localement :

yaml
server_manager:
  provider_name: Local
  server_id: "serveur_local"
  empty_shutdown_time: 300
  local_provider:
    executable: "java"
    working_dir: "/chemin/vers/serveur"
    args:
      - "-jar"
      - "server.jar"
    startup_string: 'For help, type "help"'

Intégration Docker

Infrarust peut automatiquement faire proxy des conteneurs Minecraft :

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

La configuration des conteneurs se fait via les étiquettes Docker :

  • infrarust.enable=true - Activer le proxy pour le conteneur
  • infrarust.domains=mc.example.com,mc2.example.com - Domaines pour le conteneur
  • infrarust.port=25565 - Port Minecraft à l'intérieur du conteneur
  • infrarust.proxy_mode=passthrough - Mode proxy
  • infrarust.proxy_protocol=true - Activer le protocole PROXY

Protocole Proxy

Configurer le protocole PROXY pour recevoir les informations client des load balancers :

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

Pour envoyer le protocole PROXY aux serveurs backend, configurez dans la configuration du serveur :

yaml
sendProxyProtocol: true
proxy_protocol_version: 2

Télémétrie

La configuration de télémétrie permet la surveillance du proxy via OpenTelemetry :

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

Configuration MOTD

Configurer l'affichage de la liste des serveurs pour différents états :

ÉtatDescription
onlineLe serveur est en cours d'exécution et accessible
offlineLe serveur est en veille/arrêté
startingLe serveur démarre
stoppingLe serveur s'arrête gracieusement
shutting_downCompte à rebours avant l'arrêt (supporte le placeholder ${seconds_remaining})
crashedLe serveur a planté
unreachableImpossible d'atteindre le serveur
unable_statusImpossible d'obtenir le statut du serveur

Champs MOTD :

  • enabled - Activer cet état MOTD
  • text - Description du serveur (supporte les codes de couleur Minecraft)
  • version_name - Texte de version à afficher
  • protocol_version - Numéro de version du protocole Minecraft
  • max_players - Nombre maximal de joueurs
  • online_players - Nombre actuel de joueurs
  • favicon - Icône du serveur (PNG encodé en base64 ou chemin de fichier)
  • samples - Échantillons de liste de joueurs (tableau de {name, id})

Pour des exemples complets de MOTD, voir local-server.yaml.

Configuration du Cache

Configurer la mise en cache des statuts :

yaml
cache:
  status_ttl_seconds: 30    # Durée de vie des entrées du cache de statut
  max_status_entries: 1000  # Nombre maximal d'entrées dans le cache de statut

Configuration des Filtres

Limiteur de Débit

Contrôle le nombre de connexions depuis une source unique :

yaml
rate_limiter:
  enabled: true
  requests_per_minute: 600  # Requêtes maximales par minute
  burst_size: 10            # Tolérance de rafale

Listes d'Accès

Disponibles pour les adresses IP, UUIDs et noms de joueurs :

yaml
ip_filter:  # ou id_filter / name_filter
  enabled: true
  whitelist: ["valeur1", "valeur2"]
  blacklist: ["valeur3"]

Système de Bannissement

Configurer les bannissements persistants des joueurs :

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

Configuration des Journaux

Affiner la sortie des journaux :

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"

Types de journaux disponibles : tcp_connection, supervisor, server_manager, packet_processing, ban_system, authentication, telemetry, config_provider, proxy_protocol, cache, filter, proxy_mode, motd

Fonctionnalités Avancées

Rechargement à Chaud

Lorsque file_provider.watch est activé, les changements de configuration sont automatiquement détectés et appliqués sans redémarrage.

Actif par défaut

Intégration Docker

Lorsque docker_provider.watch est activé, les changements de conteneurs sont automatiquement détectés et les proxies sont mis à jour en conséquence.

Système de Bannissement

Le système de bannissement fournit des bannissements persistants avec des options de stockage flexibles et une journalisation d'audit.

Besoin d'Aide ?

Released under the AGPL-3.0 License.