{"id":12,"date":"2026-05-03T21:09:00","date_gmt":"2026-05-03T21:09:00","guid":{"rendered":"https:\/\/rpi.temporiti.net\/wordpress\/blog\/troubleshooting-connettivita-homelab\/"},"modified":"2026-05-30T14:05:57","modified_gmt":"2026-05-30T12:05:57","slug":"troubleshooting-connettivita-homelab","status":"publish","type":"post","link":"https:\/\/rpi.temporiti.net\/wordpress\/?p=12","title":{"rendered":"Troubleshooting connettivit\u00e0 in un homelab eterogeneo"},"content":{"rendered":"<p>In un homelab che mescola Raspberry Pi, mini PC con Linux, un Mac, qualche IoT scemo e uno switch managed, prima o poi capita: &#8220;un host non risponde pi\u00f9, non capisco perch\u00e9&#8221;. E sotto la frustrazione c&#8217;\u00e8 quasi sempre la stessa cosa: una catena di ipotesi non verificate. Il modo per uscirne in tempi ragionevoli \u00e8 una checklist mentale che parte dal basso e sale.<\/p>\n<p>Racconto una sessione di troubleshooting recente e i comandi che uso, ne approfitto per fissare il metodo per la prossima volta.<\/p>\n<h2>L&#8217;incidente<\/h2>\n<p>Un sabato pomeriggio, verso le 16:00, mi accorgo che un Raspberry Pi del homelab (lo chiamo <code>rpi-monitoring<\/code>) non risponde pi\u00f9 al ping dal portatile. Dalle metriche Grafana risulta off dalla rete da circa un&#8217;ora. Niente alert sul telefono perch\u00e9 avevo silenziato Telegram nel pomeriggio. Ma il fatto \u00e8 l\u00ec: l&#8217;host non c&#8217;\u00e8 pi\u00f9.<\/p>\n<h2>Step 1: dove sta il problema?<\/h2>\n<p>La prima domanda non \u00e8 &#8220;perch\u00e9 non risponde&#8221;, \u00e8 &#8220;da quale layer in gi\u00f9 la cosa funziona&#8221;. Vado dal portatile in gi\u00f9:<\/p>\n<pre><code class=\"language-bash\">\nping -c 4 rpi-monitoring\n<\/code><\/pre>\n<p>Risposta: <code>Name or service not known<\/code>. Quindi il DNS non risolve. Il primo strato gi\u00e0 rotto. Provo a interrogare direttamente il resolver interno:<\/p>\n<pre><code class=\"language-bash\">\ndig +short rpi-monitoring @203.0.113.1\n<\/code><\/pre>\n<p>Risposta vuota. Il DNS interno non ha pi\u00f9 il record. Sospetto un DHCP-DNS che non ha rinnovato la lease. Provo per IP statico, perch\u00e9 ricordo che ha un fallback:<\/p>\n<pre><code class=\"language-bash\">\nping -c 4 203.0.113.42\n<\/code><\/pre>\n<p>Anche qui timeout. Il problema non \u00e8 DNS, \u00e8 che proprio non raggiungo l&#8217;host in IP.<\/p>\n<h2>Step 2: layer 2 o layer 3?<\/h2>\n<p>Ipotesi: il device non \u00e8 connesso alla LAN. Lo verifico dallo switch managed (accesso via Tailscale dato che \u00e8 raggiungibile sulla management interface):<\/p>\n<pre><code class=\"language-bash\">\nssh admin@switch-managed\nshow interfaces ethernet port5 status\n<\/code><\/pre>\n<p>Port5 down. Cavo non collegato, NIC del device gi\u00f9, o cavo rotto. Vado fisicamente al rack: cavo collegato sia sullo switch che sul Pi, ma spia LAN sul Pi spenta. Tolgo l&#8217;alimentatore e lo riattacco. La spia POWER resta spenta. Provo un altro alimentatore: idem. Sospetto SBC morto.<\/p>\n<h2>Step 3: c&#8217;\u00e8 alimentazione?<\/h2>\n<p>Tiro fuori un multimetro economico, misuro la tensione del cavo USB-C dell&#8217;alimentatore: 5,15 V, dentro spec. Il problema non \u00e8 l&#8217;alimentatore. Provo a infilare la microSD del Pi morto in un altro Raspberry Pi 5 di backup: avvio in 30 secondi, dmesg pulito. Il problema \u00e8 hardware sul Pi originale. Probabilmente il regolatore di tensione lato SBC \u00e8 andato.<\/p>\n<p>A questo punto la troubleshooting di rete \u00e8 finita: non c&#8217;era niente da fare via comandi. Il device \u00e8 hardware-dead, non network-dead. Ma se avessi saltato i primi step e fossi corso a sostituire l&#8217;host senza verificare DNS, switch e fisico, avrei potuto perdere un&#8217;ora a configurare un Pi nuovo per scoprire poi che lo switch aveva la porta down per un altro motivo.<\/p>\n<h2>Comandi che uso spesso<\/h2>\n<p>Senza ordine preciso, la cassetta degli attrezzi:<\/p>\n<pre><code class=\"language-bash\">\nip link show\nip addr show\nip route show\nss -tunlp\narp -an\nping -c 4 -W 2 host\ntraceroute -n host\nmtr -n -c 10 host\ndig +short host @resolver\nnslookup host resolver\nnmap -sn 203.0.113.0\/24\ntcpdump -i eth0 -nn host 203.0.113.42\nethtool eth0\nsudo nft list ruleset\n<\/code><\/pre>\n<p>Su Mac molti hanno equivalenti con flag diversi (<code>ping<\/code> con <code>-W<\/code> in millisecondi, <code>traceroute<\/code> senza <code>-n<\/code> per default).<\/p>\n<h2>Un caso reale collaterale<\/h2>\n<p>Stessa settimana, un altro incidente: latenza folle (centinaia di ms) e pacchetti duplicati ogni <code>ping<\/code> verso un host in LAN. Sintomo classico di ARP duplicato su VLAN. <code>arp -an<\/code> dal portatile mostrava due MAC diversi per lo stesso IP. Un Pi vecchio, smesso da mesi e tirato fuori per un test, era stato ricollegato con IP statico identico a uno gi\u00e0 attivo. L&#8217;avevo dimenticato. Spegnimento del Pi vecchio, <code>arp -d 203.0.113.42<\/code> per pulire la cache, latenza tornata a valori normali in dieci secondi. Anche quel caso si \u00e8 risolto in cinque minuti perch\u00e9 ho seguito la checklist invece di indovinare.<\/p>\n<h2>Cosa funziona bene<\/h2>\n<p>Avere strumenti standard (ping, dig, mtr, tcpdump, ip) installati ovunque, su ogni Pi e mini PC. Niente tool esotici, niente script personalizzati. Funzionano dappertutto, e quando arriva il problema in mezzo alla notte non devi ricordarti come si lancia un binario custom.<\/p>\n<h2>Limiti<\/h2>\n<p>Il troubleshooting di rete su Wi-Fi \u00e8 sempre pi\u00f9 frustrante: client che migrano fra AP, mesh che fanno scelte opache, banda 2.4\/5\/6 GHz che cambia comportamento. Per quello tengo separati i client Wi-Fi dai server, e i server stanno tutti su ethernet. Niente Wi-Fi nei percorsi critici.<\/p>\n<h2>In pratica<\/h2>\n<p>Il metodo \u00e8 pi\u00f9 importante degli strumenti. Partire dal layer 1 (cavo, alimentazione, link) e salire (layer 2 MAC\/switch, layer 3 IP, layer 4 porte, layer 7 applicazione) evita di girare a vuoto. Quasi tutti i problemi si risolvono nei primi tre layer, e il tempo speso a verificare l&#8217;ovvio si recupera ampiamente non andando dietro alle ipotesi sbagliate.<\/p>\n<hr>\n<blockquote>\n<p>Immagine generata con ComfyUI Mac M1 \/ RealVisXL V5 Lightning.<\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>In un homelab che mescola Raspberry Pi, mini PC con Linux, un Mac, qualche IoT scemo e uno switch managed, prima o poi capita: &#8220;un host non risponde pi\u00f9, non capisco perch\u00e9&#8221;. E sotto la frustrazione c&#8217;\u00e8 quasi sempre la stessa cosa: una catena di ipotesi non verificate. Il modo per uscirne in tempi ragionevoli [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":182,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-12","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-self-hosting"],"_links":{"self":[{"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/12","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=12"}],"version-history":[{"count":10,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/12\/revisions"}],"predecessor-version":[{"id":361,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/12\/revisions\/361"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=\/wp\/v2\/media\/182"}],"wp:attachment":[{"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=12"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=12"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rpi.temporiti.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=12"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}