Distributed monitoring Livestatus TCP TLS Problem

CMK version: 2.3.0p29
OS version: Ubuntu 22.04

Error message: Unhandled exception: Malformed response header b’HTTP/1.1 400 Bad’. Livestatus TCP socket might be unreachable or wrong encryption settings are used.

Ich habe einen Checkmk Server in der Zentrale am laufen der auf einem Ubuntu 22.04. installiert ist. Und habe in der DMZ einen checkmk Server in einem Docker Container am laufen. Diesen versuche ich gerade per Distributed monitoring an den Server Zentrale anbinden. Vor dem Docker Container läuft ein nginx reverse proxy für um den Zugriff nur per SSL zu erlauben.

Die Webgui kann ich https erreichen und die “Configuration connection” funktioniert auch nur die “Status connection” gibt den Fehler siehe oben aus.

Wie kann ich das Problem lösen?

Der Docker container ist so aufgesetzt:
sudo docker container run -e CMK_SITE_ID=“remote” -e CMK_PASSWORD=‘passwort’ -dit -p 8080:5000 -p 8000:8000 -p 6557:6557 -p 6560:6560 --tmpfs /opt/omd/sites/remote/tmp:uid=1000,gid=1000 -v monitoring:/omd/sites --name monitoring -v /etc/localtime:/etc/localtime:ro --restart always registry.checkmk.com/enterprise/check-mk-enterprise:2.3.0p29

Der nginx reverse proxy diese Config:

    server {
            listen 443 ssl ;
            listen [::]:443 ;
      
            server_name cmk2.domain.local;
      
            # Proxy settings
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
      
            location / {
                proxy_pass http://192.168.2.11:8080;
                proxy_redirect off;
            }
      
            # Include additional SSL options
            include /etc/nginx/ssl-option.conf;
    }
    server {
            listen 80;
            listen [::]:80;
      
            server_name cmk2.domain.local;
      
            return 301 https://$server_name$request_uri;
    }
    server {
            listen 6557 ssl;
            server_name cmk2.domain.local;
      
            # Include additional SSL options
            include /etc/nginx/ssl-option.conf;
      
            location / {
                proxy_pass http://192.168.2.11:6557;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
            }
    }

Der Teil wird nicht funktionieren. Livestatus ist keine HTTP/HTTPS Connection. Das ist eine per TLS abgesicherte sonstige Verbindung sozusagen.
Kannst dir ja mal das NGINX Stream Module anschauen - sieht jedenfalls vielversprechend aus.
Module ngx_stream_core_module

Danke für den Hinweise. Ich teste das mal aus.

Man muss das nginx-core installieren und dann kann man in der "nginx.conf " den stream Teil einfügen.

Beispiel:

stream {
    upstream backend {
        server 192.168.2.11:6557;
    }

    server {
        listen 6557 ssl;
        ssl_certificate /etc/ssl/certs/domain.local_combined.crt;
        ssl_certificate_key /etc/ssl/private/domain.local.key;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305-SHA256:DHE-RSA-AES256-GCM-SHA384;
        proxy_connect_timeout 1s;
        proxy_timeout 3s;
        proxy_pass backend;
    }
}

Dann hat es bei mir funktioniert.