Soluzione della community

IPv4 di CasaOS non funziona: controlla IPv6 e i binding di Docker

A CasaOS user on Debian 12 in GCP saw port 80 reported as tcp6 and then broke web access after disabling IPv6 before installation.

Non disabilitare IPv6 solo perché ss mostra un servizio CasaOS o Docker in ascolto su :::80. Su Linux, un listener wildcard IPv6 può accettare anche IPv4 a seconda delle impostazioni del socket, e Docker normalmente pubblica le porte su IPv4 quando non viene specificato alcun indirizzo host.

Il caso originale riguardava CasaOS su Debian 12 in GCP, non ZimaOS. La diagnosi corretta consiste nel testare esplicitamente IPv4, controllare il gateway di CasaOS e le associazioni delle porte Docker e verificare il firewall cloud prima di modificare GRUB o disabilitare IPv6 globalmente.

Testa prima direttamente IPv4

curl -4 -v http://127.0.0.1:80/
curl -4 -v http://SERVER_IPV4:80/
ss -ltnp | grep ':80'

Se IPv4 funziona localmente ma non da remoto, il problema è probabilmente il firewall dell'host o del cloud, oppure il routing, non l'associazione di CasaOS.

La pubblicazione delle porte Docker normalmente include IPv4

L'attuale guida alla pubblicazione delle porte Docker indica che le porte pubblicate normalmente sono raggiungibili tramite le associazioni degli indirizzi host; per un comportamento esplicitamente limitato a IPv6 è necessaria una configurazione diversa.

Controlla direttamente CasaOS

systemctl status casaos
journalctl -u casaos --no-pager -n 100
ss -ltnp | grep -E ':80|casaos'

L'attuale programma di installazione di CasaOS continua a elencare gli indirizzi delle interfacce IPv4 quando mostra l'URL della dashboard, quindi un'installazione funzionante non è progettata per richiedere un accesso esclusivo tramite IPv6.

Controlla il firewall di GCP

Verifica che la VM disponga di un indirizzo IPv4, di una route e di una regola in ingresso per la porta web CasaOS scelta. Un firewall cloud può bloccare la porta 80 anche quando il servizio è in ascolto correttamente.

Non disabilitare IPv6 globalmente come prima soluzione

Storicamente, alcuni componenti meno recenti di CasaOS si aspettavano che esistesse /proc/net/tcp6, e la disabilitazione di IPv6 ha causato problemi nella gestione delle app in alcune versioni. Rimuovere IPv6 può creare un secondo problema senza risolvere il primo.

Se ti serve un'associazione Docker limitata a IPv4

ports:
  - "0.0.0.0:8080:80"

Usa un'associazione IPv4 esplicita solo quando controlli quella definizione Compose e comprendi le implicazioni relative all'esposizione.

Controlla la porta web di CasaOS

Il programma di installazione può scegliere un'altra porta disponibile se la 80 è già occupata. Conferma la porta HTTP effettiva di CasaOS prima di presumere che il servizio non sia riuscito ad avviarsi.

La guida al networking Docker illustra gli stessi concetti fondamentali di rete.

Controlla sysctl solo dopo aver testato la connettività reale

Se sospetti ancora un comportamento dei socket dual-stack, controlla sysctl net.ipv6.bindv6only. Un valore pari a 0 consente a molti socket wildcard IPv6 di accettare connessioni IPv4 mappate; un valore pari a 1 li rende esclusivi per IPv6. Non modificarlo a livello di sistema senza comprendere tutti i servizi interessati.

Controlla gli indirizzi effettivamente pubblicati da Docker

docker ps --format 'table {{.Names}}	{{.Ports}}'
docker inspect CONTAINER --format '{{json .NetworkSettings.Ports}}'

Questo mostra se Docker ha creato un'associazione IPv4 come 0.0.0.0:PORT, un'associazione IPv6 o entrambe. È più affidabile che dedurre il comportamento da una singola riga dell'elenco dei processi.

Ricorda che GCP dispone di due livelli di firewall

Un host Debian può avere regole nftables/iptables proprie, mentre GCP controlla separatamente il traffico in ingresso del firewall VPC. Un servizio può funzionare correttamente localmente ma risultare irraggiungibile dall'esterno perché uno dei due livelli blocca la porta.

Domande frequenti

:::80 indica sempre che il servizio è limitato a IPv6?

No. Verificalo con curl -4 prima di arrivare a questa conclusione.

Devo disabilitare IPv6 in GRUB?

Non come primo passaggio di diagnostica. Potrebbe interrompere componenti che si aspettano interfacce kernel IPv6.

Perché localhost funziona ma l'IPv4 pubblico no?

Controlla il firewall cloud, il gruppo di sicurezza, la route e il firewall dell'host.

È un problema di ZimaOS?

La discussione originale riguarda CasaOS installato su Debian 12, non ZimaOS.