<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="it">
	<id>https://wiki.golem.linux.it/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Giomba</id>
	<title>GolemWiki - Contributi utente [it]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.golem.linux.it/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Giomba"/>
	<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/Speciale:Contributi/Giomba"/>
	<updated>2026-05-15T11:52:14Z</updated>
	<subtitle>Contributi utente</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Git&amp;diff=9796</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Git&amp;diff=9796"/>
		<updated>2026-03-17T22:31:48Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Importare un altro repository&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Questa pagina è in continua evoluzione&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Git è un [https://it.wikipedia.org/wiki/Controllo_versione_distribuito sistema di controllo versione] nato nel 2005 ad opera di Linus Torvalds con l'obiettivo principale di versionare il Kernel Linux.&lt;br /&gt;
Questa non vuole essere una guida esaustiva, ma un prontuario per i comandi di uso più comune, con l'aggiunta di qualche consiglio.&lt;br /&gt;
Per una trattazione completa, si rimanda alla [https://git-scm.com/book/en/v2 guida ufficiale], disponibile anche in [https://git-scm.com/book/it/v2 italiano].&lt;br /&gt;
&lt;br /&gt;
= Installazione e configurazione =&lt;br /&gt;
Su sistemi Debian-derivati:&lt;br /&gt;
 # apt-get install git&lt;br /&gt;
Su ArchLinux:&lt;br /&gt;
 # pacman -S git&lt;br /&gt;
Si consiglia l'uso di ZSH per i suggerimenti nel completamento dei comandi.&lt;br /&gt;
==Tutorial offline==&lt;br /&gt;
Usare il comando ''man'' per visualizzare il tutorial, suddiviso in due parti&lt;br /&gt;
 $ man gittutorial&lt;br /&gt;
 $ man gittutorial-2&lt;br /&gt;
==Configurazione==&lt;br /&gt;
I file di configurazione si trovano nei seguenti percorsi:&lt;br /&gt;
 &amp;lt;repository_git_attuale&amp;gt;/.git/config   ''# configurazione per singola cartella''&lt;br /&gt;
 ~/.gitconfig                           ''# configurazione base per l'utente corrente''&lt;br /&gt;
 /etc/gitconfig                         ''# configurazione di sistema (non necessariamente presente)''&lt;br /&gt;
&lt;br /&gt;
Alcune configurazioni importanti:&lt;br /&gt;
 $ git config user.name Tizio Caio&lt;br /&gt;
 $ git config user.email tiziocaio@example.com&lt;br /&gt;
 $ git config user.signingkey &amp;lt;FOOTPRINT GPG&amp;gt;&lt;br /&gt;
 $ git config core.editor nano&lt;br /&gt;
 $ git config alias.co checkout&lt;br /&gt;
Aggiungendo l'opzione &amp;lt;code&amp;gt;--global&amp;lt;/code&amp;gt;, tali impostazioni diventeranno globali per l'utente corrente e non limitate al repository dal quale viene lanciato il comando.&lt;br /&gt;
&lt;br /&gt;
===Identità multiple===&lt;br /&gt;
Nel caso in cui si volesse impostare una configurazione per tutti i repository all'interno di una determinata cartella, ad esempio per gestire separatamente un'identità personale ed una di lavoro, si può procedere come segue.&lt;br /&gt;
&lt;br /&gt;
Nel &amp;lt;code&amp;gt;~/.gitconfig&amp;lt;/code&amp;gt; si imposta, opzionalmente, una identità di fallback. I .gitconfig supplementari vengono richiamati soltanto se il repository è all'interno delle cartelle specificate da includeIf.&lt;br /&gt;
 [user]&lt;br /&gt;
         name = Tizio&lt;br /&gt;
         email = tiziocaio@example.com&lt;br /&gt;
 &lt;br /&gt;
 [includeIf &amp;quot;gitdir:~/workspace/&amp;quot;]&lt;br /&gt;
         path = ~/workspace/.gitconfig&lt;br /&gt;
 [includeIf &amp;quot;gitdir:~/personal/&amp;quot;]&lt;br /&gt;
         path = ~/personal/.gitconfig&lt;br /&gt;
&lt;br /&gt;
Poi, nei file &amp;lt;code&amp;gt;~/workspace/.gitconfig&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;~/personal/.gitconfig&amp;lt;/code&amp;gt; si esplicitano le identità da usare nel contesto di quelle sottodirectory:&lt;br /&gt;
 [user]&lt;br /&gt;
         name = Tizio Caio&lt;br /&gt;
         email = tiziocaio@professional.example.com&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning&lt;br /&gt;
|text=Nell'opzione &amp;lt;code&amp;gt;gitdir&amp;lt;/code&amp;gt;, è necessario specificare un path con un trailing slash, altrimenti prende solo la cartella specificata, e non anche le sottocartelle.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Comandi di base =&lt;br /&gt;
== init ==&lt;br /&gt;
Inizializzare un repository vuoto:&lt;br /&gt;
 $ git init &amp;lt;sottocartella&amp;gt;&lt;br /&gt;
Se non viene specificata una sottocartella sarà inizializzato in quella attuale.&lt;br /&gt;
Aggiungendo l'opzione &amp;lt;code&amp;gt;--bare&amp;lt;/code&amp;gt; sarà creato un repository di tipo ''bare'', ovvero privo della ''working directory'', adatto per essere usato come repository remoto e non come cartella di lavoro.&lt;br /&gt;
&lt;br /&gt;
== Stato dei file ==&lt;br /&gt;
Con il comando&lt;br /&gt;
 $ git status&lt;br /&gt;
si ottengono informazioni sui file attualmente presenti nella cartella di lavoro: se ce ne sono di nuovi (''U''), modificati (''M''), eliminati (''D''), etc... Darà inoltre informazioni sulla sincronizzazione tra la commit attuale e quella remota.&lt;br /&gt;
&lt;br /&gt;
== Aggiungere/Rimuovere files ==&lt;br /&gt;
Aggiungere un file '''nuovo''' (''untracked'') o '''modificato''' (rispetto all'ultima commit eseguita) nella ''Staging Area'', ovvero pronto per la prossima commit:&lt;br /&gt;
 $ git add &amp;lt;nome_file&amp;gt;&lt;br /&gt;
Rimuovere un file dall'indice dei file tracciati (risulterà quindi ''untracked''):&lt;br /&gt;
 $ git rm --cached &amp;lt;nome_file&amp;gt;&lt;br /&gt;
Omettendo &amp;lt;code&amp;gt;--cached&amp;lt;/code&amp;gt; il file sarà anche eliminato dalla cartella (quindi definitivamente).&lt;br /&gt;
&lt;br /&gt;
Rimuovere tutti i file dalla staging area:&lt;br /&gt;
 git reset HEAD -- .&lt;br /&gt;
&lt;br /&gt;
Rinominare un file: sebbene si possa utilizzare semplicemente il comando &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; della shell, questo fa sì che git debba poi intuire automagicamente se il file è stato spostato, oppure se è stato eliminato e poi creato di nuovo.&lt;br /&gt;
A volte lo spostamento del file non viene riconosciuto, e viene interpretato come eliminazione e successiva ri-aggiunta, generando lunghi e fastidiosi ''diff''.&lt;br /&gt;
Onde evitare questo problema, è opportuno segnalare l'operazione di spostamento/rinomina esplicitamente a git, tramite il comando apposito.&lt;br /&gt;
&lt;br /&gt;
 git mv source dest&lt;br /&gt;
&lt;br /&gt;
== Commit ==&lt;br /&gt;
Una volta aggiunti i file desiderati alla ''Staging Area'', la prossima commit è pronta per essere &amp;quot;consolidata&amp;quot;, cioè registrata nella cronologia del repository:&lt;br /&gt;
 $ git commit&lt;br /&gt;
Sarà aperto l'editor di testo scelto (vedi sezione configurazione) per scrivere un breve messaggio rappresentativo della commit. Se il messaggio non è eccessivamente lungo (come spesso accade) è sufficiente accodare al comando di commit l'opzione &amp;lt;code&amp;gt;-m &amp;quot;Messaggio per la commit&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
Un'altra scorciatoia utile può essere l'opzione &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt;, che aggiunge automaticamente tutti i file '''modificati''' (rispetto all'ultima commit eseguita) alla Staging Area senza dover eseguire &amp;lt;code&amp;gt;add&amp;lt;/code&amp;gt; ogni volta. Questa opzione agisce '''solo''' su quelli modificati e non su quelli '''nuovi''', per i quali la &amp;lt;code&amp;gt;add&amp;lt;/code&amp;gt; è d'obbligo almeno la prima volta. &lt;br /&gt;
&lt;br /&gt;
Il comando tipico di commit sarà quindi:&lt;br /&gt;
 $ git commit -a -m &amp;quot;Riparato bug. Aggiunti commenti al codice.&amp;quot;&lt;br /&gt;
L'esecuzione del comando commit senza l'aggiunta di file alla Staging Area (e quindi senza nemmeno l'opzione &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt;) non avrà alcun effetto.&lt;br /&gt;
&lt;br /&gt;
Se si commette un piccolo errore in una commit e si vuole modificare un file o il messaggio di commit stesso, senza però dover creare una nuova commit, si può di nuovo fare &amp;lt;code&amp;gt;add&amp;lt;/code&amp;gt; del file, e può essere aggiunta l'opzione:&lt;br /&gt;
 $ git commit --amend&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text=&amp;lt;code&amp;gt;git commit --amend&amp;lt;/code&amp;gt; modifica la storia del repository, perciò prestare particolare attenzione se si è già pushato su un server remoto}}&lt;br /&gt;
&lt;br /&gt;
== Log ==&lt;br /&gt;
 $ git log&lt;br /&gt;
elenca tutta la cronologia delle commit corredata di somma [https://it.wikipedia.org/wiki/Secure_Hash_Algorithm SHA-1], autore, data e ora di commit e messaggio.&lt;br /&gt;
&lt;br /&gt;
È uno dei comandi col maggior numero di opzioni, dalla formattazione dell'output (più informazioni sull'autore, sulle commit firmate) al filtraggio (per autore, per data, per messaggio, etc...). Alcune delle più importanti sono:&lt;br /&gt;
* &amp;lt;code&amp;gt;--all&amp;lt;/code&amp;gt;: elenca anche le commit relative ad altri ''branches'' (vedi sezione relativa)&lt;br /&gt;
* &amp;lt;code&amp;gt;--oneline&amp;lt;/code&amp;gt;: elenco sintetico con solamente ID SHA-1 e messaggio di commit&lt;br /&gt;
* &amp;lt;code&amp;gt;--graph&amp;lt;/code&amp;gt;: insieme a ''--all'' realizza una rappresentazione ASCII art della ramificazione del repository&lt;br /&gt;
Combinando insieme le 3 opzioni sarà visualizzata in modo sintetico (oneline) ed efficace (graph) tutta la cronologia del repo. Può essere utile definire un alias per questo comando (vedi sezione configurazione), ad esempio:&lt;br /&gt;
 $ git config alias.megalog &amp;quot;log --all --oneline --graph&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= Git online =&lt;br /&gt;
Utilizzare un server git (repository remoto) può servire per:&lt;br /&gt;
* avere un backup del proprio progetto&lt;br /&gt;
* condividere il proprio progetto con altri&lt;br /&gt;
* lavorare in team sul progetto&lt;br /&gt;
* fare un fork di un progetto già esistente&lt;br /&gt;
&lt;br /&gt;
== Configurare un repository remoto ==&lt;br /&gt;
=== Server privato ===&lt;br /&gt;
Se si ha a disposizione un server personale o aziendale (per esempio un VPS), questo può essere configurato come repository git remoto.&lt;br /&gt;
&lt;br /&gt;
Per una configurazione base, è sufficiente avere a disposizione un server SSH (quasi sicuramente già presente) e installare git (vedi sezione installazione). Eseguire quindi&lt;br /&gt;
 cd /home/utente/&amp;lt;cartella_git&amp;gt;&lt;br /&gt;
 git init --bare&lt;br /&gt;
Si noti in questo caso l'utilità dell'opzione &amp;lt;code&amp;gt;bare&amp;lt;/code&amp;gt;, che non crea una ''working directory'' su cui poter lavorare direttamente (spesso non necessaria su un server) ma solo il database dei file, risparmiando spazio di archiviazione.&lt;br /&gt;
&lt;br /&gt;
Se si desidera avere un'interfaccia web più user-friendly, si può installare [https://gitea.io/ Gitea] (al GOLEM abbiamo la [https://git.golem.linux.it/ nostra istanza]), oppure [https://about.gitlab.com/ GitLab], solo per citare due delle più famose piattaforme.&lt;br /&gt;
&lt;br /&gt;
=== Servizio online ===&lt;br /&gt;
In alternativa ci si può affidare ad un servizio online, come [https://github.com GitHub] (il più popolare), [https://about.gitlab.com/ GitLab] (che può essere anche usato on-premise) o [https://bitbucket.org BitBucket]. Dopo il login (email o nome utente e password) si può procedere alla creazione di un nuovo repository con l'apposito pulsante. Saranno forniti quindi due URL per accedere:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://github.com/NOME_UTENTE/NOME_REPOSITORY&amp;lt;/nowiki&amp;gt;  &lt;br /&gt;
 git@github.com:NOME_UTENTE/NOME_REPOSITORY.git  &lt;br /&gt;
&lt;br /&gt;
Generalmente, l'URL https viene utilizzato per sola lettura, per clonare e scaricare repository pubblici, e per prove temporanee, mentre l'URL ssh può essere utilizzato, in maniera più flessibile e automatica, grazie all'autenticazione tramite chiave, anche per la scrittura (ammesso di avere l'autorizzazione da parte del proprietario).&lt;br /&gt;
&lt;br /&gt;
== Collegare il repo locale a quello remoto ==&lt;br /&gt;
=== Nuovo ===&lt;br /&gt;
In entrambi i casi, dopo aver creato un repo remoto si deve comunicare a git di collegare quell'URL al repo locale.&lt;br /&gt;
 git remote add origin git@github.com:NOME_UTENTE/NOME_REPOSITORY.git  ''# Aggiungere l'URL''&lt;br /&gt;
 git push                                                              ''# Inviare il lavoro locale sul server''&lt;br /&gt;
'''Nota:''' il nome ''origin'' (così come ''master'' per il ramo principale) è solamente una convenzione e può essere scelto a piacere.&lt;br /&gt;
 &lt;br /&gt;
=== Esistente ===&lt;br /&gt;
Se il repo a cui collegarsi esiste già, usiamo il comando&lt;br /&gt;
 git clone git@github.com:NOME_UTENTE/NOME_REPOSITORY.git&lt;br /&gt;
&lt;br /&gt;
Nel log, tutti i rami figureranno come &amp;lt;code&amp;gt;origin/ramo-1&amp;lt;/code&amp;gt;. Per potersi ''agganciare'' con un ramo locale:&lt;br /&gt;
 git checkout origin/ramo-1                       ''# Spostarsi sulla commit puntata da ramo-1 remoto''&lt;br /&gt;
 git checkout -b ramo-1                           ''# Creare un nuovo ramo locale su questa commit''&lt;br /&gt;
 git branch --set-upstream-to=origin/ramo-1       ''# Agganciare ramo-1 a origin/ramo-1''&lt;br /&gt;
'''Nota:''' non è obbligatorio che il ramo locale abbia lo stesso nome del ramo remoto a cui è agganciato (ecco perché questi passaggi non sono automatici), ma fare il contrario sarebbe follia!&lt;br /&gt;
&lt;br /&gt;
== Push e Pull ==&lt;br /&gt;
A questo punto si può leggere e scrivere sui rami remoti del server origin/master, origin/ramo-1, etc. servendosi dei rami locali master, ramo-1, etc. coi quali eseguiamo l'ordinaria amministrazione del progetto.&lt;br /&gt;
Usiamo per leggere e scrivere (rispettivamente) i comandi&lt;br /&gt;
 git pull&lt;br /&gt;
 git push&lt;br /&gt;
&lt;br /&gt;
Per ottenere tutti gli oggetti remoti (rami, tags, ...) creati da collaboratori, è necessario aggiungere&lt;br /&gt;
 git pull --all&lt;br /&gt;
&lt;br /&gt;
e quindi per visualizzare i branch remoti&lt;br /&gt;
 git branch --remotes&lt;br /&gt;
&lt;br /&gt;
= Lavorare con git =&lt;br /&gt;
== Evitare tracciamento file ==&lt;br /&gt;
=== Artefatti e configurazioni del repository ===&lt;br /&gt;
Talvolta è necessario evitare di tracciare alcuni file, ad esempio gli artifatti della compilazione (file oggetto e binari), file di configurazione, file che contengono dati sensibili, e così via.&lt;br /&gt;
Per farlo, è sufficiente aggiungere il nome del file nel file nascosto &amp;lt;code&amp;gt;.gitignore&amp;lt;/code&amp;gt; nella root del repository, e committarlo.&lt;br /&gt;
Si possono aggiungere anche nomi di directory o pattern con wildcard.&lt;br /&gt;
&lt;br /&gt;
=== File globali ===&lt;br /&gt;
Talvolta succede di &amp;quot;sporcare&amp;quot; il repository con file specifici di qualche applicazione che il singolo sviluppatore utilizza su tutti i repository, per esempio file di configurazione dell'editor di testo o di backup (&amp;lt;code&amp;gt;*.swp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;*.~&amp;lt;/code&amp;gt;).&lt;br /&gt;
Si può dunque usare un file &amp;lt;code&amp;gt;.gitignore&amp;lt;/code&amp;gt; globale per l'utente, che può essere messo nella &amp;lt;code&amp;gt;~&amp;lt;/code&amp;gt; e specificato con:&lt;br /&gt;
 git config --global core.excludesfile ~/.gitignore&lt;br /&gt;
&lt;br /&gt;
=== Smettere di tracciare file ignorati ===&lt;br /&gt;
Può capitare di aggiungere un artefatto al repository, per sbaglio, e volerlo poi successivamente mettere tra i file ignorati.&lt;br /&gt;
Però ''git'' ormai sta tenendo traccia di quel file, dunque come fare?&lt;br /&gt;
&lt;br /&gt;
* Aggiungere il file al &amp;lt;code&amp;gt;.gitignore&amp;lt;/code&amp;gt;&lt;br /&gt;
* Vedere il/i file che sono tracciati, ma che dovrebbero essere ignorati:&lt;br /&gt;
 git ls-files -ci --exclude-standard&lt;br /&gt;
* Rimuovere forzatamente i file indesiderati:&lt;br /&gt;
 git rm --cached &amp;lt;file&amp;gt;&lt;br /&gt;
* git commit&lt;br /&gt;
&lt;br /&gt;
== Lavorare in team ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
Quando capita di condividere il codice con altre persone che utilizzano Windows, onde evitare problemi subdoli causati dalla presenza di diversi terminatori di riga nel codice sorgente (CRLF su Windows e LF su Linux), la cosa corretta da fare è configurare l'opzione &amp;lt;code&amp;gt;autocrlf&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;. In questo modo, i file sul repository conterranno sempre &amp;lt;code&amp;gt;LF&amp;lt;/code&amp;gt; come terminatore, e saranno opportunamente convertiti in &amp;lt;code&amp;gt;CRLF&amp;lt;/code&amp;gt; (e viceversa) quando si fa il checkout (e il commit) su Windows.&lt;br /&gt;
&lt;br /&gt;
 git config core.autocrlf true&lt;br /&gt;
&lt;br /&gt;
Per MAC OS X, questo problema non si pone.&lt;br /&gt;
&lt;br /&gt;
=== Merge ===&lt;br /&gt;
[[File:Git-bad-merging.png|thumb|Una piazzola]]&lt;br /&gt;
Quando si lavora in gruppo c'è sempre il rischio di &amp;quot;incrociarsi&amp;quot; nel pushare nuove commit, con conseguenti intrecci nella storia del progetto (amichevolmente detti &amp;quot;piazzole di sosta&amp;quot;).&lt;br /&gt;
Per evitare ciò conviene seguire una procedura standard: non so se è la migliore però finora non ha mai dato problemi.&lt;br /&gt;
&lt;br /&gt;
#Effettuare le proprie modifiche, al termine verificare se altri utenti hanno effettuato aggiornamenti nel mentre utilizzando&lt;br /&gt;
#:&amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
#:Se non viene stampato alcunché si può saltare al punto 6 effettuando la commit e pushando regolarmente.&lt;br /&gt;
#Altrimenti, aggiungere i files modificati alla ''staging area'' ed &amp;quot;accantonarli&amp;quot; in una '''stash'''. È utile specificare un messaggio di stash (come fosse una commit) per individuarla più facilmente nel caso ci fossero altre stash.&lt;br /&gt;
#: &amp;lt;code&amp;gt;git stash push -m &amp;quot;merging in progress&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
#A questo punto la cartella è stata riportata all'ultima commit scaricata. Effettuare il pull per scaricare le novità&lt;br /&gt;
#: &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt;&lt;br /&gt;
#Recuperare le modifiche dallo stash. Questa operazione è analoga ad un merge, ma al termine non rimarrà traccia nella storia, che proseguirà linearmente&lt;br /&gt;
#: &amp;lt;code&amp;gt;git stash pop&amp;lt;/code&amp;gt;&lt;br /&gt;
#Se il ''merge'' dallo stash va a buon fine si può passare al punto successivo, la stash viene eliminata automaticamente. Se invece le modifiche fatte confliggono con le novità appena scaricato (ciò viene notificato da git) è necessario integrare manualmente i punti (individuabili anche con &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;), ed eliminare la stash manualmente (&amp;lt;code&amp;gt;git stash list&amp;lt;/code&amp;gt; per individuarla, &amp;lt;code&amp;gt;git stash drop stash@{xxx}&amp;lt;/code&amp;gt; per eliminarla).&lt;br /&gt;
#Il patema è finito, si può fare la commit e pushare, sperando che nella lettura di questa lista nessuno abbia fatto altro. Altrimenti ripartire dal punto 1.&lt;br /&gt;
#: &amp;lt;code&amp;gt;git commit -m &amp;quot;commit interessante&amp;quot;&amp;lt;br/&amp;gt;git push&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rebase ===&lt;br /&gt;
Generalmente ogni membro del team lavora sui feature o bugfix su un branch dedicato, che nasce da quello principale (di solito ''master'' o ''main'').&lt;br /&gt;
Quando il lavoro è terminato, le modifiche vengono trasferite dal branch dedicato al branch principale.&lt;br /&gt;
Se non ci sono state modifiche sul branch principale, questo può essere fatto avanzare per allinearsi al branch dedicato (operazione detta di ''fast-forward'').&lt;br /&gt;
Tuttavia, spesso e volentieri capita che nel frattempo sono state trasferite altre modifiche sul branch principale (es. da un altro membro del team), per cui non è possibile eseguire un ''fast-forward'' del branch principale verso quello dedicato, perché quello dedicato &amp;quot;nasce&amp;quot; da una situazione precedente all'attuale stato del branch principale.&lt;br /&gt;
&lt;br /&gt;
Ciò che si può fare per permettere il fast-forward, è di ''ribasare'' il branch dedicato sul nuovo stato del branch principale.&lt;br /&gt;
Questo significa riscriverne la storia riapplicando tutti i suoi commit come se fossero nati dall'attuale stato del branch principale.&lt;br /&gt;
Per ribasare un branch dedicato su un nuovo commit genitore (es. il branch ''main''), spostarsi sul branch dedicato, dopodiché:&lt;br /&gt;
&lt;br /&gt;
 $ git rebase &amp;lt;newparent&amp;gt; # es. git rebase main&lt;br /&gt;
&lt;br /&gt;
''git'' non è sempre in grado di capire da quale commit è inizialmente nato il branch dedicato corrente, per cui potrebbe tentare di applicare su ''main'' anche altri commit precedenti alla diramazione - specialmente se si è riscritta la storia tramite altri rebase in qualche altro momento.&lt;br /&gt;
Per suggerire a ''git'' qual è il commit genitore in maniera esplicita, utilizzare invece questo comando:&lt;br /&gt;
&lt;br /&gt;
 $ git rebase --onto &amp;lt;newparent&amp;gt; &amp;lt;oldparent&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un modo esplicito per controllare cosa git abbia intenzione di fare dei nostri commit prima che provi davvero ad applicarli, è utilizzare la funzionalità di rebase interattivo, che, appunto, permette di vedere i commit che stanno per essere applicati - ed eventualmente di correggere al volo il loro numero, ordine e anche messaggio e contenuto, se proprio necessario.&lt;br /&gt;
Per il rebase interattivo, utilizzare l'opzione &amp;lt;code&amp;gt;--interactive&amp;lt;/code&amp;gt; (eventualmente combinata con le altre di cui sopra):&lt;br /&gt;
&lt;br /&gt;
 $ git rebase --interactive &amp;lt;newparent&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nel caso in cui il branch su cui si sta ribasando sia cambiato in maniera sostanziale rispetto alla condizione originale da cui si è partiti (es. un altro membro del team ha cambiato le stesse linee nello stesso file), quando git applicherà il vostro commit problematico, si genererà un conflitto, che andrà corretto manualmente.&lt;br /&gt;
&lt;br /&gt;
I conflitti sono contrassegnati nei file problematici con la seguente sintassi:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&lt;br /&gt;
 contenuto nella nuova testa su cui si sta ribasando&lt;br /&gt;
 =====&lt;br /&gt;
 contenuto originale sulla vecchia testa su cui si era basati&lt;br /&gt;
 =====&lt;br /&gt;
 contenuto nel commit problematico&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il contenuto dei file problematici può essere aggiustato in vari modi:&lt;br /&gt;
 - modificando manualmente il file&lt;br /&gt;
 - facendosi utilizzare da un ''merge tool'' (per vedere quelli supportati e installati usare &amp;lt;code&amp;gt;git mergetool --tool-help&amp;lt;/code&amp;gt;)&lt;br /&gt;
 - utilizzando esplicitamente una delle due versioni, ignorando il conflitto (eg. sovrascrivendo esplicitamente le proprie modifiche, o le modifiche dell'altro)&lt;br /&gt;
&lt;br /&gt;
Per scegliere esplicitamente una versione ignorando totalmente le modifiche dell'altro:&lt;br /&gt;
&lt;br /&gt;
 $ git checkout --theirs path/file # se si ritiene che il commit che si sta applicando sia la versione corretta, essenzialmente sovrascrivendo le modifiche degli altri&lt;br /&gt;
 $ git checkout --ours path/file # se si ritiene che invece il commit che si sta applicando '''non''' sia corretto, essenzialmente confermando che il branch su cui si sta ribasando contenga la versione corretta, sovrascrivendo le proprie modifiche&lt;br /&gt;
&lt;br /&gt;
Una volta modificato il contenuto problematico del/dei file in uno dei modi sopra suggeriti, si può continuare col rebase:&lt;br /&gt;
&lt;br /&gt;
 $ git add file_problematici&lt;br /&gt;
 $ git rebase --continue&lt;br /&gt;
&lt;br /&gt;
Questo può chiaramente generare altri conflitti nei file successivi, che andranno risolti, finché il rebase non è completo.&lt;br /&gt;
&lt;br /&gt;
Per interrompere un rebase a metà e ripartire da capo, utilizzare il comando per abortire:&lt;br /&gt;
&lt;br /&gt;
 $ git rebase --abort&lt;br /&gt;
&lt;br /&gt;
=== Blame ===&lt;br /&gt;
Per scoprire chi è stato l'ultimo che ha cambiato un pezzo di codice:&lt;br /&gt;
&lt;br /&gt;
 git blame path/file.c&lt;br /&gt;
&lt;br /&gt;
A volte può capitare può capitare che tutte le ultime modifiche siano assegnate alla stessa persona.&lt;br /&gt;
Questo, per esempio, avviene quando si fanno commit &amp;quot;batch&amp;quot; di riorganizzazione di tutto il repository, es. formattazione automatica di tutto il codice.&lt;br /&gt;
Si può istruire git per ignorare questo tipo di commit quando si va a fare il blame.&lt;br /&gt;
&lt;br /&gt;
Creare un file ''.git-blame-ignore-revs'' e popolarlo con l'elenco degli hash dei commit da ignorare, esempio:&lt;br /&gt;
 930b609250f7bf0361ede392432f95b9b2a78fb2&lt;br /&gt;
 7819dbca705d92d1551e58a82dd2ae9881c90e52&lt;br /&gt;
&lt;br /&gt;
Dopodiché, istruire git per utilizzarlo:&lt;br /&gt;
 git config blame.ignoreRevsFile .git-blame-ignore-revs&lt;br /&gt;
&lt;br /&gt;
== Fondere più commit in uno solo ==&lt;br /&gt;
La storia attuale. In &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;blu&amp;lt;/span&amp;gt; i commit che si vogliono ''squashare'' in uno solo.&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;59e5834 moved files&lt;br /&gt;
 37af4b7 added README.md and LICENSE file&lt;br /&gt;
 cd37805 repository structured as an arduino library&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;strong&amp;gt;ac95564&amp;lt;/strong&amp;gt; added comments for UDP part&lt;br /&gt;
&lt;br /&gt;
Si sceglie l'ultimo commit appena prima:&lt;br /&gt;
 git rebase --interactive &amp;lt;strong&amp;gt;ac95564&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si apre automaticamente l'editor, e si vedono i commit (in ordine ''inverso'').&lt;br /&gt;
Sostituire &amp;lt;code&amp;gt;pick&amp;lt;/code&amp;gt; (p) con &amp;lt;code&amp;gt;squash&amp;lt;/code&amp;gt; (s) per fondere i commit assieme, eccetto su quello più in alto.&lt;br /&gt;
&lt;br /&gt;
Quando si chiude l'editor, si apre una nuova finestra dove è possibile editare il nuovo messaggio di commit.&lt;br /&gt;
&lt;br /&gt;
Per annullare il rebase in corso, cancellare tutto il contenuto dell'editor e salvare.&lt;br /&gt;
&lt;br /&gt;
== Dividere un commit in più parti ==&lt;br /&gt;
La funzionalità di &amp;lt;code&amp;gt;rebase&amp;lt;/code&amp;gt; può essere utilizzata anche per riscrivere dei commit già esistenti, e aggiungerne di nuovi.&lt;br /&gt;
&lt;br /&gt;
Scegliere il commit che si vuole suddividere, poniamo che sia &amp;lt;code&amp;gt;ac95564&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 git rebase --interactive ac95564&lt;br /&gt;
&lt;br /&gt;
Nell'editor, sostituire &amp;lt;code&amp;gt;pick&amp;lt;/code&amp;gt; con &amp;lt;code&amp;gt;edit&amp;lt;/code&amp;gt; in corrispondenza del commit che si desidera modificare, dopodiché avviare il rebase chiudendo l'editor.&lt;br /&gt;
Ad un certo punto, il rebase si interrompe, in corrispondenza del commit scelto, che può quindi essere modificato.&lt;br /&gt;
&lt;br /&gt;
Prima togliere le modifiche dalla staging area con:&lt;br /&gt;
&lt;br /&gt;
 git reset HEAD~&lt;br /&gt;
&lt;br /&gt;
Dopo riaggiungere ciò che si desidera aggiungere al primo commit, e committare, poi procedere col secondo, e così via.&lt;br /&gt;
Esempio:&lt;br /&gt;
&lt;br /&gt;
 git add &amp;lt;file1&amp;gt;&lt;br /&gt;
 git commit&lt;br /&gt;
 git add &amp;lt;file2&amp;gt; --patch&lt;br /&gt;
 git commit&lt;br /&gt;
 git add &amp;lt;file2&amp;gt;&lt;br /&gt;
 git commit&lt;br /&gt;
&lt;br /&gt;
Una volta soddisfatti:&lt;br /&gt;
&lt;br /&gt;
 git rebase --continue&lt;br /&gt;
&lt;br /&gt;
== Importare un altro repository ==&lt;br /&gt;
È possibile importare un repository, con tutta la sua history, all'interno di un altro repository, come una subdirectory.&lt;br /&gt;
&lt;br /&gt;
 git subtree add --prefix &amp;lt;subdir&amp;gt; https://git.golem.linux.it/some/repository main&lt;br /&gt;
&lt;br /&gt;
Si può anche importare il repository in una subdirectory squashando completamente la history, aggiungendo il parametro ''--squash''.&lt;br /&gt;
&lt;br /&gt;
== Ignorare spazi bianchi ==&lt;br /&gt;
A volte capita di trovare codice scritto con editor non degni di questo nome, che non eliminano gli spazi vuoti in fondo alle righe.&lt;br /&gt;
Per evitare di suscitare le ire degli scellerati manutentori, ed evitare di riempire il commit con centinaia di modifiche di spazi vuoti, usare:&lt;br /&gt;
&lt;br /&gt;
 git diff -U0 -w --no-color | git apply --cached --ignore-whitespace --unidiff-zero -&lt;br /&gt;
&lt;br /&gt;
== Eliminare branch ==&lt;br /&gt;
* Locale&lt;br /&gt;
 git branch -d ''branchname''&lt;br /&gt;
&lt;br /&gt;
* Remoto&lt;br /&gt;
 git push ''origin'' --delete ''branchname''&lt;br /&gt;
&lt;br /&gt;
== Copie locali multiple ==&lt;br /&gt;
Quando si deve operare contemporaneamente su più di un branch dello stesso progetto è comodo clonare più volte il repository in cartelle separate, così da fare checkout come meglio si crede.&lt;br /&gt;
Ma così facendo si creano due working copy indipendenti, con cartelle &amp;lt;code&amp;gt;.git&amp;lt;/code&amp;gt; duplicate e branch locali a rigori differenti.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git worktree&amp;lt;/code&amp;gt; permette di effettuare, appunto, dei checkout in cartelle diverse dal progetto principale ma afferenti ad una stessa &amp;lt;code&amp;gt;.git&amp;lt;/code&amp;gt;. &lt;br /&gt;
Oltre a ridurre l'occupazione di disco, le due copie locali condivideranno l'albero dei commit rendendo più agevoli le operazioni di merge/log.&lt;br /&gt;
&lt;br /&gt;
Per creare una nuova copia locale (''linked working tree'') associata ad un certo branch&lt;br /&gt;
&lt;br /&gt;
 $ git worktree add path [branch]&lt;br /&gt;
&lt;br /&gt;
Se non si specifica il branch ne viene creato uno nuovo, a partire dal commit corrente, prendendo il nome dalla directory di destinazione specificata nel path.&lt;br /&gt;
Per evitare confusione, specificare un path out-of-tree, per esempio:&lt;br /&gt;
&lt;br /&gt;
 $ cd myrepo_master&lt;br /&gt;
 $ git worktree add ../myrepo_branch&lt;br /&gt;
&lt;br /&gt;
Una volta terminato il lavoro sul worktree separato, per rimuoverlo non eliminare direttamente la directory ad esso associata, ma utilizzare l'apposito comando git, così da mantenere consistente lo stato di &amp;lt;code&amp;gt;.git&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 $ git worktree delete ../myrepo_branch&lt;br /&gt;
&lt;br /&gt;
Per approfondire, consultare la [https://git-scm.com/docs/git-worktree guida ufficiale].&lt;br /&gt;
&lt;br /&gt;
== Trovare il commit che introduce un bug ==&lt;br /&gt;
A volte si sa che il software al commit taggato X funziona perfettamente, mentre a un successivo tag Y, presenta un bug.&lt;br /&gt;
Il numero di commit tra X e Y può anche essere grande, ma tramite una ricerca binaria, in pochi passaggi è possibile identificare il commit che introduce il problema, avendo git che propone dei commit da testare, e fornendogli noi informazioni sulla loro bontà di funzionamento.&lt;br /&gt;
Per farlo, si utilizza il comando &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Per avviare una sessione di &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;:&lt;br /&gt;
 git bisect start&lt;br /&gt;
 git bisect good X&lt;br /&gt;
 git bisect bad Y&lt;br /&gt;
&lt;br /&gt;
A questo punto git sceglierà automaticamente il commit che cade nel mezzo (chiamiamolo commit ''M''), e chiederà di provarlo.&lt;br /&gt;
Una volta provato il software al commit ''M'', saremo in grado di stabilire se ha il bug o meno, e lo si indicherà a git dando di nuovo un comando:&lt;br /&gt;
 git bisect good HEAD&lt;br /&gt;
oppure&lt;br /&gt;
 git bisect bad HEAD&lt;br /&gt;
a seconda che il commit M a cui ci troviamo sia buono, oppure presenti il bug.&lt;br /&gt;
&lt;br /&gt;
Una volta dato il nuovo comando di &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;, git sceglierà un nuovo commit ''N'', di nuovo a metà tra i due commit estremi &amp;quot;buono&amp;quot; e &amp;quot;cattivo&amp;quot;, dimezzando nuovamente lo spazio di ricerca: il commit andrà provato, e si continuerà a comunicare a git la sua bontà o meno, dando nuovi comandi &amp;lt;code&amp;gt;git bisect good/bad&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Questi passaggi di bisect e test vanno ripetuti &amp;quot;un po' di volte&amp;quot;, finché git non avrà sezionato tutti i commit tra X e Y, e a quel punto comunicherà quale è il primo commit che introduce il problema.&lt;br /&gt;
&lt;br /&gt;
Il bug è adesso ben circoscritto e può essere studiato.&lt;br /&gt;
&lt;br /&gt;
Quando si è trovato il commit incriminato, terminare la sessione di &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt; con:&lt;br /&gt;
 git bisect reset&lt;br /&gt;
&lt;br /&gt;
La ricerca avrà richiesto, al massimo, di controllare &amp;lt;math&amp;gt;log_{2}(C)&amp;lt;/math&amp;gt; commit diversi, dove ''C'' è il numero di commit che separa X da Y.&lt;br /&gt;
&lt;br /&gt;
== Gestire files di grandi dimensioni (git lfs) ==&lt;br /&gt;
Git nasce con l'obiettivo di gestire dei files di codice sorgente, quindi plain-text; per questo non è molto efficace nella gestione di files contenenti dati in formato diverso quali possono essere, ad esempio, [https://it.wikipedia.org/wiki/JPEG jpeg], [https://it.wikipedia.org/wiki/Portable_Network_Graphics png], [https://it.wikipedia.org/wiki/Portable_Document_Format pdf] ecc.&lt;br /&gt;
&lt;br /&gt;
Per ovviare a questa carenza sono stati sviluppati vari strumenti da installare come add-on; uno di questi è [https://git-lfs.com/ git-lfs]&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
Su sistemi Debian-derivati:&lt;br /&gt;
 # apt-get install git-lfs&lt;br /&gt;
Su ArchLinux:&lt;br /&gt;
 # pacman -S git-lfs&lt;br /&gt;
Su Windows: è già presente nell'installazione standard di git&lt;br /&gt;
&lt;br /&gt;
=== Attivazione ===&lt;br /&gt;
Per poter usare git-lfs occorre che questo sia &amp;quot;attivato&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Attivazione globale a livello utente ====&lt;br /&gt;
Attiva git-lfs globalmente, questo significa che potrà essere usato in ogni repository:&lt;br /&gt;
 git lfs install&lt;br /&gt;
L'attivazione locale è necessaria solo la prima volta.&lt;br /&gt;
==== Attivazione per un singolo repository ====&lt;br /&gt;
È possibile attivare git-lfs anche a livello di singolo repository:&lt;br /&gt;
 git lfs install --local&lt;br /&gt;
==== Disattivazione globale a livello utente ====&lt;br /&gt;
È possibile disattivare globalmente git-lfs:&lt;br /&gt;
 git lfs uninstall&lt;br /&gt;
in questo caso se si volesse tornare ad usarlo occorrerà attivarlo nuovamente.&lt;br /&gt;
==== Disattivazione per singolo repository ====&lt;br /&gt;
Se attivato per singolo repository è possibile disattivarlo&lt;br /&gt;
 git lfs uninstall --local&lt;br /&gt;
&lt;br /&gt;
=== Gestire i files da tracciare ===&lt;br /&gt;
Occorre impostare quali file (o tipi di file) tracciare. Se, ad esmpio, si volessero tracciare tutti i files di tipo pdf:&lt;br /&gt;
 git lfs track &amp;quot;*.pdf&amp;quot;&lt;br /&gt;
Questo comando aggiunge le informazioni al file &amp;lt;code&amp;gt;.gitattributes&amp;lt;/code&amp;gt;; occorre quindi ricordarsi di fare il commit di questo file (&amp;lt;code&amp;gt;git add .gitattributes&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
A questo punto è possibile lavorare normalmente, i commit e push riguardanti files che abbiamo definito tracciati da git-lfs saranno gestiti in modo trasparente.&lt;br /&gt;
&lt;br /&gt;
=== Comandi aggiunti da git-lfs ===&lt;br /&gt;
Elenco dei comanti aggiunti da git-lfs:&lt;br /&gt;
 git lfs --help&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Howto]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Appunti_Wireguard&amp;diff=9792</id>
		<title>Appunti Wireguard</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Appunti_Wireguard&amp;diff=9792"/>
		<updated>2026-03-07T22:53:40Z</updated>

		<summary type="html">&lt;p&gt;Giomba: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note&lt;br /&gt;
|type=warning&lt;br /&gt;
|text=Questa pagina contiene alcune informazioni sparse su Wireguard provenienti dalla vecchia pagina sulla VPN del GOLEM.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Sul server, installiamo ''wireguard'' e ''wireguard-tools''.&lt;br /&gt;
Il primo pacchetto contiene il core della gestione VPN, il secondo ci è utile per amministrare facilmente le connessioni (vedi wg-quick).&lt;br /&gt;
&lt;br /&gt;
 apt install wireguard wireguard-tools&lt;br /&gt;
&lt;br /&gt;
Su sistemi debian &amp;lt;= 10 (buster), il pacchetto non è presente nei repository mainline ma deve essere aggiunto tramite i debian backports.&lt;br /&gt;
Nota: potrebbe anche essere necessario aggiornare il kernel!&lt;br /&gt;
&lt;br /&gt;
=== Configurazione del server ===&lt;br /&gt;
A differenza di altri protocolli VPN come OpenVPN, wireguard ha un approccio &amp;quot;peer to peer&amp;quot;, per cui la procedura di configurazione del server rispecchia per buona parte quella di ciascun client.&lt;br /&gt;
&lt;br /&gt;
Innanzitutto è necessario generare la coppia di chiavi pubblica/privata del server&lt;br /&gt;
&lt;br /&gt;
 # wg genkey | tee /etc/wireguard/server.privkey | wg pubkey &amp;gt; /etc/wireguard/vpn.golem.linux.it.pubkey&lt;br /&gt;
&lt;br /&gt;
Per la configurazione è sufficiente creare un singolo file, ad esempio &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # Carica la chiave privata dal percorso dove la abbiamo generata precedentemente&lt;br /&gt;
 PostUp = wg set %i private-key /etc/wireguard/vpn.golem.linux.it.privkey&lt;br /&gt;
 # Porta UDP di ascolto del server, a piacere&lt;br /&gt;
 ListenPort = 51820&lt;br /&gt;
 # Indirizzo del server all'interno della VPN&lt;br /&gt;
 Address = 10.40.0.1&lt;br /&gt;
&lt;br /&gt;
Il server può essere avviato tramite systemd, e con lo stesso sistema si può impostare l'avvio automatico.&lt;br /&gt;
Si noti che &amp;lt;code&amp;gt;@wg0&amp;lt;/code&amp;gt; corrisponde al file di configurazione precedentemente creato.&lt;br /&gt;
&lt;br /&gt;
 # systemctl start wg-quick@wg0&lt;br /&gt;
 # systemctl enable wg-quick@wg0&lt;br /&gt;
&lt;br /&gt;
=== Configurazione del client ===&lt;br /&gt;
Lato client, generare una coppia di chiavi pubblica/privata:&lt;br /&gt;
&lt;br /&gt;
 $ wg genkey | tee client.example.com.privkey | wg pubkey &amp;gt; client.example.com.pubkey&lt;br /&gt;
&lt;br /&gt;
Comunicare dunque la propria chiave pubblica al sysop, che si occuperà di aggiungerla tra quelle consentite al server, e vi comunicherà il vostro indirizzo IP, da aggiungere al file di configurazione, come segue. Prestare particolare attenzione a modificare i campi della sezione &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt;, come indicato nelle note.&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # PrivateKey = YoUrGoRgEoUsAnDsEcUrEpRiVaTeKeY=               # vedi note, scegliere questo...&lt;br /&gt;
 # PostUp = wg set %i private-key ./client.example.com.privkey # vedi note,                 ...oppure questo&lt;br /&gt;
 Address = 2001:470:c844:100::'''200'''/64                           # vedi note&lt;br /&gt;
 &lt;br /&gt;
 # vpn.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = w63aGvoyPaUTgA8nW/NJS6Qqp2hUFvHRBbIH8Qb5ISY=   &lt;br /&gt;
 AllowedIPs = 2000::/3                                      &lt;br /&gt;
 Endpoint = vpn.golem.linux.it:51280&lt;br /&gt;
 PersistentKeepalive = 37&lt;br /&gt;
&lt;br /&gt;
'''Note'''&lt;br /&gt;
* &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''locale'')&lt;br /&gt;
** scegliere una delle seguenti opzioni per indicare la chiave privata del client, scommentando la riga apposita.&lt;br /&gt;
*** ''PrivateKey'': chiave privata del client, da custodire con cura, inline&lt;br /&gt;
*** ''PostUp = command'': chiave privata del client, da custodire con cura, e caricata automaticamente da un file esterno (es. creato col comando mostrato in precedenza)&lt;br /&gt;
** ''Address'': indirizzo IP comunicato dal sysop: riportarlo accuratamente, altrimenti non sarà possibile utilizzare la VPN&lt;br /&gt;
* &amp;lt;code&amp;gt;[Peer]&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''remoto'' / server)&lt;br /&gt;
** ''PublicKey'': chiave pubblica del server (sì, è proprio quella)&lt;br /&gt;
** ''AllowedIPs'': indirizzi raggiungibili tramite la VPN, a scelta:&lt;br /&gt;
*** &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;: solo la [[IPv6 @ GOLEM | rete IPv6 virtuale del GOLEM]]&lt;br /&gt;
*** &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;: tutti gli indirizzi IPv6 (è possibile utilizzare la VPN del GOLEM per [[IPv6 @ GOLEM | navigare ''davvero'' in IPv6]])&lt;br /&gt;
** ''Endpoint'': indirizzo del server&lt;br /&gt;
** ''PersistentKeepalive'': timer per mantenimento del tunnel attivo (in secondi); particolarmente utile se l'indirizzo IP del client cambia o è soggetto a NAT&lt;br /&gt;
&lt;br /&gt;
La connessione può essere attivata tramite systemd come sul server (spostandola in ''/etc/wireguard/'', vedi sopra), oppure manualmente utilizzando &amp;lt;code&amp;gt;wg-quick&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 # Attivazione del tunnel&lt;br /&gt;
 wg-quick up client.example.conf&lt;br /&gt;
 # Disattivazione del tunnel&lt;br /&gt;
 wg-quick down client.example.conf&lt;br /&gt;
&lt;br /&gt;
Naturalmente, affinché il collegamento funzioni, il client deve essere abilitato alla connessione dal sysop.&lt;br /&gt;
Per farlo, il sysop aggiunge un blocco peer per ciascun client alla configurazione &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;, così:&lt;br /&gt;
&lt;br /&gt;
 ... altri client ...&lt;br /&gt;
&lt;br /&gt;
 # porceddu.net.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = tHeClIeNtFaNtAsTiCpUbLiCkEy=&lt;br /&gt;
 AllowedIPs = 2001:470:c844:100::200/128, 2001:470:c844:200::/62&lt;br /&gt;
&lt;br /&gt;
 ... altri client ...&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Appunti_Wireguard&amp;diff=9791</id>
		<title>Appunti Wireguard</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Appunti_Wireguard&amp;diff=9791"/>
		<updated>2026-03-07T22:50:18Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Raccolti appunti dalla pagina VPN del GOLEM, non più manutenuta&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Wireguard ==&lt;br /&gt;
Sul server, installiamo ''wireguard'' e ''wireguard-tools''.&lt;br /&gt;
Il primo pacchetto contiene il core della gestione VPN, il secondo ci è utile per amministrare facilmente le connessioni (vedi wg-quick).&lt;br /&gt;
&lt;br /&gt;
 apt install wireguard wireguard-tools&lt;br /&gt;
&lt;br /&gt;
Su sistemi debian &amp;lt;= 10 (buster), il pacchetto non è presente nei repository mainline ma deve essere aggiunto tramite i debian backports.&lt;br /&gt;
Nota: potrebbe anche essere necessario aggiornare il kernel!&lt;br /&gt;
&lt;br /&gt;
=== Configurazione del server ===&lt;br /&gt;
A differenza di altri protocolli VPN come OpenVPN, wireguard ha un approccio &amp;quot;peer to peer&amp;quot;, per cui la procedura di configurazione del server rispecchia per buona parte quella di ciascun client.&lt;br /&gt;
&lt;br /&gt;
Innanzitutto è necessario generare la coppia di chiavi pubblica/privata del server&lt;br /&gt;
&lt;br /&gt;
 # wg genkey | tee /etc/wireguard/server.privkey | wg pubkey &amp;gt; /etc/wireguard/vpn.golem.linux.it.pubkey&lt;br /&gt;
&lt;br /&gt;
Per la configurazione è sufficiente creare un singolo file, ad esempio &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # Carica la chiave privata dal percorso dove la abbiamo generata precedentemente&lt;br /&gt;
 PostUp = wg set %i private-key /etc/wireguard/vpn.golem.linux.it.privkey&lt;br /&gt;
 # Porta UDP di ascolto del server, a piacere&lt;br /&gt;
 ListenPort = 51820&lt;br /&gt;
 # Indirizzo del server all'interno della VPN&lt;br /&gt;
 Address = 10.40.0.1&lt;br /&gt;
&lt;br /&gt;
Il server può essere avviato tramite systemd, e con lo stesso sistema si può impostare l'avvio automatico.&lt;br /&gt;
Si noti che &amp;lt;code&amp;gt;@wg0&amp;lt;/code&amp;gt; corrisponde al file di configurazione precedentemente creato.&lt;br /&gt;
&lt;br /&gt;
 # systemctl start wg-quick@wg0&lt;br /&gt;
 # systemctl enable wg-quick@wg0&lt;br /&gt;
&lt;br /&gt;
=== Configurazione del client ===&lt;br /&gt;
Lato client, generare una coppia di chiavi pubblica/privata:&lt;br /&gt;
&lt;br /&gt;
 $ wg genkey | tee client.example.com.privkey | wg pubkey &amp;gt; client.example.com.pubkey&lt;br /&gt;
&lt;br /&gt;
Comunicare dunque la propria chiave pubblica al sysop, che si occuperà di aggiungerla tra quelle consentite al server, e vi comunicherà il vostro indirizzo IP, da aggiungere al file di configurazione, come segue. Prestare particolare attenzione a modificare i campi della sezione &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt;, come indicato nelle note.&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # PrivateKey = YoUrGoRgEoUsAnDsEcUrEpRiVaTeKeY=               # vedi note, scegliere questo...&lt;br /&gt;
 # PostUp = wg set %i private-key ./client.example.com.privkey # vedi note,                 ...oppure questo&lt;br /&gt;
 Address = 2001:470:c844:100::'''200'''/64                           # vedi note&lt;br /&gt;
 &lt;br /&gt;
 # vpn.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = w63aGvoyPaUTgA8nW/NJS6Qqp2hUFvHRBbIH8Qb5ISY=   &lt;br /&gt;
 AllowedIPs = 2000::/3                                      &lt;br /&gt;
 Endpoint = vpn.golem.linux.it:51280&lt;br /&gt;
 PersistentKeepalive = 37&lt;br /&gt;
&lt;br /&gt;
'''Note'''&lt;br /&gt;
* &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''locale'')&lt;br /&gt;
** scegliere una delle seguenti opzioni per indicare la chiave privata del client, scommentando la riga apposita.&lt;br /&gt;
*** ''PrivateKey'': chiave privata del client, da custodire con cura, inline&lt;br /&gt;
*** ''PostUp = command'': chiave privata del client, da custodire con cura, e caricata automaticamente da un file esterno (es. creato col comando mostrato in precedenza)&lt;br /&gt;
** ''Address'': indirizzo IP comunicato dal sysop: riportarlo accuratamente, altrimenti non sarà possibile utilizzare la VPN&lt;br /&gt;
* &amp;lt;code&amp;gt;[Peer]&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''remoto'' / server)&lt;br /&gt;
** ''PublicKey'': chiave pubblica del server (sì, è proprio quella)&lt;br /&gt;
** ''AllowedIPs'': indirizzi raggiungibili tramite la VPN, a scelta:&lt;br /&gt;
*** &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;: solo la [[IPv6 @ GOLEM | rete IPv6 virtuale del GOLEM]]&lt;br /&gt;
*** &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;: tutti gli indirizzi IPv6 (è possibile utilizzare la VPN del GOLEM per [[IPv6 @ GOLEM | navigare ''davvero'' in IPv6]])&lt;br /&gt;
** ''Endpoint'': indirizzo del server&lt;br /&gt;
** ''PersistentKeepalive'': timer per mantenimento del tunnel attivo (in secondi); particolarmente utile se l'indirizzo IP del client cambia o è soggetto a NAT&lt;br /&gt;
&lt;br /&gt;
La connessione può essere attivata tramite systemd come sul server (spostandola in ''/etc/wireguard/'', vedi sopra), oppure manualmente utilizzando &amp;lt;code&amp;gt;wg-quick&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 # Attivazione del tunnel&lt;br /&gt;
 wg-quick up client.example.conf&lt;br /&gt;
 # Disattivazione del tunnel&lt;br /&gt;
 wg-quick down client.example.conf&lt;br /&gt;
&lt;br /&gt;
Naturalmente, affinché il collegamento funzioni, il client deve essere abilitato alla connessione dal sysop.&lt;br /&gt;
Per farlo, il sysop aggiunge un blocco peer per ciascun client alla configurazione &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;, così:&lt;br /&gt;
&lt;br /&gt;
 ... altri client ...&lt;br /&gt;
&lt;br /&gt;
 # porceddu.net.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = tHeClIeNtFaNtAsTiCpUbLiCkEy=&lt;br /&gt;
 AllowedIPs = 2001:470:c844:100::200/128, 2001:470:c844:200::/62&lt;br /&gt;
&lt;br /&gt;
 ... altri client ...&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Discussione:VPN_del_GOLEM&amp;diff=9790</id>
		<title>Discussione:VPN del GOLEM</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Discussione:VPN_del_GOLEM&amp;diff=9790"/>
		<updated>2026-03-07T22:48:52Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Spostati appunti deprecati sulla VPN del GOLEM con OpenVPN nella pagina di discussione&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Appunti deprecati su OpenVPN per la VPN IPv6 del GOLEM ==&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning&lt;br /&gt;
|text=OpenVPN è in fase di dismissione, perché stai leggendo questo paragrafo? Se sei il sysop dovresti saperlo bene.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 5px solid red; opacity: 0.6;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nel tunnel di OpenVPN è presente la prima rete di servizio &amp;lt;code&amp;gt;2001:470:c844::/64&amp;lt;/code&amp;gt; (con ''rrrr'' = ''0000'').&lt;br /&gt;
Per il layer 2 viene usato il protocollo interno di OpenVPN.&lt;br /&gt;
&lt;br /&gt;
Per mantenere coerenza nella configurazione dei client di OpenVPN, delle rotte statiche, e per sapere a chi è stata assegnata una determinata sottorete, abbiamo realizzato [https://git.golem.linux.it/argilla/vpnunit vpnunit], un piccolo software Python che si occupa di aggiornare i file di configurazione necessari per OpenVPN e le rotte con &amp;lt;code&amp;gt;ip route&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning&lt;br /&gt;
|text=Il file di configurazione qui riportato è una bozza generale di come è impostato il server, ma per l'attuale configurazione in esecuzione si vedano i backup di [https://git.golem.linux.it/argilla/vpnunit vpnunit].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Configurazione del server OpenVPN sul VPS server:&lt;br /&gt;
 port xxxxx&lt;br /&gt;
 proto udp&lt;br /&gt;
 &lt;br /&gt;
 dev tun&lt;br /&gt;
 &lt;br /&gt;
 ca /etc/openvpn/keys/ca.crt&lt;br /&gt;
 cert /etc/openvpn/keys/server.crt&lt;br /&gt;
 dh /etc/openvpn/keys/dh2048.pem&lt;br /&gt;
 &lt;br /&gt;
 server 10.0.0.0 255.255.255.0&lt;br /&gt;
 server-ipv6 2001:470:c844::1/64&lt;br /&gt;
 ifconfig-ipv6 2001:470:c844::1 2001:470:c844::2&lt;br /&gt;
 &lt;br /&gt;
 topology subnet&lt;br /&gt;
 &lt;br /&gt;
 push &amp;quot;route-ipv6 ::/0&amp;quot;&lt;br /&gt;
 push &amp;quot;route-ipv6 2001:470:c844::/48&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 client-config-dir /etc/openvpn/staticclients&lt;br /&gt;
 &lt;br /&gt;
 comp-lzo&lt;br /&gt;
 keepalive 10 120&lt;br /&gt;
 persist-key&lt;br /&gt;
 persist-tun&lt;br /&gt;
 &lt;br /&gt;
 user nobody&lt;br /&gt;
 group nogroup&lt;br /&gt;
 &lt;br /&gt;
 verb 3&lt;br /&gt;
 status openvpn-status.log&lt;br /&gt;
&lt;br /&gt;
In particolare:&lt;br /&gt;
* &amp;lt;code&amp;gt;server 10.0.0.0 255.255.255.0&amp;lt;/code&amp;gt; va messo comunque anche se non si intende utilizzare l'IPv4 nel tunnel; è una limitazione (teorica) al numero di indirizzi IPv6 utilizzabili, ma comunque (in pratica) il server scoppierebbe ben prima;&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig-ipv6 2001:470:c844::1 2001:470:c844::2&amp;lt;/code&amp;gt; il server OpenVPN sarà accessibile attraverso il tunnel tramite l'indirizzo ''2001:470:c844::2''&lt;br /&gt;
* &amp;lt;code&amp;gt;push &amp;quot;route-ipv6 ::/0&amp;quot;&amp;lt;/code&amp;gt; il server OpenVPN comunica ai client che è il ''default gateway'' per l'Internet IPv6; naturalmente, ogni client è libero di usare il gateway che preferisce, ma se non ha connettività IPv6 non potrà far altro che utilizzare questo;&lt;br /&gt;
* &amp;lt;code&amp;gt;push &amp;quot;route-ipv6 2001:470:c844::/48&amp;quot;&amp;lt;/code&amp;gt; è necessario comunicare a tutti i client che la nostra rete è raggiungibile per mezzo del server OpenVPN; questo non esclude la possibilità che due reti utente vicine tra loro possano interconnettersi fisicamente e direttamente;&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text=In teoria basta la sola rotta di default, ma in pratica non funziona (si suppone per come è fatto il protocollo openVPN a livello 2)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Aggiungere un Gateway Utente / Client OpenVPN ===&lt;br /&gt;
Verrà presa ad esempio la configurazione del gateway di officina '''serverozzo''', che, secondo quanto stabilito nei precedenti paragrafi avrà indirizzo &amp;lt;code&amp;gt;2001:470:c844::200&amp;lt;/code&amp;gt; e inoltrerà i pacchetti da/per la rete &amp;lt;code&amp;gt;2001:470:c844:200::/60&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text=I paragrafi di configurazione manuale del gateway utente sono utili per capire il funzionamento dei vari comandi, ma all'amministratore di rete è '''proibito''' effettuare queste operazioni manualmente: si deve usare lo script [https://git.golem.linux.it/argilla/vpnunit vpnunit], cha si occupa di creare tutte queste configurazioni a mano, e, siccome si tratta di diversi file sparsi, tenerli aggiornati e coerenti tra loro.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Generare chiave SSL ====&lt;br /&gt;
Seguire la guida [[VPN del GOLEM]] per generare le chiavi.&lt;br /&gt;
&lt;br /&gt;
==== Configurazione del server OpenVPN ====&lt;br /&gt;
===== Comunicare al client il suo indirizzo IPv6 statico =====&lt;br /&gt;
Sul server OpenVPN, nel file di configurazione del client ''/etc/openvpn/staticclients/hostname'', scrivere le seguenti righe:&lt;br /&gt;
 ifconfig-ipv6-push 2001:470:c844::200/64&lt;br /&gt;
 iroute-ipv6 2001:470:c844:200::/60&lt;br /&gt;
&lt;br /&gt;
Rispettivamente per:&lt;br /&gt;
* assegnare indirizzo statico al gateway utente / client openvpn;&lt;br /&gt;
* permettere al client di inoltrare sul tunnel i pacchetti provenienti dalla rete alle sue spalle; questo serve al protocollo di openVPN per il layer 2, altrimenti non vengono fatti passare pacchetti con indirizzo sorgente diverso da quelli della rete di servizio; in alternativa si poteva fare un tunnel ''tap'' e utilizzare Ethernet a livello 2;&lt;br /&gt;
&lt;br /&gt;
===== Inoltrare i pacchetti per la nuova rete =====&lt;br /&gt;
Sul server OpenVPN, impostare la rotta per la nuova rete.&lt;br /&gt;
&lt;br /&gt;
Utilizzare l'apposito script di configurazione ''/root/route-ipv6.sh'' e lanciarlo con argomento ''add'':&lt;br /&gt;
 # ip -6 route add 2001:470:c844:200::/60 via 2001:470:c844::200&lt;br /&gt;
&lt;br /&gt;
===== Connessione alla VPN con OpenVPN =====&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text=Questo file di configurazione contiene indicazioni di massima per il client: da quando abbiamo realizzato lo script [https://git.golem.linux.it/argilla/vpnunit vpnunit], il file di configurazione viene prodotto automaticamente, e ingloba anche i file di certificato e chiave in un unico file.&lt;br /&gt;
L'amministratore di rete può agevolmente scaricarlo e inviarlo all'utente.&lt;br /&gt;
}}&lt;br /&gt;
Usare questo file di configurazione sul client openvpn:&lt;br /&gt;
&lt;br /&gt;
 client&lt;br /&gt;
 dev tun&lt;br /&gt;
 proto udp&lt;br /&gt;
 remote golem.linux.it xxxxx&lt;br /&gt;
 resolv-retry infinite&lt;br /&gt;
 nobind&lt;br /&gt;
 &lt;br /&gt;
 user nobody&lt;br /&gt;
 group nogroup&lt;br /&gt;
 &lt;br /&gt;
 ns-cert-type server&lt;br /&gt;
 ca /etc/openvpn/golem.linux.it/ca.crt&lt;br /&gt;
 cert /etc/openvpn/golem.linux.it/serverozzo.crt&lt;br /&gt;
 key /etc/openvpn/golem.linux.it/serverozzo.key&lt;br /&gt;
 &lt;br /&gt;
 keepalive 30 120&lt;br /&gt;
 persist-key&lt;br /&gt;
 persist-tun&lt;br /&gt;
 &lt;br /&gt;
 comp-lzo&lt;br /&gt;
 &lt;br /&gt;
 verb 3&lt;br /&gt;
&lt;br /&gt;
Se il client OpenVPN è un nodo foglia della rete, cioè non funge da gateway perché si deve collegare solo lui (es. smartphone), allora c'è già connettività IPv6 e non serve fare altro.&lt;br /&gt;
&lt;br /&gt;
Se invece il client è il gateway della rete IPv6 (es. ''serverozzo'', o il router di casa di uno dei soci che vuole navigare in IPv6), allora bisogna configurarlo come indicato nell'apposita sezione.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connessione OpenVPN tramite interfaccia grafica ==&lt;br /&gt;
Per effettuare una connessione VPN tramite il gestore di rete grafico &amp;lt;code&amp;gt;NetworkManager&amp;lt;/code&amp;gt;, è necessario installare il pacchetto &amp;lt;code&amp;gt;networkmanager-openvpn&amp;lt;/code&amp;gt;.&lt;br /&gt;
La configurazione varia leggermente a seconda del desktop environment utilizzato e della tecnologia VPN.&lt;br /&gt;
&lt;br /&gt;
=== KDE ===&lt;br /&gt;
* Aprire le impostazioni di rete tramite l'icona nella barra di stato o direttamente dalle impostazioni di sistema&lt;br /&gt;
* Cliccare su ''&amp;quot;Aggiungi una nuova connessione&amp;quot;''&lt;br /&gt;
* Selezionare ''openvpn'' (figura 1)&lt;br /&gt;
* Inserire i 3 certificati nella scheda ''VPN'' come specificato nella sezione [[#File di configurazione client.conf]] (figura 2)&lt;br /&gt;
* Modificare la porta nel sottomenu ''Avanzate...'' (figura 3)&lt;br /&gt;
* Nella scheda ''IPv4'' selezionare ''Automatico (solo indirizzi)'' (figura 4)&lt;br /&gt;
* Spuntare le due caselle nel sottomenu ''Rotte...'' (figura 5)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Vpn_aggiungi.png | 1&lt;br /&gt;
File:Parametri_VPN.png | 2&lt;br /&gt;
File:Avanzate_vpn.png | 3&lt;br /&gt;
File:Ipv4_vpn.png | 4&lt;br /&gt;
File:Rotte_vpn.png | 5&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gnome ===&lt;br /&gt;
''TODO'' - anche se in realtà, ''qualcuno usa GNOME?''&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Appunti_OpenVPN&amp;diff=9789</id>
		<title>Appunti OpenVPN</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Appunti_OpenVPN&amp;diff=9789"/>
		<updated>2026-03-07T22:48:08Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Spostata documentazione non più manutenuta dalla pagina sulla VPN&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note&lt;br /&gt;
|type=warning&lt;br /&gt;
|text=Questa pagina è un'istantanea della pagina non più mantenuta sulla VPN.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Sul server, installiamo ''openvpn'' e anche ''easy-rsa'' (che ci servirà per generare le chiavi). Su Debian:&lt;br /&gt;
 apt-get install openvpn easy-rsa&lt;br /&gt;
&lt;br /&gt;
=== Configurazione server ===&lt;br /&gt;
Sul server deve essere creata una propria CA (''Certificate Authority''), che deve firmare tutti i certificati che andremo a utilizzare nella VPN. Per fare questo useremo la collezione di utili script ''easy-rsa''. Per semplificarci il lavoro, lavoreremo nella directory ''/etc/openvpn'', e ci copieremo anche gli script ''easy-rsa''.&lt;br /&gt;
&lt;br /&gt;
 cp /usr/share/easy-rsa/* /etc/openvpn&lt;br /&gt;
&lt;br /&gt;
Digressione inutile: io avrei messo ''/usr/share/easy-rsa/'' nel PATH, ma quelli di OpenVPN dicono di copiare gli script per evitare problemi di compatibilità (es. oggi creo la mia fantastica VPN con ''easy-rsa'' versione ''$oggi'', domani aggiorno ''easy-rsa'' a versione ''$domani'', e dopodomani voglio aggiungere un nuovo client alla mia VPN ma non posso farlo perché agli script nuovi non piace la vecchia CA). Insomma, agli script non piacciono i certificati, a me non piace questo modo di fare, a tutti non piace qualcosa, poggio e buca fa pari, animo in pace, quindi facciamolo e basta.&lt;br /&gt;
&lt;br /&gt;
==== Variabili d'ambiente ====&lt;br /&gt;
Modifichiamo le righe dello script ''vars''.&lt;br /&gt;
I valori inseriti qui saranno utilizzati di default per la generazione dei certificati, quindi, quando li genereremo, ci basterà premere ''Invio'' per far prima.&lt;br /&gt;
&lt;br /&gt;
 # These are the default values for fields&lt;br /&gt;
 # which will be placed in the certificate.&lt;br /&gt;
 export KEY_COUNTRY=&amp;quot;IT&amp;quot;&lt;br /&gt;
 export KEY_PROVINCE=&amp;quot;FI&amp;quot;&lt;br /&gt;
 export KEY_CITY=&amp;quot;Empoli&amp;quot;&lt;br /&gt;
 export KEY_ORG=&amp;quot;GOLEM - Gruppo Operativo Linux Empoli&amp;quot;&lt;br /&gt;
 export KEY_EMAIL=&amp;quot;golem@mailinator.com&amp;quot;&lt;br /&gt;
 export KEY_OU=&amp;quot;VPN Task Force&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ...&lt;br /&gt;
 &lt;br /&gt;
 export KEY_SIZE=2048&lt;br /&gt;
&lt;br /&gt;
Popoliamo l'ambiente eseguendo lo script:&lt;br /&gt;
 # . ./vars&lt;br /&gt;
&lt;br /&gt;
==== Creazione CA ====&lt;br /&gt;
 # ./clean-all&lt;br /&gt;
 # ./build-ca&lt;br /&gt;
&lt;br /&gt;
'''ATTENZIONE:''' questi comandi distruggono l'eventuale CA che già abbiamo creato, quindi usiamoli solo la prima volta, a meno che non siamo masochisti e vogliamo ripartire da zero, buttar via tutto e impedire ai client (che già abbiamo) di collegarsi alla VPN. Una catastrofe insomma.&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' ''clean-all'' crea anche una nuova directory ''keys'', dove sono salvate tutte le chiavi che abbiamo generato, e che genereremo da ora in avanti. Ci servirà più avanti.&lt;br /&gt;
&lt;br /&gt;
==== Generazione parametri Diffie-Hellman ====&lt;br /&gt;
 # ./build-dh&lt;br /&gt;
&lt;br /&gt;
Ci vorrà un po', in base alla KEY_SIZE che abbiamo specificato in ''vars''.&lt;br /&gt;
Questo genererà un file ''dh2048.pem'' (o 1024, dipende dalla dimensione) nella directory ''keys''. Ci servirà più avanti.&lt;br /&gt;
&lt;br /&gt;
==== Generazione chiave server ====&lt;br /&gt;
 # ./build-key-server golem.linux.it&lt;br /&gt;
dove ''golem.linux.it'' è l'hostname del nostro server. Non è necessario usare l'hostname vero, ma ci aiuta a tenere le cose ordinate. Possiamo avere tutte le chiavi che vogliamo, ma ce ne basta una (eventualmente anche per più VPN). Ci servirà più avanti.&lt;br /&gt;
&lt;br /&gt;
==== File di configurazione server.conf ====&lt;br /&gt;
Copiamo il modello fornito da OpenVPN:&lt;br /&gt;
&lt;br /&gt;
 # zcat /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz &amp;gt; /etc/openvpn/server.conf&lt;br /&gt;
&lt;br /&gt;
Modifichiamolo:&lt;br /&gt;
&lt;br /&gt;
 port 7777                                                # porta su cui è in ascolto OpenVPN&lt;br /&gt;
 proto udp                                                # usare il protocollo UDP&lt;br /&gt;
 dev tun                                                  # VPN routed&lt;br /&gt;
 ca /etc/openvpn/keys/ca.crt                              # certificato CA&lt;br /&gt;
 cert /etc/openvpn/keys/server.crt                        # chiave pubblica server&lt;br /&gt;
 key /etc/openvpn/keys/server.key                         # chiave privata server&lt;br /&gt;
 dh /etc/openvpn/keys/dh2048.pem                          # parametri Diffie-Hellman&lt;br /&gt;
 server 10.60.73.0 255.255.255.0                          # indirizzi IP della rete&lt;br /&gt;
 ;ifconfig-pool-persist ipp.txt                           # ricorda gli indirizzi IP assegnati ai client?&lt;br /&gt;
 client-config-dir /etc/openvpn/staticclients             # directory configurazioni specifiche dei client&lt;br /&gt;
 client-to-client                                         # permetti ai client di parlarsi tra loro&lt;br /&gt;
 user nobody                                              # rilascia i privilegi una volta finito&lt;br /&gt;
 group nogroup&lt;br /&gt;
 topology subnet                                          # tutti i client nella sottorete (no point-to-point)&lt;br /&gt;
 comp-lzo                                                 # attiva la compressione lzo&lt;br /&gt;
&lt;br /&gt;
Osservazioni:&lt;br /&gt;
* ''proto'': utilizziamo il protocollo UDP, perché TCP su TCP può [http://sites.inka.de/bigred/devel/tcp-tcp.html portare al collasso] della rete&lt;br /&gt;
* nella rete ''10.60.73.0/24'', il server prende automaticamente il primo indirizzo disponibile, cioè 10.60.73.1&lt;br /&gt;
* ''ifconfig-pool-persist'': abilitato di default, memorizza nel file ''ipp.txt'' le associazioni client/indirizzo. Se dobbiamo poter raggiungere le macchine nella rete, queste dovranno avere un IP fisso, quindi in teoria questa cosa ci piace, ma in pratica no perché vogliamo mettere gli indirizzi a mano secondo una logica sensata, quindi commentiamo questa riga.&lt;br /&gt;
* ''client-config-dir'': in questa directory andremo a inserire le configurazioni specifiche dei client (es. l'IP statico)&lt;br /&gt;
* ''client-to-client'': lo mettiamo perché vogliamo che i client possano dialogare tra loro direttamente, senza dover ammattire col firewall&lt;br /&gt;
* ''user'' e ''group'': OpenVPN gira come ''root'', e quando ha instaurato le connessioni e ha finito di fare il suo lavoro, è bene che rilasci i privilegi e continui a girare come utente semplice.&lt;br /&gt;
* ''topology'': indica il tipo di rete. Facciamo '''attenzione''' a aggiungerlo manualmente, perché altrimenti, per ragioni di retrocompatibilità, viene utilizzata la modalità point-to-point&lt;br /&gt;
&lt;br /&gt;
==== Avvio del server ====&lt;br /&gt;
Proviamo:&lt;br /&gt;
 # openvpn server.conf&lt;br /&gt;
&lt;br /&gt;
Per avviare il servizio o abilitarlo permanentemente:&lt;br /&gt;
 # systemctl [start|stop|restart|reload|enable] openvpn@server.conf&lt;br /&gt;
&lt;br /&gt;
dove ''server.conf'' viene cercato nella directory ''/etc/openvpn''.&lt;br /&gt;
&lt;br /&gt;
Vediamo che adesso abbiamo una nuova interfaccia di rete virtuale denominata ''tun0'' con indirizzo IP ''10.60.73.1''. Questa è la scheda che è attaccata al nostro lungo &amp;quot;filo&amp;quot; immaginario.&lt;br /&gt;
 # ip addr&lt;br /&gt;
&lt;br /&gt;
=== Aggiungere un client ===&lt;br /&gt;
==== Generazione chiave client ====&lt;br /&gt;
Sempre '''sul server''':&lt;br /&gt;
&lt;br /&gt;
 # ./build-key client-numero-uno&lt;br /&gt;
&lt;br /&gt;
Oss: utilizziamo un nome significativo. Come prima, consiglio di usare l'hostname.&lt;br /&gt;
&lt;br /&gt;
Oss: probabilmente vogliamo utilizzare lo stesso ambiente ''vars'' di prima.&lt;br /&gt;
&lt;br /&gt;
Oss: verrà generata la coppia di chiavi pubblica/privata ''client-numero-uno.cert''/''client-numero-uno.key'' nella directory ''keys''.&lt;br /&gt;
&lt;br /&gt;
Copiamo le chiavi ''client-numero-uno.*'' e anche '''ca.crt''' sul client (es. ''scp'') e mettiamole in ''/etc/openvpn/golem.linux.it/''.&lt;br /&gt;
&lt;br /&gt;
==== Installazione OpenVPN ====&lt;br /&gt;
'''Sul client''':&lt;br /&gt;
&lt;br /&gt;
 # apt-get install openvpn      # Debian&lt;br /&gt;
 # pacman -S openvpn            # Arch&lt;br /&gt;
&lt;br /&gt;
==== File di configurazione client.conf ====&lt;br /&gt;
Copiamo il modello del file di configurazione del client in un posto sensato, tipo in ''/etc/openvpn/'' o ''/etc/openvpn/client/''.&lt;br /&gt;
&lt;br /&gt;
Es su Arch Linux:&lt;br /&gt;
 # cp /usr/share/openvpn/examples/client.conf /etc/openvpn/client/&lt;br /&gt;
&lt;br /&gt;
Percorso su Debian:&lt;br /&gt;
 /usr/share/doc/openvpn/examples/sample-config-files/client.conf&lt;br /&gt;
&lt;br /&gt;
Modifichiamolo. Per brevità ometto cose tipo ''proto udp'', ''tun'' e via discorrendo, che devono ovviamente corrispondere anche lato server.&lt;br /&gt;
&lt;br /&gt;
 remote golem.linux.it 7777&lt;br /&gt;
 user nobody&lt;br /&gt;
 group nobody&lt;br /&gt;
 ca /etc/openvpn/golem.linux.it/ca.crt&lt;br /&gt;
 cert /etc/openvpn/golem.linux.it/client-numero-uno.crt&lt;br /&gt;
 key /etc/openvpn/golem.linux.it/client-numero-uno.key&lt;br /&gt;
 keepalive 30 120                                         # riattiva le connessioni chiuse&lt;br /&gt;
 comp-lzo&lt;br /&gt;
&lt;br /&gt;
 # Nel template Debian si commenta la configurazione di questo certificato (opzionale).&lt;br /&gt;
 ;tls-auth ta.key 1&lt;br /&gt;
&lt;br /&gt;
Osservazioni:&lt;br /&gt;
* ''remote'': hostname e porta del server OpenVPN&lt;br /&gt;
* ''keepalive X Y'': ogni X secondi, controlla la connessione con il server, e se questa risulta assente per più di Y secondi consecutivi, si riconnette&lt;br /&gt;
* ''group'': su Debian deve essere specificato &amp;lt;code&amp;gt;nogroup&amp;lt;/code&amp;gt; anziché &amp;lt;code&amp;gt;nobody&amp;lt;/code&amp;gt;&lt;br /&gt;
'''Attenzione''' alle eventuali modalità di compressione e/o di cifratura (qui è attiva la compressione lzo), che devono corrispondere a quelle sul server. È facile che si abbiano impostazioni leggermente diverse a seconda del sistema che si usa (Debian, Arch, ...)&lt;br /&gt;
&lt;br /&gt;
==== Assegnare IP fisso al client ====&lt;br /&gt;
Torniamo '''sul server''' e nella directory ''/etc/openvpn/staticclients'' (scelta prima nel ''server.conf'') aggiungiamo un file per ogni client a cui si vuole assegnare un indirizzo statico.&lt;br /&gt;
Il file deve chiamarsi come l'hostname del client (l'hostname che avete dichiarato nel certificato! Se è diverso dall'hostname vero, siete masochisti, e poi non dite che non avevo avvertito).&lt;br /&gt;
All'interno inserire una direttiva ''ifconfig-push''.&lt;br /&gt;
&lt;br /&gt;
Esempio, file ''/etc/openvpn/staticclients/client-numero-uno'':&lt;br /&gt;
 ifconfig-push 10.60.73.77 255.255.255.0&lt;br /&gt;
&lt;br /&gt;
dove ''10.60.73.184.77'' è l'IP che vogliamo assegnare al client che si presenta col certificato di ''client-numero-uno'' e ''255.255.255.0'' è la sua maschera di rete.&lt;br /&gt;
&lt;br /&gt;
==== Avvio del client ====&lt;br /&gt;
Proviamo (uguale al server):&lt;br /&gt;
 # openvpn client.conf&lt;br /&gt;
&lt;br /&gt;
Per avviare il servizio o abilitarlo permanentemente:&lt;br /&gt;
&lt;br /&gt;
* su Debian&lt;br /&gt;
 # systemctl [start|stop|restart|reload|enable] openvpn@client.conf&lt;br /&gt;
&lt;br /&gt;
dove ''client.conf'' viene cercato nella directory ''/etc/openvpn''&lt;br /&gt;
&lt;br /&gt;
* su Arch&lt;br /&gt;
 # systemctl [start|stop|restart|reload|enable] openvpn-client@client.conf&lt;br /&gt;
&lt;br /&gt;
dove ''client.conf'' viene cercato nella directory ''/etc/openvpn/client''&lt;br /&gt;
&lt;br /&gt;
=== Revoca di un certificato ===&lt;br /&gt;
Per revocare l'accesso a un client, è sufficiente revocare la sua chiave attraverso il comando:&lt;br /&gt;
 # ./revoke-full client-numero-1&lt;br /&gt;
&lt;br /&gt;
'''Nota bene''': questo comando termina con ''Errore 23''; secondo la [https://openvpn.net/index.php/open-source/documentation/howto.html#revoke documentazione ufficiale di OpenVPN], è tutto normale, in quanto, dopo aver revocato il certificato, lo script ricontrolla la sua firma, che a questo punto risulta non più valida.&lt;br /&gt;
&lt;br /&gt;
Un altro modo per vedere se il certificato è stato revocato consiste nel listare il contenuto del file ''keys/index.txt'' e controllare che appaia una ''R'' (e un nuovo timestamp) accanto al certificato che si intendeva revocare.&lt;br /&gt;
&lt;br /&gt;
=== Verifiche finali ===&lt;br /&gt;
Controlliamo di avere una nuova interfaccia di rete virtuale ''tun0'' con l'indirizzo IP desiderato:&lt;br /&gt;
 # ip addr&lt;br /&gt;
&lt;br /&gt;
Proviamo il ping:&lt;br /&gt;
 # ping 10.60.73.1&lt;br /&gt;
&lt;br /&gt;
== Accesso dall'esterno ==&lt;br /&gt;
Può essere interessante accedere ai servizi offerti da uno degli host interni alla VPN, ma senza accedere alla VPN. Ad esempio collegarsi ad un sistema di monitoraggio webcam remoto utilizzando la rete 3G del cellulare.&lt;br /&gt;
&lt;br /&gt;
Per fare questo si può sfruttare l'IP pubblico del server VPN: impartendo alcune istruzioni iptables si va a monitorare una determinata porta (ad esempio 1234) e si indirizzano le richieste verso l'host interno alla VPN (che, per esempio, ha IP 10.60.73.12)&lt;br /&gt;
&lt;br /&gt;
 iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination 10.60.73.12:1234&lt;br /&gt;
 iptables -t nat  -A POSTROUTING -j MASQUERADE&lt;br /&gt;
 sysctl net.ipv4.ip_forward=1 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'opzione &amp;lt;code&amp;gt;dport&amp;lt;/code&amp;gt; può essere variata a piacere se si vuole reindirizzare richieste da una porta verso un'altra:&lt;br /&gt;
&lt;br /&gt;
 iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination 10.60.73.12:12&lt;br /&gt;
&lt;br /&gt;
In questo modo si varia anche la porta. Può essere utile per evitare conflitti con server già presenti sulla macchina che si va ad interrogare.&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Matrix&amp;diff=9784</id>
		<title>Matrix</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Matrix&amp;diff=9784"/>
		<updated>2026-02-25T22:44:19Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Pagina categorizzata&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Matrix in due parole ==&lt;br /&gt;
[[Image:Federazione.png|right|200px]]&lt;br /&gt;
&lt;br /&gt;
[https://matrix.org/ Matrix] è un sistema di messaggistica federato e decentralizzato.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text=Matrix è in fase di sperimentazione al GOLEM: le informazioni che seguono, relative al nostro servizio, sono soggette a cambiamenti senza preavviso, e l'homeserver potrebbe divenire irraggiungibile in qualsiasi momento. Non si fornisce alcuna garanzia.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Per accedere alle stanze del GOLEM:&lt;br /&gt;
&lt;br /&gt;
# unirsi alla stanza pubblica &amp;lt;code&amp;gt;#presentazione:golem.linux.it&amp;lt;/code&amp;gt; e presentarsi&lt;br /&gt;
# una volta presentati, un amministratore vi inviterà nello spazio privato&lt;br /&gt;
&lt;br /&gt;
Se non si ha già Matrix:&lt;br /&gt;
# registrare un account su un server (su [https://matrix.org/try-matrix/ matrix.org] è gratuito)&lt;br /&gt;
# installare un client, per esempio [https://matrix.org/ecosystem/clients/element-x/ Element] o [https://matrix.org/ecosystem/clients/fluffychat/ FluffyChat]&lt;br /&gt;
# entrare nella stanza pubblica e presentarsi, come indicato sopra&lt;br /&gt;
&lt;br /&gt;
Nota: le stanze private del GOLEM non sono crittografate.&lt;br /&gt;
&lt;br /&gt;
== Maggiori informazioni ==&lt;br /&gt;
&lt;br /&gt;
* '''Federazione''': ogni utente può scegliere un ''homeserver'' su cui registrare il proprio account, allo stesso modo in cui può scegliere il provider per la propria posta elettronica. Da ogni homeserver è possibile raggiungere qualunque altro utente della rete Matrix, anche se si trova su un altro homeserver, allo stesso modo in cui funziona la posta elettronica.&lt;br /&gt;
** Se un homeserver diventa non raggiungibile (per questioni tecniche, legali o di censura), la rete continua a funzionare in modo indipendente.&lt;br /&gt;
** Gli utenti sono identificati col formato &amp;lt;code&amp;gt;@utente:homeserver.tld&amp;lt;/code&amp;gt;, in modo simile alle email.&lt;br /&gt;
** Il più grande homeserver è &amp;lt;code&amp;gt;matrix.org&amp;lt;/code&amp;gt;, fornito direttamente dalla Element Foundation. Al fine di favorire la decentralizzazione, è consigliabile scegliere un provider/una comunità affine, e registrare il proprio utente presso un altro homeserver.&lt;br /&gt;
&lt;br /&gt;
* '''Riservatezza''': Matrix include un sistema di crittografia a chiave pubblica end-to-end: le conversazioni possono essere lette solo tramite i dispositivi degli interlocutori. L'autenticità dell'interlocutore può essere verificata avviando una procedura da eseguirsi di persona col proprio interlocutore. I server e qualunque altra terza parte non può accedere ai messaggi. I metadati, tuttavia, sono in chiaro (i server possono sapere tra quali persone avvengono le conversazioni)&lt;br /&gt;
&lt;br /&gt;
== Note per l'amministratore ==&lt;br /&gt;
'''Creare nuovo utente'''&lt;br /&gt;
 docker exec -it chat-synapse-1 register_new_matrix_user http://localhost:8008 -c /data/homeserver.yaml -u &amp;lt;username&amp;gt; -p &amp;lt;password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Sysop]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Matrix&amp;diff=9783</id>
		<title>Matrix</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Matrix&amp;diff=9783"/>
		<updated>2026-02-25T22:38:45Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Aggiunto comando per la creazione dell'utente&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Matrix in due parole ==&lt;br /&gt;
[[Image:Federazione.png|right|200px]]&lt;br /&gt;
&lt;br /&gt;
[https://matrix.org/ Matrix] è un sistema di messaggistica federato e decentralizzato.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text=Matrix è in fase di sperimentazione al GOLEM: le informazioni che seguono, relative al nostro servizio, sono soggette a cambiamenti senza preavviso, e l'homeserver potrebbe divenire irraggiungibile in qualsiasi momento. Non si fornisce alcuna garanzia.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Per accedere alle stanze del GOLEM:&lt;br /&gt;
&lt;br /&gt;
# unirsi alla stanza pubblica &amp;lt;code&amp;gt;#presentazione:golem.linux.it&amp;lt;/code&amp;gt; e presentarsi&lt;br /&gt;
# una volta presentati, un amministratore vi inviterà nello spazio privato&lt;br /&gt;
&lt;br /&gt;
Se non si ha già Matrix:&lt;br /&gt;
# registrare un account su un server (su [https://matrix.org/try-matrix/ matrix.org] è gratuito)&lt;br /&gt;
# installare un client, per esempio [https://matrix.org/ecosystem/clients/element-x/ Element] o [https://matrix.org/ecosystem/clients/fluffychat/ FluffyChat]&lt;br /&gt;
# entrare nella stanza pubblica e presentarsi, come indicato sopra&lt;br /&gt;
&lt;br /&gt;
Nota: le stanze private del GOLEM non sono crittografate.&lt;br /&gt;
&lt;br /&gt;
== Maggiori informazioni ==&lt;br /&gt;
&lt;br /&gt;
* '''Federazione''': ogni utente può scegliere un ''homeserver'' su cui registrare il proprio account, allo stesso modo in cui può scegliere il provider per la propria posta elettronica. Da ogni homeserver è possibile raggiungere qualunque altro utente della rete Matrix, anche se si trova su un altro homeserver, allo stesso modo in cui funziona la posta elettronica.&lt;br /&gt;
** Se un homeserver diventa non raggiungibile (per questioni tecniche, legali o di censura), la rete continua a funzionare in modo indipendente.&lt;br /&gt;
** Gli utenti sono identificati col formato &amp;lt;code&amp;gt;@utente:homeserver.tld&amp;lt;/code&amp;gt;, in modo simile alle email.&lt;br /&gt;
** Il più grande homeserver è &amp;lt;code&amp;gt;matrix.org&amp;lt;/code&amp;gt;, fornito direttamente dalla Element Foundation. Al fine di favorire la decentralizzazione, è consigliabile scegliere un provider/una comunità affine, e registrare il proprio utente presso un altro homeserver.&lt;br /&gt;
&lt;br /&gt;
* '''Riservatezza''': Matrix include un sistema di crittografia a chiave pubblica end-to-end: le conversazioni possono essere lette solo tramite i dispositivi degli interlocutori. L'autenticità dell'interlocutore può essere verificata avviando una procedura da eseguirsi di persona col proprio interlocutore. I server e qualunque altra terza parte non può accedere ai messaggi. I metadati, tuttavia, sono in chiaro (i server possono sapere tra quali persone avvengono le conversazioni)&lt;br /&gt;
&lt;br /&gt;
== Note per l'amministratore ==&lt;br /&gt;
'''Creare nuovo utente'''&lt;br /&gt;
 docker exec -it chat-synapse-1 register_new_matrix_user http://localhost:8008 -c /data/homeserver.yaml -u &amp;lt;username&amp;gt; -p &amp;lt;password&amp;gt;&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Matrix&amp;diff=9782</id>
		<title>Matrix</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Matrix&amp;diff=9782"/>
		<updated>2026-02-25T22:15:32Z</updated>

		<summary type="html">&lt;p&gt;Giomba: /* Matrix in due parole - aggiunta immagine sulla federazione */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Matrix in due parole ==&lt;br /&gt;
[[Image:Federazione.png|right|200px]]&lt;br /&gt;
&lt;br /&gt;
[https://matrix.org/ Matrix] è un sistema di messaggistica federato e decentralizzato.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text=Matrix è in fase di sperimentazione al GOLEM: le informazioni che seguono, relative al nostro servizio, sono soggette a cambiamenti senza preavviso, e l'homeserver potrebbe divenire irraggiungibile in qualsiasi momento. Non si fornisce alcuna garanzia.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Per accedere alle stanze del GOLEM:&lt;br /&gt;
&lt;br /&gt;
# unirsi alla stanza pubblica &amp;lt;code&amp;gt;#presentazione:golem.linux.it&amp;lt;/code&amp;gt; e presentarsi&lt;br /&gt;
# una volta presentati, un amministratore vi inviterà nello spazio privato&lt;br /&gt;
&lt;br /&gt;
Se non si ha già Matrix:&lt;br /&gt;
# registrare un account su un server (su [https://matrix.org/try-matrix/ matrix.org] è gratuito)&lt;br /&gt;
# installare un client, per esempio [https://matrix.org/ecosystem/clients/element-x/ Element] o [https://matrix.org/ecosystem/clients/fluffychat/ FluffyChat]&lt;br /&gt;
# entrare nella stanza pubblica e presentarsi, come indicato sopra&lt;br /&gt;
&lt;br /&gt;
Nota: le stanze private del GOLEM non sono crittografate.&lt;br /&gt;
&lt;br /&gt;
== Maggiori informazioni ==&lt;br /&gt;
&lt;br /&gt;
* '''Federazione''': ogni utente può scegliere un ''homeserver'' su cui registrare il proprio account, allo stesso modo in cui può scegliere il provider per la propria posta elettronica. Da ogni homeserver è possibile raggiungere qualunque altro utente della rete Matrix, anche se si trova su un altro homeserver, allo stesso modo in cui funziona la posta elettronica.&lt;br /&gt;
** Se un homeserver diventa non raggiungibile (per questioni tecniche, legali o di censura), la rete continua a funzionare in modo indipendente.&lt;br /&gt;
** Gli utenti sono identificati col formato &amp;lt;code&amp;gt;@utente:homeserver.tld&amp;lt;/code&amp;gt;, in modo simile alle email.&lt;br /&gt;
** Il più grande homeserver è &amp;lt;code&amp;gt;matrix.org&amp;lt;/code&amp;gt;, fornito direttamente dalla Element Foundation. Al fine di favorire la decentralizzazione, è consigliabile scegliere un provider/una comunità affine, e registrare il proprio utente presso un altro homeserver.&lt;br /&gt;
&lt;br /&gt;
* '''Riservatezza''': Matrix include un sistema di crittografia a chiave pubblica end-to-end: le conversazioni possono essere lette solo tramite i dispositivi degli interlocutori. L'autenticità dell'interlocutore può essere verificata avviando una procedura da eseguirsi di persona col proprio interlocutore. I server e qualunque altra terza parte non può accedere ai messaggi. I metadati, tuttavia, sono in chiaro (i server possono sapere tra quali persone avvengono le conversazioni)&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Federazione.png&amp;diff=9781</id>
		<title>File:Federazione.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Federazione.png&amp;diff=9781"/>
		<updated>2026-02-25T22:13:50Z</updated>

		<summary type="html">&lt;p&gt;Giomba: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Matrix&amp;diff=9780</id>
		<title>Matrix</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Matrix&amp;diff=9780"/>
		<updated>2026-02-25T22:13:00Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Due parole su Matrix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Matrix in due parole ==&lt;br /&gt;
&lt;br /&gt;
[https://matrix.org/ Matrix] è un sistema di messaggistica federato e decentralizzato.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text=Matrix è in fase di sperimentazione al GOLEM: le informazioni che seguono, relative al nostro servizio, sono soggette a cambiamenti senza preavviso, e l'homeserver potrebbe divenire irraggiungibile in qualsiasi momento. Non si fornisce alcuna garanzia.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Per accedere alle stanze del GOLEM:&lt;br /&gt;
&lt;br /&gt;
# unirsi alla stanza pubblica &amp;lt;code&amp;gt;#presentazione:golem.linux.it&amp;lt;/code&amp;gt; e presentarsi&lt;br /&gt;
# una volta presentati, un amministratore vi inviterà nello spazio privato&lt;br /&gt;
&lt;br /&gt;
Se non si ha già Matrix:&lt;br /&gt;
# registrare un account su un server (su [https://matrix.org/try-matrix/ matrix.org] è gratuito)&lt;br /&gt;
# installare un client, per esempio [https://matrix.org/ecosystem/clients/element-x/ Element] o [https://matrix.org/ecosystem/clients/fluffychat/ FluffyChat]&lt;br /&gt;
# entrare nella stanza pubblica e presentarsi, come indicato sopra&lt;br /&gt;
&lt;br /&gt;
Nota: le stanze private del GOLEM non sono crittografate.&lt;br /&gt;
&lt;br /&gt;
== Maggiori informazioni ==&lt;br /&gt;
&lt;br /&gt;
* '''Federazione''': ogni utente può scegliere un ''homeserver'' su cui registrare il proprio account, allo stesso modo in cui può scegliere il provider per la propria posta elettronica. Da ogni homeserver è possibile raggiungere qualunque altro utente della rete Matrix, anche se si trova su un altro homeserver, allo stesso modo in cui funziona la posta elettronica.&lt;br /&gt;
** Se un homeserver diventa non raggiungibile (per questioni tecniche, legali o di censura), la rete continua a funzionare in modo indipendente.&lt;br /&gt;
** Gli utenti sono identificati col formato &amp;lt;code&amp;gt;@utente:homeserver.tld&amp;lt;/code&amp;gt;, in modo simile alle email.&lt;br /&gt;
** Il più grande homeserver è &amp;lt;code&amp;gt;matrix.org&amp;lt;/code&amp;gt;, fornito direttamente dalla Element Foundation. Al fine di favorire la decentralizzazione, è consigliabile scegliere un provider/una comunità affine, e registrare il proprio utente presso un altro homeserver.&lt;br /&gt;
&lt;br /&gt;
* '''Riservatezza''': Matrix include un sistema di crittografia a chiave pubblica end-to-end: le conversazioni possono essere lette solo tramite i dispositivi degli interlocutori. L'autenticità dell'interlocutore può essere verificata avviando una procedura da eseguirsi di persona col proprio interlocutore. I server e qualunque altra terza parte non può accedere ai messaggi. I metadati, tuttavia, sono in chiaro (i server possono sapere tra quali persone avvengono le conversazioni)&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Ore_del_GOLEM&amp;diff=9779</id>
		<title>Ore del GOLEM</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Ore_del_GOLEM&amp;diff=9779"/>
		<updated>2026-02-25T21:07:45Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Aggiunto link a form per sottomissione serate&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Questa pagina raccoglie gli eventi passati. Se stai cercando gli eventi futuri, consulta il [https://blog.golem.linux.it/calendario calendario].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Cos'è un'Ora del GOLEM ==&lt;br /&gt;
L'Ora del GOLEM è una serata a tema in cui si discute, più o meno formalmente, su qualunque cosa riguardi l'open source, dagli argomenti strettamente tecnici e pratici, alla &amp;quot;consapevolizzazione&amp;quot; e alla valutazione dell'uso dei vari strumenti.&lt;br /&gt;
A volte i soci più smanettoni preparano delle piccole presentazioni su qualche nuova tecnologia, o qualche tema interessante; altre volte ci si arricchisce facendo brainstorming tutti insieme e si impara a utilizzarla.&lt;br /&gt;
&lt;br /&gt;
Un'Ora del GOLEM, in genere, si compone di una presentazione preparata da un relatore, e poi rimane aperta a domande e discussioni sul tema da parte di tutti i presenti.&lt;br /&gt;
&lt;br /&gt;
Al termine, queste serate possono divenire degli [[Howto | how to]], delle [https://video.linux.it/c/golem_channel/videos videoregistrazioni], delle presentazioni o del codice, di cui si può trovare il link di seguito.&lt;br /&gt;
&lt;br /&gt;
=== Voglio presentare un argomento ===&lt;br /&gt;
&lt;br /&gt;
Vuoi proporre un argomento da presentare? Scrivici alla mail riportata nel [https://blog.golem.linux.it/contatti modulo contatti] oppure compila questo [https://cloud.golem.linux.it/apps/forms/s/DFs6fnkGDXwDf9xFGmJQf9tE form].&lt;br /&gt;
&lt;br /&gt;
=== Informazioni generali ===&lt;br /&gt;
&lt;br /&gt;
* Il tema deve rispettare gli obiettivi dello [[Statuto del GOLEM | statuto]]: va bene parlare di software e hardware libero e/o open source.&lt;br /&gt;
* La serata può avere un taglio tecnico, etico o legale, a seconda del relatore.&lt;br /&gt;
* I talk si tengono il martedì sera alle 21:30. In casi eccezionali, è possibile organizzare un altro giorno (es: se il relatore abita molto distante e si trova già in zona in un altro momento)&lt;br /&gt;
* La durata di un talk dovrebbe mantenersi strettamente al di sotto di un'ora e mezza, anche se spesso ci fa piacere trattenerci per degli approfondimenti. È consigliato lasciare spazio per le domande.&lt;br /&gt;
* Mettiamo a disposizione un proiettore, una lavagna, acqua e caffè.&lt;br /&gt;
* È consigliato portare il proprio computer, ma è anche disponibile una postazione per la proiezione delle diapositive (consigliato PDF). Usare Windows o Mac per presentare è permesso.&lt;br /&gt;
* Al termine del talk, incoraggiamo il relatore a condividere il materiale realizzato, che sarà pubblicato in questa pagina: diapositive, link, repository e quant'altro si voglia fornire.&lt;br /&gt;
* Col consenso del relatore, la serata può essere registrata (nota: non abbiamo una regia fissa, perciò potrebbe non essere sempre possibile)&lt;br /&gt;
&lt;br /&gt;
=== Di cosa c'è bisogno? ===&lt;br /&gt;
&lt;br /&gt;
Nel contattarci, abbiamo bisogno delle seguenti informazioni per pubblicizzare la serata:&lt;br /&gt;
&lt;br /&gt;
* Nome (o nickname) del relatore;&lt;br /&gt;
* Titolo del talk (massimo 80 caratteri);&lt;br /&gt;
* Abstract, breve descrizione del talk (150-300 caratteri).&lt;br /&gt;
* (opzionale) Immagine/Icona rappresentativa per promuovere l'evento.&lt;br /&gt;
&lt;br /&gt;
Per esempio, dai un'occhiata all'elenco su questa pagina per vedere cosa hanno scritto i relatori precedenti.&lt;br /&gt;
&lt;br /&gt;
Tenendo d'occhio i martedì sera liberi nel calendario, puoi anche suggerirci una o più date in cui preferiresti fare il tuo talk.&lt;br /&gt;
&lt;br /&gt;
== 2025 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=25 novembre: Frequenze libere: (non tanto) breve guida al radioascolto&lt;br /&gt;
|autore=[[Utente:Giulio]]&lt;br /&gt;
|immagine=Tux-radio.png&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Le trasmissioni senza fili sono ormai una tecnologia pervasiva e di cui non possiamo fare a meno. Ma cosa si nasconde in questo mezzo di comunicazione intangibile, eppure sempre presente attorno a noi? In questa serata esploreremo il mondo delle trasmissioni radio, scoprendo cosa è possibile ascoltare con l'ausilio di hardware a basso costo, di un po' di bricolage e di molto software open source.&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/DN4a74KpceKH2cC&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=25 novembre: La posta del FLUG&lt;br /&gt;
|autore=FLUG&lt;br /&gt;
|immagine=Opensmtpd.jpeg&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Incontro motivazionale su come il gruppo GNU/Linux di Firenze si è dotato del proprio server di posta elettronica e non solo. Oltre alla configurazione dei programmi che collaborano all'invio e alla ricezione dei messaggi, si terrà una breve ed emozionante divagazione pratica sull'utilizzo del server in generale, sulla sua manutenzione, ma soprattutto sulle sue umili origini.&lt;br /&gt;
|presentazione=https://firenze.linux.it/~leandro/PresentazioneServerone.html&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=https://firenze.linux.it/2025/11/la-posta-del-flug/, https://lists.linux.it/pipermail/golem/2025-November/015509.html&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=4 novembre: Docker... questo sconosciuto!&lt;br /&gt;
|autore=Diego La Monica&lt;br /&gt;
|immagine=docker.png&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=docker, dockerfile, docker compose, container, service e tutti quei termini usati un po' a caso, tanto perchè fa figo... Ci confronteremo su alcune piccole chicche per gestire al meglio (e in sicurezza) i propri ambienti basati su Docker&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=17 giugno: Da zero a packager Fedora!&lt;br /&gt;
|autore=luigix25&lt;br /&gt;
|immagine=fedora.png&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Durante la serata verra' illustrato l'intero processo che va dalla scrittura di uno specfile, alla creazione del pacchetto rpm alla pubblicazione nei repository ufficiali di Fedora&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=10 giugno: Le avventure di un pachettizzatore su Debian&lt;br /&gt;
|autore=matteobin&lt;br /&gt;
|immagine=debian.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Pacchettizzare è il modo più semplice per contribuire al progetto Debian diventandone parte attiva. Inoltre è un ottimo esercizio per ampliare le conoscenze informatiche e sistemistiche, che aiuta a comprendere le difficoltà della distribuzione di software. Pacchettizzando si diventa esperti di sistemi di compilazione e di aggiornamento, proprio malgrado! Anche in questo ambito il software libero si rivela la scelta migliore non solo per motivi etici, pure per quanto riguarda l'avanguardia, la qualità e l'affidabilità dei sistemi utilizzati. Tuttavia la sfida maggiore nella pacchettizzazione risiede nella coordinazione delle parti in causa. Per questo una parte della serata sarà dedicata al processo per diventare un manutentore di Debian e ai suggerimenti per collaborare con efficacia con gli altri.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=27 maggio: git --help&lt;br /&gt;
|autore=Utente:Lucam&lt;br /&gt;
|immagine=git.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=git per tutti: una panoramica su comandi e opzioni di cui non sapevi di aver bisogno. Dalla &amp;quot;porcellana&amp;quot; per gestire documentazione alle &amp;quot;tubature&amp;quot; per riscrivere la storia&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=https://wiki.golem.linux.it/Git&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=13 maggio: Fediverso e Livello Segreto, una palestra di libertà digitale&lt;br /&gt;
|autore=Fabio Kenobit&lt;br /&gt;
|immagine=fediverso.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Una chiacchierata con Kenobit, uno dei fondatori di Livello Segreto, un'istanza Mastodon, sulle potenzialità del Fediverso e delle piattaforme libere, in ottica di libertà e resistenza digitale.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=22 aprile: Tor - The onion services&lt;br /&gt;
|autore=Leandro&lt;br /&gt;
|immagine=tor.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=La rete tor è un sistema valido per aggirare la censura e l'intercettazione in rete ma soffre di una debolezza nei nodi di uscita che sono il punto più delicato ed esposto tecnicamente e legalmente. La soluzione che elimina questa debolezza sono gli &amp;quot;onion service&amp;quot;, servizi raggiungibili solo all'interno della rete tor per collegarsi ai quali non è necessario conoscere l'indirizzo IP e il dominio del server che li ospita né avere chiavi di cifratura della connessione perché tutto questo viene provvisto dal protocollo: l'anonimato sarà garantito per chi utilizza il servizio ma anche per chi lo rende disponibile. Per fare questo è necessario un cambio di paradigma perché, a differenza dell'uso di tor &amp;quot;normale&amp;quot; nel quale il servizio da raggiungere può anche non avere alcuna contezza del fatto di essere raggiunto via tor, un onion service deve essere configurato in precedenza da chi amministra il servizio stesso. In questa presentazione, dopo una breve descrizione del protocollo, proveremo a configurare un onion service spiegando i vari passi.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=8 aprile: Self hosting: un approccio pratico&lt;br /&gt;
|autore=Giacomo Bagnoli&lt;br /&gt;
|immagine=systemd.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=In questa serata esploreremo il tema del self-hosting, ovvero quali alternative esistono all'uso dei tradizionali servizi cloud.  Data la complessità dell'argomento, ci concentreremo su un approccio pratico, valutando con attenzione il compromesso tra usabilità, privacy, sicurezza e convenienza. Parleremo di podman, quadlets, containers, btrfs, vpn, come gestire l'autenticazione e i certificati, e molto altro.&lt;br /&gt;
|presentazione=https://github.com/gbagnoli/self_hosting_slides/releases/tag/final&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=https://lists.linux.it/pipermail/golem/2025-April/015380.html&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=18 febbraio: Radiocaccia, scopriamo cos'è&lt;br /&gt;
|autore=Paolo IZ5PHM&lt;br /&gt;
|immagine=radiocaccia.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Nota anche come Radio Direction Finding, è una competizione che ha lo scopo di riuscire a localizzare, nel minor tempo possibile, dei trasmettitori radio nascosti. L'attività è volta a incentivare l’autocostruzione di apparecchiature radio, l’apprendimento alla rilevazione di segnali radio e della loro direzione di provenienza e le basi di topografia. La serata approfondirà alcuni di questi aspetti ed includerà una prova pratica.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=4 febbraio: Come funziona una radio?&lt;br /&gt;
|autore=Pierluigi IK5GQF&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata a metà fra storia e tecnica in cui verrà presentata la storia della radioricezione, a partire dai primi circuiti analogici per arrivare alle moderne SDR (Software Defined Radio)&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=14 gennaio: Introduzione a Laravel&lt;br /&gt;
|autore=Simone&lt;br /&gt;
|immagine=laravel.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Partiremo da un progetto vuoto e vedremo le principali soluzioni proposte dal framwork per sviluppare una web app.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2024 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=17 dicembre: Liberiamo il BIOS con coreboot&lt;br /&gt;
|autore=aggro&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=In questa serata parleremo di coreboot, il bios libero. Faremo una chiacchierata in cui si parlerà di cos'è, su che macchine si può usare e quali sono i benefici. Mezzi permettendo, alla chiacchierata seguirà una fase pratica in cui flasheremo coreboot sul Thinkpad X230 del relatore. A cura di Alessandro, LUG di Prato&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=5 dicembre: IPv6 @ FLUG&lt;br /&gt;
|autore=[[Utente:giomba]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Internet è una rete di reti a cui sono connessi miliardi di dispositivi, dai nostri computer, ai nostri smartphone, a tutti quei server e router che permettono all'infrastruttura di funzionare, per non parlare di tutti i dispositivi di domotica e IoT che ormai pervadono le nostre vite. Tuttavia, in origine, erano stati previsti solo 4 miliardi di indirizzi (IPv4): com'è possibile dunque continuare a estendere la rete se gli indirizzi sono finiti? Quali trucchi vengono impiegati, e quali svantaggi ci sono nel perpetuare l'uso di un protocollo che ormai ha fatto il suo tempo? Ospitare un servizio in autonomia, un sito, può diventare appannaggio dei pochi che possono ancora permettersi di accedere a indirizzi IPv4? IPv6 è la soluzione e la sua promozione necessaria, sebbene in Italia sia ancora poco diffuso: in questa serata impareremo a conoscere IPv6, capiremo le differenze con IPv4, e valuteremo, in tempo reale, come potrebbe essere utilizzato al FLUG.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=22 ottobre: Come gestire nodi TOR dalla tua cantina&lt;br /&gt;
|autore=[https://osservatorionessuno.org/ Osservatorio Nessuno]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Gestire nodi TOR può essere divertente, ma anche ben fastidioso, come farlo in Italia? Per spiegarlo vi racconteremo una storia che parte dal processo Ruby ter, arriva in Siria e finisce in una cantinetta piastrellata della Torino Liberty. &lt;br /&gt;
A cura dell'Osservatorio Nessuno&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=25 giugno: Introduzione al mondo open source: consigli e strumenti per nuovi contributori&lt;br /&gt;
|autore=luigix25&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Contribuire a grandi progetti open-source può sembrare un'impresa ardua. Durante la serata esploreremo il funzionamento dello sviluppo in progetti di rilievo come Linux. Ci concentreremo su come avvicinarsi a questo mondo e sugli strumenti essenziali per iniziare.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=4 giugno: Il Processo di compilazione&lt;br /&gt;
|autore=Simone Guercini&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Durante la serata approfondiremo il processo di compilazione di un programma C++ tramite gcc, analizzando gli step che intercorrono tra il codice sorgente ed il file eseguibile. Sono compresi cenni alla struttura di un programma C++, una introduzione al linguaggio assembly x86_64 e numerosi esempi&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=9 aprile: Irrigazione domotica fai-da-te&lt;br /&gt;
|autore=Mario Alinari&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=In casa ho un piccolo terrazzo che ho rallegrato con un po’ di fiori. Da qui l’idea  di un sistema di irrigazione che annaffiasse le piante al posto mio. Avrei potuto acquistare qualcosa di già fatto? Sicuramente si ma mi sarei perso tutto il divertimento. Non rimaneva altro che realizzarlo home made.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=2 aprile: R Project&lt;br /&gt;
|autore=Fabio Frascati&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Una serata di formazione sull'utilizzo del software statistico R per i dati qualitativi. In altre parole la gestione di dati categorici (non numerici) semplice ed intuitiva. Vengono illustrati gli oggetti R ad hoc per un supporto migliore del comune vettore di stringhe. Semplici esempi completeranno la sintetica parte teorica. Nessuna esperienza precedente in R o in programmazione è necessaria.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=12 marzo: Documentare il Sanco 8003: un'avventura inaspettata&lt;br /&gt;
|autore=[[Utente:giulio]] [[Utente:giomba]]&lt;br /&gt;
|immagine=Sanco8003.jpeg&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=In questa serata, a metà fra il vintage ed il moderno, racconteremo la storia del reverse engineering di un computer di inizio anni '80: il Sanco 8003. Utilizzando software ed hardware libero, si parlerà di come approcciarsi ad una scheda sconosciuta per ricavarne il relativo schema; come si possono interpretare i segreti celati all'interno delle EPROM; come disassemblare un intricato codici per Z80 e modificarlo a piacimento per creare un bootloader personalizzato; ed infine, come sfruttare tutte queste scoperte per realizzare un emulatore dedicato a questa misteriosa macchina!&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/pGdCgrdATtQc87E&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=5 marzo: Semplificare il controllo degli accessi su Linux con Systems Manager&lt;br /&gt;
|autore=Francesco Provino&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Come accedere a macchine Linux in cloud e on-premise (nonché qualsiasi altra risorsa) senza usare chiavi SSH o esponendo porte di rete, utilizzando AWS Systems Manager.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=6 febbraio: Introduzione a XMPP&lt;br /&gt;
|autore=Matteo Bini&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=XMPP è un protocollo che permette di scambiarsi messaggi proprio come WhatsApp, con tanto di chiamate audio e video e invio di allegati. Durante l’intervento sarà presentata una breve panoramica sulla struttura del protocollo in questione, oltre all'illustrazione dei vari programmi disponibili per utilizzarlo e per offrire tale servizio.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=http://choice.tiepi.it/~matteobin/scritti/presentazione-di-xmpp.html&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=9 gennaio: virtio e vsock: comunicazione tra host e VM&lt;br /&gt;
|autore=Stefano Garzarella e Luigi Leonardi&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=virtio è uno standard per la comunicazione fra host e macchine virtuali: saranno presentati la sua specifica, come funziona, e alcuni casi d'uso. In particolare ci focalizzaremo su vsock, una famiglia di socket per la comunicazione fra host e guest.&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/s2t24maeGfqiSzY&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2023 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=5 dicembre: Minigiochi al cubo&lt;br /&gt;
|autore=Zughy&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Mai pensato di voler sviluppare un videogioco? Detto fatto! Da anni i server minigiochi spopolano su Minecraft, facendo divertire milioni di persone. Usando il motore di gioco libero Minetest e una piccola libreria, imparerai a creare quelle avventure tanto anelate, arrivando ad avere il tuo piccolo titolo a fine laboratorio. Consigliato per tutte le età!&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://video.linux.it/w/3DtztwVqPLf2CwvnWnK8d7&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=7 marzo: Introduzione a Proxmox&lt;br /&gt;
|autore=Thomas Buonanno&lt;br /&gt;
|immagine=logo-proxmox.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Proxmox VE è una distribuzione debian-based per la gestione di macchine virtuali e container, che include anche un sistema di backup, per la gestione di file system distribuiti e per la migrazione rapida dei servizi. Durante questa serata sarà presentato il progetto e ne saranno mostrate alcune applicazioni pratiche.&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/KfiDYeczEop5WEo&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=7 febbraio: Le alternative al foglio di calcolo nella gestione ed analisi dei propri dati&lt;br /&gt;
|autore=Fabio Frascati&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Perché è così comune usare il foglio di calcolo nella gestione dei propri dati? È sempre la soluzione migliore? Esistono valide alternative gratuite ed open source per compiti specifici e spesso noiosi? Vediamo insieme alcuni semplici esempi in Libreoffice Calc ed R.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=3 Gennaio: Haskell&lt;br /&gt;
|autore=Mariano&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata di introduzione ad Haskell ed ai linguaggi funzionali&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/QDFGaYDfS7c6stP&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2021 ==&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=29 giugno: dotfiles - Gestione ragionata dei files di configurazione&lt;br /&gt;
|autore=[[Utente:Gbiotti]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata sulla gestione con versioning dei dotfiles di Linux&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=[https://git.golem.linux.it/gbiotti/sdf_appunti Appunti della serata] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=16 marzo: Blockchain - Il Free Software incontra la finanza&lt;br /&gt;
|autore=[[Utente:Linux-Lover]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata introduttiva e divulgativa sulle blockchain: cosa sono e perché sono importanti per la comunità del software libero.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=in caricamento&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=9 marzo: Due chiacchiere su buffer overflow&lt;br /&gt;
|autore=luigix25&lt;br /&gt;
|immagine=Stack-example.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Due chiacchiere informali sui buffer overflow e sulle tecniche di mitigrazione.&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/WkWf7XiNPPn7mqn&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://video.linux.it/w/8PG9X1PojpoVbeM5JtYLFn&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=27 gennaio: Programmare Arduino like a pro&lt;br /&gt;
|autore=[[Utente:Giulio]]&lt;br /&gt;
|immagine=Arduino-board.jpg&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=L'ecosistema Arduino consente di sviluppare semplici applicazioni in modo rapido e con conoscenze di programmazione non necessariamente approfondite. Ormai, volenti o nolenti tutti abbiamo una scheda Arduino in casa. Questo sarà il punto di partenza della serata, dove andremo a sviscerare come, partendo da uno sketch, si arrivi al codice macchina eseguito dal microcontrollore. Faremo la conoscenza dei varii strumenti della toolchain GCC: makefile, compilatori ed assemblatori, per comprendere meglio cosa avviene sotto il cofano dell'Arduino IDE e come sfruttarli per scrivere del codice &amp;quot;fuori dagli schemi&amp;quot;.&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/5M2SisqZmJ7PQXM&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://archivio.golem.linux.it/OreDelGolem/20210127-arduinolikeapro-parte1.mp4&lt;br /&gt;
|altro=[https://archivio.golem.linux.it/OreDelGolem/20210127-arduinolikeapro-parte2.mp4 Video sessione di approfondimento sul multitasking] [https://video.linux.it/videos/watch/f654157f-a4b6-4ebb-aaee-932b04bda1af Mirror1] [https://video.linux.it/videos/watch/e63d744f-2444-41c5-b852-fa79cedefde1 Mirror2]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=20 gennaio: Lineage OS: come installarla e... perché&lt;br /&gt;
|autore=Filippo Micheletti, [[Utente:Giomba]], Marco Castrovilli ([http://www.restartersfirenze.it/ Restarters Firenze])&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Tutti hanno uno smartphone, ma pochi sono coscienti del livello di pervasività che questo dispositivo ha nelle nostre vite, e sulla mancanza di controllo che abbiamo sui dati personali che lo attraversano. Conoscere come funziona è indispensabile per fare scelte consapevoli sull’uso che ne facciamo, e scoprire sistemi operativi e applicazioni alternative è uno dei primi passi per riprendere il controllo sui questi dati. Durante la serata, ci domanderemo perché usare LineageOS, quali programmi e applicazioni libere e rispettose possiamo usare, in alternativa ai soliti noti, come si installa questo sistema su uno smartphone, quali sono difficoltà, problemi e possibili rinunce che possiamo incontrare.&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/39dTAZxdpWfzHSp&lt;br /&gt;
|documenti=https://golem.linux.it/cloud/index.php/s/E9ZCm9fjFnq7egG&lt;br /&gt;
|video=https://video.linux.it/w/wSw212j2di8pM38E4g4DZY&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2020 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=7 ottobre: Linux per radioamatori&lt;br /&gt;
|autore=[[Utente:Giulio]] [[Utente:Lucam]]&lt;br /&gt;
|immagine=Tux-radio.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Introduzione a Linux e alle sue applicazioni in ambito radioamatoriale. Quali sono i programmi per fare radio su Linux? Come posso attivare un nodo webSDR?&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/8fLXfdwMwEpxxCq&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20201007-iu5mo-linuxradio.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=7 luglio: Flatcam&lt;br /&gt;
|autore=[[Utente:Glomant]]&lt;br /&gt;
|immagine=Flatcam.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Flatcam è un software che, a partire da file gerber o gcode, permette di passare all’incisione e all’intaglio vero e proprio del circuito tramite una macchina a controllo numerico. Al termine della serata, il prodotto potrà essere inciso tramite una CNC, come quella che abbiamo in officina, come vedremo nella serata successiva.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=https://golem.linux.it/cloud/index.php/s/RZZEfzF8f7C7CMA&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20200708-glomant-flatcam.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=30 giugno: KiCAD 2/2&lt;br /&gt;
|autore=[[Utente:Giulio]]&lt;br /&gt;
|immagine=Kicad.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Seconda serata sull'uso del software di disegno circuiti stampati: disegnato lo schema sarà necessario realizzare il layout, la controparte digitale del circuito stampato. Al termine della serata, il prodotto potrà essere mandato in stampa presso aziende specializzate tramite processi industriali, oppure potrà essere utilizzato la serata seguente. Saranno approfondite alcune funzioni supplementari di KiCAD, come la gestione della lista componenti e delle librerie.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20200630-giuliof-kicad.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=23 giugno: Scrivere un emulatore per il Commodore 64&lt;br /&gt;
|autore=luigix25&lt;br /&gt;
|immagine=c64-startup-screen.jpg&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://video.linux.it/w/qVJ5C78WVkJrDvDyBC57sf&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=16 giugno: KiCAD 1/2&lt;br /&gt;
|autore=[[Utente:Giulio]]&lt;br /&gt;
|immagine=Kicad.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Prima serata sull'uso del software di disegno circuiti stampati: Si tratta di un software opensource di Electronic Design Automation, ossia di progettazione assistita al computer per circuiti elettronici. KiCAD permette di progettare ogni fase della realizzazione del circuito, dalla sua prima bozza, alla scelta e al posizionamento dei componenti, allo sbroglio delle piste, alla produzione dei file per lo stampaggio vero e proprio. In questo primo incontro si vedrà perché e come disegnare uno schema elettronico al computer, come importare i componenti, come associare i simboli grafici agli oggetti fisici.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20200616-giuliof-kicad.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=26 maggio: Indipendenza Digitale?&lt;br /&gt;
|autore=[[Utente:Giomba]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Guida pratica per riappropriarsi della propria indipendenza e identità digitale. Quali compromessi possiamo fare nell'uso del software sul nostro computer e sul nostro smartphone?&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=https://golem.linux.it/cloud/index.php/s/WMDixxEjNtEadAj&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=12 maggio: Due parole su LaTeX&lt;br /&gt;
|autore=[[Utente:Giulio]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Introduzione al software di impaginazione LaTeX&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=''Presentazione in caricamento''&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=14 aprile: Riconoscimento oggetti con OpenCV&lt;br /&gt;
|autore=[[Utente:Linux-Lover]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/E9FxLxM5AEopZyJ&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2019 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=19 febbraio: 128 bit di IPv6&lt;br /&gt;
|autore=[[Utente:giomba]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Cos’è un indirizzo di rete? IPv4 vs IPv6. Perché IPv6? Come si legge un IPv6? Come posso realizzare una rete IPv6? Cosa sono NDP e SLAAC? Come ottenere IPv6? [[IPv6 @ GOLEM]]&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/pZcSHge3bBiQ37m&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://video.linux.it/w/e6oYr4MasX9NDVtkJ6jCU3&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=8 gennaio: Deepen Meltdown&lt;br /&gt;
|autore=[[Utente:Raistlin]]&lt;br /&gt;
|immagine=Meltdown-spectre-logo.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Aggiornamenti sui bug che hanno recentemente afflitto le CPU&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2018 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=16 Ottobre: NextCloud&lt;br /&gt;
|autore=Mattia &amp;amp; Carmelo&lt;br /&gt;
|immagine=Nextcloud-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Cos'è un sistema di clouding. Cloud commerciale vs. Nextcloud. Come configurare un cloud casalingo su PC o Raspberry.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=2 Ottobre: Python &amp;amp; grafici&lt;br /&gt;
|autore=giuliof&lt;br /&gt;
|immagine=Python-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Approfondimento sulle librerie &amp;lt;code&amp;gt;MatPlotLib&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;NumPy&amp;lt;/code&amp;gt;: creare e abbellire grafici, tracciare funzioni, importare e visualizzare dati da CSV, grafici professionali in LaTeX. ''To be continued...''&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/wteTWdnflCwWOXa/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20181002-giuliof-python-grafici.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=12 Settembre: PC4Beginners&lt;br /&gt;
|autore=jacopo&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata introduttiva all'informatica: cenni storici sul computer, cos'è l'hardware, cos'è il software, quali sono i componenti di un PC.&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/HoTfB2ilOWHl1Aq/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180918-jacopo-PC4Beginners.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=3 Luglio: Python 303&lt;br /&gt;
|autore=giuliof&lt;br /&gt;
|immagine=Python-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Avanziamo di livello e parliamo di: liste, dizionari, lettura/scrittura su file, accenno alle librerie e confronto Python2 vs Python3. ''To be continued...''&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/2gbp1UpORawCUkF/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180703-giuliof-python303.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=19 Giugno: Python 101 x2&lt;br /&gt;
|autore=giuliof&lt;br /&gt;
|immagine=Python-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Basi sul linguaggio di programmazione Python: esercizi con ''if...else'', funzioni, cicli ''while'' e ''for'', stringhe e operazioni su stringhe. ''To be continued...''&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/Qq99P5gwkno7H1q/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180619-giuliof-python101x2.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=12 Giugno: Technical deep dive: Meltdown + Spectre&lt;br /&gt;
|autore=Dario&lt;br /&gt;
|immagine=Meltdown-spectre-logo.png&lt;br /&gt;
|dimensione_img=250px&lt;br /&gt;
|descrizione=Da una panoramica sull'architettura e sul funzionamento dei processori moderni (architettura superscalare, memorie cache, TLB, memoria virtuale) arriviamo a capire come queste vulnerabilità scoperte di recente denominate ''Meltdown'' e ''Spectre'' (maggiori [https://meltdownattack.com info]) potrebbero mettere a rischio la sicurezza dell'utente.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180612-Meltdown-Spectre-Dario.mp4&lt;br /&gt;
|altro= concetti introduttivi ([https://en.wikipedia.org/wiki/Virtual_address_space Virtual Memory],&lt;br /&gt;
[https://wiki.osdev.org/Memory_management gestione della memoria],&lt;br /&gt;
esecuzione speculativa [https://en.wikipedia.org/wiki/Speculative_execution] [https://en.wikipedia.org/wiki/Branch_predictor],&lt;br /&gt;
[https://en.wikipedia.org/wiki/Instruction_pipelining pipeline],&lt;br /&gt;
[https://en.wikipedia.org/wiki/Tomasulo_algorithm algoritmo di Tomasulo],&lt;br /&gt;
memoria cache [https://en.wikipedia.org/wiki/CPU_cache] [https://www.extremetech.com/extreme/188776-how-l1-and-l2-cpu-caches-work-and-why-theyre-an-essential-part-of-modern-chips],&lt;br /&gt;
[https://en.wikipedia.org/wiki/Translation_lookaside_buffer TLB],&lt;br /&gt;
[https://en.wikipedia.org/wiki/Side-channel_attack side channel attack])&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
esempi di codice che sfrutta le vulnerabilità ([https://www.raspberrypi.org/blog/why-raspberry-pi-isnt-vulnerable-to-spectre-or-meltdown/], [https://medium.com/@mattklein123/meltdown-spectre-explained-6bc8634cc0c2])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=5 Giugno: Buildroot: distrubuzione personalizzata&lt;br /&gt;
|autore=$pookyh&lt;br /&gt;
|immagine=Logog-b.png&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=[https://buildroot.org Buildroot] è un tool che permette di generare una distribuzione Linux essenziale cucita su misura per le proprie esigenze.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180605-spooky-buildroot.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=22 Maggio: Python - introduzione e basi&lt;br /&gt;
|autore=giuliof&lt;br /&gt;
|immagine=Python-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Basi sul linguaggio di programmazione Python: esempi applicativi, installazione, variabili, istruzioni di stampa a schermo, blocchi condizionali. (Il video è parziale'''!''')&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/IroTEn8ZJhXTaGg/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180519-GiulioF-Python101x1.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 17 Aprile: R: software di analisi statistica ===&lt;br /&gt;
Basi sul linguaggio di programmazione R, applicazioni alla statistica ed esempi.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_files.jpg|40px|files]] [https://golem.linux.it/cloud/index.php/s/mY2GIXC1dIZPKpu Scarica] files (script utilizzati, lista comandi...) e presentazioni della serata.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_video.png|40px|video]] [https://golem.linux.it/pubblici/OreDelGolem/20180417-R-Frascati-Giorgetti.mp4 Guarda] o scarica il video della serata!&lt;br /&gt;
&lt;br /&gt;
=== 10 Aprile: Bash e scripting ===&lt;br /&gt;
Panoramica sui comandi utili e basi di scripting per automatizzare le attività.&lt;br /&gt;
&lt;br /&gt;
Consulta il prontuario sulla [[Linea_di_comando | linea di comando]].&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_video.png|40px|video]] [https://golem.linux.it/pubblici/OreDelGolem/20180410-Bash-Giomba.mp4 Guarda] o scarica il video della serata!&lt;br /&gt;
&lt;br /&gt;
''by Giomba''&lt;br /&gt;
&lt;br /&gt;
=== 23 Gennaio: Sviluppo di un'app per Android ===&lt;br /&gt;
Uno sguardo d'insieme sulla realizzazione di applicazioni per il proprio smartphone con [https://developer.android.com/studio/index.html AndroidStudio], iniziando con alcuni esempi.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_presentazione.png|40px|slides]]  [https://golem.linux.it/cloud/index.php/s/pGoCGHZKpo7C04f/download Presentazione] della serata.&lt;br /&gt;
&lt;br /&gt;
''by Omid''&lt;br /&gt;
&lt;br /&gt;
=== 16 Gennaio: Impariamo KiCad ===&lt;br /&gt;
Come utilizzare il software [http://kicad-pcb.org KiCad] per il disegno di schemi e la realizzazione di circuiti stampati.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_files.jpg|40px|files]]  [https://golem.linux.it/cloud/index.php/s/HLl9ZxreCLQUCH8 Scarica] i file prodotti durante la serata.&lt;br /&gt;
&lt;br /&gt;
''by Stefano''&lt;br /&gt;
&lt;br /&gt;
== 2017 ==&lt;br /&gt;
=== 12 Dicembre: Arduino avr-gcc ===&lt;br /&gt;
Programmazione a &amp;quot;basso livello&amp;quot; in C della scheda Arduino, bypassando l'IDE, per sfruttare a pieno le risorse del microcontrollore.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_video.png|40px|video]] [https://golem.linux.it/pubblici/OreDelGolem/20171212-AVRgcc-Giulio.mp4 Guarda] o scarica il video della serata!&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:Giulio | Giulio]]''&lt;br /&gt;
&lt;br /&gt;
=== 21 Novembre: Git ===&lt;br /&gt;
Un sistema di versionamento alla portata di tutti: come gestire i propri progetti al computer, tenere traccia dello sviluppo e apportare modifiche senza rischiare di danneggiare il lavoro precedente. Consulta il nostro [[Git | prontuario]] di riferimento.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_presentazione.png|40px|slides]]  [https://golem.linux.it/cloud/index.php/s/VL27wucLMsbCEDP Presentazione] della serata&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_video.png|40px|video]]  [https://golem.linux.it/pubblici/OreDelGolem/20171121-Git-Lucam.mp4 Video] della serata&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:Lucam | Lucam]]''&lt;br /&gt;
&lt;br /&gt;
=== 7 Novembre: Arduino e Wireless ===&lt;br /&gt;
Domotica: come integrare il proprio progetto di elettronica con Arduino con la rete WiFi di casa.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_presentazione.png|40px|slides]]  [https://golem.linux.it/cloud/index.php/s/fp7PgxzcdLRmKlx Presentazioni] della serata.&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:Giulio | Giulio]]''&lt;br /&gt;
&lt;br /&gt;
=== 17 ottobre: Introduzione a Wordpress ===&lt;br /&gt;
Procedure base e consigli per costruire un semplice sito dinamico con Wordpress.&lt;br /&gt;
&lt;br /&gt;
''by Pinpas''&lt;br /&gt;
&lt;br /&gt;
=== 3 Ottobre: Sviluppo HTML+CSS ===&lt;br /&gt;
I rudimenti per scrivere un sito statico. &lt;br /&gt;
&lt;br /&gt;
[[File:Icona_files.jpg|40px|files]] [https://golem.linux.it/cloud/index.php/s/uIz3QwcymtgTeNN Scarica] i file della serata!&lt;br /&gt;
&lt;br /&gt;
''by Francesco''&lt;br /&gt;
&lt;br /&gt;
=== 19 Settembre: Installazione Wordpress ===&lt;br /&gt;
Serata pratica di gruppo sull'installazione del CMS [[Wordpress]] e in generale di un applicativo web su piattaforma LAMP.&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:giomba | giomba]]''&lt;br /&gt;
&lt;br /&gt;
=== 5 Settembre: Il Terminale Unix/Linux ===&lt;br /&gt;
Introduzione ai concetti e ai comandi più utilizzati per gestire il sistema da terminale. Consulta il nostro How-To sul [[Linea_di_comando | terminale]].&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:giomba | giomba]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Officina]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Template:Pagina_Principale/Link_Esterni&amp;diff=9778</id>
		<title>Template:Pagina Principale/Link Esterni</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Template:Pagina_Principale/Link_Esterni&amp;diff=9778"/>
		<updated>2026-02-25T21:03:56Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Svecchiati alcuni link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sviluppo ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;golem-tb-container&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;golem-tb-column&amp;quot; style=&amp;quot;width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
; [https://git.golem.linux.it/ git.golem.linux.it]: Repository per lo sviluppo di software ad uso interno e non.&lt;br /&gt;
&lt;br /&gt;
; [https://github.com/golemempoli GitHub]: Mirror dei repository.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;golem-tb-column&amp;quot; style=&amp;quot;width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
; [[:Category:Sysop|Sistemi Informatici]]: Entra anche tu nel gruppo sysadmin del GOLEM!&lt;br /&gt;
; [https://archivio.golem.linux.it Archivio GOLEM]: archivio di voluminoso materiale storico, video e mirror&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Template:Pagina_principale/Attivit%C3%A0&amp;diff=9777</id>
		<title>Template:Pagina principale/Attività</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Template:Pagina_principale/Attivit%C3%A0&amp;diff=9777"/>
		<updated>2026-02-25T21:01:22Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Rimossa pagina decaduta&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cosa facciamo ==&lt;br /&gt;
; [[File:Bulb.png | 25px | Progetti]] [[Attività dell'Associazione|Attività a lungo termine]]&lt;br /&gt;
; [[File:Pulsante-lunedino.png | 25px | Arduino Project Day]] [[Arduino Project Day]]&lt;br /&gt;
; [[File:Logo-ore-del-golem.png | 25px | Ore del Golem]] [[Ore_del_GOLEM | Ore del GOLEM]]&lt;br /&gt;
; [[File:oldpc.png | 25px | Progetti Trashware]] [[Progetti Trashware]]&lt;br /&gt;
; [[File:Biblioteca.png | 25px | Biblioteca]] [[Biblioteca]]&lt;br /&gt;
; [[File:Carrello_spesa.png | 25px | Mercatino]] [[Mercatino]]&lt;br /&gt;
; [[File:Pulsante-corsi.png | 25px | Corsi]] [[Corso Arduino 2025]]&lt;br /&gt;
&lt;br /&gt;
== Eventi ==&lt;br /&gt;
; [[File:Pulsante-cene.png | 25px]] [[:Category:Cene|Cene]]&lt;br /&gt;
; [[File:Pulsante-conferenze.png‎  | 25px | Convegni]] [[Convegni | Convegni e conferenze]]&lt;br /&gt;
; [[File:Pulsante-corsi.png | 25px | Corsi]] [[:Category:Corsi|Corsi]]&lt;br /&gt;
; [[File:Pulsante-linuxday.png‎ | 25px | Linux Day]] [[:Category:LinuxDay|Linux Day]]&lt;br /&gt;
[[Linux Day 2024| 2024]] - [[Linux Day 2023 | 2023]] - [[Linux Day 2021 | 2021]] - [[:Category:LinuxDay|Tutti]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Ore_del_GOLEM&amp;diff=9776</id>
		<title>Ore del GOLEM</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Ore_del_GOLEM&amp;diff=9776"/>
		<updated>2026-02-25T20:50:44Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Portate informazioni per i relatori dalla pagina Progetti&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Questa pagina raccoglie gli eventi passati. Se stai cercando gli eventi futuri, consulta il [https://blog.golem.linux.it/calendario calendario].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Cos'è un'Ora del GOLEM ==&lt;br /&gt;
L'Ora del GOLEM è una serata a tema in cui si discute, più o meno formalmente, su qualunque cosa riguardi l'open source, dagli argomenti strettamente tecnici e pratici, alla &amp;quot;consapevolizzazione&amp;quot; e alla valutazione dell'uso dei vari strumenti.&lt;br /&gt;
A volte i soci più smanettoni preparano delle piccole presentazioni su qualche nuova tecnologia, o qualche tema interessante; altre volte ci si arricchisce facendo brainstorming tutti insieme e si impara a utilizzarla.&lt;br /&gt;
&lt;br /&gt;
Un'Ora del GOLEM, in genere, si compone di una presentazione preparata da un relatore, e poi rimane aperta a domande e discussioni sul tema da parte di tutti i presenti.&lt;br /&gt;
&lt;br /&gt;
Al termine, queste serate possono divenire degli [[Howto | how to]], delle [https://video.linux.it/c/golem_channel/videos videoregistrazioni], delle presentazioni o del codice, di cui si può trovare il link di seguito.&lt;br /&gt;
&lt;br /&gt;
=== Voglio presentare un argomento ===&lt;br /&gt;
&lt;br /&gt;
Vuoi proporre un argomento da presentare? Scrivici alla mail riportata nel [https://blog.golem.linux.it/contatti modulo contatti].&lt;br /&gt;
&lt;br /&gt;
=== Informazioni generali ===&lt;br /&gt;
&lt;br /&gt;
* Il tema deve rispettare gli obiettivi dello [[Statuto del GOLEM | statuto]]: va bene parlare di software e hardware libero e/o open source.&lt;br /&gt;
* La serata può avere un taglio tecnico, etico o legale, a seconda del relatore.&lt;br /&gt;
* I talk si tengono il martedì sera alle 21:30. In casi eccezionali, è possibile organizzare un altro giorno (es: se il relatore abita molto distante e si trova già in zona in un altro momento)&lt;br /&gt;
* La durata di un talk dovrebbe mantenersi strettamente al di sotto di un'ora e mezza, anche se spesso ci fa piacere trattenerci per degli approfondimenti. È consigliato lasciare spazio per le domande.&lt;br /&gt;
* Mettiamo a disposizione un proiettore, una lavagna, acqua e caffè.&lt;br /&gt;
* È consigliato portare il proprio computer, ma è anche disponibile una postazione per la proiezione delle diapositive (consigliato PDF). Usare Windows o Mac per presentare è permesso.&lt;br /&gt;
* Al termine del talk, incoraggiamo il relatore a condividere il materiale realizzato, che sarà pubblicato in questa pagina: diapositive, link, repository e quant'altro si voglia fornire.&lt;br /&gt;
* Col consenso del relatore, la serata può essere registrata (nota: non abbiamo una regia fissa, perciò potrebbe non essere sempre possibile)&lt;br /&gt;
&lt;br /&gt;
=== Di cosa c'è bisogno? ===&lt;br /&gt;
&lt;br /&gt;
Nel contattarci, abbiamo bisogno delle seguenti informazioni per pubblicizzare la serata:&lt;br /&gt;
&lt;br /&gt;
* Nome (o nickname) del relatore;&lt;br /&gt;
* Titolo del talk (massimo 80 caratteri);&lt;br /&gt;
* Abstract, breve descrizione del talk (150-300 caratteri).&lt;br /&gt;
* (opzionale) Immagine/Icona rappresentativa per promuovere l'evento.&lt;br /&gt;
&lt;br /&gt;
Per esempio, dai un'occhiata all'elenco su questa pagina per vedere cosa hanno scritto i relatori precedenti.&lt;br /&gt;
&lt;br /&gt;
Tenendo d'occhio i martedì sera liberi nel calendario, puoi anche suggerirci una o più date in cui preferiresti fare il tuo talk.&lt;br /&gt;
&lt;br /&gt;
== 2025 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=25 novembre: Frequenze libere: (non tanto) breve guida al radioascolto&lt;br /&gt;
|autore=[[Utente:Giulio]]&lt;br /&gt;
|immagine=Tux-radio.png&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Le trasmissioni senza fili sono ormai una tecnologia pervasiva e di cui non possiamo fare a meno. Ma cosa si nasconde in questo mezzo di comunicazione intangibile, eppure sempre presente attorno a noi? In questa serata esploreremo il mondo delle trasmissioni radio, scoprendo cosa è possibile ascoltare con l'ausilio di hardware a basso costo, di un po' di bricolage e di molto software open source.&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/DN4a74KpceKH2cC&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=25 novembre: La posta del FLUG&lt;br /&gt;
|autore=FLUG&lt;br /&gt;
|immagine=Opensmtpd.jpeg&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Incontro motivazionale su come il gruppo GNU/Linux di Firenze si è dotato del proprio server di posta elettronica e non solo. Oltre alla configurazione dei programmi che collaborano all'invio e alla ricezione dei messaggi, si terrà una breve ed emozionante divagazione pratica sull'utilizzo del server in generale, sulla sua manutenzione, ma soprattutto sulle sue umili origini.&lt;br /&gt;
|presentazione=https://firenze.linux.it/~leandro/PresentazioneServerone.html&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=https://firenze.linux.it/2025/11/la-posta-del-flug/, https://lists.linux.it/pipermail/golem/2025-November/015509.html&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=4 novembre: Docker... questo sconosciuto!&lt;br /&gt;
|autore=Diego La Monica&lt;br /&gt;
|immagine=docker.png&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=docker, dockerfile, docker compose, container, service e tutti quei termini usati un po' a caso, tanto perchè fa figo... Ci confronteremo su alcune piccole chicche per gestire al meglio (e in sicurezza) i propri ambienti basati su Docker&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=17 giugno: Da zero a packager Fedora!&lt;br /&gt;
|autore=luigix25&lt;br /&gt;
|immagine=fedora.png&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Durante la serata verra' illustrato l'intero processo che va dalla scrittura di uno specfile, alla creazione del pacchetto rpm alla pubblicazione nei repository ufficiali di Fedora&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=10 giugno: Le avventure di un pachettizzatore su Debian&lt;br /&gt;
|autore=matteobin&lt;br /&gt;
|immagine=debian.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Pacchettizzare è il modo più semplice per contribuire al progetto Debian diventandone parte attiva. Inoltre è un ottimo esercizio per ampliare le conoscenze informatiche e sistemistiche, che aiuta a comprendere le difficoltà della distribuzione di software. Pacchettizzando si diventa esperti di sistemi di compilazione e di aggiornamento, proprio malgrado! Anche in questo ambito il software libero si rivela la scelta migliore non solo per motivi etici, pure per quanto riguarda l'avanguardia, la qualità e l'affidabilità dei sistemi utilizzati. Tuttavia la sfida maggiore nella pacchettizzazione risiede nella coordinazione delle parti in causa. Per questo una parte della serata sarà dedicata al processo per diventare un manutentore di Debian e ai suggerimenti per collaborare con efficacia con gli altri.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=27 maggio: git --help&lt;br /&gt;
|autore=Utente:Lucam&lt;br /&gt;
|immagine=git.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=git per tutti: una panoramica su comandi e opzioni di cui non sapevi di aver bisogno. Dalla &amp;quot;porcellana&amp;quot; per gestire documentazione alle &amp;quot;tubature&amp;quot; per riscrivere la storia&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=https://wiki.golem.linux.it/Git&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=13 maggio: Fediverso e Livello Segreto, una palestra di libertà digitale&lt;br /&gt;
|autore=Fabio Kenobit&lt;br /&gt;
|immagine=fediverso.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Una chiacchierata con Kenobit, uno dei fondatori di Livello Segreto, un'istanza Mastodon, sulle potenzialità del Fediverso e delle piattaforme libere, in ottica di libertà e resistenza digitale.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=22 aprile: Tor - The onion services&lt;br /&gt;
|autore=Leandro&lt;br /&gt;
|immagine=tor.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=La rete tor è un sistema valido per aggirare la censura e l'intercettazione in rete ma soffre di una debolezza nei nodi di uscita che sono il punto più delicato ed esposto tecnicamente e legalmente. La soluzione che elimina questa debolezza sono gli &amp;quot;onion service&amp;quot;, servizi raggiungibili solo all'interno della rete tor per collegarsi ai quali non è necessario conoscere l'indirizzo IP e il dominio del server che li ospita né avere chiavi di cifratura della connessione perché tutto questo viene provvisto dal protocollo: l'anonimato sarà garantito per chi utilizza il servizio ma anche per chi lo rende disponibile. Per fare questo è necessario un cambio di paradigma perché, a differenza dell'uso di tor &amp;quot;normale&amp;quot; nel quale il servizio da raggiungere può anche non avere alcuna contezza del fatto di essere raggiunto via tor, un onion service deve essere configurato in precedenza da chi amministra il servizio stesso. In questa presentazione, dopo una breve descrizione del protocollo, proveremo a configurare un onion service spiegando i vari passi.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=8 aprile: Self hosting: un approccio pratico&lt;br /&gt;
|autore=Giacomo Bagnoli&lt;br /&gt;
|immagine=systemd.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=In questa serata esploreremo il tema del self-hosting, ovvero quali alternative esistono all'uso dei tradizionali servizi cloud.  Data la complessità dell'argomento, ci concentreremo su un approccio pratico, valutando con attenzione il compromesso tra usabilità, privacy, sicurezza e convenienza. Parleremo di podman, quadlets, containers, btrfs, vpn, come gestire l'autenticazione e i certificati, e molto altro.&lt;br /&gt;
|presentazione=https://github.com/gbagnoli/self_hosting_slides/releases/tag/final&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=https://lists.linux.it/pipermail/golem/2025-April/015380.html&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=18 febbraio: Radiocaccia, scopriamo cos'è&lt;br /&gt;
|autore=Paolo IZ5PHM&lt;br /&gt;
|immagine=radiocaccia.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Nota anche come Radio Direction Finding, è una competizione che ha lo scopo di riuscire a localizzare, nel minor tempo possibile, dei trasmettitori radio nascosti. L'attività è volta a incentivare l’autocostruzione di apparecchiature radio, l’apprendimento alla rilevazione di segnali radio e della loro direzione di provenienza e le basi di topografia. La serata approfondirà alcuni di questi aspetti ed includerà una prova pratica.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=4 febbraio: Come funziona una radio?&lt;br /&gt;
|autore=Pierluigi IK5GQF&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata a metà fra storia e tecnica in cui verrà presentata la storia della radioricezione, a partire dai primi circuiti analogici per arrivare alle moderne SDR (Software Defined Radio)&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=14 gennaio: Introduzione a Laravel&lt;br /&gt;
|autore=Simone&lt;br /&gt;
|immagine=laravel.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Partiremo da un progetto vuoto e vedremo le principali soluzioni proposte dal framwork per sviluppare una web app.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2024 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=17 dicembre: Liberiamo il BIOS con coreboot&lt;br /&gt;
|autore=aggro&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=In questa serata parleremo di coreboot, il bios libero. Faremo una chiacchierata in cui si parlerà di cos'è, su che macchine si può usare e quali sono i benefici. Mezzi permettendo, alla chiacchierata seguirà una fase pratica in cui flasheremo coreboot sul Thinkpad X230 del relatore. A cura di Alessandro, LUG di Prato&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=5 dicembre: IPv6 @ FLUG&lt;br /&gt;
|autore=[[Utente:giomba]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Internet è una rete di reti a cui sono connessi miliardi di dispositivi, dai nostri computer, ai nostri smartphone, a tutti quei server e router che permettono all'infrastruttura di funzionare, per non parlare di tutti i dispositivi di domotica e IoT che ormai pervadono le nostre vite. Tuttavia, in origine, erano stati previsti solo 4 miliardi di indirizzi (IPv4): com'è possibile dunque continuare a estendere la rete se gli indirizzi sono finiti? Quali trucchi vengono impiegati, e quali svantaggi ci sono nel perpetuare l'uso di un protocollo che ormai ha fatto il suo tempo? Ospitare un servizio in autonomia, un sito, può diventare appannaggio dei pochi che possono ancora permettersi di accedere a indirizzi IPv4? IPv6 è la soluzione e la sua promozione necessaria, sebbene in Italia sia ancora poco diffuso: in questa serata impareremo a conoscere IPv6, capiremo le differenze con IPv4, e valuteremo, in tempo reale, come potrebbe essere utilizzato al FLUG.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=22 ottobre: Come gestire nodi TOR dalla tua cantina&lt;br /&gt;
|autore=[https://osservatorionessuno.org/ Osservatorio Nessuno]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Gestire nodi TOR può essere divertente, ma anche ben fastidioso, come farlo in Italia? Per spiegarlo vi racconteremo una storia che parte dal processo Ruby ter, arriva in Siria e finisce in una cantinetta piastrellata della Torino Liberty. &lt;br /&gt;
A cura dell'Osservatorio Nessuno&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=25 giugno: Introduzione al mondo open source: consigli e strumenti per nuovi contributori&lt;br /&gt;
|autore=luigix25&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Contribuire a grandi progetti open-source può sembrare un'impresa ardua. Durante la serata esploreremo il funzionamento dello sviluppo in progetti di rilievo come Linux. Ci concentreremo su come avvicinarsi a questo mondo e sugli strumenti essenziali per iniziare.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=4 giugno: Il Processo di compilazione&lt;br /&gt;
|autore=Simone Guercini&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Durante la serata approfondiremo il processo di compilazione di un programma C++ tramite gcc, analizzando gli step che intercorrono tra il codice sorgente ed il file eseguibile. Sono compresi cenni alla struttura di un programma C++, una introduzione al linguaggio assembly x86_64 e numerosi esempi&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=9 aprile: Irrigazione domotica fai-da-te&lt;br /&gt;
|autore=Mario Alinari&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=In casa ho un piccolo terrazzo che ho rallegrato con un po’ di fiori. Da qui l’idea  di un sistema di irrigazione che annaffiasse le piante al posto mio. Avrei potuto acquistare qualcosa di già fatto? Sicuramente si ma mi sarei perso tutto il divertimento. Non rimaneva altro che realizzarlo home made.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=2 aprile: R Project&lt;br /&gt;
|autore=Fabio Frascati&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Una serata di formazione sull'utilizzo del software statistico R per i dati qualitativi. In altre parole la gestione di dati categorici (non numerici) semplice ed intuitiva. Vengono illustrati gli oggetti R ad hoc per un supporto migliore del comune vettore di stringhe. Semplici esempi completeranno la sintetica parte teorica. Nessuna esperienza precedente in R o in programmazione è necessaria.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=12 marzo: Documentare il Sanco 8003: un'avventura inaspettata&lt;br /&gt;
|autore=[[Utente:giulio]] [[Utente:giomba]]&lt;br /&gt;
|immagine=Sanco8003.jpeg&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=In questa serata, a metà fra il vintage ed il moderno, racconteremo la storia del reverse engineering di un computer di inizio anni '80: il Sanco 8003. Utilizzando software ed hardware libero, si parlerà di come approcciarsi ad una scheda sconosciuta per ricavarne il relativo schema; come si possono interpretare i segreti celati all'interno delle EPROM; come disassemblare un intricato codici per Z80 e modificarlo a piacimento per creare un bootloader personalizzato; ed infine, come sfruttare tutte queste scoperte per realizzare un emulatore dedicato a questa misteriosa macchina!&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/pGdCgrdATtQc87E&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=5 marzo: Semplificare il controllo degli accessi su Linux con Systems Manager&lt;br /&gt;
|autore=Francesco Provino&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Come accedere a macchine Linux in cloud e on-premise (nonché qualsiasi altra risorsa) senza usare chiavi SSH o esponendo porte di rete, utilizzando AWS Systems Manager.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=6 febbraio: Introduzione a XMPP&lt;br /&gt;
|autore=Matteo Bini&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=XMPP è un protocollo che permette di scambiarsi messaggi proprio come WhatsApp, con tanto di chiamate audio e video e invio di allegati. Durante l’intervento sarà presentata una breve panoramica sulla struttura del protocollo in questione, oltre all'illustrazione dei vari programmi disponibili per utilizzarlo e per offrire tale servizio.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=http://choice.tiepi.it/~matteobin/scritti/presentazione-di-xmpp.html&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=9 gennaio: virtio e vsock: comunicazione tra host e VM&lt;br /&gt;
|autore=Stefano Garzarella e Luigi Leonardi&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=virtio è uno standard per la comunicazione fra host e macchine virtuali: saranno presentati la sua specifica, come funziona, e alcuni casi d'uso. In particolare ci focalizzaremo su vsock, una famiglia di socket per la comunicazione fra host e guest.&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/s2t24maeGfqiSzY&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2023 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=5 dicembre: Minigiochi al cubo&lt;br /&gt;
|autore=Zughy&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Mai pensato di voler sviluppare un videogioco? Detto fatto! Da anni i server minigiochi spopolano su Minecraft, facendo divertire milioni di persone. Usando il motore di gioco libero Minetest e una piccola libreria, imparerai a creare quelle avventure tanto anelate, arrivando ad avere il tuo piccolo titolo a fine laboratorio. Consigliato per tutte le età!&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://video.linux.it/w/3DtztwVqPLf2CwvnWnK8d7&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=7 marzo: Introduzione a Proxmox&lt;br /&gt;
|autore=Thomas Buonanno&lt;br /&gt;
|immagine=logo-proxmox.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Proxmox VE è una distribuzione debian-based per la gestione di macchine virtuali e container, che include anche un sistema di backup, per la gestione di file system distribuiti e per la migrazione rapida dei servizi. Durante questa serata sarà presentato il progetto e ne saranno mostrate alcune applicazioni pratiche.&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/KfiDYeczEop5WEo&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=7 febbraio: Le alternative al foglio di calcolo nella gestione ed analisi dei propri dati&lt;br /&gt;
|autore=Fabio Frascati&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Perché è così comune usare il foglio di calcolo nella gestione dei propri dati? È sempre la soluzione migliore? Esistono valide alternative gratuite ed open source per compiti specifici e spesso noiosi? Vediamo insieme alcuni semplici esempi in Libreoffice Calc ed R.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=3 Gennaio: Haskell&lt;br /&gt;
|autore=Mariano&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata di introduzione ad Haskell ed ai linguaggi funzionali&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/QDFGaYDfS7c6stP&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2021 ==&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=29 giugno: dotfiles - Gestione ragionata dei files di configurazione&lt;br /&gt;
|autore=[[Utente:Gbiotti]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata sulla gestione con versioning dei dotfiles di Linux&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=[https://git.golem.linux.it/gbiotti/sdf_appunti Appunti della serata] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=16 marzo: Blockchain - Il Free Software incontra la finanza&lt;br /&gt;
|autore=[[Utente:Linux-Lover]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata introduttiva e divulgativa sulle blockchain: cosa sono e perché sono importanti per la comunità del software libero.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=in caricamento&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=9 marzo: Due chiacchiere su buffer overflow&lt;br /&gt;
|autore=luigix25&lt;br /&gt;
|immagine=Stack-example.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Due chiacchiere informali sui buffer overflow e sulle tecniche di mitigrazione.&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/WkWf7XiNPPn7mqn&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://video.linux.it/w/8PG9X1PojpoVbeM5JtYLFn&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=27 gennaio: Programmare Arduino like a pro&lt;br /&gt;
|autore=[[Utente:Giulio]]&lt;br /&gt;
|immagine=Arduino-board.jpg&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=L'ecosistema Arduino consente di sviluppare semplici applicazioni in modo rapido e con conoscenze di programmazione non necessariamente approfondite. Ormai, volenti o nolenti tutti abbiamo una scheda Arduino in casa. Questo sarà il punto di partenza della serata, dove andremo a sviscerare come, partendo da uno sketch, si arrivi al codice macchina eseguito dal microcontrollore. Faremo la conoscenza dei varii strumenti della toolchain GCC: makefile, compilatori ed assemblatori, per comprendere meglio cosa avviene sotto il cofano dell'Arduino IDE e come sfruttarli per scrivere del codice &amp;quot;fuori dagli schemi&amp;quot;.&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/5M2SisqZmJ7PQXM&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://archivio.golem.linux.it/OreDelGolem/20210127-arduinolikeapro-parte1.mp4&lt;br /&gt;
|altro=[https://archivio.golem.linux.it/OreDelGolem/20210127-arduinolikeapro-parte2.mp4 Video sessione di approfondimento sul multitasking] [https://video.linux.it/videos/watch/f654157f-a4b6-4ebb-aaee-932b04bda1af Mirror1] [https://video.linux.it/videos/watch/e63d744f-2444-41c5-b852-fa79cedefde1 Mirror2]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=20 gennaio: Lineage OS: come installarla e... perché&lt;br /&gt;
|autore=Filippo Micheletti, [[Utente:Giomba]], Marco Castrovilli ([http://www.restartersfirenze.it/ Restarters Firenze])&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Tutti hanno uno smartphone, ma pochi sono coscienti del livello di pervasività che questo dispositivo ha nelle nostre vite, e sulla mancanza di controllo che abbiamo sui dati personali che lo attraversano. Conoscere come funziona è indispensabile per fare scelte consapevoli sull’uso che ne facciamo, e scoprire sistemi operativi e applicazioni alternative è uno dei primi passi per riprendere il controllo sui questi dati. Durante la serata, ci domanderemo perché usare LineageOS, quali programmi e applicazioni libere e rispettose possiamo usare, in alternativa ai soliti noti, come si installa questo sistema su uno smartphone, quali sono difficoltà, problemi e possibili rinunce che possiamo incontrare.&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/39dTAZxdpWfzHSp&lt;br /&gt;
|documenti=https://golem.linux.it/cloud/index.php/s/E9ZCm9fjFnq7egG&lt;br /&gt;
|video=https://video.linux.it/w/wSw212j2di8pM38E4g4DZY&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2020 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=7 ottobre: Linux per radioamatori&lt;br /&gt;
|autore=[[Utente:Giulio]] [[Utente:Lucam]]&lt;br /&gt;
|immagine=Tux-radio.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Introduzione a Linux e alle sue applicazioni in ambito radioamatoriale. Quali sono i programmi per fare radio su Linux? Come posso attivare un nodo webSDR?&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/8fLXfdwMwEpxxCq&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20201007-iu5mo-linuxradio.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=7 luglio: Flatcam&lt;br /&gt;
|autore=[[Utente:Glomant]]&lt;br /&gt;
|immagine=Flatcam.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Flatcam è un software che, a partire da file gerber o gcode, permette di passare all’incisione e all’intaglio vero e proprio del circuito tramite una macchina a controllo numerico. Al termine della serata, il prodotto potrà essere inciso tramite una CNC, come quella che abbiamo in officina, come vedremo nella serata successiva.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=https://golem.linux.it/cloud/index.php/s/RZZEfzF8f7C7CMA&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20200708-glomant-flatcam.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=30 giugno: KiCAD 2/2&lt;br /&gt;
|autore=[[Utente:Giulio]]&lt;br /&gt;
|immagine=Kicad.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Seconda serata sull'uso del software di disegno circuiti stampati: disegnato lo schema sarà necessario realizzare il layout, la controparte digitale del circuito stampato. Al termine della serata, il prodotto potrà essere mandato in stampa presso aziende specializzate tramite processi industriali, oppure potrà essere utilizzato la serata seguente. Saranno approfondite alcune funzioni supplementari di KiCAD, come la gestione della lista componenti e delle librerie.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20200630-giuliof-kicad.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=23 giugno: Scrivere un emulatore per il Commodore 64&lt;br /&gt;
|autore=luigix25&lt;br /&gt;
|immagine=c64-startup-screen.jpg&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://video.linux.it/w/qVJ5C78WVkJrDvDyBC57sf&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=16 giugno: KiCAD 1/2&lt;br /&gt;
|autore=[[Utente:Giulio]]&lt;br /&gt;
|immagine=Kicad.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Prima serata sull'uso del software di disegno circuiti stampati: Si tratta di un software opensource di Electronic Design Automation, ossia di progettazione assistita al computer per circuiti elettronici. KiCAD permette di progettare ogni fase della realizzazione del circuito, dalla sua prima bozza, alla scelta e al posizionamento dei componenti, allo sbroglio delle piste, alla produzione dei file per lo stampaggio vero e proprio. In questo primo incontro si vedrà perché e come disegnare uno schema elettronico al computer, come importare i componenti, come associare i simboli grafici agli oggetti fisici.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20200616-giuliof-kicad.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=26 maggio: Indipendenza Digitale?&lt;br /&gt;
|autore=[[Utente:Giomba]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Guida pratica per riappropriarsi della propria indipendenza e identità digitale. Quali compromessi possiamo fare nell'uso del software sul nostro computer e sul nostro smartphone?&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=https://golem.linux.it/cloud/index.php/s/WMDixxEjNtEadAj&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=12 maggio: Due parole su LaTeX&lt;br /&gt;
|autore=[[Utente:Giulio]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Introduzione al software di impaginazione LaTeX&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=''Presentazione in caricamento''&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=14 aprile: Riconoscimento oggetti con OpenCV&lt;br /&gt;
|autore=[[Utente:Linux-Lover]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/E9FxLxM5AEopZyJ&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2019 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=19 febbraio: 128 bit di IPv6&lt;br /&gt;
|autore=[[Utente:giomba]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Cos’è un indirizzo di rete? IPv4 vs IPv6. Perché IPv6? Come si legge un IPv6? Come posso realizzare una rete IPv6? Cosa sono NDP e SLAAC? Come ottenere IPv6? [[IPv6 @ GOLEM]]&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/pZcSHge3bBiQ37m&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://video.linux.it/w/e6oYr4MasX9NDVtkJ6jCU3&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=8 gennaio: Deepen Meltdown&lt;br /&gt;
|autore=[[Utente:Raistlin]]&lt;br /&gt;
|immagine=Meltdown-spectre-logo.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Aggiornamenti sui bug che hanno recentemente afflitto le CPU&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2018 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=16 Ottobre: NextCloud&lt;br /&gt;
|autore=Mattia &amp;amp; Carmelo&lt;br /&gt;
|immagine=Nextcloud-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Cos'è un sistema di clouding. Cloud commerciale vs. Nextcloud. Come configurare un cloud casalingo su PC o Raspberry.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=2 Ottobre: Python &amp;amp; grafici&lt;br /&gt;
|autore=giuliof&lt;br /&gt;
|immagine=Python-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Approfondimento sulle librerie &amp;lt;code&amp;gt;MatPlotLib&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;NumPy&amp;lt;/code&amp;gt;: creare e abbellire grafici, tracciare funzioni, importare e visualizzare dati da CSV, grafici professionali in LaTeX. ''To be continued...''&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/wteTWdnflCwWOXa/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20181002-giuliof-python-grafici.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=12 Settembre: PC4Beginners&lt;br /&gt;
|autore=jacopo&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata introduttiva all'informatica: cenni storici sul computer, cos'è l'hardware, cos'è il software, quali sono i componenti di un PC.&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/HoTfB2ilOWHl1Aq/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180918-jacopo-PC4Beginners.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=3 Luglio: Python 303&lt;br /&gt;
|autore=giuliof&lt;br /&gt;
|immagine=Python-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Avanziamo di livello e parliamo di: liste, dizionari, lettura/scrittura su file, accenno alle librerie e confronto Python2 vs Python3. ''To be continued...''&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/2gbp1UpORawCUkF/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180703-giuliof-python303.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=19 Giugno: Python 101 x2&lt;br /&gt;
|autore=giuliof&lt;br /&gt;
|immagine=Python-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Basi sul linguaggio di programmazione Python: esercizi con ''if...else'', funzioni, cicli ''while'' e ''for'', stringhe e operazioni su stringhe. ''To be continued...''&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/Qq99P5gwkno7H1q/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180619-giuliof-python101x2.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=12 Giugno: Technical deep dive: Meltdown + Spectre&lt;br /&gt;
|autore=Dario&lt;br /&gt;
|immagine=Meltdown-spectre-logo.png&lt;br /&gt;
|dimensione_img=250px&lt;br /&gt;
|descrizione=Da una panoramica sull'architettura e sul funzionamento dei processori moderni (architettura superscalare, memorie cache, TLB, memoria virtuale) arriviamo a capire come queste vulnerabilità scoperte di recente denominate ''Meltdown'' e ''Spectre'' (maggiori [https://meltdownattack.com info]) potrebbero mettere a rischio la sicurezza dell'utente.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180612-Meltdown-Spectre-Dario.mp4&lt;br /&gt;
|altro= concetti introduttivi ([https://en.wikipedia.org/wiki/Virtual_address_space Virtual Memory],&lt;br /&gt;
[https://wiki.osdev.org/Memory_management gestione della memoria],&lt;br /&gt;
esecuzione speculativa [https://en.wikipedia.org/wiki/Speculative_execution] [https://en.wikipedia.org/wiki/Branch_predictor],&lt;br /&gt;
[https://en.wikipedia.org/wiki/Instruction_pipelining pipeline],&lt;br /&gt;
[https://en.wikipedia.org/wiki/Tomasulo_algorithm algoritmo di Tomasulo],&lt;br /&gt;
memoria cache [https://en.wikipedia.org/wiki/CPU_cache] [https://www.extremetech.com/extreme/188776-how-l1-and-l2-cpu-caches-work-and-why-theyre-an-essential-part-of-modern-chips],&lt;br /&gt;
[https://en.wikipedia.org/wiki/Translation_lookaside_buffer TLB],&lt;br /&gt;
[https://en.wikipedia.org/wiki/Side-channel_attack side channel attack])&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
esempi di codice che sfrutta le vulnerabilità ([https://www.raspberrypi.org/blog/why-raspberry-pi-isnt-vulnerable-to-spectre-or-meltdown/], [https://medium.com/@mattklein123/meltdown-spectre-explained-6bc8634cc0c2])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=5 Giugno: Buildroot: distrubuzione personalizzata&lt;br /&gt;
|autore=$pookyh&lt;br /&gt;
|immagine=Logog-b.png&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=[https://buildroot.org Buildroot] è un tool che permette di generare una distribuzione Linux essenziale cucita su misura per le proprie esigenze.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180605-spooky-buildroot.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=22 Maggio: Python - introduzione e basi&lt;br /&gt;
|autore=giuliof&lt;br /&gt;
|immagine=Python-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Basi sul linguaggio di programmazione Python: esempi applicativi, installazione, variabili, istruzioni di stampa a schermo, blocchi condizionali. (Il video è parziale'''!''')&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/IroTEn8ZJhXTaGg/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180519-GiulioF-Python101x1.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 17 Aprile: R: software di analisi statistica ===&lt;br /&gt;
Basi sul linguaggio di programmazione R, applicazioni alla statistica ed esempi.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_files.jpg|40px|files]] [https://golem.linux.it/cloud/index.php/s/mY2GIXC1dIZPKpu Scarica] files (script utilizzati, lista comandi...) e presentazioni della serata.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_video.png|40px|video]] [https://golem.linux.it/pubblici/OreDelGolem/20180417-R-Frascati-Giorgetti.mp4 Guarda] o scarica il video della serata!&lt;br /&gt;
&lt;br /&gt;
=== 10 Aprile: Bash e scripting ===&lt;br /&gt;
Panoramica sui comandi utili e basi di scripting per automatizzare le attività.&lt;br /&gt;
&lt;br /&gt;
Consulta il prontuario sulla [[Linea_di_comando | linea di comando]].&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_video.png|40px|video]] [https://golem.linux.it/pubblici/OreDelGolem/20180410-Bash-Giomba.mp4 Guarda] o scarica il video della serata!&lt;br /&gt;
&lt;br /&gt;
''by Giomba''&lt;br /&gt;
&lt;br /&gt;
=== 23 Gennaio: Sviluppo di un'app per Android ===&lt;br /&gt;
Uno sguardo d'insieme sulla realizzazione di applicazioni per il proprio smartphone con [https://developer.android.com/studio/index.html AndroidStudio], iniziando con alcuni esempi.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_presentazione.png|40px|slides]]  [https://golem.linux.it/cloud/index.php/s/pGoCGHZKpo7C04f/download Presentazione] della serata.&lt;br /&gt;
&lt;br /&gt;
''by Omid''&lt;br /&gt;
&lt;br /&gt;
=== 16 Gennaio: Impariamo KiCad ===&lt;br /&gt;
Come utilizzare il software [http://kicad-pcb.org KiCad] per il disegno di schemi e la realizzazione di circuiti stampati.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_files.jpg|40px|files]]  [https://golem.linux.it/cloud/index.php/s/HLl9ZxreCLQUCH8 Scarica] i file prodotti durante la serata.&lt;br /&gt;
&lt;br /&gt;
''by Stefano''&lt;br /&gt;
&lt;br /&gt;
== 2017 ==&lt;br /&gt;
=== 12 Dicembre: Arduino avr-gcc ===&lt;br /&gt;
Programmazione a &amp;quot;basso livello&amp;quot; in C della scheda Arduino, bypassando l'IDE, per sfruttare a pieno le risorse del microcontrollore.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_video.png|40px|video]] [https://golem.linux.it/pubblici/OreDelGolem/20171212-AVRgcc-Giulio.mp4 Guarda] o scarica il video della serata!&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:Giulio | Giulio]]''&lt;br /&gt;
&lt;br /&gt;
=== 21 Novembre: Git ===&lt;br /&gt;
Un sistema di versionamento alla portata di tutti: come gestire i propri progetti al computer, tenere traccia dello sviluppo e apportare modifiche senza rischiare di danneggiare il lavoro precedente. Consulta il nostro [[Git | prontuario]] di riferimento.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_presentazione.png|40px|slides]]  [https://golem.linux.it/cloud/index.php/s/VL27wucLMsbCEDP Presentazione] della serata&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_video.png|40px|video]]  [https://golem.linux.it/pubblici/OreDelGolem/20171121-Git-Lucam.mp4 Video] della serata&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:Lucam | Lucam]]''&lt;br /&gt;
&lt;br /&gt;
=== 7 Novembre: Arduino e Wireless ===&lt;br /&gt;
Domotica: come integrare il proprio progetto di elettronica con Arduino con la rete WiFi di casa.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_presentazione.png|40px|slides]]  [https://golem.linux.it/cloud/index.php/s/fp7PgxzcdLRmKlx Presentazioni] della serata.&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:Giulio | Giulio]]''&lt;br /&gt;
&lt;br /&gt;
=== 17 ottobre: Introduzione a Wordpress ===&lt;br /&gt;
Procedure base e consigli per costruire un semplice sito dinamico con Wordpress.&lt;br /&gt;
&lt;br /&gt;
''by Pinpas''&lt;br /&gt;
&lt;br /&gt;
=== 3 Ottobre: Sviluppo HTML+CSS ===&lt;br /&gt;
I rudimenti per scrivere un sito statico. &lt;br /&gt;
&lt;br /&gt;
[[File:Icona_files.jpg|40px|files]] [https://golem.linux.it/cloud/index.php/s/uIz3QwcymtgTeNN Scarica] i file della serata!&lt;br /&gt;
&lt;br /&gt;
''by Francesco''&lt;br /&gt;
&lt;br /&gt;
=== 19 Settembre: Installazione Wordpress ===&lt;br /&gt;
Serata pratica di gruppo sull'installazione del CMS [[Wordpress]] e in generale di un applicativo web su piattaforma LAMP.&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:giomba | giomba]]''&lt;br /&gt;
&lt;br /&gt;
=== 5 Settembre: Il Terminale Unix/Linux ===&lt;br /&gt;
Introduzione ai concetti e ai comandi più utilizzati per gestire il sistema da terminale. Consulta il nostro How-To sul [[Linea_di_comando | terminale]].&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:giomba | giomba]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Officina]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Soci_del_GOLEM&amp;diff=9765</id>
		<title>Soci del GOLEM</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Soci_del_GOLEM&amp;diff=9765"/>
		<updated>2026-02-14T11:08:45Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Aggiornamento componenti del Consiglio&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In questa pagina sono raccolti i soci di spicco del presente (e passato) GOLEM, e l'attuale formazione del Consiglio.&lt;br /&gt;
&lt;br /&gt;
== Consiglio 2026-2027 ==&lt;br /&gt;
&lt;br /&gt;
* [[Utente:Ly* | lywashu (alias Giulia)]]&lt;br /&gt;
* [[Utente:Giulio | Giulio]]&lt;br /&gt;
* [[Utente:Lucam | Lucam]]&lt;br /&gt;
* [[Utente:Giomba | giomba]]&lt;br /&gt;
* Diego C&lt;br /&gt;
* Diego LM&lt;br /&gt;
* Geraldo&lt;br /&gt;
* Simone&lt;br /&gt;
* [[Utente:Malatext | Malatext]]&lt;br /&gt;
* [[Utente:Kardakis | kardakis]]&lt;br /&gt;
&lt;br /&gt;
== Cariche statutarie ==&lt;br /&gt;
* Presidente: [[Utente:Ly* | lywashu (alias Giulia)]]&lt;br /&gt;
* Vice Presidente: [[Utente:Giulio | Giulio]]&lt;br /&gt;
* Tesoriere: [[Utente:Lucam | Lucam]]&lt;br /&gt;
&lt;br /&gt;
== Altre cariche ==&lt;br /&gt;
* Capofficina: [[Utente:Kardakis | kardakis]]&lt;br /&gt;
&lt;br /&gt;
== I soci che troverete in Officina ==&lt;br /&gt;
* [[Utente:Ly* | lywashu (alias Giulia)]]&lt;br /&gt;
* [[Utente:Giulio | Giulio]]&lt;br /&gt;
* Lucam&lt;br /&gt;
* [[Utente:Giomba | giomba]]&lt;br /&gt;
* Diego&lt;br /&gt;
* Geraldo&lt;br /&gt;
* Pierluigi&lt;br /&gt;
* Sandro&lt;br /&gt;
* Simone&lt;br /&gt;
&lt;br /&gt;
== I soci che hanno frequentato attivamente l'Officina in passato ==&lt;br /&gt;
* TopoSodo&lt;br /&gt;
* Viggiano&lt;br /&gt;
* [[Utente:Dima | Dima (alias Alfredo)]]&lt;br /&gt;
* Glomanto (alias Beppe)&lt;br /&gt;
* Massimo&lt;br /&gt;
* [[Utente:Lorex | lorex (alias Lorenzo)]]&lt;br /&gt;
* [[Utente:%24pooky_Hunter | $pooky Hunter (alias Luca)]]&lt;br /&gt;
* [[Utente:Hal | Hal]]&lt;br /&gt;
* [[Utente:Alex.u | alex.u]]&lt;br /&gt;
* [[Utente:Walterele | Walterele (alias Angela)]]&lt;br /&gt;
* [[Utente:Segnalibro | Segnalibro (alias Annalisa)]]&lt;br /&gt;
* [[Utente:Raistlin | Raistlin (alias Dario)]]  &lt;br /&gt;
* [[Utente:Gbrx | gbrx (alias Gabriele)]]&lt;br /&gt;
* [[Utente:Jdoe | jdoe (alias Giacomo)]] &lt;br /&gt;
* [[Utente:Lorenxo86 | lorenxo86 (alias Lorenzo)]] &lt;br /&gt;
* [[Utente:Luana | Luana^^]] &lt;br /&gt;
* [[Utente:cipo | cipo (alias Paolo)]]&lt;br /&gt;
* Marino&lt;br /&gt;
* Mirella&lt;br /&gt;
* [[Utente:Permaurizio | Maurizio]]&lt;br /&gt;
* JohnCoffey (alias Marco)&lt;br /&gt;
&lt;br /&gt;
== Statistiche ==&lt;br /&gt;
Soci che hanno rinnovato la tessera:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Anno&lt;br /&gt;
! Soci&lt;br /&gt;
|-&lt;br /&gt;
| 2020&lt;br /&gt;
| 29&lt;br /&gt;
|-&lt;br /&gt;
| 2021&lt;br /&gt;
| 31&lt;br /&gt;
|-&lt;br /&gt;
| 2022&lt;br /&gt;
| 31&lt;br /&gt;
|-&lt;br /&gt;
| 2023&lt;br /&gt;
| 40&lt;br /&gt;
|-&lt;br /&gt;
| 2024&lt;br /&gt;
| 42&lt;br /&gt;
|-&lt;br /&gt;
| 2025&lt;br /&gt;
| 54&lt;br /&gt;
|-&lt;br /&gt;
| 2026&lt;br /&gt;
| &amp;gt;= 43&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Officina]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Soci_del_GOLEM&amp;diff=9764</id>
		<title>Soci del GOLEM</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Soci_del_GOLEM&amp;diff=9764"/>
		<updated>2026-02-14T11:02:28Z</updated>

		<summary type="html">&lt;p&gt;Giomba: /* Statistiche */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In questa pagina sono raccolti i soci di spicco del presente (e passato) GOLEM, e l'attuale formazione del Consiglio.&lt;br /&gt;
&lt;br /&gt;
== Consiglio 2024-2025 ==&lt;br /&gt;
Attualmente il GOLEM ha circa 30 soci&lt;br /&gt;
&lt;br /&gt;
* ''Presidente'': [[Utente:Ly* | lywashu (alias Giulia)]]&lt;br /&gt;
* ''Vice Presidente'': [[Utente:Giulio | Giulio]]&lt;br /&gt;
* ''Tesoriere'': [[Utente:Lucam | Lucam]]&lt;br /&gt;
* ''Capofficina'': [[Utente:Giomba | giomba]]&lt;br /&gt;
* ''Consiglieri'':&lt;br /&gt;
** [[Utente:Ly* | lywashu (alias Giulia)]]&lt;br /&gt;
** [[Utente:Giulio | Giulio]]&lt;br /&gt;
** [[Utente:Lucam | Lucam]]&lt;br /&gt;
** [[Utente:Giomba | giomba]]&lt;br /&gt;
** Diego&lt;br /&gt;
** Geraldo&lt;br /&gt;
** Giorgio&lt;br /&gt;
** Massimo&lt;br /&gt;
** Sandro&lt;br /&gt;
** Simone&lt;br /&gt;
&lt;br /&gt;
== I soci che troverete in Officina ==&lt;br /&gt;
* [[Utente:Ly* | lywashu (alias Giulia)]]&lt;br /&gt;
* [[Utente:Giulio | Giulio]]&lt;br /&gt;
* Lucam&lt;br /&gt;
* [[Utente:Giomba | giomba]]&lt;br /&gt;
* Diego&lt;br /&gt;
* Geraldo&lt;br /&gt;
* Pierluigi&lt;br /&gt;
* Sandro&lt;br /&gt;
* Simone&lt;br /&gt;
&lt;br /&gt;
== I soci che hanno frequentato attivamente l'Officina in passato ==&lt;br /&gt;
* TopoSodo&lt;br /&gt;
* Viggiano&lt;br /&gt;
* [[Utente:Dima | Dima (alias Alfredo)]]&lt;br /&gt;
* Glomanto (alias Beppe)&lt;br /&gt;
* Massimo&lt;br /&gt;
* [[Utente:Lorex | lorex (alias Lorenzo)]]&lt;br /&gt;
* [[Utente:%24pooky_Hunter | $pooky Hunter (alias Luca)]]&lt;br /&gt;
* [[Utente:Hal | Hal]]&lt;br /&gt;
* [[Utente:Alex.u | alex.u]]&lt;br /&gt;
* [[Utente:Walterele | Walterele (alias Angela)]]&lt;br /&gt;
* [[Utente:Segnalibro | Segnalibro (alias Annalisa)]]&lt;br /&gt;
* [[Utente:Raistlin | Raistlin (alias Dario)]]  &lt;br /&gt;
* [[Utente:Gbrx | gbrx (alias Gabriele)]]&lt;br /&gt;
* [[Utente:Jdoe | jdoe (alias Giacomo)]] &lt;br /&gt;
* [[Utente:Lorenxo86 | lorenxo86 (alias Lorenzo)]] &lt;br /&gt;
* [[Utente:Luana | Luana^^]] &lt;br /&gt;
* [[Utente:cipo | cipo (alias Paolo)]]&lt;br /&gt;
* Marino&lt;br /&gt;
* Mirella&lt;br /&gt;
* [[Utente:Permaurizio | Maurizio]]&lt;br /&gt;
* JohnCoffey (alias Marco)&lt;br /&gt;
&lt;br /&gt;
== Statistiche ==&lt;br /&gt;
Soci che hanno rinnovato la tessera:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Anno&lt;br /&gt;
! Soci&lt;br /&gt;
|-&lt;br /&gt;
| 2020&lt;br /&gt;
| 29&lt;br /&gt;
|-&lt;br /&gt;
| 2021&lt;br /&gt;
| 31&lt;br /&gt;
|-&lt;br /&gt;
| 2022&lt;br /&gt;
| 31&lt;br /&gt;
|-&lt;br /&gt;
| 2023&lt;br /&gt;
| 40&lt;br /&gt;
|-&lt;br /&gt;
| 2024&lt;br /&gt;
| 42&lt;br /&gt;
|-&lt;br /&gt;
| 2025&lt;br /&gt;
| 54&lt;br /&gt;
|-&lt;br /&gt;
| 2026&lt;br /&gt;
| &amp;gt;= 43&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Officina]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Ore_del_GOLEM&amp;diff=9760</id>
		<title>Ore del GOLEM</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Ore_del_GOLEM&amp;diff=9760"/>
		<updated>2025-12-03T20:43:57Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Aggiunto riferimento a articolo sul sito del FLUG&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Questa pagina raccoglie gli interventi passati. Se stai cercando gli eventi futuri, consulta il [https://blog.golem.linux.it/calendario calendario], o dai un'occhiata a [[Progetti]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
L'Ora del GOLEM è una serata a tema in cui si discute, più o meno formalmente, su qualunque cosa riguardi l'open source, dagli argomenti strettamente tecnici e pratici, alla &amp;quot;consapevolizzazione&amp;quot; e alla valutazione dell'uso dei vari strumenti. A volte i soci più smanettoni preparano delle piccole presentazioni su qualche nuova tecnologia, o qualche tema interessante; altre volte ci si arricchisce facendo brainstorming tutti insieme e si impara a utilizzarla. Spesso, le discussioni di queste serate, vengono tradotte in dei veri e propri [[Howto | how-to]].&lt;br /&gt;
&lt;br /&gt;
Qui puoi trovare tutte le serate passate (in ordine cronologico inverso), con riferimenti a materiale e/o guide prodotte.&lt;br /&gt;
Alcune serate sono anche state [https://video.linux.it/c/golem_channel/videos registrate].&lt;br /&gt;
&lt;br /&gt;
== 2025 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=25 novembre: La posta del FLUG&lt;br /&gt;
|autore=FLUG&lt;br /&gt;
|immagine=Opensmtpd.jpeg&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Incontro motivazionale su come il gruppo GNU/Linux di Firenze si è dotato del proprio server di posta elettronica e non solo. Oltre alla configurazione dei programmi che collaborano all'invio e alla ricezione dei messaggi, si terrà una breve ed emozionante divagazione pratica sull'utilizzo del server in generale, sulla sua manutenzione, ma soprattutto sulle sue umili origini.&lt;br /&gt;
|presentazione=https://firenze.linux.it/~leandro/PresentazioneServerone.html&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=https://firenze.linux.it/2025/11/la-posta-del-flug/, https://lists.linux.it/pipermail/golem/2025-November/015509.html&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=4 novembre: Docker... questo sconosciuto!&lt;br /&gt;
|autore=Diego La Monica&lt;br /&gt;
|immagine=docker.png&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=docker, dockerfile, docker compose, container, service e tutti quei termini usati un po' a caso, tanto perchè fa figo... Ci confronteremo su alcune piccole chicche per gestire al meglio (e in sicurezza) i propri ambienti basati su Docker&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=17 giugno: Da zero a packager Fedora!&lt;br /&gt;
|autore=luigix25&lt;br /&gt;
|immagine=fedora.png&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Durante la serata verra' illustrato l'intero processo che va dalla scrittura di uno specfile, alla creazione del pacchetto rpm alla pubblicazione nei repository ufficiali di Fedora&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=10 giugno: Le avventure di un pachettizzatore su Debian&lt;br /&gt;
|autore=matteobin&lt;br /&gt;
|immagine=debian.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Pacchettizzare è il modo più semplice per contribuire al progetto Debian diventandone parte attiva. Inoltre è un ottimo esercizio per ampliare le conoscenze informatiche e sistemistiche, che aiuta a comprendere le difficoltà della distribuzione di software. Pacchettizzando si diventa esperti di sistemi di compilazione e di aggiornamento, proprio malgrado! Anche in questo ambito il software libero si rivela la scelta migliore non solo per motivi etici, pure per quanto riguarda l'avanguardia, la qualità e l'affidabilità dei sistemi utilizzati. Tuttavia la sfida maggiore nella pacchettizzazione risiede nella coordinazione delle parti in causa. Per questo una parte della serata sarà dedicata al processo per diventare un manutentore di Debian e ai suggerimenti per collaborare con efficacia con gli altri.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=27 maggio: git --help&lt;br /&gt;
|autore=Utente::Lucam&lt;br /&gt;
|immagine=git.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=git per tutti: una panoramica su comandi e opzioni di cui non sapevi di aver bisogno. Dalla &amp;quot;porcellana&amp;quot; per gestire documentazione alle &amp;quot;tubature&amp;quot; per riscrivere la storia&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=https://wiki.golem.linux.it/Git&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=13 maggio: Fediverso e Livello Segreto, una palestra di libertà digitale&lt;br /&gt;
|autore=Fabio Kenobit&lt;br /&gt;
|immagine=fediverso.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Una chiacchierata con Kenobit, uno dei fondatori di Livello Segreto, un'istanza Mastodon, sulle potenzialità del Fediverso e delle piattaforme libere, in ottica di libertà e resistenza digitale.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=22 aprile: Tor - The onion services&lt;br /&gt;
|autore=Leandro&lt;br /&gt;
|immagine=tor.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=La rete tor è un sistema valido per aggirare la censura e l'intercettazione in rete ma soffre di una debolezza nei nodi di uscita che sono il punto più delicato ed esposto tecnicamente e legalmente. La soluzione che elimina questa debolezza sono gli &amp;quot;onion service&amp;quot;, servizi raggiungibili solo all'interno della rete tor per collegarsi ai quali non è necessario conoscere l'indirizzo IP e il dominio del server che li ospita né avere chiavi di cifratura della connessione perché tutto questo viene provvisto dal protocollo: l'anonimato sarà garantito per chi utilizza il servizio ma anche per chi lo rende disponibile. Per fare questo è necessario un cambio di paradigma perché, a differenza dell'uso di tor &amp;quot;normale&amp;quot; nel quale il servizio da raggiungere può anche non avere alcuna contezza del fatto di essere raggiunto via tor, un onion service deve essere configurato in precedenza da chi amministra il servizio stesso. In questa presentazione, dopo una breve descrizione del protocollo, proveremo a configurare un onion service spiegando i vari passi.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=8 aprile: Self hosting: un approccio pratico&lt;br /&gt;
|autore=Giacomo Bagnoli&lt;br /&gt;
|immagine=systemd.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=In questa serata esploreremo il tema del self-hosting, ovvero quali alternative esistono all'uso dei tradizionali servizi cloud.  Data la complessità dell'argomento, ci concentreremo su un approccio pratico, valutando con attenzione il compromesso tra usabilità, privacy, sicurezza e convenienza. Parleremo di podman, quadlets, containers, btrfs, vpn, come gestire l'autenticazione e i certificati, e molto altro.&lt;br /&gt;
|presentazione=https://github.com/gbagnoli/self_hosting_slides/releases/tag/final&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=https://lists.linux.it/pipermail/golem/2025-April/015380.html&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=18 febbraio: Radiocaccia, scopriamo cos'è&lt;br /&gt;
|autore=Paolo IZ5PHM&lt;br /&gt;
|immagine=radiocaccia.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Nota anche come Radio Direction Finding, è una competizione che ha lo scopo di riuscire a localizzare, nel minor tempo possibile, dei trasmettitori radio nascosti. L'attività è volta a incentivare l’autocostruzione di apparecchiature radio, l’apprendimento alla rilevazione di segnali radio e della loro direzione di provenienza e le basi di topografia. La serata approfondirà alcuni di questi aspetti ed includerà una prova pratica.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=4 febbraio: Come funziona una radio?&lt;br /&gt;
|autore=Pierluigi IK5GQF&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata a metà fra storia e tecnica in cui verrà presentata la storia della radioricezione, a partire dai primi circuiti analogici per arrivare alle moderne SDR (Software Defined Radio)&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=14 gennaio: Introduzione a Laravel&lt;br /&gt;
|autore=Simone&lt;br /&gt;
|immagine=laravel.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Partiremo da un progetto vuoto e vedremo le principali soluzioni proposte dal framwork per sviluppare una web app.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2024 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=17 dicembre: Liberiamo il BIOS con coreboot&lt;br /&gt;
|autore=aggro&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=In questa serata parleremo di coreboot, il bios libero. Faremo una chiacchierata in cui si parlerà di cos'è, su che macchine si può usare e quali sono i benefici. Mezzi permettendo, alla chiacchierata seguirà una fase pratica in cui flasheremo coreboot sul Thinkpad X230 del relatore. A cura di Alessandro, LUG di Prato&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=5 dicembre: IPv6 @ FLUG&lt;br /&gt;
|autore=[[Utente:giomba]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Internet è una rete di reti a cui sono connessi miliardi di dispositivi, dai nostri computer, ai nostri smartphone, a tutti quei server e router che permettono all'infrastruttura di funzionare, per non parlare di tutti i dispositivi di domotica e IoT che ormai pervadono le nostre vite. Tuttavia, in origine, erano stati previsti solo 4 miliardi di indirizzi (IPv4): com'è possibile dunque continuare a estendere la rete se gli indirizzi sono finiti? Quali trucchi vengono impiegati, e quali svantaggi ci sono nel perpetuare l'uso di un protocollo che ormai ha fatto il suo tempo? Ospitare un servizio in autonomia, un sito, può diventare appannaggio dei pochi che possono ancora permettersi di accedere a indirizzi IPv4? IPv6 è la soluzione e la sua promozione necessaria, sebbene in Italia sia ancora poco diffuso: in questa serata impareremo a conoscere IPv6, capiremo le differenze con IPv4, e valuteremo, in tempo reale, come potrebbe essere utilizzato al FLUG.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=22 ottobre: Come gestire nodi TOR dalla tua cantina&lt;br /&gt;
|autore=[https://osservatorionessuno.org/ Osservatorio Nessuno]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Gestire nodi TOR può essere divertente, ma anche ben fastidioso, come farlo in Italia? Per spiegarlo vi racconteremo una storia che parte dal processo Ruby ter, arriva in Siria e finisce in una cantinetta piastrellata della Torino Liberty. &lt;br /&gt;
A cura dell'Osservatorio Nessuno&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=25 giugno: Introduzione al mondo open source: consigli e strumenti per nuovi contributori&lt;br /&gt;
|autore=luigix25&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Contribuire a grandi progetti open-source può sembrare un'impresa ardua. Durante la serata esploreremo il funzionamento dello sviluppo in progetti di rilievo come Linux. Ci concentreremo su come avvicinarsi a questo mondo e sugli strumenti essenziali per iniziare.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=4 giugno: Il Processo di compilazione&lt;br /&gt;
|autore=Simone Guercini&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Durante la serata approfondiremo il processo di compilazione di un programma C++ tramite gcc, analizzando gli step che intercorrono tra il codice sorgente ed il file eseguibile. Sono compresi cenni alla struttura di un programma C++, una introduzione al linguaggio assembly x86_64 e numerosi esempi&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=9 aprile: Irrigazione domotica fai-da-te&lt;br /&gt;
|autore=Mario Alinari&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=In casa ho un piccolo terrazzo che ho rallegrato con un po’ di fiori. Da qui l’idea  di un sistema di irrigazione che annaffiasse le piante al posto mio. Avrei potuto acquistare qualcosa di già fatto? Sicuramente si ma mi sarei perso tutto il divertimento. Non rimaneva altro che realizzarlo home made.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=2 aprile: R Project&lt;br /&gt;
|autore=Fabio Frascati&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Una serata di formazione sull'utilizzo del software statistico R per i dati qualitativi. In altre parole la gestione di dati categorici (non numerici) semplice ed intuitiva. Vengono illustrati gli oggetti R ad hoc per un supporto migliore del comune vettore di stringhe. Semplici esempi completeranno la sintetica parte teorica. Nessuna esperienza precedente in R o in programmazione è necessaria.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=12 marzo: Documentare il Sanco 8003: un'avventura inaspettata&lt;br /&gt;
|autore=[[Utente:giulio]] [[Utente:giomba]]&lt;br /&gt;
|immagine=Sanco8003.jpeg&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=In questa serata, a metà fra il vintage ed il moderno, racconteremo la storia del reverse engineering di un computer di inizio anni '80: il Sanco 8003. Utilizzando software ed hardware libero, si parlerà di come approcciarsi ad una scheda sconosciuta per ricavarne il relativo schema; come si possono interpretare i segreti celati all'interno delle EPROM; come disassemblare un intricato codici per Z80 e modificarlo a piacimento per creare un bootloader personalizzato; ed infine, come sfruttare tutte queste scoperte per realizzare un emulatore dedicato a questa misteriosa macchina!&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/pGdCgrdATtQc87E&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=5 marzo: Semplificare il controllo degli accessi su Linux con Systems Manager&lt;br /&gt;
|autore=Francesco Provino&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Come accedere a macchine Linux in cloud e on-premise (nonché qualsiasi altra risorsa) senza usare chiavi SSH o esponendo porte di rete, utilizzando AWS Systems Manager.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=6 febbraio: Introduzione a XMPP&lt;br /&gt;
|autore=Matteo Bini&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=XMPP è un protocollo che permette di scambiarsi messaggi proprio come WhatsApp, con tanto di chiamate audio e video e invio di allegati. Durante l’intervento sarà presentata una breve panoramica sulla struttura del protocollo in questione, oltre all'illustrazione dei vari programmi disponibili per utilizzarlo e per offrire tale servizio.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=http://choice.tiepi.it/~matteobin/scritti/presentazione-di-xmpp.html&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=9 gennaio: virtio e vsock: comunicazione tra host e VM&lt;br /&gt;
|autore=Stefano Garzarella e Luigi Leonardi&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=virtio è uno standard per la comunicazione fra host e macchine virtuali: saranno presentati la sua specifica, come funziona, e alcuni casi d'uso. In particolare ci focalizzaremo su vsock, una famiglia di socket per la comunicazione fra host e guest.&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/s2t24maeGfqiSzY&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2023 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=5 dicembre: Minigiochi al cubo&lt;br /&gt;
|autore=Zughy&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Mai pensato di voler sviluppare un videogioco? Detto fatto! Da anni i server minigiochi spopolano su Minecraft, facendo divertire milioni di persone. Usando il motore di gioco libero Minetest e una piccola libreria, imparerai a creare quelle avventure tanto anelate, arrivando ad avere il tuo piccolo titolo a fine laboratorio. Consigliato per tutte le età!&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://video.linux.it/w/3DtztwVqPLf2CwvnWnK8d7&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=7 marzo: Introduzione a Proxmox&lt;br /&gt;
|autore=Thomas Buonanno&lt;br /&gt;
|immagine=logo-proxmox.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Proxmox VE è una distribuzione debian-based per la gestione di macchine virtuali e container, che include anche un sistema di backup, per la gestione di file system distribuiti e per la migrazione rapida dei servizi. Durante questa serata sarà presentato il progetto e ne saranno mostrate alcune applicazioni pratiche.&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/KfiDYeczEop5WEo&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=7 febbraio: Le alternative al foglio di calcolo nella gestione ed analisi dei propri dati&lt;br /&gt;
|autore=Fabio Frascati&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Perché è così comune usare il foglio di calcolo nella gestione dei propri dati? È sempre la soluzione migliore? Esistono valide alternative gratuite ed open source per compiti specifici e spesso noiosi? Vediamo insieme alcuni semplici esempi in Libreoffice Calc ed R.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=3 Gennaio: Haskell&lt;br /&gt;
|autore=Mariano&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata di introduzione ad Haskell ed ai linguaggi funzionali&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/QDFGaYDfS7c6stP&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2021 ==&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=29 giugno: dotfiles - Gestione ragionata dei files di configurazione&lt;br /&gt;
|autore=[[Utente:Gbiotti]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata sulla gestione con versioning dei dotfiles di Linux&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=[https://git.golem.linux.it/gbiotti/sdf_appunti Appunti della serata] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=16 marzo: Blockchain - Il Free Software incontra la finanza&lt;br /&gt;
|autore=[[Utente:Linux-Lover]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata introduttiva e divulgativa sulle blockchain: cosa sono e perché sono importanti per la comunità del software libero.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=in caricamento&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=9 marzo: Due chiacchiere su buffer overflow&lt;br /&gt;
|autore=luigix25&lt;br /&gt;
|immagine=Stack-example.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Due chiacchiere informali sui buffer overflow e sulle tecniche di mitigrazione.&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/WkWf7XiNPPn7mqn&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://video.linux.it/w/8PG9X1PojpoVbeM5JtYLFn&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=27 gennaio: Programmare Arduino like a pro&lt;br /&gt;
|autore=[[Utente:Giulio]]&lt;br /&gt;
|immagine=Arduino-board.jpg&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=L'ecosistema Arduino consente di sviluppare semplici applicazioni in modo rapido e con conoscenze di programmazione non necessariamente approfondite. Ormai, volenti o nolenti tutti abbiamo una scheda Arduino in casa. Questo sarà il punto di partenza della serata, dove andremo a sviscerare come, partendo da uno sketch, si arrivi al codice macchina eseguito dal microcontrollore. Faremo la conoscenza dei varii strumenti della toolchain GCC: makefile, compilatori ed assemblatori, per comprendere meglio cosa avviene sotto il cofano dell'Arduino IDE e come sfruttarli per scrivere del codice &amp;quot;fuori dagli schemi&amp;quot;.&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/5M2SisqZmJ7PQXM&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://archivio.golem.linux.it/OreDelGolem/20210127-arduinolikeapro-parte1.mp4&lt;br /&gt;
|altro=[https://archivio.golem.linux.it/OreDelGolem/20210127-arduinolikeapro-parte2.mp4 Video sessione di approfondimento sul multitasking] [https://video.linux.it/videos/watch/f654157f-a4b6-4ebb-aaee-932b04bda1af Mirror1] [https://video.linux.it/videos/watch/e63d744f-2444-41c5-b852-fa79cedefde1 Mirror2]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=20 gennaio: Lineage OS: come installarla e... perché&lt;br /&gt;
|autore=Filippo Micheletti, [[Utente:Giomba]], Marco Castrovilli ([http://www.restartersfirenze.it/ Restarters Firenze])&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Tutti hanno uno smartphone, ma pochi sono coscienti del livello di pervasività che questo dispositivo ha nelle nostre vite, e sulla mancanza di controllo che abbiamo sui dati personali che lo attraversano. Conoscere come funziona è indispensabile per fare scelte consapevoli sull’uso che ne facciamo, e scoprire sistemi operativi e applicazioni alternative è uno dei primi passi per riprendere il controllo sui questi dati. Durante la serata, ci domanderemo perché usare LineageOS, quali programmi e applicazioni libere e rispettose possiamo usare, in alternativa ai soliti noti, come si installa questo sistema su uno smartphone, quali sono difficoltà, problemi e possibili rinunce che possiamo incontrare.&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/39dTAZxdpWfzHSp&lt;br /&gt;
|documenti=https://golem.linux.it/cloud/index.php/s/E9ZCm9fjFnq7egG&lt;br /&gt;
|video=https://video.linux.it/w/wSw212j2di8pM38E4g4DZY&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2020 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=7 ottobre: Linux per radioamatori&lt;br /&gt;
|autore=[[Utente:Giulio]] [[Utente:Lucam]]&lt;br /&gt;
|immagine=Tux-radio.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Introduzione a Linux e alle sue applicazioni in ambito radioamatoriale. Quali sono i programmi per fare radio su Linux? Come posso attivare un nodo webSDR?&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/8fLXfdwMwEpxxCq&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20201007-iu5mo-linuxradio.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=7 luglio: Flatcam&lt;br /&gt;
|autore=[[Utente:Glomant]]&lt;br /&gt;
|immagine=Flatcam.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Flatcam è un software che, a partire da file gerber o gcode, permette di passare all’incisione e all’intaglio vero e proprio del circuito tramite una macchina a controllo numerico. Al termine della serata, il prodotto potrà essere inciso tramite una CNC, come quella che abbiamo in officina, come vedremo nella serata successiva.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=https://golem.linux.it/cloud/index.php/s/RZZEfzF8f7C7CMA&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20200708-glomant-flatcam.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=30 giugno: KiCAD 2/2&lt;br /&gt;
|autore=[[Utente:Giulio]]&lt;br /&gt;
|immagine=Kicad.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Seconda serata sull'uso del software di disegno circuiti stampati: disegnato lo schema sarà necessario realizzare il layout, la controparte digitale del circuito stampato. Al termine della serata, il prodotto potrà essere mandato in stampa presso aziende specializzate tramite processi industriali, oppure potrà essere utilizzato la serata seguente. Saranno approfondite alcune funzioni supplementari di KiCAD, come la gestione della lista componenti e delle librerie.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20200630-giuliof-kicad.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=23 giugno: Scrivere un emulatore per il Commodore 64&lt;br /&gt;
|autore=luigix25&lt;br /&gt;
|immagine=c64-startup-screen.jpg&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://video.linux.it/w/qVJ5C78WVkJrDvDyBC57sf&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=16 giugno: KiCAD 1/2&lt;br /&gt;
|autore=[[Utente:Giulio]]&lt;br /&gt;
|immagine=Kicad.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Prima serata sull'uso del software di disegno circuiti stampati: Si tratta di un software opensource di Electronic Design Automation, ossia di progettazione assistita al computer per circuiti elettronici. KiCAD permette di progettare ogni fase della realizzazione del circuito, dalla sua prima bozza, alla scelta e al posizionamento dei componenti, allo sbroglio delle piste, alla produzione dei file per lo stampaggio vero e proprio. In questo primo incontro si vedrà perché e come disegnare uno schema elettronico al computer, come importare i componenti, come associare i simboli grafici agli oggetti fisici.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20200616-giuliof-kicad.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=26 maggio: Indipendenza Digitale?&lt;br /&gt;
|autore=[[Utente:Giomba]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Guida pratica per riappropriarsi della propria indipendenza e identità digitale. Quali compromessi possiamo fare nell'uso del software sul nostro computer e sul nostro smartphone?&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=https://golem.linux.it/cloud/index.php/s/WMDixxEjNtEadAj&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=12 maggio: Due parole su LaTeX&lt;br /&gt;
|autore=[[Utente:Giulio]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Introduzione al software di impaginazione LaTeX&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=''Presentazione in caricamento''&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=14 aprile: Riconoscimento oggetti con OpenCV&lt;br /&gt;
|autore=[[Utente:Linux-Lover]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/E9FxLxM5AEopZyJ&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2019 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=19 febbraio: 128 bit di IPv6&lt;br /&gt;
|autore=[[Utente:giomba]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Cos’è un indirizzo di rete? IPv4 vs IPv6. Perché IPv6? Come si legge un IPv6? Come posso realizzare una rete IPv6? Cosa sono NDP e SLAAC? Come ottenere IPv6? [[IPv6 @ GOLEM]]&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/pZcSHge3bBiQ37m&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://video.linux.it/w/e6oYr4MasX9NDVtkJ6jCU3&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=8 gennaio: Deepen Meltdown&lt;br /&gt;
|autore=[[Utente:Raistlin]]&lt;br /&gt;
|immagine=Meltdown-spectre-logo.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Aggiornamenti sui bug che hanno recentemente afflitto le CPU&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2018 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=16 Ottobre: NextCloud&lt;br /&gt;
|autore=Mattia &amp;amp; Carmelo&lt;br /&gt;
|immagine=Nextcloud-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Cos'è un sistema di clouding. Cloud commerciale vs. Nextcloud. Come configurare un cloud casalingo su PC o Raspberry.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=2 Ottobre: Python &amp;amp; grafici&lt;br /&gt;
|autore=giuliof&lt;br /&gt;
|immagine=Python-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Approfondimento sulle librerie &amp;lt;code&amp;gt;MatPlotLib&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;NumPy&amp;lt;/code&amp;gt;: creare e abbellire grafici, tracciare funzioni, importare e visualizzare dati da CSV, grafici professionali in LaTeX. ''To be continued...''&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/wteTWdnflCwWOXa/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20181002-giuliof-python-grafici.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=12 Settembre: PC4Beginners&lt;br /&gt;
|autore=jacopo&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata introduttiva all'informatica: cenni storici sul computer, cos'è l'hardware, cos'è il software, quali sono i componenti di un PC.&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/HoTfB2ilOWHl1Aq/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180918-jacopo-PC4Beginners.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=3 Luglio: Python 303&lt;br /&gt;
|autore=giuliof&lt;br /&gt;
|immagine=Python-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Avanziamo di livello e parliamo di: liste, dizionari, lettura/scrittura su file, accenno alle librerie e confronto Python2 vs Python3. ''To be continued...''&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/2gbp1UpORawCUkF/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180703-giuliof-python303.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=19 Giugno: Python 101 x2&lt;br /&gt;
|autore=giuliof&lt;br /&gt;
|immagine=Python-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Basi sul linguaggio di programmazione Python: esercizi con ''if...else'', funzioni, cicli ''while'' e ''for'', stringhe e operazioni su stringhe. ''To be continued...''&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/Qq99P5gwkno7H1q/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180619-giuliof-python101x2.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=12 Giugno: Technical deep dive: Meltdown + Spectre&lt;br /&gt;
|autore=Dario&lt;br /&gt;
|immagine=Meltdown-spectre-logo.png&lt;br /&gt;
|dimensione_img=250px&lt;br /&gt;
|descrizione=Da una panoramica sull'architettura e sul funzionamento dei processori moderni (architettura superscalare, memorie cache, TLB, memoria virtuale) arriviamo a capire come queste vulnerabilità scoperte di recente denominate ''Meltdown'' e ''Spectre'' (maggiori [https://meltdownattack.com info]) potrebbero mettere a rischio la sicurezza dell'utente.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180612-Meltdown-Spectre-Dario.mp4&lt;br /&gt;
|altro= concetti introduttivi ([https://en.wikipedia.org/wiki/Virtual_address_space Virtual Memory],&lt;br /&gt;
[https://wiki.osdev.org/Memory_management gestione della memoria],&lt;br /&gt;
esecuzione speculativa [https://en.wikipedia.org/wiki/Speculative_execution] [https://en.wikipedia.org/wiki/Branch_predictor],&lt;br /&gt;
[https://en.wikipedia.org/wiki/Instruction_pipelining pipeline],&lt;br /&gt;
[https://en.wikipedia.org/wiki/Tomasulo_algorithm algoritmo di Tomasulo],&lt;br /&gt;
memoria cache [https://en.wikipedia.org/wiki/CPU_cache] [https://www.extremetech.com/extreme/188776-how-l1-and-l2-cpu-caches-work-and-why-theyre-an-essential-part-of-modern-chips],&lt;br /&gt;
[https://en.wikipedia.org/wiki/Translation_lookaside_buffer TLB],&lt;br /&gt;
[https://en.wikipedia.org/wiki/Side-channel_attack side channel attack])&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
esempi di codice che sfrutta le vulnerabilità ([https://www.raspberrypi.org/blog/why-raspberry-pi-isnt-vulnerable-to-spectre-or-meltdown/], [https://medium.com/@mattklein123/meltdown-spectre-explained-6bc8634cc0c2])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=5 Giugno: Buildroot: distrubuzione personalizzata&lt;br /&gt;
|autore=$pookyh&lt;br /&gt;
|immagine=Logog-b.png&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=[https://buildroot.org Buildroot] è un tool che permette di generare una distribuzione Linux essenziale cucita su misura per le proprie esigenze.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180605-spooky-buildroot.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=22 Maggio: Python - introduzione e basi&lt;br /&gt;
|autore=giuliof&lt;br /&gt;
|immagine=Python-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Basi sul linguaggio di programmazione Python: esempi applicativi, installazione, variabili, istruzioni di stampa a schermo, blocchi condizionali. (Il video è parziale'''!''')&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/IroTEn8ZJhXTaGg/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180519-GiulioF-Python101x1.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 17 Aprile: R: software di analisi statistica ===&lt;br /&gt;
Basi sul linguaggio di programmazione R, applicazioni alla statistica ed esempi.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_files.jpg|40px|files]] [https://golem.linux.it/cloud/index.php/s/mY2GIXC1dIZPKpu Scarica] files (script utilizzati, lista comandi...) e presentazioni della serata.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_video.png|40px|video]] [https://golem.linux.it/pubblici/OreDelGolem/20180417-R-Frascati-Giorgetti.mp4 Guarda] o scarica il video della serata!&lt;br /&gt;
&lt;br /&gt;
=== 10 Aprile: Bash e scripting ===&lt;br /&gt;
Panoramica sui comandi utili e basi di scripting per automatizzare le attività.&lt;br /&gt;
&lt;br /&gt;
Consulta il prontuario sulla [[Linea_di_comando | linea di comando]].&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_video.png|40px|video]] [https://golem.linux.it/pubblici/OreDelGolem/20180410-Bash-Giomba.mp4 Guarda] o scarica il video della serata!&lt;br /&gt;
&lt;br /&gt;
''by Giomba''&lt;br /&gt;
&lt;br /&gt;
=== 23 Gennaio: Sviluppo di un'app per Android ===&lt;br /&gt;
Uno sguardo d'insieme sulla realizzazione di applicazioni per il proprio smartphone con [https://developer.android.com/studio/index.html AndroidStudio], iniziando con alcuni esempi.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_presentazione.png|40px|slides]]  [https://golem.linux.it/cloud/index.php/s/pGoCGHZKpo7C04f/download Presentazione] della serata.&lt;br /&gt;
&lt;br /&gt;
''by Omid''&lt;br /&gt;
&lt;br /&gt;
=== 16 Gennaio: Impariamo KiCad ===&lt;br /&gt;
Come utilizzare il software [http://kicad-pcb.org KiCad] per il disegno di schemi e la realizzazione di circuiti stampati.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_files.jpg|40px|files]]  [https://golem.linux.it/cloud/index.php/s/HLl9ZxreCLQUCH8 Scarica] i file prodotti durante la serata.&lt;br /&gt;
&lt;br /&gt;
''by Stefano''&lt;br /&gt;
&lt;br /&gt;
== 2017 ==&lt;br /&gt;
=== 12 Dicembre: Arduino avr-gcc ===&lt;br /&gt;
Programmazione a &amp;quot;basso livello&amp;quot; in C della scheda Arduino, bypassando l'IDE, per sfruttare a pieno le risorse del microcontrollore.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_video.png|40px|video]] [https://golem.linux.it/pubblici/OreDelGolem/20171212-AVRgcc-Giulio.mp4 Guarda] o scarica il video della serata!&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:Giulio | Giulio]]''&lt;br /&gt;
&lt;br /&gt;
=== 21 Novembre: Git ===&lt;br /&gt;
Un sistema di versionamento alla portata di tutti: come gestire i propri progetti al computer, tenere traccia dello sviluppo e apportare modifiche senza rischiare di danneggiare il lavoro precedente. Consulta il nostro [[Git | prontuario]] di riferimento.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_presentazione.png|40px|slides]]  [https://golem.linux.it/cloud/index.php/s/VL27wucLMsbCEDP Presentazione] della serata&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_video.png|40px|video]]  [https://golem.linux.it/pubblici/OreDelGolem/20171121-Git-Lucam.mp4 Video] della serata&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:Lucam | Lucam]]''&lt;br /&gt;
&lt;br /&gt;
=== 7 Novembre: Arduino e Wireless ===&lt;br /&gt;
Domotica: come integrare il proprio progetto di elettronica con Arduino con la rete WiFi di casa.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_presentazione.png|40px|slides]]  [https://golem.linux.it/cloud/index.php/s/fp7PgxzcdLRmKlx Presentazioni] della serata.&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:Giulio | Giulio]]''&lt;br /&gt;
&lt;br /&gt;
=== 17 ottobre: Introduzione a Wordpress ===&lt;br /&gt;
Procedure base e consigli per costruire un semplice sito dinamico con Wordpress.&lt;br /&gt;
&lt;br /&gt;
''by Pinpas''&lt;br /&gt;
&lt;br /&gt;
=== 3 Ottobre: Sviluppo HTML+CSS ===&lt;br /&gt;
I rudimenti per scrivere un sito statico. &lt;br /&gt;
&lt;br /&gt;
[[File:Icona_files.jpg|40px|files]] [https://golem.linux.it/cloud/index.php/s/uIz3QwcymtgTeNN Scarica] i file della serata!&lt;br /&gt;
&lt;br /&gt;
''by Francesco''&lt;br /&gt;
&lt;br /&gt;
=== 19 Settembre: Installazione Wordpress ===&lt;br /&gt;
Serata pratica di gruppo sull'installazione del CMS [[Wordpress]] e in generale di un applicativo web su piattaforma LAMP.&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:giomba | giomba]]''&lt;br /&gt;
&lt;br /&gt;
=== 5 Settembre: Il Terminale Unix/Linux ===&lt;br /&gt;
Introduzione ai concetti e ai comandi più utilizzati per gestire il sistema da terminale. Consulta il nostro How-To sul [[Linea_di_comando | terminale]].&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:giomba | giomba]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Officina]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Ore_del_GOLEM&amp;diff=9759</id>
		<title>Ore del GOLEM</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Ore_del_GOLEM&amp;diff=9759"/>
		<updated>2025-11-28T17:55:31Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Aggiornato elenco serate a tema&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Questa pagina raccoglie gli interventi passati. Se stai cercando gli eventi futuri, consulta il [https://blog.golem.linux.it/calendario calendario], o dai un'occhiata a [[Progetti]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
L'Ora del GOLEM è una serata a tema in cui si discute, più o meno formalmente, su qualunque cosa riguardi l'open source, dagli argomenti strettamente tecnici e pratici, alla &amp;quot;consapevolizzazione&amp;quot; e alla valutazione dell'uso dei vari strumenti. A volte i soci più smanettoni preparano delle piccole presentazioni su qualche nuova tecnologia, o qualche tema interessante; altre volte ci si arricchisce facendo brainstorming tutti insieme e si impara a utilizzarla. Spesso, le discussioni di queste serate, vengono tradotte in dei veri e propri [[Howto | how-to]].&lt;br /&gt;
&lt;br /&gt;
Qui puoi trovare tutte le serate passate (in ordine cronologico inverso), con riferimenti a materiale e/o guide prodotte.&lt;br /&gt;
Alcune serate sono anche state [https://video.linux.it/c/golem_channel/videos registrate].&lt;br /&gt;
&lt;br /&gt;
== 2025 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=25 novembre: La posta del FLUG&lt;br /&gt;
|autore=FLUG&lt;br /&gt;
|immagine=Opensmtpd.jpeg&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Incontro motivazionale su come il gruppo GNU/Linux di Firenze si è dotato del proprio server di posta elettronica e non solo. Oltre alla configurazione dei programmi che collaborano all'invio e alla ricezione dei messaggi, si terrà una breve ed emozionante divagazione pratica sull'utilizzo del server in generale, sulla sua manutenzione, ma soprattutto sulle sue umili origini.&lt;br /&gt;
|presentazione=https://firenze.linux.it/~leandro/PresentazioneServerone.html&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=https://lists.linux.it/pipermail/golem/2025-November/015509.html&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=4 novembre: Docker... questo sconosciuto!&lt;br /&gt;
|autore=Diego La Monica&lt;br /&gt;
|immagine=docker.png&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=docker, dockerfile, docker compose, container, service e tutti quei termini usati un po' a caso, tanto perchè fa figo... Ci confronteremo su alcune piccole chicche per gestire al meglio (e in sicurezza) i propri ambienti basati su Docker&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=17 giugno: Da zero a packager Fedora!&lt;br /&gt;
|autore=luigix25&lt;br /&gt;
|immagine=fedora.png&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Durante la serata verra' illustrato l'intero processo che va dalla scrittura di uno specfile, alla creazione del pacchetto rpm alla pubblicazione nei repository ufficiali di Fedora&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=10 giugno: Le avventure di un pachettizzatore su Debian&lt;br /&gt;
|autore=matteobin&lt;br /&gt;
|immagine=debian.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Pacchettizzare è il modo più semplice per contribuire al progetto Debian diventandone parte attiva. Inoltre è un ottimo esercizio per ampliare le conoscenze informatiche e sistemistiche, che aiuta a comprendere le difficoltà della distribuzione di software. Pacchettizzando si diventa esperti di sistemi di compilazione e di aggiornamento, proprio malgrado! Anche in questo ambito il software libero si rivela la scelta migliore non solo per motivi etici, pure per quanto riguarda l'avanguardia, la qualità e l'affidabilità dei sistemi utilizzati. Tuttavia la sfida maggiore nella pacchettizzazione risiede nella coordinazione delle parti in causa. Per questo una parte della serata sarà dedicata al processo per diventare un manutentore di Debian e ai suggerimenti per collaborare con efficacia con gli altri.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=27 maggio: git --help&lt;br /&gt;
|autore=Utente::Lucam&lt;br /&gt;
|immagine=git.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=git per tutti: una panoramica su comandi e opzioni di cui non sapevi di aver bisogno. Dalla &amp;quot;porcellana&amp;quot; per gestire documentazione alle &amp;quot;tubature&amp;quot; per riscrivere la storia&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=https://wiki.golem.linux.it/Git&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=13 maggio: Fediverso e Livello Segreto, una palestra di libertà digitale&lt;br /&gt;
|autore=Fabio Kenobit&lt;br /&gt;
|immagine=fediverso.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Una chiacchierata con Kenobit, uno dei fondatori di Livello Segreto, un'istanza Mastodon, sulle potenzialità del Fediverso e delle piattaforme libere, in ottica di libertà e resistenza digitale.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=22 aprile: Tor - The onion services&lt;br /&gt;
|autore=Leandro&lt;br /&gt;
|immagine=tor.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=La rete tor è un sistema valido per aggirare la censura e l'intercettazione in rete ma soffre di una debolezza nei nodi di uscita che sono il punto più delicato ed esposto tecnicamente e legalmente. La soluzione che elimina questa debolezza sono gli &amp;quot;onion service&amp;quot;, servizi raggiungibili solo all'interno della rete tor per collegarsi ai quali non è necessario conoscere l'indirizzo IP e il dominio del server che li ospita né avere chiavi di cifratura della connessione perché tutto questo viene provvisto dal protocollo: l'anonimato sarà garantito per chi utilizza il servizio ma anche per chi lo rende disponibile. Per fare questo è necessario un cambio di paradigma perché, a differenza dell'uso di tor &amp;quot;normale&amp;quot; nel quale il servizio da raggiungere può anche non avere alcuna contezza del fatto di essere raggiunto via tor, un onion service deve essere configurato in precedenza da chi amministra il servizio stesso. In questa presentazione, dopo una breve descrizione del protocollo, proveremo a configurare un onion service spiegando i vari passi.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=8 aprile: Self hosting: un approccio pratico&lt;br /&gt;
|autore=Giacomo Bagnoli&lt;br /&gt;
|immagine=systemd.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=In questa serata esploreremo il tema del self-hosting, ovvero quali alternative esistono all'uso dei tradizionali servizi cloud.  Data la complessità dell'argomento, ci concentreremo su un approccio pratico, valutando con attenzione il compromesso tra usabilità, privacy, sicurezza e convenienza. Parleremo di podman, quadlets, containers, btrfs, vpn, come gestire l'autenticazione e i certificati, e molto altro.&lt;br /&gt;
|presentazione=https://github.com/gbagnoli/self_hosting_slides/releases/tag/final&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=https://lists.linux.it/pipermail/golem/2025-April/015380.html&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=18 febbraio: Radiocaccia, scopriamo cos'è&lt;br /&gt;
|autore=Paolo IZ5PHM&lt;br /&gt;
|immagine=radiocaccia.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Nota anche come Radio Direction Finding, è una competizione che ha lo scopo di riuscire a localizzare, nel minor tempo possibile, dei trasmettitori radio nascosti. L'attività è volta a incentivare l’autocostruzione di apparecchiature radio, l’apprendimento alla rilevazione di segnali radio e della loro direzione di provenienza e le basi di topografia. La serata approfondirà alcuni di questi aspetti ed includerà una prova pratica.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=4 febbraio: Come funziona una radio?&lt;br /&gt;
|autore=Pierluigi IK5GQF&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata a metà fra storia e tecnica in cui verrà presentata la storia della radioricezione, a partire dai primi circuiti analogici per arrivare alle moderne SDR (Software Defined Radio)&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=14 gennaio: Introduzione a Laravel&lt;br /&gt;
|autore=Simone&lt;br /&gt;
|immagine=laravel.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Partiremo da un progetto vuoto e vedremo le principali soluzioni proposte dal framwork per sviluppare una web app.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2024 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=17 dicembre: Liberiamo il BIOS con coreboot&lt;br /&gt;
|autore=aggro&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=In questa serata parleremo di coreboot, il bios libero. Faremo una chiacchierata in cui si parlerà di cos'è, su che macchine si può usare e quali sono i benefici. Mezzi permettendo, alla chiacchierata seguirà una fase pratica in cui flasheremo coreboot sul Thinkpad X230 del relatore. A cura di Alessandro, LUG di Prato&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=5 dicembre: IPv6 @ FLUG&lt;br /&gt;
|autore=[[Utente:giomba]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Internet è una rete di reti a cui sono connessi miliardi di dispositivi, dai nostri computer, ai nostri smartphone, a tutti quei server e router che permettono all'infrastruttura di funzionare, per non parlare di tutti i dispositivi di domotica e IoT che ormai pervadono le nostre vite. Tuttavia, in origine, erano stati previsti solo 4 miliardi di indirizzi (IPv4): com'è possibile dunque continuare a estendere la rete se gli indirizzi sono finiti? Quali trucchi vengono impiegati, e quali svantaggi ci sono nel perpetuare l'uso di un protocollo che ormai ha fatto il suo tempo? Ospitare un servizio in autonomia, un sito, può diventare appannaggio dei pochi che possono ancora permettersi di accedere a indirizzi IPv4? IPv6 è la soluzione e la sua promozione necessaria, sebbene in Italia sia ancora poco diffuso: in questa serata impareremo a conoscere IPv6, capiremo le differenze con IPv4, e valuteremo, in tempo reale, come potrebbe essere utilizzato al FLUG.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=22 ottobre: Come gestire nodi TOR dalla tua cantina&lt;br /&gt;
|autore=[https://osservatorionessuno.org/ Osservatorio Nessuno]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Gestire nodi TOR può essere divertente, ma anche ben fastidioso, come farlo in Italia? Per spiegarlo vi racconteremo una storia che parte dal processo Ruby ter, arriva in Siria e finisce in una cantinetta piastrellata della Torino Liberty. &lt;br /&gt;
A cura dell'Osservatorio Nessuno&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=25 giugno: Introduzione al mondo open source: consigli e strumenti per nuovi contributori&lt;br /&gt;
|autore=luigix25&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Contribuire a grandi progetti open-source può sembrare un'impresa ardua. Durante la serata esploreremo il funzionamento dello sviluppo in progetti di rilievo come Linux. Ci concentreremo su come avvicinarsi a questo mondo e sugli strumenti essenziali per iniziare.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=4 giugno: Il Processo di compilazione&lt;br /&gt;
|autore=Simone Guercini&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Durante la serata approfondiremo il processo di compilazione di un programma C++ tramite gcc, analizzando gli step che intercorrono tra il codice sorgente ed il file eseguibile. Sono compresi cenni alla struttura di un programma C++, una introduzione al linguaggio assembly x86_64 e numerosi esempi&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=9 aprile: Irrigazione domotica fai-da-te&lt;br /&gt;
|autore=Mario Alinari&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=In casa ho un piccolo terrazzo che ho rallegrato con un po’ di fiori. Da qui l’idea  di un sistema di irrigazione che annaffiasse le piante al posto mio. Avrei potuto acquistare qualcosa di già fatto? Sicuramente si ma mi sarei perso tutto il divertimento. Non rimaneva altro che realizzarlo home made.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=2 aprile: R Project&lt;br /&gt;
|autore=Fabio Frascati&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Una serata di formazione sull'utilizzo del software statistico R per i dati qualitativi. In altre parole la gestione di dati categorici (non numerici) semplice ed intuitiva. Vengono illustrati gli oggetti R ad hoc per un supporto migliore del comune vettore di stringhe. Semplici esempi completeranno la sintetica parte teorica. Nessuna esperienza precedente in R o in programmazione è necessaria.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=12 marzo: Documentare il Sanco 8003: un'avventura inaspettata&lt;br /&gt;
|autore=[[Utente:giulio]] [[Utente:giomba]]&lt;br /&gt;
|immagine=Sanco8003.jpeg&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=In questa serata, a metà fra il vintage ed il moderno, racconteremo la storia del reverse engineering di un computer di inizio anni '80: il Sanco 8003. Utilizzando software ed hardware libero, si parlerà di come approcciarsi ad una scheda sconosciuta per ricavarne il relativo schema; come si possono interpretare i segreti celati all'interno delle EPROM; come disassemblare un intricato codici per Z80 e modificarlo a piacimento per creare un bootloader personalizzato; ed infine, come sfruttare tutte queste scoperte per realizzare un emulatore dedicato a questa misteriosa macchina!&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/pGdCgrdATtQc87E&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=5 marzo: Semplificare il controllo degli accessi su Linux con Systems Manager&lt;br /&gt;
|autore=Francesco Provino&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Come accedere a macchine Linux in cloud e on-premise (nonché qualsiasi altra risorsa) senza usare chiavi SSH o esponendo porte di rete, utilizzando AWS Systems Manager.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=6 febbraio: Introduzione a XMPP&lt;br /&gt;
|autore=Matteo Bini&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=XMPP è un protocollo che permette di scambiarsi messaggi proprio come WhatsApp, con tanto di chiamate audio e video e invio di allegati. Durante l’intervento sarà presentata una breve panoramica sulla struttura del protocollo in questione, oltre all'illustrazione dei vari programmi disponibili per utilizzarlo e per offrire tale servizio.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=http://choice.tiepi.it/~matteobin/scritti/presentazione-di-xmpp.html&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=9 gennaio: virtio e vsock: comunicazione tra host e VM&lt;br /&gt;
|autore=Stefano Garzarella e Luigi Leonardi&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=virtio è uno standard per la comunicazione fra host e macchine virtuali: saranno presentati la sua specifica, come funziona, e alcuni casi d'uso. In particolare ci focalizzaremo su vsock, una famiglia di socket per la comunicazione fra host e guest.&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/s2t24maeGfqiSzY&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2023 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=5 dicembre: Minigiochi al cubo&lt;br /&gt;
|autore=Zughy&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Mai pensato di voler sviluppare un videogioco? Detto fatto! Da anni i server minigiochi spopolano su Minecraft, facendo divertire milioni di persone. Usando il motore di gioco libero Minetest e una piccola libreria, imparerai a creare quelle avventure tanto anelate, arrivando ad avere il tuo piccolo titolo a fine laboratorio. Consigliato per tutte le età!&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://video.linux.it/w/3DtztwVqPLf2CwvnWnK8d7&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=7 marzo: Introduzione a Proxmox&lt;br /&gt;
|autore=Thomas Buonanno&lt;br /&gt;
|immagine=logo-proxmox.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Proxmox VE è una distribuzione debian-based per la gestione di macchine virtuali e container, che include anche un sistema di backup, per la gestione di file system distribuiti e per la migrazione rapida dei servizi. Durante questa serata sarà presentato il progetto e ne saranno mostrate alcune applicazioni pratiche.&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/KfiDYeczEop5WEo&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=7 febbraio: Le alternative al foglio di calcolo nella gestione ed analisi dei propri dati&lt;br /&gt;
|autore=Fabio Frascati&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Perché è così comune usare il foglio di calcolo nella gestione dei propri dati? È sempre la soluzione migliore? Esistono valide alternative gratuite ed open source per compiti specifici e spesso noiosi? Vediamo insieme alcuni semplici esempi in Libreoffice Calc ed R.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=3 Gennaio: Haskell&lt;br /&gt;
|autore=Mariano&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata di introduzione ad Haskell ed ai linguaggi funzionali&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/QDFGaYDfS7c6stP&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2021 ==&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=29 giugno: dotfiles - Gestione ragionata dei files di configurazione&lt;br /&gt;
|autore=[[Utente:Gbiotti]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata sulla gestione con versioning dei dotfiles di Linux&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=[https://git.golem.linux.it/gbiotti/sdf_appunti Appunti della serata] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=16 marzo: Blockchain - Il Free Software incontra la finanza&lt;br /&gt;
|autore=[[Utente:Linux-Lover]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata introduttiva e divulgativa sulle blockchain: cosa sono e perché sono importanti per la comunità del software libero.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=in caricamento&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=9 marzo: Due chiacchiere su buffer overflow&lt;br /&gt;
|autore=luigix25&lt;br /&gt;
|immagine=Stack-example.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Due chiacchiere informali sui buffer overflow e sulle tecniche di mitigrazione.&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/WkWf7XiNPPn7mqn&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://video.linux.it/w/8PG9X1PojpoVbeM5JtYLFn&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=27 gennaio: Programmare Arduino like a pro&lt;br /&gt;
|autore=[[Utente:Giulio]]&lt;br /&gt;
|immagine=Arduino-board.jpg&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=L'ecosistema Arduino consente di sviluppare semplici applicazioni in modo rapido e con conoscenze di programmazione non necessariamente approfondite. Ormai, volenti o nolenti tutti abbiamo una scheda Arduino in casa. Questo sarà il punto di partenza della serata, dove andremo a sviscerare come, partendo da uno sketch, si arrivi al codice macchina eseguito dal microcontrollore. Faremo la conoscenza dei varii strumenti della toolchain GCC: makefile, compilatori ed assemblatori, per comprendere meglio cosa avviene sotto il cofano dell'Arduino IDE e come sfruttarli per scrivere del codice &amp;quot;fuori dagli schemi&amp;quot;.&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/5M2SisqZmJ7PQXM&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://archivio.golem.linux.it/OreDelGolem/20210127-arduinolikeapro-parte1.mp4&lt;br /&gt;
|altro=[https://archivio.golem.linux.it/OreDelGolem/20210127-arduinolikeapro-parte2.mp4 Video sessione di approfondimento sul multitasking] [https://video.linux.it/videos/watch/f654157f-a4b6-4ebb-aaee-932b04bda1af Mirror1] [https://video.linux.it/videos/watch/e63d744f-2444-41c5-b852-fa79cedefde1 Mirror2]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=20 gennaio: Lineage OS: come installarla e... perché&lt;br /&gt;
|autore=Filippo Micheletti, [[Utente:Giomba]], Marco Castrovilli ([http://www.restartersfirenze.it/ Restarters Firenze])&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Tutti hanno uno smartphone, ma pochi sono coscienti del livello di pervasività che questo dispositivo ha nelle nostre vite, e sulla mancanza di controllo che abbiamo sui dati personali che lo attraversano. Conoscere come funziona è indispensabile per fare scelte consapevoli sull’uso che ne facciamo, e scoprire sistemi operativi e applicazioni alternative è uno dei primi passi per riprendere il controllo sui questi dati. Durante la serata, ci domanderemo perché usare LineageOS, quali programmi e applicazioni libere e rispettose possiamo usare, in alternativa ai soliti noti, come si installa questo sistema su uno smartphone, quali sono difficoltà, problemi e possibili rinunce che possiamo incontrare.&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/39dTAZxdpWfzHSp&lt;br /&gt;
|documenti=https://golem.linux.it/cloud/index.php/s/E9ZCm9fjFnq7egG&lt;br /&gt;
|video=https://video.linux.it/w/wSw212j2di8pM38E4g4DZY&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2020 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=7 ottobre: Linux per radioamatori&lt;br /&gt;
|autore=[[Utente:Giulio]] [[Utente:Lucam]]&lt;br /&gt;
|immagine=Tux-radio.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Introduzione a Linux e alle sue applicazioni in ambito radioamatoriale. Quali sono i programmi per fare radio su Linux? Come posso attivare un nodo webSDR?&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/8fLXfdwMwEpxxCq&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20201007-iu5mo-linuxradio.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=7 luglio: Flatcam&lt;br /&gt;
|autore=[[Utente:Glomant]]&lt;br /&gt;
|immagine=Flatcam.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Flatcam è un software che, a partire da file gerber o gcode, permette di passare all’incisione e all’intaglio vero e proprio del circuito tramite una macchina a controllo numerico. Al termine della serata, il prodotto potrà essere inciso tramite una CNC, come quella che abbiamo in officina, come vedremo nella serata successiva.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=https://golem.linux.it/cloud/index.php/s/RZZEfzF8f7C7CMA&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20200708-glomant-flatcam.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=30 giugno: KiCAD 2/2&lt;br /&gt;
|autore=[[Utente:Giulio]]&lt;br /&gt;
|immagine=Kicad.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Seconda serata sull'uso del software di disegno circuiti stampati: disegnato lo schema sarà necessario realizzare il layout, la controparte digitale del circuito stampato. Al termine della serata, il prodotto potrà essere mandato in stampa presso aziende specializzate tramite processi industriali, oppure potrà essere utilizzato la serata seguente. Saranno approfondite alcune funzioni supplementari di KiCAD, come la gestione della lista componenti e delle librerie.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20200630-giuliof-kicad.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=23 giugno: Scrivere un emulatore per il Commodore 64&lt;br /&gt;
|autore=luigix25&lt;br /&gt;
|immagine=c64-startup-screen.jpg&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://video.linux.it/w/qVJ5C78WVkJrDvDyBC57sf&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=16 giugno: KiCAD 1/2&lt;br /&gt;
|autore=[[Utente:Giulio]]&lt;br /&gt;
|immagine=Kicad.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Prima serata sull'uso del software di disegno circuiti stampati: Si tratta di un software opensource di Electronic Design Automation, ossia di progettazione assistita al computer per circuiti elettronici. KiCAD permette di progettare ogni fase della realizzazione del circuito, dalla sua prima bozza, alla scelta e al posizionamento dei componenti, allo sbroglio delle piste, alla produzione dei file per lo stampaggio vero e proprio. In questo primo incontro si vedrà perché e come disegnare uno schema elettronico al computer, come importare i componenti, come associare i simboli grafici agli oggetti fisici.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20200616-giuliof-kicad.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=26 maggio: Indipendenza Digitale?&lt;br /&gt;
|autore=[[Utente:Giomba]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Guida pratica per riappropriarsi della propria indipendenza e identità digitale. Quali compromessi possiamo fare nell'uso del software sul nostro computer e sul nostro smartphone?&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=https://golem.linux.it/cloud/index.php/s/WMDixxEjNtEadAj&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=12 maggio: Due parole su LaTeX&lt;br /&gt;
|autore=[[Utente:Giulio]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Introduzione al software di impaginazione LaTeX&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=''Presentazione in caricamento''&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=14 aprile: Riconoscimento oggetti con OpenCV&lt;br /&gt;
|autore=[[Utente:Linux-Lover]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/E9FxLxM5AEopZyJ&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2019 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=19 febbraio: 128 bit di IPv6&lt;br /&gt;
|autore=[[Utente:giomba]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Cos’è un indirizzo di rete? IPv4 vs IPv6. Perché IPv6? Come si legge un IPv6? Come posso realizzare una rete IPv6? Cosa sono NDP e SLAAC? Come ottenere IPv6? [[IPv6 @ GOLEM]]&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/pZcSHge3bBiQ37m&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://video.linux.it/w/e6oYr4MasX9NDVtkJ6jCU3&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=8 gennaio: Deepen Meltdown&lt;br /&gt;
|autore=[[Utente:Raistlin]]&lt;br /&gt;
|immagine=Meltdown-spectre-logo.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Aggiornamenti sui bug che hanno recentemente afflitto le CPU&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2018 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=16 Ottobre: NextCloud&lt;br /&gt;
|autore=Mattia &amp;amp; Carmelo&lt;br /&gt;
|immagine=Nextcloud-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Cos'è un sistema di clouding. Cloud commerciale vs. Nextcloud. Come configurare un cloud casalingo su PC o Raspberry.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=2 Ottobre: Python &amp;amp; grafici&lt;br /&gt;
|autore=giuliof&lt;br /&gt;
|immagine=Python-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Approfondimento sulle librerie &amp;lt;code&amp;gt;MatPlotLib&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;NumPy&amp;lt;/code&amp;gt;: creare e abbellire grafici, tracciare funzioni, importare e visualizzare dati da CSV, grafici professionali in LaTeX. ''To be continued...''&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/wteTWdnflCwWOXa/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20181002-giuliof-python-grafici.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=12 Settembre: PC4Beginners&lt;br /&gt;
|autore=jacopo&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata introduttiva all'informatica: cenni storici sul computer, cos'è l'hardware, cos'è il software, quali sono i componenti di un PC.&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/HoTfB2ilOWHl1Aq/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180918-jacopo-PC4Beginners.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=3 Luglio: Python 303&lt;br /&gt;
|autore=giuliof&lt;br /&gt;
|immagine=Python-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Avanziamo di livello e parliamo di: liste, dizionari, lettura/scrittura su file, accenno alle librerie e confronto Python2 vs Python3. ''To be continued...''&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/2gbp1UpORawCUkF/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180703-giuliof-python303.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=19 Giugno: Python 101 x2&lt;br /&gt;
|autore=giuliof&lt;br /&gt;
|immagine=Python-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Basi sul linguaggio di programmazione Python: esercizi con ''if...else'', funzioni, cicli ''while'' e ''for'', stringhe e operazioni su stringhe. ''To be continued...''&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/Qq99P5gwkno7H1q/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180619-giuliof-python101x2.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=12 Giugno: Technical deep dive: Meltdown + Spectre&lt;br /&gt;
|autore=Dario&lt;br /&gt;
|immagine=Meltdown-spectre-logo.png&lt;br /&gt;
|dimensione_img=250px&lt;br /&gt;
|descrizione=Da una panoramica sull'architettura e sul funzionamento dei processori moderni (architettura superscalare, memorie cache, TLB, memoria virtuale) arriviamo a capire come queste vulnerabilità scoperte di recente denominate ''Meltdown'' e ''Spectre'' (maggiori [https://meltdownattack.com info]) potrebbero mettere a rischio la sicurezza dell'utente.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180612-Meltdown-Spectre-Dario.mp4&lt;br /&gt;
|altro= concetti introduttivi ([https://en.wikipedia.org/wiki/Virtual_address_space Virtual Memory],&lt;br /&gt;
[https://wiki.osdev.org/Memory_management gestione della memoria],&lt;br /&gt;
esecuzione speculativa [https://en.wikipedia.org/wiki/Speculative_execution] [https://en.wikipedia.org/wiki/Branch_predictor],&lt;br /&gt;
[https://en.wikipedia.org/wiki/Instruction_pipelining pipeline],&lt;br /&gt;
[https://en.wikipedia.org/wiki/Tomasulo_algorithm algoritmo di Tomasulo],&lt;br /&gt;
memoria cache [https://en.wikipedia.org/wiki/CPU_cache] [https://www.extremetech.com/extreme/188776-how-l1-and-l2-cpu-caches-work-and-why-theyre-an-essential-part-of-modern-chips],&lt;br /&gt;
[https://en.wikipedia.org/wiki/Translation_lookaside_buffer TLB],&lt;br /&gt;
[https://en.wikipedia.org/wiki/Side-channel_attack side channel attack])&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
esempi di codice che sfrutta le vulnerabilità ([https://www.raspberrypi.org/blog/why-raspberry-pi-isnt-vulnerable-to-spectre-or-meltdown/], [https://medium.com/@mattklein123/meltdown-spectre-explained-6bc8634cc0c2])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=5 Giugno: Buildroot: distrubuzione personalizzata&lt;br /&gt;
|autore=$pookyh&lt;br /&gt;
|immagine=Logog-b.png&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=[https://buildroot.org Buildroot] è un tool che permette di generare una distribuzione Linux essenziale cucita su misura per le proprie esigenze.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180605-spooky-buildroot.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=22 Maggio: Python - introduzione e basi&lt;br /&gt;
|autore=giuliof&lt;br /&gt;
|immagine=Python-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Basi sul linguaggio di programmazione Python: esempi applicativi, installazione, variabili, istruzioni di stampa a schermo, blocchi condizionali. (Il video è parziale'''!''')&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/IroTEn8ZJhXTaGg/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180519-GiulioF-Python101x1.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 17 Aprile: R: software di analisi statistica ===&lt;br /&gt;
Basi sul linguaggio di programmazione R, applicazioni alla statistica ed esempi.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_files.jpg|40px|files]] [https://golem.linux.it/cloud/index.php/s/mY2GIXC1dIZPKpu Scarica] files (script utilizzati, lista comandi...) e presentazioni della serata.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_video.png|40px|video]] [https://golem.linux.it/pubblici/OreDelGolem/20180417-R-Frascati-Giorgetti.mp4 Guarda] o scarica il video della serata!&lt;br /&gt;
&lt;br /&gt;
=== 10 Aprile: Bash e scripting ===&lt;br /&gt;
Panoramica sui comandi utili e basi di scripting per automatizzare le attività.&lt;br /&gt;
&lt;br /&gt;
Consulta il prontuario sulla [[Linea_di_comando | linea di comando]].&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_video.png|40px|video]] [https://golem.linux.it/pubblici/OreDelGolem/20180410-Bash-Giomba.mp4 Guarda] o scarica il video della serata!&lt;br /&gt;
&lt;br /&gt;
''by Giomba''&lt;br /&gt;
&lt;br /&gt;
=== 23 Gennaio: Sviluppo di un'app per Android ===&lt;br /&gt;
Uno sguardo d'insieme sulla realizzazione di applicazioni per il proprio smartphone con [https://developer.android.com/studio/index.html AndroidStudio], iniziando con alcuni esempi.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_presentazione.png|40px|slides]]  [https://golem.linux.it/cloud/index.php/s/pGoCGHZKpo7C04f/download Presentazione] della serata.&lt;br /&gt;
&lt;br /&gt;
''by Omid''&lt;br /&gt;
&lt;br /&gt;
=== 16 Gennaio: Impariamo KiCad ===&lt;br /&gt;
Come utilizzare il software [http://kicad-pcb.org KiCad] per il disegno di schemi e la realizzazione di circuiti stampati.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_files.jpg|40px|files]]  [https://golem.linux.it/cloud/index.php/s/HLl9ZxreCLQUCH8 Scarica] i file prodotti durante la serata.&lt;br /&gt;
&lt;br /&gt;
''by Stefano''&lt;br /&gt;
&lt;br /&gt;
== 2017 ==&lt;br /&gt;
=== 12 Dicembre: Arduino avr-gcc ===&lt;br /&gt;
Programmazione a &amp;quot;basso livello&amp;quot; in C della scheda Arduino, bypassando l'IDE, per sfruttare a pieno le risorse del microcontrollore.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_video.png|40px|video]] [https://golem.linux.it/pubblici/OreDelGolem/20171212-AVRgcc-Giulio.mp4 Guarda] o scarica il video della serata!&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:Giulio | Giulio]]''&lt;br /&gt;
&lt;br /&gt;
=== 21 Novembre: Git ===&lt;br /&gt;
Un sistema di versionamento alla portata di tutti: come gestire i propri progetti al computer, tenere traccia dello sviluppo e apportare modifiche senza rischiare di danneggiare il lavoro precedente. Consulta il nostro [[Git | prontuario]] di riferimento.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_presentazione.png|40px|slides]]  [https://golem.linux.it/cloud/index.php/s/VL27wucLMsbCEDP Presentazione] della serata&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_video.png|40px|video]]  [https://golem.linux.it/pubblici/OreDelGolem/20171121-Git-Lucam.mp4 Video] della serata&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:Lucam | Lucam]]''&lt;br /&gt;
&lt;br /&gt;
=== 7 Novembre: Arduino e Wireless ===&lt;br /&gt;
Domotica: come integrare il proprio progetto di elettronica con Arduino con la rete WiFi di casa.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_presentazione.png|40px|slides]]  [https://golem.linux.it/cloud/index.php/s/fp7PgxzcdLRmKlx Presentazioni] della serata.&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:Giulio | Giulio]]''&lt;br /&gt;
&lt;br /&gt;
=== 17 ottobre: Introduzione a Wordpress ===&lt;br /&gt;
Procedure base e consigli per costruire un semplice sito dinamico con Wordpress.&lt;br /&gt;
&lt;br /&gt;
''by Pinpas''&lt;br /&gt;
&lt;br /&gt;
=== 3 Ottobre: Sviluppo HTML+CSS ===&lt;br /&gt;
I rudimenti per scrivere un sito statico. &lt;br /&gt;
&lt;br /&gt;
[[File:Icona_files.jpg|40px|files]] [https://golem.linux.it/cloud/index.php/s/uIz3QwcymtgTeNN Scarica] i file della serata!&lt;br /&gt;
&lt;br /&gt;
''by Francesco''&lt;br /&gt;
&lt;br /&gt;
=== 19 Settembre: Installazione Wordpress ===&lt;br /&gt;
Serata pratica di gruppo sull'installazione del CMS [[Wordpress]] e in generale di un applicativo web su piattaforma LAMP.&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:giomba | giomba]]''&lt;br /&gt;
&lt;br /&gt;
=== 5 Settembre: Il Terminale Unix/Linux ===&lt;br /&gt;
Introduzione ai concetti e ai comandi più utilizzati per gestire il sistema da terminale. Consulta il nostro How-To sul [[Linea_di_comando | terminale]].&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:giomba | giomba]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Officina]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Laravel.png&amp;diff=9758</id>
		<title>File:Laravel.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Laravel.png&amp;diff=9758"/>
		<updated>2025-11-28T17:54:47Z</updated>

		<summary type="html">&lt;p&gt;Giomba: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Radiocaccia.png&amp;diff=9757</id>
		<title>File:Radiocaccia.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Radiocaccia.png&amp;diff=9757"/>
		<updated>2025-11-28T17:52:14Z</updated>

		<summary type="html">&lt;p&gt;Giomba: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Systemd.png&amp;diff=9756</id>
		<title>File:Systemd.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Systemd.png&amp;diff=9756"/>
		<updated>2025-11-28T17:46:32Z</updated>

		<summary type="html">&lt;p&gt;Giomba: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Tor.png&amp;diff=9755</id>
		<title>File:Tor.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Tor.png&amp;diff=9755"/>
		<updated>2025-11-28T17:44:37Z</updated>

		<summary type="html">&lt;p&gt;Giomba: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Fediverso.png&amp;diff=9754</id>
		<title>File:Fediverso.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Fediverso.png&amp;diff=9754"/>
		<updated>2025-11-28T17:41:31Z</updated>

		<summary type="html">&lt;p&gt;Giomba: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Git.png&amp;diff=9753</id>
		<title>File:Git.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Git.png&amp;diff=9753"/>
		<updated>2025-11-28T17:39:02Z</updated>

		<summary type="html">&lt;p&gt;Giomba: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Debian.png&amp;diff=9752</id>
		<title>File:Debian.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Debian.png&amp;diff=9752"/>
		<updated>2025-11-28T17:37:19Z</updated>

		<summary type="html">&lt;p&gt;Giomba: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Fedora.png&amp;diff=9751</id>
		<title>File:Fedora.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Fedora.png&amp;diff=9751"/>
		<updated>2025-11-28T17:35:16Z</updated>

		<summary type="html">&lt;p&gt;Giomba: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Docker.png&amp;diff=9750</id>
		<title>File:Docker.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Docker.png&amp;diff=9750"/>
		<updated>2025-11-28T17:31:45Z</updated>

		<summary type="html">&lt;p&gt;Giomba: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Opensmtpd.jpeg&amp;diff=9749</id>
		<title>File:Opensmtpd.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Opensmtpd.jpeg&amp;diff=9749"/>
		<updated>2025-11-28T17:28:55Z</updated>

		<summary type="html">&lt;p&gt;Giomba: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Diventa_socio&amp;diff=9746</id>
		<title>Diventa socio</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Diventa_socio&amp;diff=9746"/>
		<updated>2025-11-19T21:35:37Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Aggiornata con informazioni per la donazione e quota 2026 (al momento invariata)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Cena-sociale-estate-2018.jpeg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
L'Associazione GOLEM si sostenta principalmente grazie al lavoro dei suoi volontari e alle quote associative.&lt;br /&gt;
&lt;br /&gt;
Se vuoi sostenere le nostre attività, senza diventare socio, puoi fare una donazione libera, dell'importo che preferisci.&lt;br /&gt;
&lt;br /&gt;
Se il GOLEM ti piace davvero tanto, condividi i suoi ideali e approvi lo [[Statuto del GOLEM | statuto]] associativo, allora puoi diventare socio!&lt;br /&gt;
&lt;br /&gt;
Associarsi permette di:&lt;br /&gt;
* accedere all'Officina Informatica&lt;br /&gt;
* partecipare ai corsi organizzati in sede&lt;br /&gt;
* usufruire del materiale e della strumentazione presente&lt;br /&gt;
* sostenere la promozione del software libero nel territorio&lt;br /&gt;
* e molto altro ([[Chi siamo|Chi siamo?]])&lt;br /&gt;
&lt;br /&gt;
== Per fare una donazione libera ==&lt;br /&gt;
Puoi fare una donazione libera:&lt;br /&gt;
* in contanti, direttamente al Tesoriere durante le serate in Officina&lt;br /&gt;
* tramite bonifico bancario, intestato a&lt;br /&gt;
 GOLEM Gruppo Operativo Linux Empoli&lt;br /&gt;
 presso Banca di Credito Cooperativo di Cambiano&lt;br /&gt;
 IT08O0842538171000031246515&lt;br /&gt;
 Causale: DONAZIONE&lt;br /&gt;
* tramite Paypal utilizzando il pulsante sottostante&lt;br /&gt;
&lt;br /&gt;
'''Donazione libera'''&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;https://www.paypal.com/cgi-bin/webscr&amp;quot; method=&amp;quot;post&amp;quot; target=&amp;quot;_top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;cmd&amp;quot; value=&amp;quot;_s-xclick&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;hosted_button_id&amp;quot; value=&amp;quot;6EGL9ABAKJ7M6&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;image&amp;quot; src=&amp;quot;https://www.paypalobjects.com/it_IT/IT/i/btn/btn_donate_LG.gif&amp;quot; border=&amp;quot;0&amp;quot; name=&amp;quot;submit&amp;quot; alt=&amp;quot;PayPal è il metodo rapido e sicuro per pagare e farsi pagare online.&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img alt=&amp;quot;&amp;quot; border=&amp;quot;0&amp;quot; src=&amp;quot;https://www.paypalobjects.com/it_IT/i/scr/pixel.gif&amp;quot; width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Per diventare socio ==&lt;br /&gt;
Per diventare socio o per rinnovare la tua iscrizione è necessario versare la quota associativa.&lt;br /&gt;
&lt;br /&gt;
Nella causale del bonifico, o nel messaggio su Paypal, specificare chiaramente ''&amp;lt;nome&amp;gt; &amp;lt;cognome&amp;gt; &amp;lt;indirizzo email&amp;gt; &amp;lt;anno&amp;gt;''.&lt;br /&gt;
Esempio: ''Linus Torvalds torvalds@kernel.org 2026''&lt;br /&gt;
&lt;br /&gt;
La quota associativa per l'anno 2026 è fissata a 20€ per la Tessera Ordinaria e a 10€ per la Tessera Junior (under 19).&lt;br /&gt;
&lt;br /&gt;
La quota può essere versata:&lt;br /&gt;
* in contanti direttamente al Tesoriere durante le serate in Officina&lt;br /&gt;
* tramite bonifico bancario, intestato a:&lt;br /&gt;
 GOLEM Gruppo Operativo Linux Empoli&lt;br /&gt;
 presso Banca di Credito Cooperativo di Cambiano&lt;br /&gt;
 IT08O0842538171000031246515&lt;br /&gt;
 Causale: &amp;lt;NOME&amp;gt; &amp;lt;COGNOME&amp;gt; &amp;lt;EMAIL&amp;gt; &amp;lt;ANNO&amp;gt;&lt;br /&gt;
* tramite PayPal utilizzando i pulsanti sottostanti&lt;br /&gt;
&lt;br /&gt;
'''Tessera Ordinaria'''&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;https://www.paypal.com/donate&amp;quot; method=&amp;quot;post&amp;quot; target=&amp;quot;_top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;hosted_button_id&amp;quot; value=&amp;quot;CTYBDKVB2L6Q4&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;image&amp;quot; src=&amp;quot;https://www.paypalobjects.com/it_IT/IT/i/btn/btn_donate_LG.gif&amp;quot; border=&amp;quot;0&amp;quot; name=&amp;quot;submit&amp;quot; title=&amp;quot;PayPal - The safer, easier way to pay online!&amp;quot; alt=&amp;quot;Donate with PayPal button&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img alt=&amp;quot;&amp;quot; border=&amp;quot;0&amp;quot; src=&amp;quot;https://www.paypal.com/it_IT/i/scr/pixel.gif&amp;quot; width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Tessera Junior'''&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;https://www.paypal.com/donate&amp;quot; method=&amp;quot;post&amp;quot; target=&amp;quot;_top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;hosted_button_id&amp;quot; value=&amp;quot;MWPB8GW3SLTSQ&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;image&amp;quot; src=&amp;quot;https://www.paypalobjects.com/it_IT/IT/i/btn/btn_donate_LG.gif&amp;quot; border=&amp;quot;0&amp;quot; name=&amp;quot;submit&amp;quot; title=&amp;quot;PayPal - The safer, easier way to pay online!&amp;quot; alt=&amp;quot;Donate with PayPal button&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img alt=&amp;quot;&amp;quot; border=&amp;quot;0&amp;quot; src=&amp;quot;https://www.paypal.com/it_IT/i/scr/pixel.gif&amp;quot; width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Servizi&amp;diff=9745</id>
		<title>Servizi</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Servizi&amp;diff=9745"/>
		<updated>2025-11-15T21:07:50Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Prove di visualizzazione per la tracciatura della qualità, non mi convince ancora del tutto&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questa pagina elenca i servizi del GOLEM, le macchine &amp;quot;fisiche&amp;quot; su cui sono installati, il loro stato di sviluppo, le porte su cui sono in ascolto quanto amore dovrebbe dedicarci il sysop, e quanto ce ne dedica davvero.&lt;br /&gt;
&lt;br /&gt;
== Tracciamento di qualità ==&lt;br /&gt;
Le lettere con ¹ descrivono il livello di qualità che si vuole raggiungere, mentre le lettere con ² indicano se il livello di qualità è stato raggiunto.&lt;br /&gt;
&lt;br /&gt;
Parametri di qualità:&lt;br /&gt;
* '''Disponibilità (D)''': Il servizio dovrebbe sempre essere disponibile?&lt;br /&gt;
** ''max'': massima disponibilità&lt;br /&gt;
** ''mid'': disponibilità intermedia&lt;br /&gt;
** ''min'': minima, best effort&lt;br /&gt;
* '''Aggiornamento (A)''': Il servizio deve essere regolarmente aggiornato?&lt;br /&gt;
** ''Y'': yes, il sysop deve fare il possibile per mantenerlo sempre aggiornato&lt;br /&gt;
** ''M'': maybe, il servizio non necessita particolare attenzione (es. pagina statica in HTML, pacchetto vanilla su Debian stabile da 30 anni, ...) (giustificare)&lt;br /&gt;
** ''N'': no, aggiornamento a priorità inferiore (giustificare)&lt;br /&gt;
* '''Deploy (E)''': Può essere fatto il deploy del servizio in modo automatico? La procedura è documentata? Es. rispetta le linee guida di [[ Sistemi informatici ]]?&lt;br /&gt;
** ''auto'': continuous deploy: c'è un meccanismo automatico, auto-documentante e standard per fare il deploy automatico, es. pipeline&lt;br /&gt;
** ''semi-auto'': c'è un'immagine docker, un docker-compose, un quadlet, o qualcosa di simile da lanciare a mano con relativamente poco sforzo, e che segue delle linee guida standard&lt;br /&gt;
** ''doc'': esiste della documentazione specifica per il deploy di questo servizio al GOLEM, es. una pagina sul wiki (inserire link), ma la procedura è manuale&lt;br /&gt;
** ''man'': l'ha fatto qualcuno a tempo perso di domenica pomeriggio e non è stato documentato, perciò speriamo che non si rompa&lt;br /&gt;
* '''Backup (B)''': Deve essere fatto un backup periodico automatico del servizio?&lt;br /&gt;
** ''Y'': yes&lt;br /&gt;
** ''N'': no (giustificare)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
++++++++ TEMPLATE: CUT HERE ++++++++&lt;br /&gt;
* '''Descrizione''':&lt;br /&gt;
* '''URL''':&lt;br /&gt;
* '''Macchina''':&lt;br /&gt;
* '''Porta Container''':&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! desiderato&lt;br /&gt;
! raggiunto?&lt;br /&gt;
! note&lt;br /&gt;
|-&lt;br /&gt;
! D&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background: red;&amp;quot; | no&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! A&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background: red;&amp;quot; | no&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! E&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background: red;&amp;quot; | no&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! B&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background: red;&amp;quot; | no&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
++++++++ TEMPLATE: CUT ++++++++&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Servizi ==&lt;br /&gt;
=== archivio ===&lt;br /&gt;
* '''Descrizione''': archivio di contenuti statici di grandi dimensioni (principalmente video)&lt;br /&gt;
* '''URL''': https://archivio.golem.linux.it/&lt;br /&gt;
* '''Macchina''': cassone&lt;br /&gt;
* '''Porta Container''': 7003 (http), 7005 (ssh)&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! desiderato&lt;br /&gt;
! raggiunto?&lt;br /&gt;
! note&lt;br /&gt;
|-&lt;br /&gt;
! D&lt;br /&gt;
| mid&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | sì&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! A&lt;br /&gt;
| mid&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | sì&lt;br /&gt;
| utilizza l'immagine ''thttpd'' per i siti statici&lt;br /&gt;
|-&lt;br /&gt;
! E&lt;br /&gt;
| semi-auto&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | sì&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! B&lt;br /&gt;
| sì&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | sì&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== bind9 ===&lt;br /&gt;
* '''Descrizione''': server DNS&lt;br /&gt;
* '''URL''': N/A&lt;br /&gt;
* '''Macchina''': atena&lt;br /&gt;
* '''Porta Container''': N/A&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! desiderato&lt;br /&gt;
! raggiunto?&lt;br /&gt;
! note&lt;br /&gt;
|-&lt;br /&gt;
! D&lt;br /&gt;
| max&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! A&lt;br /&gt;
| mid&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | yes&lt;br /&gt;
| utilizzato pacchetto Debian vanilla&lt;br /&gt;
|-&lt;br /&gt;
! E&lt;br /&gt;
| doc (repository)&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! B&lt;br /&gt;
| yes&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | yes&lt;br /&gt;
| la configurazione è su repository git&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== table ===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Servizio&lt;br /&gt;
!Descrizione&lt;br /&gt;
!URL&lt;br /&gt;
!Macchina&lt;br /&gt;
!Porta&lt;br /&gt;
!D¹&lt;br /&gt;
!A¹&lt;br /&gt;
!E¹&lt;br /&gt;
!B¹&lt;br /&gt;
!D²&lt;br /&gt;
!A²&lt;br /&gt;
!E²&lt;br /&gt;
!B²&lt;br /&gt;
!Note&lt;br /&gt;
|-&lt;br /&gt;
| archivio&lt;br /&gt;
| archivio di contenuti statici di grandi dimensioni (principalmente video)&lt;br /&gt;
| [https://archivio.golem.linux.it/] &amp;lt;strike&amp;gt;[https://golem.linux.it/pubblici/]&amp;lt;/strike&amp;gt;&lt;br /&gt;
| cassone&lt;br /&gt;
| 7003 (http), 7005 (ssh)&lt;br /&gt;
| mid&lt;br /&gt;
| maybe&lt;br /&gt;
| semi-auto&lt;br /&gt;
| yes&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | ok&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | ok&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | ok&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | ok&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| bind9&lt;br /&gt;
| Server DNS&lt;br /&gt;
| &lt;br /&gt;
| atena&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| cgi-python&lt;br /&gt;
| Script Python per il web&lt;br /&gt;
|&lt;br /&gt;
| atena&lt;br /&gt;
| 7090&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CI/CD runner&lt;br /&gt;
| Runner per gitea&lt;br /&gt;
|&lt;br /&gt;
| ubuntu-lxc-runner&lt;br /&gt;
| client&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| dbgestionale&lt;br /&gt;
| database gestionale anagrafica soci e rinnovo tessere&lt;br /&gt;
| [https://git.golem.linux.it/golem/gestionale]&lt;br /&gt;
| atena&lt;br /&gt;
| 7004&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| digitalecivile&lt;br /&gt;
| progetto per la riduzione del digital divide&lt;br /&gt;
| [https://digitalecivile.golem.linux.it/]&lt;br /&gt;
| atena&lt;br /&gt;
| 7090&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Messo in un container in un momento di emergenza, va rivisto un po&lt;br /&gt;
|-&lt;br /&gt;
| [[ Gitea ]]&lt;br /&gt;
| Interfaccia web per git, self-hosted&lt;br /&gt;
| [https://git.golem.linux.it/]&lt;br /&gt;
| atena&lt;br /&gt;
| 3000 (http), 3022 (ssh)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mediawiki&lt;br /&gt;
| Il nostro wiki (questo che stai leggendo)&lt;br /&gt;
| [https://golem.linux.it/wiki]&lt;br /&gt;
| atena&lt;br /&gt;
| 7050&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| nextcloud&lt;br /&gt;
| Condivisione file e groupware (rubriche, calendari)&lt;br /&gt;
| [https://cloud.golem.linux.it/]&lt;br /&gt;
| atena&lt;br /&gt;
| 7080&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| tpdf&lt;br /&gt;
| Tellico parser, consultazione inventario della biblioteca&lt;br /&gt;
| [https://cgi.golem.linux.it/tpdf/] [https://golem.linux.it/cgi/tpdf/]&lt;br /&gt;
| vps&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| uptime-kuma&lt;br /&gt;
| Monitoraggio servizi&lt;br /&gt;
| [http://cassone.golem.linux.it:7030]&lt;br /&gt;
| cassone&lt;br /&gt;
| 7030&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| vpn&lt;br /&gt;
| La VPN per l'IPv6 e le macchine di Officina&lt;br /&gt;
| [[VPN del GOLEM|VPN]] [[IPv6 @ GOLEM|IPv6]]&lt;br /&gt;
| atena&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| websdr&lt;br /&gt;
| ascolto remoto delle radiofrequenze VHF/UHF libere&lt;br /&gt;
| [http://websdr.golem.linux.it/] [https://wiki.golem.linux.it/WebSDR]&lt;br /&gt;
| websdr&lt;br /&gt;
| 8073&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| wordpress&lt;br /&gt;
| Il nostro blog&lt;br /&gt;
| [https://golem.linux.it/wp]&lt;br /&gt;
| atena&lt;br /&gt;
| 7070&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| zerocalcare&lt;br /&gt;
| Parser CalDAV e visualizzatore calendario sul blog&lt;br /&gt;
| [https://git.golem.linux.it/golem/zerocalcare]&lt;br /&gt;
| vps&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Bozze/Test/Idee ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Servizio&lt;br /&gt;
!Descrizione&lt;br /&gt;
!URL&lt;br /&gt;
!Macchina&lt;br /&gt;
!Porta&lt;br /&gt;
!Stato&lt;br /&gt;
!Note&lt;br /&gt;
|-&lt;br /&gt;
| server mail&lt;br /&gt;
| invio email per conto dei vari applicativi, relay tramite il nostro provider&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background: gray;&amp;quot; | idea&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Sysop]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Servizi&amp;diff=9744</id>
		<title>Servizi</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Servizi&amp;diff=9744"/>
		<updated>2025-11-14T17:54:30Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Aggiunto template per stato di qualità dettagliato servizi&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questa pagina elenca i servizi del GOLEM, le macchine &amp;quot;fisiche&amp;quot; su cui sono installati, il loro stato di sviluppo e le porte su cui sono in ascolto.&lt;br /&gt;
__NOTOC__&lt;br /&gt;
== Supporto ==&lt;br /&gt;
Stato approssimativo del supporto e dell'amore che gli viene dedicato&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Legenda&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | produzione&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: yellow;&amp;quot; | test&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: orange;&amp;quot; | -&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: gray;&amp;quot; | idea&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: violet;&amp;quot; | patch temporanea&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: red;&amp;quot; | guasto/offline&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tracciamento di qualità ==&lt;br /&gt;
* &lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Disponibilità (D)&lt;br /&gt;
! Il servizio è disponibile e dovrebbe sempre funzionare?&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | ''max''&lt;br /&gt;
| massima disponibilità&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: yellow;&amp;quot; | ''inter''&lt;br /&gt;
| disponibilità intermedia&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: orange;&amp;quot; | ''min''&lt;br /&gt;
| minima, best effort&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Aggiornamento (A)&lt;br /&gt;
| Il servizio viene regolarmente aggiornato? Deve essere regolarmente aggiornato?&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | ''sì''&lt;br /&gt;
| Il sysop fa il possibile per mantenerlo sempre aggiornato&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: yellow;&amp;quot; | ''nì''&lt;br /&gt;
| Il servizio non necessita particolare attenzione (es. pagina statica in HTML, pacchetto vanilla su Debian stabile da 30 anni, ...)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: orange;&amp;quot; | ''no''&lt;br /&gt;
| Aggiornamento a priorità inferiore&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Deploy (E)&lt;br /&gt;
| Può essere fatto il deploy del servizio in modo automatico? La procedura è documentata? Es. rispetta le linee guida di [[ Sistemi informatici ]]?&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | ''auto''&lt;br /&gt;
| continuous deploy: c'è un meccanismo automatico e standard per fare il deploy automatico, es. pipeline&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: yellow;&amp;quot; | ''semi-auto''&lt;br /&gt;
| c'è un'immagine docker, un docker-compose, un quadlet, o qualcosa di simile da lanciare a mano con relativamente poco sforzo&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: orange;&amp;quot; | ''doc''&lt;br /&gt;
| esiste della documentazione specifica per il deploy di questo servizio al GOLEM, es. una pagina sul wiki (inserire link)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: red;&amp;quot; | ''man''&lt;br /&gt;
| l'ha fatto l'hackerino di turno durante il weekend, perciò speriamo che non si rompa&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Backup (B)&lt;br /&gt;
! Il servizio viene backuppato regolarmente in modo automatico?&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | ''sì''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: red;&amp;quot; | ''no''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Servizi ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Servizio&lt;br /&gt;
!Descrizione&lt;br /&gt;
!URL&lt;br /&gt;
!Macchina&lt;br /&gt;
!Porta&lt;br /&gt;
!Stato&lt;br /&gt;
!D&lt;br /&gt;
!A&lt;br /&gt;
!E&lt;br /&gt;
!B&lt;br /&gt;
!Note&lt;br /&gt;
|-&lt;br /&gt;
| archivio&lt;br /&gt;
| archivio di contenuti statici di grandi dimensioni (principalmente video)&lt;br /&gt;
| [https://archivio.golem.linux.it/] &amp;lt;strike&amp;gt;[https://golem.linux.it/pubblici/]&amp;lt;/strike&amp;gt;&lt;br /&gt;
| cassone&lt;br /&gt;
| 7003 (http), 7005 (ssh)&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | prod&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | max&lt;br /&gt;
| style=&amp;quot;background: yellow;&amp;quot; | nì&lt;br /&gt;
| style=&amp;quot;background: yellow;&amp;quot; | semi-auto&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | sì&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| bind9&lt;br /&gt;
| Server DNS&lt;br /&gt;
| &lt;br /&gt;
| atena&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | prod&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | max&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | sì&lt;br /&gt;
| style=&amp;quot;background: orange;&amp;quot; | doc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| cgi-python&lt;br /&gt;
| Script Python per il web&lt;br /&gt;
|&lt;br /&gt;
| atena&lt;br /&gt;
| 7090&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | prod&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CI/CD runner&lt;br /&gt;
| Runner per gitea&lt;br /&gt;
|&lt;br /&gt;
| ubuntu-lxc-runner&lt;br /&gt;
| client&lt;br /&gt;
| style=&amp;quot;background: yellow;&amp;quot; | test&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| dbgestionale&lt;br /&gt;
| database gestionale anagrafica soci e rinnovo tessere&lt;br /&gt;
| [https://git.golem.linux.it/golem/gestionale]&lt;br /&gt;
| atena&lt;br /&gt;
| 7004&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | prod&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| digitalecivile&lt;br /&gt;
| progetto per la riduzione del digital divide&lt;br /&gt;
| [https://digitalecivile.golem.linux.it/]&lt;br /&gt;
| atena&lt;br /&gt;
| 7090&lt;br /&gt;
| style=&amp;quot;background: violet;&amp;quot; | patch&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Messo in un container in un momento di emergenza, va rivisto un po&lt;br /&gt;
|-&lt;br /&gt;
| [[ Gitea ]]&lt;br /&gt;
| Interfaccia web per git, self-hosted&lt;br /&gt;
| [https://git.golem.linux.it/]&lt;br /&gt;
| atena&lt;br /&gt;
| 3000 (http), 3022 (ssh)&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | prod&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mediawiki&lt;br /&gt;
| Il nostro wiki (questo che stai leggendo)&lt;br /&gt;
| [https://golem.linux.it/wiki]&lt;br /&gt;
| atena&lt;br /&gt;
| 7050&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | prod&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| nextcloud&lt;br /&gt;
| Condivisione file e groupware (rubriche, calendari)&lt;br /&gt;
| [https://cloud.golem.linux.it/]&lt;br /&gt;
| atena&lt;br /&gt;
| 7080&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | prod&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| tpdf&lt;br /&gt;
| Tellico parser, consultazione inventario della biblioteca&lt;br /&gt;
| [https://cgi.golem.linux.it/tpdf/] [https://golem.linux.it/cgi/tpdf/]&lt;br /&gt;
| vps&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | prod&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| uptime-kuma&lt;br /&gt;
| Monitoraggio servizi&lt;br /&gt;
| [http://cassone.golem.linux.it:7030]&lt;br /&gt;
| cassone&lt;br /&gt;
| 7030&lt;br /&gt;
| style=&amp;quot;background: yellow;&amp;quot; | test&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| vpn&lt;br /&gt;
| La VPN per l'IPv6 e le macchine di Officina&lt;br /&gt;
| [[VPN del GOLEM|VPN]] [[IPv6 @ GOLEM|IPv6]]&lt;br /&gt;
| atena&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | prod&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| websdr&lt;br /&gt;
| ascolto remoto delle radiofrequenze VHF/UHF libere&lt;br /&gt;
| [http://websdr.golem.linux.it/] [https://wiki.golem.linux.it/WebSDR]&lt;br /&gt;
| websdr&lt;br /&gt;
| 8073&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | prod&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| wordpress&lt;br /&gt;
| Il nostro blog&lt;br /&gt;
| [https://golem.linux.it/wp]&lt;br /&gt;
| atena&lt;br /&gt;
| 7070&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | prod&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| zerocalcare&lt;br /&gt;
| Parser CalDAV e visualizzatore calendario sul blog&lt;br /&gt;
| [https://git.golem.linux.it/golem/zerocalcare]&lt;br /&gt;
| vps&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background: lightgreen;&amp;quot; | prod&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Bozze/Test/Idee ==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Servizio&lt;br /&gt;
!Descrizione&lt;br /&gt;
!URL&lt;br /&gt;
!Macchina&lt;br /&gt;
!Porta&lt;br /&gt;
!Stato&lt;br /&gt;
!Note&lt;br /&gt;
|-&lt;br /&gt;
| server mail&lt;br /&gt;
| invio email per conto dei vari applicativi, relay tramite il nostro provider&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background: gray;&amp;quot; | idea&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Sysop]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Escursionismo&amp;diff=9735</id>
		<title>Escursionismo</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Escursionismo&amp;diff=9735"/>
		<updated>2025-10-01T10:06:20Z</updated>

		<summary type="html">&lt;p&gt;Giomba: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pagina per applicativi e piattaforme riguardanti l'escursionismo open source.&lt;br /&gt;
&lt;br /&gt;
== Per smartphone ==&lt;br /&gt;
* [https://osmand.net/ OsmAnd~] è un'applicazione open source multipiattaforma per la navigazione con mappe offline caricate da Openstreetmap. Permette di pianificare percorsi in auto e a piedi, di salvare ed esportare preferiti, e seguire tracce GPX. Possibilità di scaricare anche le mappe con le curve di livello, mostrare l'altimetria del percorso e l'altitudine istantanea tramite GPS. Disponibile a pagamento con limitazioni sul numero di mappe scaricabili su Play Store, oppure tramite F-Droid.&lt;br /&gt;
* [https://github.com/labexp/osmtracker-android OSMTracker] è un'applicazione opensource per Android per la registrazione dei percorsi sotto forma di tracce GPX. Offre la possibilità di segnare punti di interesse, note e note vocali da aggiungere poi su OpenStreetMap, tramite esportazione del tracciato.&lt;br /&gt;
&lt;br /&gt;
== Per desktop ==&lt;br /&gt;
* [https://wiki.openstreetmap.org/wiki/GpsMaster GpsMaster] programma desktop in Java per la visualizzazione e la creazione di percorsi come traccia GPX.&lt;br /&gt;
* [https://www.gpxsee.org/ GPXSee] programma open, desktop in Qt per la visualizzazione di percorsi GPX, KML, ecc...&lt;br /&gt;
&lt;br /&gt;
== Servizi online ==&lt;br /&gt;
* [https://www.openstreetmap.org/ OpenStreetMap] è un database comunitario di strade, sentieri, edifici e punti d'interesse in genere, molto dettagliato. Aneddotica:&lt;br /&gt;
** ''la ricerca lascia un po' a desiderare, bisogna ingegnarsi un po'''&lt;br /&gt;
** ''se cerchi un'attività commerciale, ci sta che nessuno l'abbia mappata, ma se vuoi una cosa che non ha nessun valore commerciale stai sicuro che ci sarà'' (un sentiero, un monumento, un bosco, un'antenna televisiva, una grotta, ...)&lt;br /&gt;
&lt;br /&gt;
== Da provare ==&lt;br /&gt;
* [https://trekarta.info/ TreKarta] mappe offline&lt;br /&gt;
* Komoot -- ???&lt;br /&gt;
* Wikiloc -- servizio che incentiva la condivisione? Tracce scaricabili solo dietro registrazione? 🤷&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=IPv6_@_GOLEM&amp;diff=9651</id>
		<title>IPv6 @ GOLEM</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=IPv6_@_GOLEM&amp;diff=9651"/>
		<updated>2025-03-11T22:10:43Z</updated>

		<summary type="html">&lt;p&gt;Giomba: /* Impostare il client VPN come gateway IPv6 per l'isola */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Due parole su questa pagina ==&lt;br /&gt;
Questa pagina è un maldestro tentativo:&lt;br /&gt;
* per riassumere le ragioni che ci hanno portato a decidere di dotarci di IPv6;&lt;br /&gt;
* per documentare la nostra infrastruttura di rete;&lt;br /&gt;
&lt;br /&gt;
=== A chi si rivolge questa pagina ===&lt;br /&gt;
* se sei l''''amministratore di rete''', buona lettura :-)&lt;br /&gt;
* se sei un '''socio''', vedi come [[#Configurazione_lato_client | configurare il tuo client]]; è sufficiente leggere solo questo paragrafo.&lt;br /&gt;
&lt;br /&gt;
== Due parole sull'IPv6 ==&lt;br /&gt;
[https://it.wikipedia.org/wiki/IPv6 IPv6] è un &amp;quot;nuovo&amp;quot; protocollo a livello di rete che da diversi anni sta sostituendo IPv4.&lt;br /&gt;
Le novità introdotte da IPv6 sono molteplici; tra queste, quella che balza immediatamente all'occhio è l'enorme dimensione dello spazio di indirizzamento.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Protocollo'''&lt;br /&gt;
| '''lunghezza indirizzo'''&lt;br /&gt;
| '''numero indirizzi'''&lt;br /&gt;
|-&lt;br /&gt;
| IPv4&lt;br /&gt;
| 32 bit&lt;br /&gt;
| 2&amp;lt;sup&amp;gt;32&amp;lt;/sup&amp;gt; = 4 miliardi&lt;br /&gt;
|-&lt;br /&gt;
| IPv6&lt;br /&gt;
| 128 bit&lt;br /&gt;
| 2&amp;lt;sup&amp;gt;128&amp;lt;/sup&amp;gt; = 256 miliardi di miliardi di miliardi di miliardi&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Su questo pianeta vi sono circa 8 miliardi di persone [https://it.wikipedia.org/wiki/Popolazione_mondiale], di cui la metà [http://www.lastampa.it/2018/01/31/tecnologia/gli-utenti-di-internet-sono-pi-di-quattro-miliardi-nel-mondo-milioni-in-italia-wMxQskzXeabwa3wgWI2jUO/pagina.html] è connessa a Internet, e nei paesi sviluppati hanno anche più di un dispositivo connesso. Si aggiungano i numerosissimi apparati di rete e server necessari per il funzionamento dell'infrastruttura e la fornitura di servizi, e si può facilmente intuire che IPv4 non è più sufficiente per le attuali necessità.&lt;br /&gt;
&lt;br /&gt;
Mentre questa pagina veniva scritta, gli IPv4 stavano finendo [https://en.wikipedia.org/wiki/IPv4_address_exhaustion].&lt;br /&gt;
Nel novembre 2019, il RIPE (il registro europeo) ha terminato l'assegnazione degli ultimi indirizzi IPv4 assegnati all'Europa, [https://www.ripe.net/publications/ipv6-info-centre/about-ipv6/ipv4-exhaustion/ipv4-available-pool] e adesso vengono solo riutilizzati quelli vecchi, che significa che:&lt;br /&gt;
* non ci sono più indirizzi &amp;quot;nuovi&amp;quot; e dunque non è più possibile richiederli con facilità;&lt;br /&gt;
* se si vogliono degli indirizzi IPv4, si viene messi in lista d'attesa, finché il precedente proprietario fallisce e rilascia i propri.&lt;br /&gt;
&lt;br /&gt;
=== IPv4 vs IPv6 ===&lt;br /&gt;
==== Notazione ====&lt;br /&gt;
* IPv4 &amp;amp;rarr; 4 byte rappresentati con numeri decimali separati da un punto, es: &amp;lt;code&amp;gt;192.0.2.127&amp;lt;/code&amp;gt;&lt;br /&gt;
* IPv6 &amp;amp;rarr; 16 byte, ogni byte è rappresentato da due cifre esadecimali; ogni 4 cifre esadecimali si inseriscono i ''due punti'' &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;; come in IPv4 è possibile omettere gli zeri in testa; la più lunga sequenza di zeri allineata a 4 può essere omessa per intero; esempi (indirizzi equivalenti):&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:0470:c844:0020:0000:0000:0000:0001&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:470:c844:20:0:0:0:1&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:470:c844:20::1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipi di indirizzi ====&lt;br /&gt;
* IPv6 Reference Card by RIPE [https://www.ripe.net/manage-ips-and-asns/ipv6/ipv6-address-types/ipv6_reference_card_July2015.pdf]&lt;br /&gt;
&lt;br /&gt;
Riassunto:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''IPv6'''&lt;br /&gt;
| '''Equivalente IPv4'''&lt;br /&gt;
| '''Significato'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;::1/128&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo loopback&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fc00::/7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;192.168.0.0/16&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;10.0.0.0/8&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;172.16.0.0/12&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo privato&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fe80::/10&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;169.254.0.0/16&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo link-local (univoco nella rete locale, e autoassegnato)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2001:db8::/32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;192.0.2.0/24&amp;lt;/code&amp;gt;&lt;br /&gt;
| Esempi e documentazione&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| Indirizzi unicast globalmente raggiungibili&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Indirizzi pubblici vs privati ====&lt;br /&gt;
Gli IPv6 sono così tanti che non c'è bisogno di utilizzare indirizzi privati: niente NAT, niente port-forwarding. Questo restituisce connettività end-to-end ai dispositivi e apre numerose nuove possibilità di impiego, rimaste nascoste per anni a causa della scarsità di IPv4 e degli osceni espedienti inventati. Una banalità: non sarà più necessario passare attraverso un server terzo per condividere documenti, chattare o telefonare ai propri contatti.&lt;br /&gt;
&lt;br /&gt;
Se necessarie, le caratteristiche di &amp;quot;sicurezza&amp;quot; introdotte dal NAT possono essere sostituite e accorpate a un banale firewall.&lt;br /&gt;
&lt;br /&gt;
==== Progettazione di una rete ====&lt;br /&gt;
Nel progettare una rete con IPv4, la necessità principale è quella di risparmiare sugli indirizzi, perciò vengono usati prefissi di rete di varia lunghezza.&lt;br /&gt;
Nel progettare una rete con IPv6, si hanno a disposizione così tanti indirizzi che conviene utilizzarli in maniera da renderne più agevole una distribuzione logica.&lt;br /&gt;
&lt;br /&gt;
Sono così identificate le seguenti dimensioni standard per le reti IPv6 (nulla vieta di usare dimensioni personalizzate):&lt;br /&gt;
* '''/126''': contiene 2 soli host, utilizzata per i collegamenti punto-punto nell'infrastruttura di rete;&lt;br /&gt;
* '''/64''': è la più piccola rete che dovrebbe essere fatta; dimensione utilizzata nelle LAN; lo spazio di indirizzamento è esageratamente sovradimensionato ed è sufficiente per qualunque LAN immaginabile (è 4 miliardi di volte più grande di tutta la rete Internet IPv4); viene usata in ambito domestico;&lt;br /&gt;
* '''/56''': contiene 256 reti di dimensione /64, viene usata in ambito domestico o per piccole imprese;&lt;br /&gt;
* '''/48''': contiene 65536 reti di dimensione /64, viene usata in ambito aziendale;&lt;br /&gt;
&lt;br /&gt;
Le LAN non devono avere un prefisso più lungo di /64, perché molte nuove funzionalità introdotte con IPv6 (es SLAAC, Privacy Extension, ...), e anche funzionalità che saranno introdotte in futuro, daranno per scontato che le reti abbiano almeno questa dimensione.&lt;br /&gt;
&lt;br /&gt;
=== Ottenere connettività IPv6 ===&lt;br /&gt;
* si può richiedere nativamente al proprio ISP. Quando è stata scritta questa pagina, in Italia non erano molti gli operatori che fornivano connettività IPv6 nativa; adesso sono di più, perché gli IPv4 sono finiti, e non sarebbe altrimenti possibile fare business, ma alcuni operatori (specialmente quelli più grandi e noti), ancora non forniscono connettività IPv6 nativa;&lt;br /&gt;
* si possono fare dei tunnel che veicolano il traffico IPv6 all'interno dei pacchetti IPv4 (sprecando un po' di banda);&lt;br /&gt;
&lt;br /&gt;
Tunnel:&lt;br /&gt;
* pro:&lt;br /&gt;
** molti sono gratuiti;&lt;br /&gt;
* contro:&lt;br /&gt;
** spreco di banda per incapsulare i pacchetti (qualche decina di byte in più per ogni pacchetto, circa 20 ogni 1500);&lt;br /&gt;
** maggiore latenza;&lt;br /&gt;
** alcuni richiedono un indirizzo IPv4 statico; altri richiedono complicate configurazioni per l'uso con indirizzi dinamici;&lt;br /&gt;
** alcuni non funzionano dietro NAT (la quasi totalità delle reti domestiche);&lt;br /&gt;
&lt;br /&gt;
== Considerazioni e descrizione generale ==&lt;br /&gt;
&lt;br /&gt;
Come portare IPv6 al GOLEM?&lt;br /&gt;
&lt;br /&gt;
È stato realizzato un tunnel tra un intermediario e il nostro VPS. L'intermediario inoltra al VPS tutti i pacchetti destinati alla nostra rete.&lt;br /&gt;
La nostra rete viene scomposta in sottoreti: una rete di backbone, una per l'officina e una per ogni altro punto di accesso necessario, es. uno per ogni abitazione dei soci.&lt;br /&gt;
Il VPS conosce le rotte per raggiungere ogni singola sottorete e inoltra i pacchetti che riceve dall'intermediario verso il giusto router di ogni punto di accesso.&lt;br /&gt;
Il router del punto di accesso inoltra i pacchetti allo specifico host destinatario.&lt;br /&gt;
&lt;br /&gt;
Si procede analogamente a ritroso.&lt;br /&gt;
&lt;br /&gt;
In figura è mostrata la prima versione di visione ''logica'' della rete realizzata:&lt;br /&gt;
* '''HE''' (Hurricane Electric) è il provider fornitore IPv6;&lt;br /&gt;
* '''OVH''' è il nostro provider per il VPS;&lt;br /&gt;
* '''VPS''' è il nostro VPS;&lt;br /&gt;
* '''serverozzo''' è il gateway in [[Officina Informatica]];&lt;br /&gt;
&lt;br /&gt;
Per permettere il collegamento tra il VPS e un punto di accesso (anche noto in questa pagina come ''gateway dell'utente''), non essendo possibile stendere dei cavi fisici in giro per l'Europa, utilizzeremo la nostra VPN.&lt;br /&gt;
Esistono delle pagine dedicate per la documentazione sulla [[Rete del GOLEM]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tunnel-ipv6.jpeg|Il primo prototipo della rete del GOLEM, con la VPN e il tunnel IPv6.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Iniziare: rete /64 ==&lt;br /&gt;
Sono l'amministratore di rete e voglio attivare il tunnel IPv6 per la prima volta. Come iniziare?&lt;br /&gt;
&lt;br /&gt;
Ci si registra su [https://tunnelbroker.net/ TunnelBroker] e viene assegnata d'ufficio una rete IPv6 ''/64''.&lt;br /&gt;
&lt;br /&gt;
Il broker comunica i dettagli del suo PoP (''Point of Presence''):&lt;br /&gt;
 IPv4: 216.66.84.42&lt;br /&gt;
 IPv6: 2001:470:1f12:69::1&lt;br /&gt;
&lt;br /&gt;
L'IPv6 sarà utilizzato sul collegamento ''tunnel virtuale'', collegato all'interfaccia del VPS che chiameremo ''he6in4''. Dalla nostra parte, ''he6in4'' avrà come indirizzo &amp;lt;code&amp;gt;2001:470:1f12:69::2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Attiviamo il tunnel, aggiungendo questo al ''/etc/network/interfaces'':&lt;br /&gt;
&lt;br /&gt;
 auto he6in4&lt;br /&gt;
 iface he6in4 inet6 v4tunnel&lt;br /&gt;
 	address 2001:470:1f12:69::2/64&lt;br /&gt;
         endpoint 216.66.84.42&lt;br /&gt;
         local 152.228.140.73&lt;br /&gt;
         ttl 255&lt;br /&gt;
&lt;br /&gt;
Se si vuole utilizzare il tunnel come default gateway, aggiungere anche:&lt;br /&gt;
 	gateway 2001:470:1f12:69::1&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning&lt;br /&gt;
|text=È possibile utilizzare un solo default gateway su Linux, perciò assicurarsi di non confliggere con la configurazione IPv6 del vostro provider (se c'è)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
e verificare la connettività tra il VPS e il PoP del broker con:&lt;br /&gt;
 $ ip -6 addr&lt;br /&gt;
 $ ping 2001:470:1f12:69::1&lt;br /&gt;
e la connettività con l'Internet IPv6 con:&lt;br /&gt;
 $ ping 2a00:1450:4002:80a::200e&lt;br /&gt;
che, per completezza, è l'IPv6 di &amp;lt;code&amp;gt;ipv6.google.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nella maggior parte dei casi il server DNS IPv4 usato sin'ora ha anche il supporto per risolvere nomi IPv6.&lt;br /&gt;
&lt;br /&gt;
Probabilmente però '''non''' si vorrà utilizzare questa configurazione, bensì sfruttare la rete /48 come spiegato nel prossimo paragrafo.&lt;br /&gt;
&lt;br /&gt;
== Rete /48 ==&lt;br /&gt;
Siccome una rete IPv6 fisica (per esempio, una rete domestica) ha dimensione /64, ma il GOLEM, a sua volta, diventa provider per i soci, noi vogliamo tante reti, per l'officina e per i soci, richiediamo manualmente una ''/48''. Non ci piace essere spreconi, ma ci piace rispettare ''anche'' le RFC: a new era of Internet: [https://tools.ietf.org/html/rfc3177] [https://tools.ietf.org/html/rfc5375#section-3.1]&lt;br /&gt;
&lt;br /&gt;
Ci è stata assegnata la rete &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;, che significa:&lt;br /&gt;
* tutto il traffico di Internet IPv6 diretto a un indirizzo che cade in 2001:470:c844::/48 verrà instradato verso il nostro VPS;&lt;br /&gt;
* abbiamo a disposizione ben 2&amp;lt;sup&amp;gt;80&amp;lt;/sup&amp;gt; indirizzi per pianificare la nostra rete come più ci aggrada;&lt;br /&gt;
&lt;br /&gt;
Lo so, dopo anni bui di NAT dopo NAT e carenza di indirizzi, questa sembra fantascienza.&lt;br /&gt;
&lt;br /&gt;
=== Routing ===&lt;br /&gt;
Si può decidere di instradare tutto il traffico IPv6 tramite il tunnel broker, senza mai utilizzare l'IPv6 assegnato dal provider.&lt;br /&gt;
&lt;br /&gt;
Se però il server dispone già di un IPv6 assegnato dal provider, probabilmente si vuole e si può:&lt;br /&gt;
* utilizzare il suo IPv6 per navigare dal server, usando il gateway del provider&lt;br /&gt;
* utilizzare il gateway del tunnel broker solo per instradare i pacchetti della rete /48 che è stata assegnata&lt;br /&gt;
&lt;br /&gt;
Al GOLEM abbiamo fatto questa seconda scelta.&lt;br /&gt;
Perciò, '''non''' si deve aggiungere il gateway del tunnel broker come default gateway della configurazione in ''/etc/network/interfaces'', ma si deve aggiungere una regola di routing a mano per la sottorete del GOLEM, di fatto implementando ''source routing''.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Chiamasi ''source routing'' l'instradamento dei pacchetti fatto in base al loro indirizzo sorgente e non quello di destinazione, che è il modo standard&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
1. Modificare ''/etc/iproute2/rt_tables'' aggiungendo una nuova tabella di routing:&lt;br /&gt;
 200	golemsix&lt;br /&gt;
&lt;br /&gt;
2. Aggiungere il routing dei pacchetti provenienti dalla sottorete del GOLEM automaticamente al post-up dell'interfaccia del tunnel in ''/etc/network/interfaces'':&lt;br /&gt;
  	post-up ip -6 rule add from 2001:470:c844::/48 table golemsix &amp;amp;&amp;amp; ip -6 rule add to 2001:470:c844::/48 table main &amp;amp;&amp;amp; ip -6 route add default via 2001:470:1f12:69::1 dev he6in4 table golemsix &amp;amp;&amp;amp; ip -6 route flush cache&lt;br /&gt;
 	pre-down ip -6 route del default via 2001:470:1f12:69::1 dev he6in4 table golemsix &amp;amp;&amp;amp; ip -6 rule del to 2001:470:c844::/48 table main &amp;amp;&amp;amp; ip -6 rule del from 2001:470:c844::/48 table golemsix &amp;amp;&amp;amp; ip -6 route flush cache&lt;br /&gt;
&lt;br /&gt;
Spiegazione:&lt;br /&gt;
* I pacchetti provenienti dalla sottorete del GOLEM devono utilizzare la tabella di routing &amp;lt;code&amp;gt;golemsix&amp;lt;/code&amp;gt;:&lt;br /&gt;
 ip -6 rule add from 2001:470:c844::/48 table golemsix&lt;br /&gt;
&lt;br /&gt;
* I pacchetti destinati alla sottorete del GOLEM devono utilizzare la tabella di routing &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, così da poter essere instradati correttamente anche ai soci collegati con la VPN Wireguard. Si noti che, se inserita in quest'ordine, questa seconda regola ha priorità sulla precedente, ed è quello che vogliamo.&lt;br /&gt;
 ip -6 rule add to 2001:470:c844::/48 table main&lt;br /&gt;
&lt;br /&gt;
* Il default gateway per i pacchetti che utilizzano la tabella di routing &amp;lt;code&amp;gt;golemsix&amp;lt;/code&amp;gt; è l'endpoint del tunnel broker&lt;br /&gt;
 ip -6 route add default via 2001:470:1f12:69::1 dev he6in4 table golemsix&lt;br /&gt;
&lt;br /&gt;
* Aggiorna la cache del routing:&lt;br /&gt;
 ip -6 route flush cache&lt;br /&gt;
&lt;br /&gt;
Analogamente, vengono eseguite le operazioni inverse quando viene spenta l'interfaccia di rete.&lt;br /&gt;
&lt;br /&gt;
=== Piano di indirizzamento ===&lt;br /&gt;
Chiamarlo ''piano di indirizzamento'' è fargli un complimento immeritato; chiamiamola ''guida ragionata all'assegnazione dei nostri indirizzi''.&lt;br /&gt;
&lt;br /&gt;
Sia dato l'indirizzo IPv6:&lt;br /&gt;
&lt;br /&gt;
 127                   79     63                         0&lt;br /&gt;
     2001 : 0470 : c844 : rrrr : xxxx : xxxx : xxxx : xxxx&lt;br /&gt;
&lt;br /&gt;
Siccome abbiamo 80 bit a disposizione e la rete più piccola che possiamo fare secondo RFC è di 64 bit, possiamo fare ben 2&amp;lt;sup&amp;gt;16&amp;lt;/sup&amp;gt; reti (''rrrr'' nell'esempio).&lt;br /&gt;
Per semplicità (perché alla fine è a questo che servono tutti questi indirizzi in IPv6), poniamo ''rrrr'' = ''uugy'', dove:&lt;br /&gt;
* ''uu'' (8 bit) identifica l'''utente'';&lt;br /&gt;
* ''g'' (4 bit) identifica il gateway dell'utente (2&amp;lt;sup&amp;gt;4&amp;lt;/sup = 16 gateway per utente)&lt;br /&gt;
* ''y'' (4 bit) identifica la ''sottorete personale'' di quel gateway dell'utente (2&amp;lt;sup&amp;gt;4&amp;lt;/sup&amp;gt; = 16 sottoreti per gateway)&lt;br /&gt;
&lt;br /&gt;
Il VPS instrada direttamente tutta la sottorete /60 verso il gateway dell'utente, il quale può decidere di suddividerla come preferisce su quel gateway, da un unica grande rete /60, a 16 &amp;quot;piccole&amp;quot; reti /64.&lt;br /&gt;
&lt;br /&gt;
Sono così riservate:&lt;br /&gt;
 00gy indirizzi di servizio per l'infrastruttura (OpenVPN)&lt;br /&gt;
 01gy indirizzi di servizio per l'infrastruttura (Wireguard)&lt;br /&gt;
 02gy Officina (16 gateway × 16 reti)&lt;br /&gt;
 03gy Socio-A (16 gateway × 16 reti)&lt;br /&gt;
 04gy Socio-B (16 gateway × 16 reti)&lt;br /&gt;
 05gy ...&lt;br /&gt;
&lt;br /&gt;
Il ''numero di rete'' &amp;lt;code&amp;gt;rrrr&amp;lt;/code&amp;gt; sarà usato:&lt;br /&gt;
* per instradare tutto il traffico diretto a &amp;lt;code&amp;gt;2001:470:c844:rrg0::/60&amp;lt;/code&amp;gt; verso il gateway dell'utente;&lt;br /&gt;
* per assegnare l'indirizzo &amp;lt;code&amp;gt;2001:470:c844::rrg0/64&amp;lt;/code&amp;gt; al gateway dell'utente nella rete di servizio;&lt;br /&gt;
Si noti la &amp;quot;piccola&amp;quot; differenza.&lt;br /&gt;
&lt;br /&gt;
Per esempio, supponiamo di voler attivare ''serverozzo'', per il quale:&lt;br /&gt;
* ''uu = 02'' (''02'' è l'utente ''Officina'')&lt;br /&gt;
* ''g = 0'' (''0'' il primo &amp;amp;mdash; e al momento unico &amp;amp;mdash; gateway in Officina)&lt;br /&gt;
allora:&lt;br /&gt;
* serverozzo avrà indirizzo &amp;lt;code&amp;gt;2001:470:c844::200/64&amp;lt;/code&amp;gt; lato VPN;&lt;br /&gt;
* tutto il traffico per &amp;lt;code&amp;gt;2001:470:c844:200::/60&amp;lt;/code&amp;gt; verrà instradato verso serverozzo;&lt;br /&gt;
&lt;br /&gt;
E su serverozzo potranno essere create fino a 16 reti, per esempio:&lt;br /&gt;
* per la rete cablata Ethernet dell'Officina (&amp;lt;code&amp;gt;2001:470:c844:200::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;ethI&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per la rete wireless dell'Officina (&amp;lt;code&amp;gt;2001:470:c844:201::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;wlan0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per la rete cablata bus RS-485 (&amp;lt;code&amp;gt;2001:470:c844:202::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;ttyS0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per le macchine virtuali su KVM (&amp;lt;code&amp;gt;2001:470:c844:203::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;vir0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per le macchine virtuali su docker (&amp;lt;code&amp;gt;2001:470:c844:204::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* ...&lt;br /&gt;
'''Nota:''' questo è solo un esempio, la configurazione finale su serverozzo è ancora in fase di definizione.&lt;br /&gt;
&lt;br /&gt;
Nella prima rete di servizio (&amp;lt;code&amp;gt;2001:470:c844::/64&amp;lt;/code&amp;gt;) ci sono:&lt;br /&gt;
* il VPS&lt;br /&gt;
* tutti i gateway&lt;br /&gt;
** per esempio, serverozzo&lt;br /&gt;
** per esempio, i gateway dei soci&lt;br /&gt;
I gateway dei soci non sono diversi da serverozzo, e tuttavia la loro configurazione può essere più semplice se invece che da gateway fungono come semplici end-point.&lt;br /&gt;
&lt;br /&gt;
Così organizzate, le risorse si esauriranno in questo ordine:&lt;br /&gt;
* la banda a disposizione del VPS (500M/500M);&lt;br /&gt;
* la capacità computazionale e di memoria del VPS per l'inoltro dei pacchetti;&lt;br /&gt;
* gli IPv6 (gli IPv6 non finiranno mai)&lt;br /&gt;
&lt;br /&gt;
Non essendo una rete a maglie, ma semplicemente un albero, il routing è definito staticamente.&lt;br /&gt;
Se la rete si evolverà e le singole &amp;quot;isole&amp;quot; dovessero iniziare a connettersi a maglia in maniera incontrollata, potranno essere impiegati algoritmi dinamici, ma considerata la dimensione del bacino di utenti, non dovrebbe essere necessario.&lt;br /&gt;
&lt;br /&gt;
== Installazione del server ==&lt;br /&gt;
La VPN del GOLEM può essere utilizzata per la navigazione in IPv6.&lt;br /&gt;
La VPN è realizzata per mezzo di Wireguard.&lt;br /&gt;
&lt;br /&gt;
A differenza di altri protocolli, come OpenVPN, Wireguard ha un approccio &amp;quot;peer to peer&amp;quot;, per cui la procedura di configurazione del server rispecchia per buona parte quella di ciascun client.&lt;br /&gt;
&lt;br /&gt;
Innanzitutto è necessario generare la coppia di chiavi pubblica/privata del server:&lt;br /&gt;
&lt;br /&gt;
 # wg genkey | tee /etc/wireguard/server.privkey | wg pubkey &amp;gt; /etc/wireguard/vpn.golem.linux.it.pubkey&lt;br /&gt;
&lt;br /&gt;
Per la configurazione è sufficiente creare un singolo file, ad esempio &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # Carica la chiave privata dal percorso dove la abbiamo generata precedentemente&lt;br /&gt;
 PostUp = wg set %i private-key /etc/wireguard/vpn.golem.linux.it.privkey&lt;br /&gt;
 # Porta UDP di ascolto del server, a piacere&lt;br /&gt;
 ListenPort = 51820&lt;br /&gt;
 # Indirizzo del server all'interno della VPN&lt;br /&gt;
 Address = 2001:470:c844:100::1&lt;br /&gt;
&lt;br /&gt;
Il server può essere avviato tramite ''systemd'', e con lo stesso sistema si può impostare l'avvio automatico.&lt;br /&gt;
Si noti che &amp;lt;code&amp;gt;@wg0&amp;lt;/code&amp;gt; corrisponde al file di configurazione precedentemente creato.&lt;br /&gt;
&lt;br /&gt;
 # systemctl start wg-quick@wg0&lt;br /&gt;
 # systemctl enable wg-quick@wg0&lt;br /&gt;
&lt;br /&gt;
== Aggiunta di un nuovo client ==&lt;br /&gt;
=== Configurazione lato server ===&lt;br /&gt;
il sysop aggiunge un blocco peer per ciascun client alla configurazione &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;, così:&lt;br /&gt;
&lt;br /&gt;
 ... altri client ...&lt;br /&gt;
 &lt;br /&gt;
 # porceddu.net.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = tHeClIeNtFaNtAsTiCpUbLiCkEy=&lt;br /&gt;
 AllowedIPs = 2001:470:c844:100::200/128, 2001:470:c844:200::/62&lt;br /&gt;
 &lt;br /&gt;
 ... altri client ...&lt;br /&gt;
&lt;br /&gt;
Altro che OpenVPN.&lt;br /&gt;
&lt;br /&gt;
=== Configurazione lato client ===&lt;br /&gt;
1. Lato client, generare una coppia di chiavi pubblica/privata e inviare la chiave pubblica al sysop.&lt;br /&gt;
&lt;br /&gt;
 $ wg genkey | tee client.example.com.privkey | wg pubkey &amp;gt; client.example.com.pubkey&lt;br /&gt;
&lt;br /&gt;
Il sysop si occuperà di aggiungere la chiave pubblica tra quelle consentite al server, sceglierà un indirizzo IP in base al piano di indirizzamento, e ve lo comunicherà.&lt;br /&gt;
&lt;br /&gt;
2. Creare un file di configurazione come segue, in cui scrivere opportunamente la vostra chiave privata e l'indirizzo IP assegnato. Prestare particolare attenzione a modificare i campi della sezione &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt;, come indicato nelle note.&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # PrivateKey = YoUrGoRgEoUsAnDsEcUrEpRiVaTeKeY=               # vedi note, scegliere questo...&lt;br /&gt;
 # PostUp = wg set %i private-key ./client.example.com.privkey # vedi note,                 ...oppure questo&lt;br /&gt;
 Address = 2001:470:c844:100::'''200'''/64                           # vedi note&lt;br /&gt;
 &lt;br /&gt;
 # vpn.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = w63aGvoyPaUTgA8nW/NJS6Qqp2hUFvHRBbIH8Qb5ISY=   &lt;br /&gt;
 AllowedIPs = 2000::/3                                      &lt;br /&gt;
 Endpoint = vpn.golem.linux.it:51280&lt;br /&gt;
 PersistentKeepalive = 37&lt;br /&gt;
&lt;br /&gt;
'''Note'''&lt;br /&gt;
* &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''locale'')&lt;br /&gt;
** scegliere una delle seguenti opzioni per indicare la chiave privata del client, scommentando la riga apposita.&lt;br /&gt;
*** ''PrivateKey'': chiave privata del client, da custodire con cura, inline&lt;br /&gt;
*** ''PostUp = command'': chiave privata del client, da custodire con cura, e caricata automaticamente da un file esterno (es. creato col comando mostrato in precedenza)&lt;br /&gt;
** ''Address'': indirizzo IP comunicato dal sysop: riportarlo accuratamente, altrimenti non sarà possibile utilizzare la VPN&lt;br /&gt;
* &amp;lt;code&amp;gt;[Peer]&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''remoto'' / server)&lt;br /&gt;
** ''PublicKey'': chiave pubblica del server (sì, è proprio quella)&lt;br /&gt;
** ''AllowedIPs'': indirizzi raggiungibili tramite la VPN, a scelta:&lt;br /&gt;
*** &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;: solo la [[IPv6 @ GOLEM | rete IPv6 virtuale del GOLEM]]&lt;br /&gt;
*** &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;: tutti gli indirizzi IPv6 (è possibile utilizzare la VPN del GOLEM per [[IPv6 @ GOLEM | navigare ''davvero'' in IPv6]])&lt;br /&gt;
** ''Endpoint'': indirizzo del server&lt;br /&gt;
** ''PersistentKeepalive'': timer per mantenimento del tunnel attivo (in secondi); particolarmente utile se l'indirizzo IP del client cambia o è soggetto a NAT&lt;br /&gt;
&lt;br /&gt;
La connessione può essere attivata tramite systemd come sul server (spostandola in ''/etc/wireguard/''), oppure manualmente utilizzando &amp;lt;code&amp;gt;wg-quick&amp;lt;/code&amp;gt;:&lt;br /&gt;
* Attivazione del tunnel&lt;br /&gt;
 wg-quick up client.example.conf&lt;br /&gt;
* Disattivazione del tunnel&lt;br /&gt;
 wg-quick down client.example.conf&lt;br /&gt;
&lt;br /&gt;
3. Provare il collegamento&lt;br /&gt;
 # ping 2001:470:c844:100::1    # server VPN, dentro al tunnel (per verificare se il collegamento funziona)&lt;br /&gt;
 # ping 2001:470:c844:100::200  # gateway in Officina (per verificare se il collegamento funziona; talvolta non raggiungibile se abbiamo staccato la luce)&lt;br /&gt;
 # ping ipv6.google.com         # per verificare l'accessibilità dell'Internet pubblico IPv6, nel caso non si abbia già accesso&lt;br /&gt;
&lt;br /&gt;
4. Successo!&lt;br /&gt;
* Se il client della VPN è un nodo foglia della rete, cioè non funge da gateway perché si deve collegare solo lui (es. smartphone), allora c'è già connettività IPv6 e non serve fare altro. È comunque consigliato leggere la sezione relativa al [[#Firewall | firewall]] per ragioni di sicurezza ed eventualmente attivarlo.&lt;br /&gt;
* Se invece il client è il gateway della rete IPv6 (es. ''serverozzo'', o il router di casa di uno dei soci che vuole navigare in IPv6), allora bisogna proseguire a configurarlo come indicato anche nella [[#Client_VPN_come_gateway | sezione apposita]].&lt;br /&gt;
&lt;br /&gt;
== Client VPN come gateway ==&lt;br /&gt;
=== Impostare il client VPN come gateway IPv6 per l'isola ===&lt;br /&gt;
==== Impostare IPv6 rete locale ====&lt;br /&gt;
Configurare in modo permanente un indirizzo IPv6 statico sull'interfaccia di rete locale (es. ''eth0''), utilizzando gli strumenti della propria distribuzione.&lt;br /&gt;
L'indirizzo deve essere scelto all'interno della rete comunicata dal sysop, per esempio: &amp;lt;code&amp;gt;2001:470:c844:200::1/64&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Abilitare inoltro pacchetti IPv6 ====&lt;br /&gt;
Nel file ''/etc/sysctl.conf'':&lt;br /&gt;
 net.ipv6.conf.all.forwarding=1&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' la modifica non ha effetto immediato, ma è necessario un &amp;lt;code&amp;gt;sysctl --system&amp;lt;/code&amp;gt; o un riavvio.&lt;br /&gt;
&lt;br /&gt;
==== Installare e configurare radvd ====&lt;br /&gt;
''radvd'' è il demone di ''router advertisement''.&lt;br /&gt;
Per la configurazione automatica degli indirizzi e del gateway in IPv6 non è necessario un ''complesso'' server DHCP, ma vista la vastità dello spazio di indirizzamento (anche la rete più piccola ha ben 2&amp;lt;sup&amp;gt;64&amp;lt;/sup&amp;gt; indirizzi disponibili) basta il più semplice ''radvd''.&lt;br /&gt;
Un router con ''radvd'', a intervalli regolari, trasmette un messaggio in broadcast a tutti gli host della rete, informandoli sul prefisso di rete da utilizzare; a questo punto gli host possono autoconfigurarsi col metodo che preferiscono (es. [https://tools.ietf.org/search/rfc4862 SLAAC] con o senza [https://tools.ietf.org/html/rfc4941.html estensione per la privacy]).&lt;br /&gt;
&lt;br /&gt;
Installare ''radvd'':&lt;br /&gt;
 # apt install radvd&lt;br /&gt;
&lt;br /&gt;
Configurare il file ''/etc/radvd.conf'':&lt;br /&gt;
 interface ethI {&lt;br /&gt;
         AdvSendAdvert on;&lt;br /&gt;
         MinRtrAdvInterval 2;&lt;br /&gt;
         MaxRtrAdvInterval 10;&lt;br /&gt;
         prefix 2001:470:c844:200::/64 {&lt;br /&gt;
                 AdvOnLink on;&lt;br /&gt;
                 AdvAutonomous on;&lt;br /&gt;
                 AdvRouterAddr on;&lt;br /&gt;
         };&lt;br /&gt;
         RDNSS 2606:4700:4700::1111 {&lt;br /&gt;
                 AdvRDNSSLifetime 3600;&lt;br /&gt;
         };&lt;br /&gt;
 };&lt;br /&gt;
dove&lt;br /&gt;
* &amp;lt;code&amp;gt;interface ethI&amp;lt;/code&amp;gt; indica l'interfaccia interna su cui fare ''advertise'';&lt;br /&gt;
* &amp;lt;code&amp;gt;prefix 2001:470:c844:200::/64&amp;lt;/code&amp;gt; indica la rete a valle; ('''Attenzione''': inserire quella comunicata dal sysop)&lt;br /&gt;
* &amp;lt;code&amp;gt;RDNSS 2606:4700:4700::1111&amp;lt;/code&amp;gt; indica il server DNS (nell'esempio specifico, CloudFlare);&lt;br /&gt;
** ''Nota:'' in seguito a questioni legali, OpenDNS non è al momento disponibile in Francia.&lt;br /&gt;
&lt;br /&gt;
Una volta abilitato ''radvd'' sull'interfaccia di rete desiderata, gli host inizieranno ad assegnarsi automaticamente un indirizzo tramite SLAAC, e potranno navigare in IPv6.&lt;br /&gt;
&lt;br /&gt;
==== Verificare il collegamento ====&lt;br /&gt;
Questo paragrafo contiene alcuni suggerimenti per la risoluzione dei problemi.&lt;br /&gt;
&lt;br /&gt;
# Collegare un client ignaro alla rete gestita dal nuovo gateway IPv6 (es. un computer terzo, tramite uno switch)&lt;br /&gt;
# Verificare che si auto-assegni un indirizzo IPv6 nella rete di cui viene fatto advertising dal router con &amp;lt;code&amp;gt;ip addr&amp;lt;/code&amp;gt;. Se non succede:&lt;br /&gt;
## verificare la configurazione di ''radvd'' sul gateway&lt;br /&gt;
## verificare che il computer riceva correttamente i pacchetti di router advertise (es. con wireshark)&lt;br /&gt;
## verificare che l'IPv6 sia abilitato sul sistema operativo e sull'interfaccia di rete (molto probabilmente è già abilitato)&lt;br /&gt;
# Pingare il gateway tramite il suo indirizzo IPv6. Se non funziona:&lt;br /&gt;
## controllare che il firewall del gateway o del computer non stia bloccando ICMPv6 (improbabile)&lt;br /&gt;
# Pingare un IPv6 appartenente alla rete del GOLEM (vedere la sezione sul client &amp;quot;foglia&amp;quot;) o all'Internet IPv6 pubblico. Se non funziona:&lt;br /&gt;
## verificare che il gateway inoltri correttamente i pacchetti dalla vostra isola locale alla VPN&lt;br /&gt;
## utilizzare &amp;lt;code&amp;gt;traceroute&amp;lt;/code&amp;gt; per determinare in quale punto dell'instradamento si bloccano i pacchetti&lt;br /&gt;
&lt;br /&gt;
Se tutto funziona, evviva: il livello di rete è configurato correttamente! (Ma attenzione all'MTU)&lt;br /&gt;
&lt;br /&gt;
==== Una nota sull'MTU del collegamento ====&lt;br /&gt;
Con la configurazione appena descritta, gli host crederanno di utilizzare una rete nativa dual-stack (o IPv6-only, nel caso non fosse previsto IPv4).&lt;br /&gt;
In realtà, però, i pacchetti IPv6 non sono &amp;quot;nativi&amp;quot;, bensì, una volta giunti al gateway, vengono poi incapsulati in maniera completamente trasparente.&lt;br /&gt;
&lt;br /&gt;
Ciò significa che gli host crederanno di poter generare pacchetti IPv6 della dimensione massima ammessa dal link a cui sono collegati (es. Ethernet, WiFi), che in genere è di 1500 bytes.&lt;br /&gt;
Però, pacchetti così grandi non possono essere incapsulati, in quanto anche il link che il gateway utilizza per la VPN, in genere, consente pacchetti di dimensione massima di 1500 bytes: non rimane spazio per l'incapsulamento.&lt;br /&gt;
&lt;br /&gt;
Questo può creare problemi, talvolta sporadici, non facilmente ripetibili, o ancora, dipendenti dal sito a cui si sta tentando di collegarsi, specialmente se si usa TCP.&lt;br /&gt;
Un sintomo molto comune è che, navigando sul web, si può rilevare che alcuni siti - ma solo alcuni, perfettamente funzionanti sia da IPv4 che da altre connessioni IPv6, vanno in timeout quando si prova ad accedervi.&lt;br /&gt;
&lt;br /&gt;
Questo succede perché TCP tenta di massimizzare la quantità di informazione contenuta all'interno di un pacchetto IP, generando pacchetti molto grandi, e talvolta raggiungendo il limite oltre il quale il pacchetto non può più essere incapsulato dal gateway.&lt;br /&gt;
&lt;br /&gt;
{{Template:Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Per verificare che il problema sia questo, provare a forzare una MTU artificialmente più bassa sulla scheda di rete, tramite il comando &amp;lt;code&amp;gt;ip link set enp1s0 mtu 1400&amp;lt;/code&amp;gt;, e poi verificare se il problema scompare.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Perciò, sarà necessario fare in modo che il gateway modifichi i pacchetti di handshake del TCP in maniera tale che non venga mai negoziata una ''Max Segment Size'' troppo alta per il link.&lt;br /&gt;
&lt;br /&gt;
===== Modificare la Max Segment Size =====&lt;br /&gt;
&lt;br /&gt;
{{Template:Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Abbassare la MSS elimina il problema, ma al contempo aumenta l'overhead, rendendo la connessione leggermente più lenta. È consigliabile trovare il giusto compromesso che soddisfi sia le esigenze di funzionamento che le esigenze in termini di prestazioni. Per farlo, ci si può aiutare con &amp;lt;code&amp;gt;tracepath&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* con un gateway Linux:&lt;br /&gt;
** TODO: è davvero necessario? Lo fa da solo?&lt;br /&gt;
* con un gateway Mikrotik:&lt;br /&gt;
 /ipv6/firewall/mangle/add out-interface=wg0 protocol=tcp tcp-flags=syn action=change-mss new-mss=1300 chain=forward tcp-mss=1301-65535&lt;br /&gt;
&lt;br /&gt;
== Firewall ==&lt;br /&gt;
=== Per il VPS ===&lt;br /&gt;
Inoltrare solo i pacchetti da/per le reti note.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text=Non ancora testato!&lt;br /&gt;
}}&lt;br /&gt;
 # ip6tables -A FORWARD -d 2001:470:c844::/48 -i he6in4 -j ACCEPT&lt;br /&gt;
 # ip6tables -A FORWARD -s 2001:470:c844::/48 -o he6in4 -j ACCEPT&lt;br /&gt;
 # ip6tables -P FORWARD DROP&lt;br /&gt;
&lt;br /&gt;
=== Per i client ===&lt;br /&gt;
Gli indirizzi IPv6 sono &amp;quot;tutti&amp;quot; pubblici. Gli indirizzi IPv6 forniti dal GOLEM sono pubblicamente instradabili. In più, il GOLEM non mette in atto '''nessuna''' misura atta a prevenire connessioni dirette verso gli host della VPN (al netto di configurazioni specifiche sulle macchine direttamente di proprietà del GOLEM).&lt;br /&gt;
Ciò significa che '''tutti''' gli host degli utenti/soci, compresi quelli domestici che sin'ora sono stati dietro a un (s)comodo NAT, possono essere acceduti attraverso la rete Internet globale, quando sono connessi alla VPN del GOLEM.&lt;br /&gt;
&lt;br /&gt;
Pertanto, è consigliato attivare degli strumenti atti a prevenire accessi indesiderati dall'esterno, come un firewall, in special modo se il proprio computer &amp;quot;fornisce servizi&amp;quot; (eg. condivisione di file via rete, server web di sviluppo, ...)&lt;br /&gt;
&lt;br /&gt;
==== Direttamente sull'host ====&lt;br /&gt;
Si può agire direttamente sugli host da proteggere (versione conservativa):&lt;br /&gt;
 # ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # ip6tables -A INPUT -p icmpv6 -j ACCEPT&lt;br /&gt;
 # ip6tables -P INPUT DROP&lt;br /&gt;
&lt;br /&gt;
In generale con Linux questa operazione non è comunque necessaria, perché tanto non vi sono servizi esposti a meno che non siano stati installati esplicitamente.&lt;br /&gt;
Si noti che ICMPv6 deve comunque sempre essere abilitato in quanto necessario al funzionamento di IPv6.&lt;br /&gt;
&lt;br /&gt;
Si può anche utilizzare una regola più rilassata (es. per sfruttare la VPN del GOLEM come VPN &amp;quot;personale&amp;quot; tra i propri host), tipo:&lt;br /&gt;
 # ip6tables -A INPUT -s 2001:470:c844:uu00::/56 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
Queste regole possono essere salvate in uno script, ad esempio &amp;lt;code&amp;gt;/etc/wireguard/wg0-postup.sh&amp;lt;/code&amp;gt;, ed invocate automaticamente all'atto della connessione alla VPN tramite la direttiva `PostUp` nel file di configurazione di WireGuard.&lt;br /&gt;
Sarà poi necessario aggiungere un equivalente PostDown che rimuova le regole all'atto della disconnessione.&lt;br /&gt;
&lt;br /&gt;
Ad esempio:&lt;br /&gt;
&lt;br /&gt;
 # /etc/wireguard/wg0.conf&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # ...                  &lt;br /&gt;
 # -----8&amp;lt;------&lt;br /&gt;
 # Possono coesistere anche più direttive PostUp/PostDown, aggiungere in coda:&lt;br /&gt;
 PostUp = /etc/wireguard/wg0-postup.sh&lt;br /&gt;
 PostDown = /etc/wireguard/wg0-postdown.sh&lt;br /&gt;
 # -----8&amp;lt;------&lt;br /&gt;
&lt;br /&gt;
 # /etc/wireguard/wg0-postup.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ip6tables -A INPUT -i wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 ip6tables -A INPUT -i wg0 -p icmpv6 -j ACCEPT&lt;br /&gt;
 ip6tables -P INPUT DROP&lt;br /&gt;
&lt;br /&gt;
 # /etc/wireguard/wg0-postdown.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ip6tables -D INPUT -i wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 ip6tables -D INPUT -i wg0 -p icmpv6 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=I pacchetti della VPN viaggiano crittografati sulla rete pubblica (almeno finché si trovano all'interno della VPN del GOLEM), ma sul server vengono decifrati e cifrati di nuovo per permetterne il routing!&lt;br /&gt;
In caso di compromissione del VPS del GOLEM, pertanto, i pacchetti non possono essere considerati al sicuro da sguardi indiscreti. È sempre buona norma utilizzare crittografia end-to-end, anche all'interno di una VPN.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Dal gateway ====&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text='''Nota bene''': salvare queste impostazioni, per esempio con &amp;lt;code&amp;gt;ip6tables-save&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;ip6tables-restore&amp;lt;/code&amp;gt;, altrimenti verranno perse al riavvio.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Invece di configurare il firewall su ogni host singolarmente, si può configurare il gateway una volta sola per proteggere tutta la rete a valle:&lt;br /&gt;
 # ip6tables -A FORWARD -s 2001:470:c844:rrrr::/64 -j ACCEPT&lt;br /&gt;
 # ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # ip6tables -P FORWARD DROP&lt;br /&gt;
&lt;br /&gt;
Nell'ordine:&lt;br /&gt;
* blocca l'inoltro di tutti i pacchetti&lt;br /&gt;
* abilita l'inoltro dei pacchetti in uscita dalla rete&lt;br /&gt;
* abilita l'inoltro dei pacchetti correlati a connessioni già stabilite&lt;br /&gt;
&lt;br /&gt;
Questo impedisce l'accesso indesiderato a tutti gli host della rete, compresi gli host con Windows che possono starsene &amp;quot;sicuri&amp;quot; anche senza il firewall, pur esponendo servizi (NetBIOS, Samba).&lt;br /&gt;
&lt;br /&gt;
===== Eccezioni =====&lt;br /&gt;
Se si desidera comunque rendere accessibile un proprio server in particolare, è possibile istruire il gateway con un'eccezione, aggiungendo:&lt;br /&gt;
 # ip6tables -A FORWARD -d 2001:470:c844:rrrr::host -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
Questo è qualcosa che &amp;quot;assomiglia&amp;quot; vagamente al vecchio ''port forwarding''.&lt;br /&gt;
&lt;br /&gt;
=== Torrent ===&lt;br /&gt;
La banda è limitata, e non è consentito traffico di materiale illegale. Occore limitare il traffico ''bit-torrent'' almeno al gateway finale (VPS).&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text=TODO: Questa sezione è da fare!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Risoluzione problemi =&lt;br /&gt;
== Geolocalizzazione ==&lt;br /&gt;
Il tunnel è localizzato in Francia.&lt;br /&gt;
A causa di restrizioni imposte a causa del diritto d'autore, alcuni siti, specialmente di streaming video, come Netflix, Rai.tv o Youtube, potrebbero bloccare l'accesso ai contenuti italiani dal tunnel francese.&lt;br /&gt;
Per inibire temporaneamente l'uso del tunnel IPv6 su un host:&lt;br /&gt;
 # sysctl -w net.ipv6.conf.all.disable_ipv6=1&lt;br /&gt;
&lt;br /&gt;
= Extra =&lt;br /&gt;
* [https://github.com/pmarks-net/ipvfoo IpvFoo]: un'estensione per il browser per mostrare nella barra degli indirizzi se il sito a cui si è connessi utilizza IPv4, IPv6 o un misto&lt;br /&gt;
* [https://loopsofzen.uk/ Loops of Zen]: sito dimostrativo accessibile solo in IPv6, con un piccolo gioco rompicapo&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Howto]]&lt;br /&gt;
[[Categoria:Officina]]&lt;br /&gt;
[[Category:Sysop]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=IPv6_@_GOLEM&amp;diff=9649</id>
		<title>IPv6 @ GOLEM</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=IPv6_@_GOLEM&amp;diff=9649"/>
		<updated>2025-02-28T11:56:30Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Aggiunti alcuni collegamenti extra&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Due parole su questa pagina ==&lt;br /&gt;
Questa pagina è un maldestro tentativo:&lt;br /&gt;
* per riassumere le ragioni che ci hanno portato a decidere di dotarci di IPv6;&lt;br /&gt;
* per documentare la nostra infrastruttura di rete;&lt;br /&gt;
&lt;br /&gt;
=== A chi si rivolge questa pagina ===&lt;br /&gt;
* se sei l''''amministratore di rete''', buona lettura :-)&lt;br /&gt;
* se sei un '''socio''', vedi come [[#Configurazione_lato_client | configurare il tuo client]]; è sufficiente leggere solo questo paragrafo.&lt;br /&gt;
&lt;br /&gt;
== Due parole sull'IPv6 ==&lt;br /&gt;
[https://it.wikipedia.org/wiki/IPv6 IPv6] è un &amp;quot;nuovo&amp;quot; protocollo a livello di rete che da diversi anni sta sostituendo IPv4.&lt;br /&gt;
Le novità introdotte da IPv6 sono molteplici; tra queste, quella che balza immediatamente all'occhio è l'enorme dimensione dello spazio di indirizzamento.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Protocollo'''&lt;br /&gt;
| '''lunghezza indirizzo'''&lt;br /&gt;
| '''numero indirizzi'''&lt;br /&gt;
|-&lt;br /&gt;
| IPv4&lt;br /&gt;
| 32 bit&lt;br /&gt;
| 2&amp;lt;sup&amp;gt;32&amp;lt;/sup&amp;gt; = 4 miliardi&lt;br /&gt;
|-&lt;br /&gt;
| IPv6&lt;br /&gt;
| 128 bit&lt;br /&gt;
| 2&amp;lt;sup&amp;gt;128&amp;lt;/sup&amp;gt; = 256 miliardi di miliardi di miliardi di miliardi&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Su questo pianeta vi sono circa 8 miliardi di persone [https://it.wikipedia.org/wiki/Popolazione_mondiale], di cui la metà [http://www.lastampa.it/2018/01/31/tecnologia/gli-utenti-di-internet-sono-pi-di-quattro-miliardi-nel-mondo-milioni-in-italia-wMxQskzXeabwa3wgWI2jUO/pagina.html] è connessa a Internet, e nei paesi sviluppati hanno anche più di un dispositivo connesso. Si aggiungano i numerosissimi apparati di rete e server necessari per il funzionamento dell'infrastruttura e la fornitura di servizi, e si può facilmente intuire che IPv4 non è più sufficiente per le attuali necessità.&lt;br /&gt;
&lt;br /&gt;
Mentre questa pagina veniva scritta, gli IPv4 stavano finendo [https://en.wikipedia.org/wiki/IPv4_address_exhaustion].&lt;br /&gt;
Nel novembre 2019, il RIPE (il registro europeo) ha terminato l'assegnazione degli ultimi indirizzi IPv4 assegnati all'Europa, [https://www.ripe.net/publications/ipv6-info-centre/about-ipv6/ipv4-exhaustion/ipv4-available-pool] e adesso vengono solo riutilizzati quelli vecchi, che significa che:&lt;br /&gt;
* non ci sono più indirizzi &amp;quot;nuovi&amp;quot; e dunque non è più possibile richiederli con facilità;&lt;br /&gt;
* se si vogliono degli indirizzi IPv4, si viene messi in lista d'attesa, finché il precedente proprietario fallisce e rilascia i propri.&lt;br /&gt;
&lt;br /&gt;
=== IPv4 vs IPv6 ===&lt;br /&gt;
==== Notazione ====&lt;br /&gt;
* IPv4 &amp;amp;rarr; 4 byte rappresentati con numeri decimali separati da un punto, es: &amp;lt;code&amp;gt;192.0.2.127&amp;lt;/code&amp;gt;&lt;br /&gt;
* IPv6 &amp;amp;rarr; 16 byte, ogni byte è rappresentato da due cifre esadecimali; ogni 4 cifre esadecimali si inseriscono i ''due punti'' &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;; come in IPv4 è possibile omettere gli zeri in testa; la più lunga sequenza di zeri allineata a 4 può essere omessa per intero; esempi (indirizzi equivalenti):&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:0470:c844:0020:0000:0000:0000:0001&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:470:c844:20:0:0:0:1&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:470:c844:20::1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipi di indirizzi ====&lt;br /&gt;
* IPv6 Reference Card by RIPE [https://www.ripe.net/manage-ips-and-asns/ipv6/ipv6-address-types/ipv6_reference_card_July2015.pdf]&lt;br /&gt;
&lt;br /&gt;
Riassunto:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''IPv6'''&lt;br /&gt;
| '''Equivalente IPv4'''&lt;br /&gt;
| '''Significato'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;::1/128&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo loopback&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fc00::/7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;192.168.0.0/16&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;10.0.0.0/8&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;172.16.0.0/12&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo privato&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fe80::/10&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;169.254.0.0/16&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo link-local (univoco nella rete locale, e autoassegnato)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2001:db8::/32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;192.0.2.0/24&amp;lt;/code&amp;gt;&lt;br /&gt;
| Esempi e documentazione&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| Indirizzi unicast globalmente raggiungibili&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Indirizzi pubblici vs privati ====&lt;br /&gt;
Gli IPv6 sono così tanti che non c'è bisogno di utilizzare indirizzi privati: niente NAT, niente port-forwarding. Questo restituisce connettività end-to-end ai dispositivi e apre numerose nuove possibilità di impiego, rimaste nascoste per anni a causa della scarsità di IPv4 e degli osceni espedienti inventati. Una banalità: non sarà più necessario passare attraverso un server terzo per condividere documenti, chattare o telefonare ai propri contatti.&lt;br /&gt;
&lt;br /&gt;
Se necessarie, le caratteristiche di &amp;quot;sicurezza&amp;quot; introdotte dal NAT possono essere sostituite e accorpate a un banale firewall.&lt;br /&gt;
&lt;br /&gt;
==== Progettazione di una rete ====&lt;br /&gt;
Nel progettare una rete con IPv4, la necessità principale è quella di risparmiare sugli indirizzi, perciò vengono usati prefissi di rete di varia lunghezza.&lt;br /&gt;
Nel progettare una rete con IPv6, si hanno a disposizione così tanti indirizzi che conviene utilizzarli in maniera da renderne più agevole una distribuzione logica.&lt;br /&gt;
&lt;br /&gt;
Sono così identificate le seguenti dimensioni standard per le reti IPv6 (nulla vieta di usare dimensioni personalizzate):&lt;br /&gt;
* '''/126''': contiene 2 soli host, utilizzata per i collegamenti punto-punto nell'infrastruttura di rete;&lt;br /&gt;
* '''/64''': è la più piccola rete che dovrebbe essere fatta; dimensione utilizzata nelle LAN; lo spazio di indirizzamento è esageratamente sovradimensionato ed è sufficiente per qualunque LAN immaginabile (è 4 miliardi di volte più grande di tutta la rete Internet IPv4); viene usata in ambito domestico;&lt;br /&gt;
* '''/56''': contiene 256 reti di dimensione /64, viene usata in ambito domestico o per piccole imprese;&lt;br /&gt;
* '''/48''': contiene 65536 reti di dimensione /64, viene usata in ambito aziendale;&lt;br /&gt;
&lt;br /&gt;
Le LAN non devono avere un prefisso più lungo di /64, perché molte nuove funzionalità introdotte con IPv6 (es SLAAC, Privacy Extension, ...), e anche funzionalità che saranno introdotte in futuro, daranno per scontato che le reti abbiano almeno questa dimensione.&lt;br /&gt;
&lt;br /&gt;
=== Ottenere connettività IPv6 ===&lt;br /&gt;
* si può richiedere nativamente al proprio ISP. Quando è stata scritta questa pagina, in Italia non erano molti gli operatori che fornivano connettività IPv6 nativa; adesso sono di più, perché gli IPv4 sono finiti, e non sarebbe altrimenti possibile fare business, ma alcuni operatori (specialmente quelli più grandi e noti), ancora non forniscono connettività IPv6 nativa;&lt;br /&gt;
* si possono fare dei tunnel che veicolano il traffico IPv6 all'interno dei pacchetti IPv4 (sprecando un po' di banda);&lt;br /&gt;
&lt;br /&gt;
Tunnel:&lt;br /&gt;
* pro:&lt;br /&gt;
** molti sono gratuiti;&lt;br /&gt;
* contro:&lt;br /&gt;
** spreco di banda per incapsulare i pacchetti (qualche decina di byte in più per ogni pacchetto, circa 20 ogni 1500);&lt;br /&gt;
** maggiore latenza;&lt;br /&gt;
** alcuni richiedono un indirizzo IPv4 statico; altri richiedono complicate configurazioni per l'uso con indirizzi dinamici;&lt;br /&gt;
** alcuni non funzionano dietro NAT (la quasi totalità delle reti domestiche);&lt;br /&gt;
&lt;br /&gt;
== Considerazioni e descrizione generale ==&lt;br /&gt;
&lt;br /&gt;
Come portare IPv6 al GOLEM?&lt;br /&gt;
&lt;br /&gt;
È stato realizzato un tunnel tra un intermediario e il nostro VPS. L'intermediario inoltra al VPS tutti i pacchetti destinati alla nostra rete.&lt;br /&gt;
La nostra rete viene scomposta in sottoreti: una rete di backbone, una per l'officina e una per ogni altro punto di accesso necessario, es. uno per ogni abitazione dei soci.&lt;br /&gt;
Il VPS conosce le rotte per raggiungere ogni singola sottorete e inoltra i pacchetti che riceve dall'intermediario verso il giusto router di ogni punto di accesso.&lt;br /&gt;
Il router del punto di accesso inoltra i pacchetti allo specifico host destinatario.&lt;br /&gt;
&lt;br /&gt;
Si procede analogamente a ritroso.&lt;br /&gt;
&lt;br /&gt;
In figura è mostrata la prima versione di visione ''logica'' della rete realizzata:&lt;br /&gt;
* '''HE''' (Hurricane Electric) è il provider fornitore IPv6;&lt;br /&gt;
* '''OVH''' è il nostro provider per il VPS;&lt;br /&gt;
* '''VPS''' è il nostro VPS;&lt;br /&gt;
* '''serverozzo''' è il gateway in [[Officina Informatica]];&lt;br /&gt;
&lt;br /&gt;
Per permettere il collegamento tra il VPS e un punto di accesso (anche noto in questa pagina come ''gateway dell'utente''), non essendo possibile stendere dei cavi fisici in giro per l'Europa, utilizzeremo la nostra VPN.&lt;br /&gt;
Esistono delle pagine dedicate per la documentazione sulla [[Rete del GOLEM]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tunnel-ipv6.jpeg|Il primo prototipo della rete del GOLEM, con la VPN e il tunnel IPv6.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Iniziare: rete /64 ==&lt;br /&gt;
Sono l'amministratore di rete e voglio attivare il tunnel IPv6 per la prima volta. Come iniziare?&lt;br /&gt;
&lt;br /&gt;
Ci si registra su [https://tunnelbroker.net/ TunnelBroker] e viene assegnata d'ufficio una rete IPv6 ''/64''.&lt;br /&gt;
&lt;br /&gt;
Il broker comunica i dettagli del suo PoP (''Point of Presence''):&lt;br /&gt;
 IPv4: 216.66.84.42&lt;br /&gt;
 IPv6: 2001:470:1f12:69::1&lt;br /&gt;
&lt;br /&gt;
L'IPv6 sarà utilizzato sul collegamento ''tunnel virtuale'', collegato all'interfaccia del VPS che chiameremo ''he6in4''. Dalla nostra parte, ''he6in4'' avrà come indirizzo &amp;lt;code&amp;gt;2001:470:1f12:69::2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Attiviamo il tunnel, aggiungendo questo al ''/etc/network/interfaces'':&lt;br /&gt;
&lt;br /&gt;
 auto he6in4&lt;br /&gt;
 iface he6in4 inet6 v4tunnel&lt;br /&gt;
 	address 2001:470:1f12:69::2/64&lt;br /&gt;
         endpoint 216.66.84.42&lt;br /&gt;
         local 152.228.140.73&lt;br /&gt;
         ttl 255&lt;br /&gt;
&lt;br /&gt;
Se si vuole utilizzare il tunnel come default gateway, aggiungere anche:&lt;br /&gt;
 	gateway 2001:470:1f12:69::1&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning&lt;br /&gt;
|text=È possibile utilizzare un solo default gateway su Linux, perciò assicurarsi di non confliggere con la configurazione IPv6 del vostro provider (se c'è)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
e verificare la connettività tra il VPS e il PoP del broker con:&lt;br /&gt;
 $ ip -6 addr&lt;br /&gt;
 $ ping 2001:470:1f12:69::1&lt;br /&gt;
e la connettività con l'Internet IPv6 con:&lt;br /&gt;
 $ ping 2a00:1450:4002:80a::200e&lt;br /&gt;
che, per completezza, è l'IPv6 di &amp;lt;code&amp;gt;ipv6.google.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nella maggior parte dei casi il server DNS IPv4 usato sin'ora ha anche il supporto per risolvere nomi IPv6.&lt;br /&gt;
&lt;br /&gt;
Probabilmente però '''non''' si vorrà utilizzare questa configurazione, bensì sfruttare la rete /48 come spiegato nel prossimo paragrafo.&lt;br /&gt;
&lt;br /&gt;
== Rete /48 ==&lt;br /&gt;
Siccome una rete IPv6 fisica (per esempio, una rete domestica) ha dimensione /64, ma il GOLEM, a sua volta, diventa provider per i soci, noi vogliamo tante reti, per l'officina e per i soci, richiediamo manualmente una ''/48''. Non ci piace essere spreconi, ma ci piace rispettare ''anche'' le RFC: a new era of Internet: [https://tools.ietf.org/html/rfc3177] [https://tools.ietf.org/html/rfc5375#section-3.1]&lt;br /&gt;
&lt;br /&gt;
Ci è stata assegnata la rete &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;, che significa:&lt;br /&gt;
* tutto il traffico di Internet IPv6 diretto a un indirizzo che cade in 2001:470:c844::/48 verrà instradato verso il nostro VPS;&lt;br /&gt;
* abbiamo a disposizione ben 2&amp;lt;sup&amp;gt;80&amp;lt;/sup&amp;gt; indirizzi per pianificare la nostra rete come più ci aggrada;&lt;br /&gt;
&lt;br /&gt;
Lo so, dopo anni bui di NAT dopo NAT e carenza di indirizzi, questa sembra fantascienza.&lt;br /&gt;
&lt;br /&gt;
=== Routing ===&lt;br /&gt;
Si può decidere di instradare tutto il traffico IPv6 tramite il tunnel broker, senza mai utilizzare l'IPv6 assegnato dal provider.&lt;br /&gt;
&lt;br /&gt;
Se però il server dispone già di un IPv6 assegnato dal provider, probabilmente si vuole e si può:&lt;br /&gt;
* utilizzare il suo IPv6 per navigare dal server, usando il gateway del provider&lt;br /&gt;
* utilizzare il gateway del tunnel broker solo per instradare i pacchetti della rete /48 che è stata assegnata&lt;br /&gt;
&lt;br /&gt;
Al GOLEM abbiamo fatto questa seconda scelta.&lt;br /&gt;
Perciò, '''non''' si deve aggiungere il gateway del tunnel broker come default gateway della configurazione in ''/etc/network/interfaces'', ma si deve aggiungere una regola di routing a mano per la sottorete del GOLEM, di fatto implementando ''source routing''.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Chiamasi ''source routing'' l'instradamento dei pacchetti fatto in base al loro indirizzo sorgente e non quello di destinazione, che è il modo standard&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
1. Modificare ''/etc/iproute2/rt_tables'' aggiungendo una nuova tabella di routing:&lt;br /&gt;
 200	golemsix&lt;br /&gt;
&lt;br /&gt;
2. Aggiungere il routing dei pacchetti provenienti dalla sottorete del GOLEM automaticamente al post-up dell'interfaccia del tunnel in ''/etc/network/interfaces'':&lt;br /&gt;
  	post-up ip -6 rule add from 2001:470:c844::/48 table golemsix &amp;amp;&amp;amp; ip -6 rule add to 2001:470:c844::/48 table main &amp;amp;&amp;amp; ip -6 route add default via 2001:470:1f12:69::1 dev he6in4 table golemsix &amp;amp;&amp;amp; ip -6 route flush cache&lt;br /&gt;
 	pre-down ip -6 route del default via 2001:470:1f12:69::1 dev he6in4 table golemsix &amp;amp;&amp;amp; ip -6 rule del to 2001:470:c844::/48 table main &amp;amp;&amp;amp; ip -6 rule del from 2001:470:c844::/48 table golemsix &amp;amp;&amp;amp; ip -6 route flush cache&lt;br /&gt;
&lt;br /&gt;
Spiegazione:&lt;br /&gt;
* I pacchetti provenienti dalla sottorete del GOLEM devono utilizzare la tabella di routing &amp;lt;code&amp;gt;golemsix&amp;lt;/code&amp;gt;:&lt;br /&gt;
 ip -6 rule add from 2001:470:c844::/48 table golemsix&lt;br /&gt;
&lt;br /&gt;
* I pacchetti destinati alla sottorete del GOLEM devono utilizzare la tabella di routing &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, così da poter essere instradati correttamente anche ai soci collegati con la VPN Wireguard. Si noti che, se inserita in quest'ordine, questa seconda regola ha priorità sulla precedente, ed è quello che vogliamo.&lt;br /&gt;
 ip -6 rule add to 2001:470:c844::/48 table main&lt;br /&gt;
&lt;br /&gt;
* Il default gateway per i pacchetti che utilizzano la tabella di routing &amp;lt;code&amp;gt;golemsix&amp;lt;/code&amp;gt; è l'endpoint del tunnel broker&lt;br /&gt;
 ip -6 route add default via 2001:470:1f12:69::1 dev he6in4 table golemsix&lt;br /&gt;
&lt;br /&gt;
* Aggiorna la cache del routing:&lt;br /&gt;
 ip -6 route flush cache&lt;br /&gt;
&lt;br /&gt;
Analogamente, vengono eseguite le operazioni inverse quando viene spenta l'interfaccia di rete.&lt;br /&gt;
&lt;br /&gt;
=== Piano di indirizzamento ===&lt;br /&gt;
Chiamarlo ''piano di indirizzamento'' è fargli un complimento immeritato; chiamiamola ''guida ragionata all'assegnazione dei nostri indirizzi''.&lt;br /&gt;
&lt;br /&gt;
Sia dato l'indirizzo IPv6:&lt;br /&gt;
&lt;br /&gt;
 127                   79     63                         0&lt;br /&gt;
     2001 : 0470 : c844 : rrrr : xxxx : xxxx : xxxx : xxxx&lt;br /&gt;
&lt;br /&gt;
Siccome abbiamo 80 bit a disposizione e la rete più piccola che possiamo fare secondo RFC è di 64 bit, possiamo fare ben 2&amp;lt;sup&amp;gt;16&amp;lt;/sup&amp;gt; reti (''rrrr'' nell'esempio).&lt;br /&gt;
Per semplicità (perché alla fine è a questo che servono tutti questi indirizzi in IPv6), poniamo ''rrrr'' = ''uugy'', dove:&lt;br /&gt;
* ''uu'' (8 bit) identifica l'''utente'';&lt;br /&gt;
* ''g'' (4 bit) identifica il gateway dell'utente (2&amp;lt;sup&amp;gt;4&amp;lt;/sup = 16 gateway per utente)&lt;br /&gt;
* ''y'' (4 bit) identifica la ''sottorete personale'' di quel gateway dell'utente (2&amp;lt;sup&amp;gt;4&amp;lt;/sup&amp;gt; = 16 sottoreti per gateway)&lt;br /&gt;
&lt;br /&gt;
Il VPS instrada direttamente tutta la sottorete /60 verso il gateway dell'utente, il quale può decidere di suddividerla come preferisce su quel gateway, da un unica grande rete /60, a 16 &amp;quot;piccole&amp;quot; reti /64.&lt;br /&gt;
&lt;br /&gt;
Sono così riservate:&lt;br /&gt;
 00gy indirizzi di servizio per l'infrastruttura (OpenVPN)&lt;br /&gt;
 01gy indirizzi di servizio per l'infrastruttura (Wireguard)&lt;br /&gt;
 02gy Officina (16 gateway × 16 reti)&lt;br /&gt;
 03gy Socio-A (16 gateway × 16 reti)&lt;br /&gt;
 04gy Socio-B (16 gateway × 16 reti)&lt;br /&gt;
 05gy ...&lt;br /&gt;
&lt;br /&gt;
Il ''numero di rete'' &amp;lt;code&amp;gt;rrrr&amp;lt;/code&amp;gt; sarà usato:&lt;br /&gt;
* per instradare tutto il traffico diretto a &amp;lt;code&amp;gt;2001:470:c844:rrg0::/60&amp;lt;/code&amp;gt; verso il gateway dell'utente;&lt;br /&gt;
* per assegnare l'indirizzo &amp;lt;code&amp;gt;2001:470:c844::rrg0/64&amp;lt;/code&amp;gt; al gateway dell'utente nella rete di servizio;&lt;br /&gt;
Si noti la &amp;quot;piccola&amp;quot; differenza.&lt;br /&gt;
&lt;br /&gt;
Per esempio, supponiamo di voler attivare ''serverozzo'', per il quale:&lt;br /&gt;
* ''uu = 02'' (''02'' è l'utente ''Officina'')&lt;br /&gt;
* ''g = 0'' (''0'' il primo &amp;amp;mdash; e al momento unico &amp;amp;mdash; gateway in Officina)&lt;br /&gt;
allora:&lt;br /&gt;
* serverozzo avrà indirizzo &amp;lt;code&amp;gt;2001:470:c844::200/64&amp;lt;/code&amp;gt; lato VPN;&lt;br /&gt;
* tutto il traffico per &amp;lt;code&amp;gt;2001:470:c844:200::/60&amp;lt;/code&amp;gt; verrà instradato verso serverozzo;&lt;br /&gt;
&lt;br /&gt;
E su serverozzo potranno essere create fino a 16 reti, per esempio:&lt;br /&gt;
* per la rete cablata Ethernet dell'Officina (&amp;lt;code&amp;gt;2001:470:c844:200::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;ethI&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per la rete wireless dell'Officina (&amp;lt;code&amp;gt;2001:470:c844:201::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;wlan0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per la rete cablata bus RS-485 (&amp;lt;code&amp;gt;2001:470:c844:202::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;ttyS0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per le macchine virtuali su KVM (&amp;lt;code&amp;gt;2001:470:c844:203::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;vir0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per le macchine virtuali su docker (&amp;lt;code&amp;gt;2001:470:c844:204::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* ...&lt;br /&gt;
'''Nota:''' questo è solo un esempio, la configurazione finale su serverozzo è ancora in fase di definizione.&lt;br /&gt;
&lt;br /&gt;
Nella prima rete di servizio (&amp;lt;code&amp;gt;2001:470:c844::/64&amp;lt;/code&amp;gt;) ci sono:&lt;br /&gt;
* il VPS&lt;br /&gt;
* tutti i gateway&lt;br /&gt;
** per esempio, serverozzo&lt;br /&gt;
** per esempio, i gateway dei soci&lt;br /&gt;
I gateway dei soci non sono diversi da serverozzo, e tuttavia la loro configurazione può essere più semplice se invece che da gateway fungono come semplici end-point.&lt;br /&gt;
&lt;br /&gt;
Così organizzate, le risorse si esauriranno in questo ordine:&lt;br /&gt;
* la banda a disposizione del VPS (500M/500M);&lt;br /&gt;
* la capacità computazionale e di memoria del VPS per l'inoltro dei pacchetti;&lt;br /&gt;
* gli IPv6 (gli IPv6 non finiranno mai)&lt;br /&gt;
&lt;br /&gt;
Non essendo una rete a maglie, ma semplicemente un albero, il routing è definito staticamente.&lt;br /&gt;
Se la rete si evolverà e le singole &amp;quot;isole&amp;quot; dovessero iniziare a connettersi a maglia in maniera incontrollata, potranno essere impiegati algoritmi dinamici, ma considerata la dimensione del bacino di utenti, non dovrebbe essere necessario.&lt;br /&gt;
&lt;br /&gt;
== Installazione del server ==&lt;br /&gt;
La VPN del GOLEM può essere utilizzata per la navigazione in IPv6.&lt;br /&gt;
La VPN è realizzata per mezzo di Wireguard.&lt;br /&gt;
&lt;br /&gt;
A differenza di altri protocolli, come OpenVPN, Wireguard ha un approccio &amp;quot;peer to peer&amp;quot;, per cui la procedura di configurazione del server rispecchia per buona parte quella di ciascun client.&lt;br /&gt;
&lt;br /&gt;
Innanzitutto è necessario generare la coppia di chiavi pubblica/privata del server:&lt;br /&gt;
&lt;br /&gt;
 # wg genkey | tee /etc/wireguard/server.privkey | wg pubkey &amp;gt; /etc/wireguard/vpn.golem.linux.it.pubkey&lt;br /&gt;
&lt;br /&gt;
Per la configurazione è sufficiente creare un singolo file, ad esempio &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # Carica la chiave privata dal percorso dove la abbiamo generata precedentemente&lt;br /&gt;
 PostUp = wg set %i private-key /etc/wireguard/vpn.golem.linux.it.privkey&lt;br /&gt;
 # Porta UDP di ascolto del server, a piacere&lt;br /&gt;
 ListenPort = 51820&lt;br /&gt;
 # Indirizzo del server all'interno della VPN&lt;br /&gt;
 Address = 2001:470:c844:100::1&lt;br /&gt;
&lt;br /&gt;
Il server può essere avviato tramite ''systemd'', e con lo stesso sistema si può impostare l'avvio automatico.&lt;br /&gt;
Si noti che &amp;lt;code&amp;gt;@wg0&amp;lt;/code&amp;gt; corrisponde al file di configurazione precedentemente creato.&lt;br /&gt;
&lt;br /&gt;
 # systemctl start wg-quick@wg0&lt;br /&gt;
 # systemctl enable wg-quick@wg0&lt;br /&gt;
&lt;br /&gt;
== Aggiunta di un nuovo client ==&lt;br /&gt;
=== Configurazione lato server ===&lt;br /&gt;
il sysop aggiunge un blocco peer per ciascun client alla configurazione &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;, così:&lt;br /&gt;
&lt;br /&gt;
 ... altri client ...&lt;br /&gt;
 &lt;br /&gt;
 # porceddu.net.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = tHeClIeNtFaNtAsTiCpUbLiCkEy=&lt;br /&gt;
 AllowedIPs = 2001:470:c844:100::200/128, 2001:470:c844:200::/62&lt;br /&gt;
 &lt;br /&gt;
 ... altri client ...&lt;br /&gt;
&lt;br /&gt;
Altro che OpenVPN.&lt;br /&gt;
&lt;br /&gt;
=== Configurazione lato client ===&lt;br /&gt;
1. Lato client, generare una coppia di chiavi pubblica/privata e inviare la chiave pubblica al sysop.&lt;br /&gt;
&lt;br /&gt;
 $ wg genkey | tee client.example.com.privkey | wg pubkey &amp;gt; client.example.com.pubkey&lt;br /&gt;
&lt;br /&gt;
Il sysop si occuperà di aggiungere la chiave pubblica tra quelle consentite al server, sceglierà un indirizzo IP in base al piano di indirizzamento, e ve lo comunicherà.&lt;br /&gt;
&lt;br /&gt;
2. Creare un file di configurazione come segue, in cui scrivere opportunamente la vostra chiave privata e l'indirizzo IP assegnato. Prestare particolare attenzione a modificare i campi della sezione &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt;, come indicato nelle note.&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # PrivateKey = YoUrGoRgEoUsAnDsEcUrEpRiVaTeKeY=               # vedi note, scegliere questo...&lt;br /&gt;
 # PostUp = wg set %i private-key ./client.example.com.privkey # vedi note,                 ...oppure questo&lt;br /&gt;
 Address = 2001:470:c844:100::'''200'''/64                           # vedi note&lt;br /&gt;
 &lt;br /&gt;
 # vpn.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = w63aGvoyPaUTgA8nW/NJS6Qqp2hUFvHRBbIH8Qb5ISY=   &lt;br /&gt;
 AllowedIPs = 2000::/3                                      &lt;br /&gt;
 Endpoint = vpn.golem.linux.it:51280&lt;br /&gt;
 PersistentKeepalive = 37&lt;br /&gt;
&lt;br /&gt;
'''Note'''&lt;br /&gt;
* &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''locale'')&lt;br /&gt;
** scegliere una delle seguenti opzioni per indicare la chiave privata del client, scommentando la riga apposita.&lt;br /&gt;
*** ''PrivateKey'': chiave privata del client, da custodire con cura, inline&lt;br /&gt;
*** ''PostUp = command'': chiave privata del client, da custodire con cura, e caricata automaticamente da un file esterno (es. creato col comando mostrato in precedenza)&lt;br /&gt;
** ''Address'': indirizzo IP comunicato dal sysop: riportarlo accuratamente, altrimenti non sarà possibile utilizzare la VPN&lt;br /&gt;
* &amp;lt;code&amp;gt;[Peer]&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''remoto'' / server)&lt;br /&gt;
** ''PublicKey'': chiave pubblica del server (sì, è proprio quella)&lt;br /&gt;
** ''AllowedIPs'': indirizzi raggiungibili tramite la VPN, a scelta:&lt;br /&gt;
*** &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;: solo la [[IPv6 @ GOLEM | rete IPv6 virtuale del GOLEM]]&lt;br /&gt;
*** &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;: tutti gli indirizzi IPv6 (è possibile utilizzare la VPN del GOLEM per [[IPv6 @ GOLEM | navigare ''davvero'' in IPv6]])&lt;br /&gt;
** ''Endpoint'': indirizzo del server&lt;br /&gt;
** ''PersistentKeepalive'': timer per mantenimento del tunnel attivo (in secondi); particolarmente utile se l'indirizzo IP del client cambia o è soggetto a NAT&lt;br /&gt;
&lt;br /&gt;
La connessione può essere attivata tramite systemd come sul server (spostandola in ''/etc/wireguard/''), oppure manualmente utilizzando &amp;lt;code&amp;gt;wg-quick&amp;lt;/code&amp;gt;:&lt;br /&gt;
* Attivazione del tunnel&lt;br /&gt;
 wg-quick up client.example.conf&lt;br /&gt;
* Disattivazione del tunnel&lt;br /&gt;
 wg-quick down client.example.conf&lt;br /&gt;
&lt;br /&gt;
3. Provare il collegamento&lt;br /&gt;
 # ping 2001:470:c844:100::1    # server VPN, dentro al tunnel (per verificare se il collegamento funziona)&lt;br /&gt;
 # ping 2001:470:c844:100::200  # gateway in Officina (per verificare se il collegamento funziona; talvolta non raggiungibile se abbiamo staccato la luce)&lt;br /&gt;
 # ping ipv6.google.com         # per verificare l'accessibilità dell'Internet pubblico IPv6, nel caso non si abbia già accesso&lt;br /&gt;
&lt;br /&gt;
4. Successo!&lt;br /&gt;
* Se il client della VPN è un nodo foglia della rete, cioè non funge da gateway perché si deve collegare solo lui (es. smartphone), allora c'è già connettività IPv6 e non serve fare altro. È comunque consigliato leggere la sezione relativa al [[#Firewall | firewall]] per ragioni di sicurezza ed eventualmente attivarlo.&lt;br /&gt;
* Se invece il client è il gateway della rete IPv6 (es. ''serverozzo'', o il router di casa di uno dei soci che vuole navigare in IPv6), allora bisogna proseguire a configurarlo come indicato anche nella [[#Client_VPN_come_gateway | sezione apposita]].&lt;br /&gt;
&lt;br /&gt;
== Client VPN come gateway ==&lt;br /&gt;
=== Impostare il client VPN come gateway IPv6 per l'isola ===&lt;br /&gt;
==== Abilitare inoltro pacchetti IPv6 ====&lt;br /&gt;
Nel file ''/etc/sysctl.conf'':&lt;br /&gt;
 net.ipv6.conf.all.forwarding=1&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' la modifica non ha effetto immediato, ma è necessario un &amp;lt;code&amp;gt;sysctl --system&amp;lt;/code&amp;gt; o un riavvio.&lt;br /&gt;
&lt;br /&gt;
==== Installare e configurare radvd ====&lt;br /&gt;
''radvd'' è il demone di ''router advertisement''.&lt;br /&gt;
Per la configurazione automatica degli indirizzi e del gateway in IPv6 non è necessario un ''complesso'' server DHCP, ma vista la vastità dello spazio di indirizzamento (anche la rete più piccola ha ben 2&amp;lt;sup&amp;gt;64&amp;lt;/sup&amp;gt; indirizzi disponibili) basta il più semplice ''radvd''.&lt;br /&gt;
Un router con ''radvd'', a intervalli regolari, trasmette un messaggio in broadcast a tutti gli host della rete, informandoli sul prefisso di rete da utilizzare; a questo punto gli host possono autoconfigurarsi col metodo che preferiscono (es. [https://tools.ietf.org/search/rfc4862 SLAAC] con o senza [https://tools.ietf.org/html/rfc4941.html estensione per la privacy]).&lt;br /&gt;
&lt;br /&gt;
Installare ''radvd'':&lt;br /&gt;
 # apt install radvd&lt;br /&gt;
&lt;br /&gt;
Configurare il file ''/etc/radvd.conf'':&lt;br /&gt;
 interface ethI {&lt;br /&gt;
         AdvSendAdvert on;&lt;br /&gt;
         MinRtrAdvInterval 2;&lt;br /&gt;
         MaxRtrAdvInterval 10;&lt;br /&gt;
         prefix 2001:db8::/64 {&lt;br /&gt;
                 AdvOnLink on;&lt;br /&gt;
                 AdvAutonomous on;&lt;br /&gt;
                 AdvRouterAddr on;&lt;br /&gt;
         };&lt;br /&gt;
         RDNSS 2606:4700:4700::1111 {&lt;br /&gt;
                 AdvRDNSSLifetime 3600;&lt;br /&gt;
         };&lt;br /&gt;
 };&lt;br /&gt;
dove&lt;br /&gt;
* &amp;lt;code&amp;gt;interface ethI&amp;lt;/code&amp;gt; indica l'interfaccia interna su cui fare ''advertise'';&lt;br /&gt;
* &amp;lt;code&amp;gt;prefix 2001:db8::/64&amp;lt;/code&amp;gt; indica la rete a valle; (inserire quella comunicata dal sysop)&lt;br /&gt;
* &amp;lt;code&amp;gt;RDNSS 2606:4700:4700::1111&amp;lt;/code&amp;gt; indica il server DNS (nell'esempio specifico, CloudFlare);&lt;br /&gt;
** ''Nota:'' in seguito a questioni legali, OpenDNS non è al momento disponibile in Francia.&lt;br /&gt;
&lt;br /&gt;
Una volta abilitato ''radvd'' sull'interfaccia di rete desiderata, gli host inizieranno ad assegnarsi automaticamente un indirizzo tramite SLAAC, e potranno navigare in IPv6.&lt;br /&gt;
&lt;br /&gt;
==== Verificare il collegamento ====&lt;br /&gt;
Questo paragrafo contiene alcuni suggerimenti per la risoluzione dei problemi.&lt;br /&gt;
&lt;br /&gt;
# Collegare un client ignaro alla rete gestita dal nuovo gateway IPv6 (es. un computer terzo, tramite uno switch)&lt;br /&gt;
# Verificare che si auto-assegni un indirizzo IPv6 nella rete di cui viene fatto advertising dal router con &amp;lt;code&amp;gt;ip addr&amp;lt;/code&amp;gt;. Se non succede:&lt;br /&gt;
## verificare la configurazione di ''radvd'' sul gateway&lt;br /&gt;
## verificare che il computer riceva correttamente i pacchetti di router advertise (es. con wireshark)&lt;br /&gt;
## verificare che l'IPv6 sia abilitato sul sistema operativo e sull'interfaccia di rete (molto probabilmente è già abilitato)&lt;br /&gt;
# Pingare il gateway tramite il suo indirizzo IPv6. Se non funziona:&lt;br /&gt;
## controllare che il firewall del gateway o del computer non stia bloccando ICMPv6 (improbabile)&lt;br /&gt;
# Pingare un IPv6 appartenente alla rete del GOLEM (vedere la sezione sul client &amp;quot;foglia&amp;quot;) o all'Internet IPv6 pubblico. Se non funziona:&lt;br /&gt;
## verificare che il gateway inoltri correttamente i pacchetti dalla vostra isola locale alla VPN&lt;br /&gt;
## utilizzare &amp;lt;code&amp;gt;traceroute&amp;lt;/code&amp;gt; per determinare in quale punto dell'instradamento si bloccano i pacchetti&lt;br /&gt;
&lt;br /&gt;
Se tutto funziona, evviva: il livello di rete è configurato correttamente! (Ma attenzione all'MTU)&lt;br /&gt;
&lt;br /&gt;
==== Una nota sull'MTU del collegamento ====&lt;br /&gt;
Con la configurazione appena descritta, gli host crederanno di utilizzare una rete nativa dual-stack (o IPv6-only, nel caso non fosse previsto IPv4).&lt;br /&gt;
In realtà, però, i pacchetti IPv6 non sono &amp;quot;nativi&amp;quot;, bensì, una volta giunti al gateway, vengono poi incapsulati in maniera completamente trasparente.&lt;br /&gt;
&lt;br /&gt;
Ciò significa che gli host crederanno di poter generare pacchetti IPv6 della dimensione massima ammessa dal link a cui sono collegati (es. Ethernet, WiFi), che in genere è di 1500 bytes.&lt;br /&gt;
Però, pacchetti così grandi non possono essere incapsulati, in quanto anche il link che il gateway utilizza per la VPN, in genere, consente pacchetti di dimensione massima di 1500 bytes: non rimane spazio per l'incapsulamento.&lt;br /&gt;
&lt;br /&gt;
Questo può creare problemi, talvolta sporadici, non facilmente ripetibili, o ancora, dipendenti dal sito a cui si sta tentando di collegarsi, specialmente se si usa TCP.&lt;br /&gt;
Un sintomo molto comune è che, navigando sul web, si può rilevare che alcuni siti - ma solo alcuni, perfettamente funzionanti sia da IPv4 che da altre connessioni IPv6, vanno in timeout quando si prova ad accedervi.&lt;br /&gt;
&lt;br /&gt;
Questo succede perché TCP tenta di massimizzare la quantità di informazione contenuta all'interno di un pacchetto IP, generando pacchetti molto grandi, e talvolta raggiungendo il limite oltre il quale il pacchetto non può più essere incapsulato dal gateway.&lt;br /&gt;
&lt;br /&gt;
{{Template:Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Per verificare che il problema sia questo, provare a forzare una MTU artificialmente più bassa sulla scheda di rete, tramite il comando &amp;lt;code&amp;gt;ip link set enp1s0 mtu 1400&amp;lt;/code&amp;gt;, e poi verificare se il problema scompare.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Perciò, sarà necessario fare in modo che il gateway modifichi i pacchetti di handshake del TCP in maniera tale che non venga mai negoziata una ''Max Segment Size'' troppo alta per il link.&lt;br /&gt;
&lt;br /&gt;
===== Modificare la Max Segment Size =====&lt;br /&gt;
&lt;br /&gt;
{{Template:Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Abbassare la MSS elimina il problema, ma al contempo aumenta l'overhead, rendendo la connessione leggermente più lenta. È consigliabile trovare il giusto compromesso che soddisfi sia le esigenze di funzionamento che le esigenze in termini di prestazioni. Per farlo, ci si può aiutare con &amp;lt;code&amp;gt;tracepath&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* con un gateway Linux:&lt;br /&gt;
** TODO: è davvero necessario? Lo fa da solo?&lt;br /&gt;
* con un gateway Mikrotik:&lt;br /&gt;
 /ipv6/firewall/mangle/add out-interface=wg0 protocol=tcp tcp-flags=syn action=change-mss new-mss=1300 chain=forward tcp-mss=1301-65535&lt;br /&gt;
&lt;br /&gt;
== Firewall ==&lt;br /&gt;
=== Per il VPS ===&lt;br /&gt;
Inoltrare solo i pacchetti da/per le reti note.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text=Non ancora testato!&lt;br /&gt;
}}&lt;br /&gt;
 # ip6tables -A FORWARD -d 2001:470:c844::/48 -i he6in4 -j ACCEPT&lt;br /&gt;
 # ip6tables -A FORWARD -s 2001:470:c844::/48 -o he6in4 -j ACCEPT&lt;br /&gt;
 # ip6tables -P FORWARD DROP&lt;br /&gt;
&lt;br /&gt;
=== Per i client ===&lt;br /&gt;
Gli indirizzi IPv6 sono &amp;quot;tutti&amp;quot; pubblici. Gli indirizzi IPv6 forniti dal GOLEM sono pubblicamente instradabili. In più, il GOLEM non mette in atto '''nessuna''' misura atta a prevenire connessioni dirette verso gli host della VPN (al netto di configurazioni specifiche sulle macchine direttamente di proprietà del GOLEM).&lt;br /&gt;
Ciò significa che '''tutti''' gli host degli utenti/soci, compresi quelli domestici che sin'ora sono stati dietro a un (s)comodo NAT, possono essere acceduti attraverso la rete Internet globale, quando sono connessi alla VPN del GOLEM.&lt;br /&gt;
&lt;br /&gt;
Pertanto, è consigliato attivare degli strumenti atti a prevenire accessi indesiderati dall'esterno, come un firewall, in special modo se il proprio computer &amp;quot;fornisce servizi&amp;quot; (eg. condivisione di file via rete, server web di sviluppo, ...)&lt;br /&gt;
&lt;br /&gt;
==== Direttamente sull'host ====&lt;br /&gt;
Si può agire direttamente sugli host da proteggere (versione conservativa):&lt;br /&gt;
 # ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # ip6tables -A INPUT -p icmpv6 -j ACCEPT&lt;br /&gt;
 # ip6tables -P INPUT DROP&lt;br /&gt;
&lt;br /&gt;
In generale con Linux questa operazione non è comunque necessaria, perché tanto non vi sono servizi esposti a meno che non siano stati installati esplicitamente.&lt;br /&gt;
Si noti che ICMPv6 deve comunque sempre essere abilitato in quanto necessario al funzionamento di IPv6.&lt;br /&gt;
&lt;br /&gt;
Si può anche utilizzare una regola più rilassata (es. per sfruttare la VPN del GOLEM come VPN &amp;quot;personale&amp;quot; tra i propri host), tipo:&lt;br /&gt;
 # ip6tables -A INPUT -s 2001:470:c844:uu00::/56 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
Queste regole possono essere salvate in uno script, ad esempio &amp;lt;code&amp;gt;/etc/wireguard/wg0-postup.sh&amp;lt;/code&amp;gt;, ed invocate automaticamente all'atto della connessione alla VPN tramite la direttiva `PostUp` nel file di configurazione di WireGuard.&lt;br /&gt;
Sarà poi necessario aggiungere un equivalente PostDown che rimuova le regole all'atto della disconnessione.&lt;br /&gt;
&lt;br /&gt;
Ad esempio:&lt;br /&gt;
&lt;br /&gt;
 # /etc/wireguard/wg0.conf&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # ...                  &lt;br /&gt;
 # -----8&amp;lt;------&lt;br /&gt;
 # Possono coesistere anche più direttive PostUp/PostDown, aggiungere in coda:&lt;br /&gt;
 PostUp = /etc/wireguard/wg0-postup.sh&lt;br /&gt;
 PostDown = /etc/wireguard/wg0-postdown.sh&lt;br /&gt;
 # -----8&amp;lt;------&lt;br /&gt;
&lt;br /&gt;
 # /etc/wireguard/wg0-postup.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ip6tables -A INPUT -i wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 ip6tables -A INPUT -i wg0 -p icmpv6 -j ACCEPT&lt;br /&gt;
 ip6tables -P INPUT DROP&lt;br /&gt;
&lt;br /&gt;
 # /etc/wireguard/wg0-postdown.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ip6tables -D INPUT -i wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 ip6tables -D INPUT -i wg0 -p icmpv6 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=I pacchetti della VPN viaggiano crittografati sulla rete pubblica (almeno finché si trovano all'interno della VPN del GOLEM), ma sul server vengono decifrati e cifrati di nuovo per permetterne il routing!&lt;br /&gt;
In caso di compromissione del VPS del GOLEM, pertanto, i pacchetti non possono essere considerati al sicuro da sguardi indiscreti. È sempre buona norma utilizzare crittografia end-to-end, anche all'interno di una VPN.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Dal gateway ====&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text='''Nota bene''': salvare queste impostazioni, per esempio con &amp;lt;code&amp;gt;ip6tables-save&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;ip6tables-restore&amp;lt;/code&amp;gt;, altrimenti verranno perse al riavvio.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Invece di configurare il firewall su ogni host singolarmente, si può configurare il gateway una volta sola per proteggere tutta la rete a valle:&lt;br /&gt;
 # ip6tables -A FORWARD -s 2001:470:c844:rrrr::/64 -j ACCEPT&lt;br /&gt;
 # ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # ip6tables -P FORWARD DROP&lt;br /&gt;
&lt;br /&gt;
Nell'ordine:&lt;br /&gt;
* blocca l'inoltro di tutti i pacchetti&lt;br /&gt;
* abilita l'inoltro dei pacchetti in uscita dalla rete&lt;br /&gt;
* abilita l'inoltro dei pacchetti correlati a connessioni già stabilite&lt;br /&gt;
&lt;br /&gt;
Questo impedisce l'accesso indesiderato a tutti gli host della rete, compresi gli host con Windows che possono starsene &amp;quot;sicuri&amp;quot; anche senza il firewall, pur esponendo servizi (NetBIOS, Samba).&lt;br /&gt;
&lt;br /&gt;
===== Eccezioni =====&lt;br /&gt;
Se si desidera comunque rendere accessibile un proprio server in particolare, è possibile istruire il gateway con un'eccezione, aggiungendo:&lt;br /&gt;
 # ip6tables -A FORWARD -d 2001:470:c844:rrrr::host -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
Questo è qualcosa che &amp;quot;assomiglia&amp;quot; vagamente al vecchio ''port forwarding''.&lt;br /&gt;
&lt;br /&gt;
=== Torrent ===&lt;br /&gt;
La banda è limitata, e non è consentito traffico di materiale illegale. Occore limitare il traffico ''bit-torrent'' almeno al gateway finale (VPS).&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text=TODO: Questa sezione è da fare!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Risoluzione problemi =&lt;br /&gt;
== Geolocalizzazione ==&lt;br /&gt;
Il tunnel è localizzato in Francia.&lt;br /&gt;
A causa di restrizioni imposte a causa del diritto d'autore, alcuni siti, specialmente di streaming video, come Netflix, Rai.tv o Youtube, potrebbero bloccare l'accesso ai contenuti italiani dal tunnel francese.&lt;br /&gt;
Per inibire temporaneamente l'uso del tunnel IPv6 su un host:&lt;br /&gt;
 # sysctl -w net.ipv6.conf.all.disable_ipv6=1&lt;br /&gt;
&lt;br /&gt;
= Extra =&lt;br /&gt;
* [https://github.com/pmarks-net/ipvfoo IpvFoo]: un'estensione per il browser per mostrare nella barra degli indirizzi se il sito a cui si è connessi utilizza IPv4, IPv6 o un misto&lt;br /&gt;
* [https://loopsofzen.uk/ Loops of Zen]: sito dimostrativo accessibile solo in IPv6, con un piccolo gioco rompicapo&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Howto]]&lt;br /&gt;
[[Categoria:Officina]]&lt;br /&gt;
[[Category:Sysop]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=IPv6_@_GOLEM&amp;diff=9648</id>
		<title>IPv6 @ GOLEM</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=IPv6_@_GOLEM&amp;diff=9648"/>
		<updated>2025-02-27T17:08:35Z</updated>

		<summary type="html">&lt;p&gt;Giomba: /* Client VPN come gateway */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Due parole su questa pagina ==&lt;br /&gt;
Questa pagina è un maldestro tentativo:&lt;br /&gt;
* per riassumere le ragioni che ci hanno portato a decidere di dotarci di IPv6;&lt;br /&gt;
* per documentare la nostra infrastruttura di rete;&lt;br /&gt;
&lt;br /&gt;
=== A chi si rivolge questa pagina ===&lt;br /&gt;
* se sei l''''amministratore di rete''', buona lettura :-)&lt;br /&gt;
* se sei un '''socio''', vedi come [[#Configurazione_lato_client | configurare il tuo client]]; è sufficiente leggere solo questo paragrafo.&lt;br /&gt;
&lt;br /&gt;
== Due parole sull'IPv6 ==&lt;br /&gt;
[https://it.wikipedia.org/wiki/IPv6 IPv6] è un &amp;quot;nuovo&amp;quot; protocollo a livello di rete che da diversi anni sta sostituendo IPv4.&lt;br /&gt;
Le novità introdotte da IPv6 sono molteplici; tra queste, quella che balza immediatamente all'occhio è l'enorme dimensione dello spazio di indirizzamento.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Protocollo'''&lt;br /&gt;
| '''lunghezza indirizzo'''&lt;br /&gt;
| '''numero indirizzi'''&lt;br /&gt;
|-&lt;br /&gt;
| IPv4&lt;br /&gt;
| 32 bit&lt;br /&gt;
| 2&amp;lt;sup&amp;gt;32&amp;lt;/sup&amp;gt; = 4 miliardi&lt;br /&gt;
|-&lt;br /&gt;
| IPv6&lt;br /&gt;
| 128 bit&lt;br /&gt;
| 2&amp;lt;sup&amp;gt;128&amp;lt;/sup&amp;gt; = 256 miliardi di miliardi di miliardi di miliardi&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Su questo pianeta vi sono circa 8 miliardi di persone [https://it.wikipedia.org/wiki/Popolazione_mondiale], di cui la metà [http://www.lastampa.it/2018/01/31/tecnologia/gli-utenti-di-internet-sono-pi-di-quattro-miliardi-nel-mondo-milioni-in-italia-wMxQskzXeabwa3wgWI2jUO/pagina.html] è connessa a Internet, e nei paesi sviluppati hanno anche più di un dispositivo connesso. Si aggiungano i numerosissimi apparati di rete e server necessari per il funzionamento dell'infrastruttura e la fornitura di servizi, e si può facilmente intuire che IPv4 non è più sufficiente per le attuali necessità.&lt;br /&gt;
&lt;br /&gt;
Mentre questa pagina veniva scritta, gli IPv4 stavano finendo [https://en.wikipedia.org/wiki/IPv4_address_exhaustion].&lt;br /&gt;
Nel novembre 2019, il RIPE (il registro europeo) ha terminato l'assegnazione degli ultimi indirizzi IPv4 assegnati all'Europa, [https://www.ripe.net/publications/ipv6-info-centre/about-ipv6/ipv4-exhaustion/ipv4-available-pool] e adesso vengono solo riutilizzati quelli vecchi, che significa che:&lt;br /&gt;
* non ci sono più indirizzi &amp;quot;nuovi&amp;quot; e dunque non è più possibile richiederli con facilità;&lt;br /&gt;
* se si vogliono degli indirizzi IPv4, si viene messi in lista d'attesa, finché il precedente proprietario fallisce e rilascia i propri.&lt;br /&gt;
&lt;br /&gt;
=== IPv4 vs IPv6 ===&lt;br /&gt;
==== Notazione ====&lt;br /&gt;
* IPv4 &amp;amp;rarr; 4 byte rappresentati con numeri decimali separati da un punto, es: &amp;lt;code&amp;gt;192.0.2.127&amp;lt;/code&amp;gt;&lt;br /&gt;
* IPv6 &amp;amp;rarr; 16 byte, ogni byte è rappresentato da due cifre esadecimali; ogni 4 cifre esadecimali si inseriscono i ''due punti'' &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;; come in IPv4 è possibile omettere gli zeri in testa; la più lunga sequenza di zeri allineata a 4 può essere omessa per intero; esempi (indirizzi equivalenti):&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:0470:c844:0020:0000:0000:0000:0001&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:470:c844:20:0:0:0:1&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:470:c844:20::1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipi di indirizzi ====&lt;br /&gt;
* IPv6 Reference Card by RIPE [https://www.ripe.net/manage-ips-and-asns/ipv6/ipv6-address-types/ipv6_reference_card_July2015.pdf]&lt;br /&gt;
&lt;br /&gt;
Riassunto:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''IPv6'''&lt;br /&gt;
| '''Equivalente IPv4'''&lt;br /&gt;
| '''Significato'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;::1/128&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo loopback&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fc00::/7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;192.168.0.0/16&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;10.0.0.0/8&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;172.16.0.0/12&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo privato&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fe80::/10&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;169.254.0.0/16&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo link-local (univoco nella rete locale, e autoassegnato)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2001:db8::/32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;192.0.2.0/24&amp;lt;/code&amp;gt;&lt;br /&gt;
| Esempi e documentazione&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| Indirizzi unicast globalmente raggiungibili&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Indirizzi pubblici vs privati ====&lt;br /&gt;
Gli IPv6 sono così tanti che non c'è bisogno di utilizzare indirizzi privati: niente NAT, niente port-forwarding. Questo restituisce connettività end-to-end ai dispositivi e apre numerose nuove possibilità di impiego, rimaste nascoste per anni a causa della scarsità di IPv4 e degli osceni espedienti inventati. Una banalità: non sarà più necessario passare attraverso un server terzo per condividere documenti, chattare o telefonare ai propri contatti.&lt;br /&gt;
&lt;br /&gt;
Se necessarie, le caratteristiche di &amp;quot;sicurezza&amp;quot; introdotte dal NAT possono essere sostituite e accorpate a un banale firewall.&lt;br /&gt;
&lt;br /&gt;
==== Progettazione di una rete ====&lt;br /&gt;
Nel progettare una rete con IPv4, la necessità principale è quella di risparmiare sugli indirizzi, perciò vengono usati prefissi di rete di varia lunghezza.&lt;br /&gt;
Nel progettare una rete con IPv6, si hanno a disposizione così tanti indirizzi che conviene utilizzarli in maniera da renderne più agevole una distribuzione logica.&lt;br /&gt;
&lt;br /&gt;
Sono così identificate le seguenti dimensioni standard per le reti IPv6 (nulla vieta di usare dimensioni personalizzate):&lt;br /&gt;
* '''/126''': contiene 2 soli host, utilizzata per i collegamenti punto-punto nell'infrastruttura di rete;&lt;br /&gt;
* '''/64''': è la più piccola rete che dovrebbe essere fatta; dimensione utilizzata nelle LAN; lo spazio di indirizzamento è esageratamente sovradimensionato ed è sufficiente per qualunque LAN immaginabile (è 4 miliardi di volte più grande di tutta la rete Internet IPv4); viene usata in ambito domestico;&lt;br /&gt;
* '''/56''': contiene 256 reti di dimensione /64, viene usata in ambito domestico o per piccole imprese;&lt;br /&gt;
* '''/48''': contiene 65536 reti di dimensione /64, viene usata in ambito aziendale;&lt;br /&gt;
&lt;br /&gt;
Le LAN non devono avere un prefisso più lungo di /64, perché molte nuove funzionalità introdotte con IPv6 (es SLAAC, Privacy Extension, ...), e anche funzionalità che saranno introdotte in futuro, daranno per scontato che le reti abbiano almeno questa dimensione.&lt;br /&gt;
&lt;br /&gt;
=== Ottenere connettività IPv6 ===&lt;br /&gt;
* si può richiedere nativamente al proprio ISP. Quando è stata scritta questa pagina, in Italia non erano molti gli operatori che fornivano connettività IPv6 nativa; adesso sono di più, perché gli IPv4 sono finiti, e non sarebbe altrimenti possibile fare business, ma alcuni operatori (specialmente quelli più grandi e noti), ancora non forniscono connettività IPv6 nativa;&lt;br /&gt;
* si possono fare dei tunnel che veicolano il traffico IPv6 all'interno dei pacchetti IPv4 (sprecando un po' di banda);&lt;br /&gt;
&lt;br /&gt;
Tunnel:&lt;br /&gt;
* pro:&lt;br /&gt;
** molti sono gratuiti;&lt;br /&gt;
* contro:&lt;br /&gt;
** spreco di banda per incapsulare i pacchetti (qualche decina di byte in più per ogni pacchetto, circa 20 ogni 1500);&lt;br /&gt;
** maggiore latenza;&lt;br /&gt;
** alcuni richiedono un indirizzo IPv4 statico; altri richiedono complicate configurazioni per l'uso con indirizzi dinamici;&lt;br /&gt;
** alcuni non funzionano dietro NAT (la quasi totalità delle reti domestiche);&lt;br /&gt;
&lt;br /&gt;
== Considerazioni e descrizione generale ==&lt;br /&gt;
&lt;br /&gt;
Come portare IPv6 al GOLEM?&lt;br /&gt;
&lt;br /&gt;
È stato realizzato un tunnel tra un intermediario e il nostro VPS. L'intermediario inoltra al VPS tutti i pacchetti destinati alla nostra rete.&lt;br /&gt;
La nostra rete viene scomposta in sottoreti: una rete di backbone, una per l'officina e una per ogni altro punto di accesso necessario, es. uno per ogni abitazione dei soci.&lt;br /&gt;
Il VPS conosce le rotte per raggiungere ogni singola sottorete e inoltra i pacchetti che riceve dall'intermediario verso il giusto router di ogni punto di accesso.&lt;br /&gt;
Il router del punto di accesso inoltra i pacchetti allo specifico host destinatario.&lt;br /&gt;
&lt;br /&gt;
Si procede analogamente a ritroso.&lt;br /&gt;
&lt;br /&gt;
In figura è mostrata la prima versione di visione ''logica'' della rete realizzata:&lt;br /&gt;
* '''HE''' (Hurricane Electric) è il provider fornitore IPv6;&lt;br /&gt;
* '''OVH''' è il nostro provider per il VPS;&lt;br /&gt;
* '''VPS''' è il nostro VPS;&lt;br /&gt;
* '''serverozzo''' è il gateway in [[Officina Informatica]];&lt;br /&gt;
&lt;br /&gt;
Per permettere il collegamento tra il VPS e un punto di accesso (anche noto in questa pagina come ''gateway dell'utente''), non essendo possibile stendere dei cavi fisici in giro per l'Europa, utilizzeremo la nostra VPN.&lt;br /&gt;
Esistono delle pagine dedicate per la documentazione sulla [[Rete del GOLEM]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tunnel-ipv6.jpeg|Il primo prototipo della rete del GOLEM, con la VPN e il tunnel IPv6.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Iniziare: rete /64 ==&lt;br /&gt;
Sono l'amministratore di rete e voglio attivare il tunnel IPv6 per la prima volta. Come iniziare?&lt;br /&gt;
&lt;br /&gt;
Ci si registra su [https://tunnelbroker.net/ TunnelBroker] e viene assegnata d'ufficio una rete IPv6 ''/64''.&lt;br /&gt;
&lt;br /&gt;
Il broker comunica i dettagli del suo PoP (''Point of Presence''):&lt;br /&gt;
 IPv4: 216.66.84.42&lt;br /&gt;
 IPv6: 2001:470:1f12:69::1&lt;br /&gt;
&lt;br /&gt;
L'IPv6 sarà utilizzato sul collegamento ''tunnel virtuale'', collegato all'interfaccia del VPS che chiameremo ''he6in4''. Dalla nostra parte, ''he6in4'' avrà come indirizzo &amp;lt;code&amp;gt;2001:470:1f12:69::2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Attiviamo il tunnel, aggiungendo questo al ''/etc/network/interfaces'':&lt;br /&gt;
&lt;br /&gt;
 auto he6in4&lt;br /&gt;
 iface he6in4 inet6 v4tunnel&lt;br /&gt;
 	address 2001:470:1f12:69::2/64&lt;br /&gt;
         endpoint 216.66.84.42&lt;br /&gt;
         local 152.228.140.73&lt;br /&gt;
         ttl 255&lt;br /&gt;
&lt;br /&gt;
Se si vuole utilizzare il tunnel come default gateway, aggiungere anche:&lt;br /&gt;
 	gateway 2001:470:1f12:69::1&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning&lt;br /&gt;
|text=È possibile utilizzare un solo default gateway su Linux, perciò assicurarsi di non confliggere con la configurazione IPv6 del vostro provider (se c'è)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
e verificare la connettività tra il VPS e il PoP del broker con:&lt;br /&gt;
 $ ip -6 addr&lt;br /&gt;
 $ ping 2001:470:1f12:69::1&lt;br /&gt;
e la connettività con l'Internet IPv6 con:&lt;br /&gt;
 $ ping 2a00:1450:4002:80a::200e&lt;br /&gt;
che, per completezza, è l'IPv6 di &amp;lt;code&amp;gt;ipv6.google.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nella maggior parte dei casi il server DNS IPv4 usato sin'ora ha anche il supporto per risolvere nomi IPv6.&lt;br /&gt;
&lt;br /&gt;
Probabilmente però '''non''' si vorrà utilizzare questa configurazione, bensì sfruttare la rete /48 come spiegato nel prossimo paragrafo.&lt;br /&gt;
&lt;br /&gt;
== Rete /48 ==&lt;br /&gt;
Siccome una rete IPv6 fisica (per esempio, una rete domestica) ha dimensione /64, ma il GOLEM, a sua volta, diventa provider per i soci, noi vogliamo tante reti, per l'officina e per i soci, richiediamo manualmente una ''/48''. Non ci piace essere spreconi, ma ci piace rispettare ''anche'' le RFC: a new era of Internet: [https://tools.ietf.org/html/rfc3177] [https://tools.ietf.org/html/rfc5375#section-3.1]&lt;br /&gt;
&lt;br /&gt;
Ci è stata assegnata la rete &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;, che significa:&lt;br /&gt;
* tutto il traffico di Internet IPv6 diretto a un indirizzo che cade in 2001:470:c844::/48 verrà instradato verso il nostro VPS;&lt;br /&gt;
* abbiamo a disposizione ben 2&amp;lt;sup&amp;gt;80&amp;lt;/sup&amp;gt; indirizzi per pianificare la nostra rete come più ci aggrada;&lt;br /&gt;
&lt;br /&gt;
Lo so, dopo anni bui di NAT dopo NAT e carenza di indirizzi, questa sembra fantascienza.&lt;br /&gt;
&lt;br /&gt;
=== Routing ===&lt;br /&gt;
Si può decidere di instradare tutto il traffico IPv6 tramite il tunnel broker, senza mai utilizzare l'IPv6 assegnato dal provider.&lt;br /&gt;
&lt;br /&gt;
Se però il server dispone già di un IPv6 assegnato dal provider, probabilmente si vuole e si può:&lt;br /&gt;
* utilizzare il suo IPv6 per navigare dal server, usando il gateway del provider&lt;br /&gt;
* utilizzare il gateway del tunnel broker solo per instradare i pacchetti della rete /48 che è stata assegnata&lt;br /&gt;
&lt;br /&gt;
Al GOLEM abbiamo fatto questa seconda scelta.&lt;br /&gt;
Perciò, '''non''' si deve aggiungere il gateway del tunnel broker come default gateway della configurazione in ''/etc/network/interfaces'', ma si deve aggiungere una regola di routing a mano per la sottorete del GOLEM, di fatto implementando ''source routing''.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Chiamasi ''source routing'' l'instradamento dei pacchetti fatto in base al loro indirizzo sorgente e non quello di destinazione, che è il modo standard&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
1. Modificare ''/etc/iproute2/rt_tables'' aggiungendo una nuova tabella di routing:&lt;br /&gt;
 200	golemsix&lt;br /&gt;
&lt;br /&gt;
2. Aggiungere il routing dei pacchetti provenienti dalla sottorete del GOLEM automaticamente al post-up dell'interfaccia del tunnel in ''/etc/network/interfaces'':&lt;br /&gt;
  	post-up ip -6 rule add from 2001:470:c844::/48 table golemsix &amp;amp;&amp;amp; ip -6 rule add to 2001:470:c844::/48 table main &amp;amp;&amp;amp; ip -6 route add default via 2001:470:1f12:69::1 dev he6in4 table golemsix &amp;amp;&amp;amp; ip -6 route flush cache&lt;br /&gt;
 	pre-down ip -6 route del default via 2001:470:1f12:69::1 dev he6in4 table golemsix &amp;amp;&amp;amp; ip -6 rule del to 2001:470:c844::/48 table main &amp;amp;&amp;amp; ip -6 rule del from 2001:470:c844::/48 table golemsix &amp;amp;&amp;amp; ip -6 route flush cache&lt;br /&gt;
&lt;br /&gt;
Spiegazione:&lt;br /&gt;
* I pacchetti provenienti dalla sottorete del GOLEM devono utilizzare la tabella di routing &amp;lt;code&amp;gt;golemsix&amp;lt;/code&amp;gt;:&lt;br /&gt;
 ip -6 rule add from 2001:470:c844::/48 table golemsix&lt;br /&gt;
&lt;br /&gt;
* I pacchetti destinati alla sottorete del GOLEM devono utilizzare la tabella di routing &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, così da poter essere instradati correttamente anche ai soci collegati con la VPN Wireguard. Si noti che, se inserita in quest'ordine, questa seconda regola ha priorità sulla precedente, ed è quello che vogliamo.&lt;br /&gt;
 ip -6 rule add to 2001:470:c844::/48 table main&lt;br /&gt;
&lt;br /&gt;
* Il default gateway per i pacchetti che utilizzano la tabella di routing &amp;lt;code&amp;gt;golemsix&amp;lt;/code&amp;gt; è l'endpoint del tunnel broker&lt;br /&gt;
 ip -6 route add default via 2001:470:1f12:69::1 dev he6in4 table golemsix&lt;br /&gt;
&lt;br /&gt;
* Aggiorna la cache del routing:&lt;br /&gt;
 ip -6 route flush cache&lt;br /&gt;
&lt;br /&gt;
Analogamente, vengono eseguite le operazioni inverse quando viene spenta l'interfaccia di rete.&lt;br /&gt;
&lt;br /&gt;
=== Piano di indirizzamento ===&lt;br /&gt;
Chiamarlo ''piano di indirizzamento'' è fargli un complimento immeritato; chiamiamola ''guida ragionata all'assegnazione dei nostri indirizzi''.&lt;br /&gt;
&lt;br /&gt;
Sia dato l'indirizzo IPv6:&lt;br /&gt;
&lt;br /&gt;
 127                   79     63                         0&lt;br /&gt;
     2001 : 0470 : c844 : rrrr : xxxx : xxxx : xxxx : xxxx&lt;br /&gt;
&lt;br /&gt;
Siccome abbiamo 80 bit a disposizione e la rete più piccola che possiamo fare secondo RFC è di 64 bit, possiamo fare ben 2&amp;lt;sup&amp;gt;16&amp;lt;/sup&amp;gt; reti (''rrrr'' nell'esempio).&lt;br /&gt;
Per semplicità (perché alla fine è a questo che servono tutti questi indirizzi in IPv6), poniamo ''rrrr'' = ''uugy'', dove:&lt;br /&gt;
* ''uu'' (8 bit) identifica l'''utente'';&lt;br /&gt;
* ''g'' (4 bit) identifica il gateway dell'utente (2&amp;lt;sup&amp;gt;4&amp;lt;/sup = 16 gateway per utente)&lt;br /&gt;
* ''y'' (4 bit) identifica la ''sottorete personale'' di quel gateway dell'utente (2&amp;lt;sup&amp;gt;4&amp;lt;/sup&amp;gt; = 16 sottoreti per gateway)&lt;br /&gt;
&lt;br /&gt;
Il VPS instrada direttamente tutta la sottorete /60 verso il gateway dell'utente, il quale può decidere di suddividerla come preferisce su quel gateway, da un unica grande rete /60, a 16 &amp;quot;piccole&amp;quot; reti /64.&lt;br /&gt;
&lt;br /&gt;
Sono così riservate:&lt;br /&gt;
 00gy indirizzi di servizio per l'infrastruttura (OpenVPN)&lt;br /&gt;
 01gy indirizzi di servizio per l'infrastruttura (Wireguard)&lt;br /&gt;
 02gy Officina (16 gateway × 16 reti)&lt;br /&gt;
 03gy Socio-A (16 gateway × 16 reti)&lt;br /&gt;
 04gy Socio-B (16 gateway × 16 reti)&lt;br /&gt;
 05gy ...&lt;br /&gt;
&lt;br /&gt;
Il ''numero di rete'' &amp;lt;code&amp;gt;rrrr&amp;lt;/code&amp;gt; sarà usato:&lt;br /&gt;
* per instradare tutto il traffico diretto a &amp;lt;code&amp;gt;2001:470:c844:rrg0::/60&amp;lt;/code&amp;gt; verso il gateway dell'utente;&lt;br /&gt;
* per assegnare l'indirizzo &amp;lt;code&amp;gt;2001:470:c844::rrg0/64&amp;lt;/code&amp;gt; al gateway dell'utente nella rete di servizio;&lt;br /&gt;
Si noti la &amp;quot;piccola&amp;quot; differenza.&lt;br /&gt;
&lt;br /&gt;
Per esempio, supponiamo di voler attivare ''serverozzo'', per il quale:&lt;br /&gt;
* ''uu = 02'' (''02'' è l'utente ''Officina'')&lt;br /&gt;
* ''g = 0'' (''0'' il primo &amp;amp;mdash; e al momento unico &amp;amp;mdash; gateway in Officina)&lt;br /&gt;
allora:&lt;br /&gt;
* serverozzo avrà indirizzo &amp;lt;code&amp;gt;2001:470:c844::200/64&amp;lt;/code&amp;gt; lato VPN;&lt;br /&gt;
* tutto il traffico per &amp;lt;code&amp;gt;2001:470:c844:200::/60&amp;lt;/code&amp;gt; verrà instradato verso serverozzo;&lt;br /&gt;
&lt;br /&gt;
E su serverozzo potranno essere create fino a 16 reti, per esempio:&lt;br /&gt;
* per la rete cablata Ethernet dell'Officina (&amp;lt;code&amp;gt;2001:470:c844:200::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;ethI&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per la rete wireless dell'Officina (&amp;lt;code&amp;gt;2001:470:c844:201::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;wlan0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per la rete cablata bus RS-485 (&amp;lt;code&amp;gt;2001:470:c844:202::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;ttyS0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per le macchine virtuali su KVM (&amp;lt;code&amp;gt;2001:470:c844:203::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;vir0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per le macchine virtuali su docker (&amp;lt;code&amp;gt;2001:470:c844:204::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* ...&lt;br /&gt;
'''Nota:''' questo è solo un esempio, la configurazione finale su serverozzo è ancora in fase di definizione.&lt;br /&gt;
&lt;br /&gt;
Nella prima rete di servizio (&amp;lt;code&amp;gt;2001:470:c844::/64&amp;lt;/code&amp;gt;) ci sono:&lt;br /&gt;
* il VPS&lt;br /&gt;
* tutti i gateway&lt;br /&gt;
** per esempio, serverozzo&lt;br /&gt;
** per esempio, i gateway dei soci&lt;br /&gt;
I gateway dei soci non sono diversi da serverozzo, e tuttavia la loro configurazione può essere più semplice se invece che da gateway fungono come semplici end-point.&lt;br /&gt;
&lt;br /&gt;
Così organizzate, le risorse si esauriranno in questo ordine:&lt;br /&gt;
* la banda a disposizione del VPS (500M/500M);&lt;br /&gt;
* la capacità computazionale e di memoria del VPS per l'inoltro dei pacchetti;&lt;br /&gt;
* gli IPv6 (gli IPv6 non finiranno mai)&lt;br /&gt;
&lt;br /&gt;
Non essendo una rete a maglie, ma semplicemente un albero, il routing è definito staticamente.&lt;br /&gt;
Se la rete si evolverà e le singole &amp;quot;isole&amp;quot; dovessero iniziare a connettersi a maglia in maniera incontrollata, potranno essere impiegati algoritmi dinamici, ma considerata la dimensione del bacino di utenti, non dovrebbe essere necessario.&lt;br /&gt;
&lt;br /&gt;
== Installazione del server ==&lt;br /&gt;
La VPN del GOLEM può essere utilizzata per la navigazione in IPv6.&lt;br /&gt;
La VPN è realizzata per mezzo di Wireguard.&lt;br /&gt;
&lt;br /&gt;
A differenza di altri protocolli, come OpenVPN, Wireguard ha un approccio &amp;quot;peer to peer&amp;quot;, per cui la procedura di configurazione del server rispecchia per buona parte quella di ciascun client.&lt;br /&gt;
&lt;br /&gt;
Innanzitutto è necessario generare la coppia di chiavi pubblica/privata del server:&lt;br /&gt;
&lt;br /&gt;
 # wg genkey | tee /etc/wireguard/server.privkey | wg pubkey &amp;gt; /etc/wireguard/vpn.golem.linux.it.pubkey&lt;br /&gt;
&lt;br /&gt;
Per la configurazione è sufficiente creare un singolo file, ad esempio &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # Carica la chiave privata dal percorso dove la abbiamo generata precedentemente&lt;br /&gt;
 PostUp = wg set %i private-key /etc/wireguard/vpn.golem.linux.it.privkey&lt;br /&gt;
 # Porta UDP di ascolto del server, a piacere&lt;br /&gt;
 ListenPort = 51820&lt;br /&gt;
 # Indirizzo del server all'interno della VPN&lt;br /&gt;
 Address = 2001:470:c844:100::1&lt;br /&gt;
&lt;br /&gt;
Il server può essere avviato tramite ''systemd'', e con lo stesso sistema si può impostare l'avvio automatico.&lt;br /&gt;
Si noti che &amp;lt;code&amp;gt;@wg0&amp;lt;/code&amp;gt; corrisponde al file di configurazione precedentemente creato.&lt;br /&gt;
&lt;br /&gt;
 # systemctl start wg-quick@wg0&lt;br /&gt;
 # systemctl enable wg-quick@wg0&lt;br /&gt;
&lt;br /&gt;
== Aggiunta di un nuovo client ==&lt;br /&gt;
=== Configurazione lato server ===&lt;br /&gt;
il sysop aggiunge un blocco peer per ciascun client alla configurazione &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;, così:&lt;br /&gt;
&lt;br /&gt;
 ... altri client ...&lt;br /&gt;
 &lt;br /&gt;
 # porceddu.net.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = tHeClIeNtFaNtAsTiCpUbLiCkEy=&lt;br /&gt;
 AllowedIPs = 2001:470:c844:100::200/128, 2001:470:c844:200::/62&lt;br /&gt;
 &lt;br /&gt;
 ... altri client ...&lt;br /&gt;
&lt;br /&gt;
Altro che OpenVPN.&lt;br /&gt;
&lt;br /&gt;
=== Configurazione lato client ===&lt;br /&gt;
1. Lato client, generare una coppia di chiavi pubblica/privata e inviare la chiave pubblica al sysop.&lt;br /&gt;
&lt;br /&gt;
 $ wg genkey | tee client.example.com.privkey | wg pubkey &amp;gt; client.example.com.pubkey&lt;br /&gt;
&lt;br /&gt;
Il sysop si occuperà di aggiungere la chiave pubblica tra quelle consentite al server, sceglierà un indirizzo IP in base al piano di indirizzamento, e ve lo comunicherà.&lt;br /&gt;
&lt;br /&gt;
2. Creare un file di configurazione come segue, in cui scrivere opportunamente la vostra chiave privata e l'indirizzo IP assegnato. Prestare particolare attenzione a modificare i campi della sezione &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt;, come indicato nelle note.&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # PrivateKey = YoUrGoRgEoUsAnDsEcUrEpRiVaTeKeY=               # vedi note, scegliere questo...&lt;br /&gt;
 # PostUp = wg set %i private-key ./client.example.com.privkey # vedi note,                 ...oppure questo&lt;br /&gt;
 Address = 2001:470:c844:100::'''200'''/64                           # vedi note&lt;br /&gt;
 &lt;br /&gt;
 # vpn.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = w63aGvoyPaUTgA8nW/NJS6Qqp2hUFvHRBbIH8Qb5ISY=   &lt;br /&gt;
 AllowedIPs = 2000::/3                                      &lt;br /&gt;
 Endpoint = vpn.golem.linux.it:51280&lt;br /&gt;
 PersistentKeepalive = 37&lt;br /&gt;
&lt;br /&gt;
'''Note'''&lt;br /&gt;
* &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''locale'')&lt;br /&gt;
** scegliere una delle seguenti opzioni per indicare la chiave privata del client, scommentando la riga apposita.&lt;br /&gt;
*** ''PrivateKey'': chiave privata del client, da custodire con cura, inline&lt;br /&gt;
*** ''PostUp = command'': chiave privata del client, da custodire con cura, e caricata automaticamente da un file esterno (es. creato col comando mostrato in precedenza)&lt;br /&gt;
** ''Address'': indirizzo IP comunicato dal sysop: riportarlo accuratamente, altrimenti non sarà possibile utilizzare la VPN&lt;br /&gt;
* &amp;lt;code&amp;gt;[Peer]&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''remoto'' / server)&lt;br /&gt;
** ''PublicKey'': chiave pubblica del server (sì, è proprio quella)&lt;br /&gt;
** ''AllowedIPs'': indirizzi raggiungibili tramite la VPN, a scelta:&lt;br /&gt;
*** &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;: solo la [[IPv6 @ GOLEM | rete IPv6 virtuale del GOLEM]]&lt;br /&gt;
*** &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;: tutti gli indirizzi IPv6 (è possibile utilizzare la VPN del GOLEM per [[IPv6 @ GOLEM | navigare ''davvero'' in IPv6]])&lt;br /&gt;
** ''Endpoint'': indirizzo del server&lt;br /&gt;
** ''PersistentKeepalive'': timer per mantenimento del tunnel attivo (in secondi); particolarmente utile se l'indirizzo IP del client cambia o è soggetto a NAT&lt;br /&gt;
&lt;br /&gt;
La connessione può essere attivata tramite systemd come sul server (spostandola in ''/etc/wireguard/''), oppure manualmente utilizzando &amp;lt;code&amp;gt;wg-quick&amp;lt;/code&amp;gt;:&lt;br /&gt;
* Attivazione del tunnel&lt;br /&gt;
 wg-quick up client.example.conf&lt;br /&gt;
* Disattivazione del tunnel&lt;br /&gt;
 wg-quick down client.example.conf&lt;br /&gt;
&lt;br /&gt;
3. Provare il collegamento&lt;br /&gt;
 # ping 2001:470:c844:100::1    # server VPN, dentro al tunnel (per verificare se il collegamento funziona)&lt;br /&gt;
 # ping 2001:470:c844:100::200  # gateway in Officina (per verificare se il collegamento funziona; talvolta non raggiungibile se abbiamo staccato la luce)&lt;br /&gt;
 # ping ipv6.google.com         # per verificare l'accessibilità dell'Internet pubblico IPv6, nel caso non si abbia già accesso&lt;br /&gt;
&lt;br /&gt;
4. Successo!&lt;br /&gt;
* Se il client della VPN è un nodo foglia della rete, cioè non funge da gateway perché si deve collegare solo lui (es. smartphone), allora c'è già connettività IPv6 e non serve fare altro. È comunque consigliato leggere la sezione relativa al [[#Firewall | firewall]] per ragioni di sicurezza ed eventualmente attivarlo.&lt;br /&gt;
* Se invece il client è il gateway della rete IPv6 (es. ''serverozzo'', o il router di casa di uno dei soci che vuole navigare in IPv6), allora bisogna proseguire a configurarlo come indicato anche nella [[#Client_VPN_come_gateway | sezione apposita]].&lt;br /&gt;
&lt;br /&gt;
== Client VPN come gateway ==&lt;br /&gt;
=== Impostare il client VPN come gateway IPv6 per l'isola ===&lt;br /&gt;
==== Abilitare inoltro pacchetti IPv6 ====&lt;br /&gt;
Nel file ''/etc/sysctl.conf'':&lt;br /&gt;
 net.ipv6.conf.all.forwarding=1&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' la modifica non ha effetto immediato, ma è necessario un &amp;lt;code&amp;gt;sysctl --system&amp;lt;/code&amp;gt; o un riavvio.&lt;br /&gt;
&lt;br /&gt;
==== Installare e configurare radvd ====&lt;br /&gt;
''radvd'' è il demone di ''router advertisement''.&lt;br /&gt;
Per la configurazione automatica degli indirizzi e del gateway in IPv6 non è necessario un ''complesso'' server DHCP, ma vista la vastità dello spazio di indirizzamento (anche la rete più piccola ha ben 2&amp;lt;sup&amp;gt;64&amp;lt;/sup&amp;gt; indirizzi disponibili) basta il più semplice ''radvd''.&lt;br /&gt;
Un router con ''radvd'', a intervalli regolari, trasmette un messaggio in broadcast a tutti gli host della rete, informandoli sul prefisso di rete da utilizzare; a questo punto gli host possono autoconfigurarsi col metodo che preferiscono (es. [https://tools.ietf.org/search/rfc4862 SLAAC] con o senza [https://tools.ietf.org/html/rfc4941.html estensione per la privacy]).&lt;br /&gt;
&lt;br /&gt;
Installare ''radvd'':&lt;br /&gt;
 # apt install radvd&lt;br /&gt;
&lt;br /&gt;
Configurare il file ''/etc/radvd.conf'':&lt;br /&gt;
 interface ethI {&lt;br /&gt;
         AdvSendAdvert on;&lt;br /&gt;
         MinRtrAdvInterval 2;&lt;br /&gt;
         MaxRtrAdvInterval 10;&lt;br /&gt;
         prefix 2001:db8::/64 {&lt;br /&gt;
                 AdvOnLink on;&lt;br /&gt;
                 AdvAutonomous on;&lt;br /&gt;
                 AdvRouterAddr on;&lt;br /&gt;
         };&lt;br /&gt;
         RDNSS 2606:4700:4700::1111 {&lt;br /&gt;
                 AdvRDNSSLifetime 3600;&lt;br /&gt;
         };&lt;br /&gt;
 };&lt;br /&gt;
dove&lt;br /&gt;
* &amp;lt;code&amp;gt;interface ethI&amp;lt;/code&amp;gt; indica l'interfaccia interna su cui fare ''advertise'';&lt;br /&gt;
* &amp;lt;code&amp;gt;prefix 2001:db8::/64&amp;lt;/code&amp;gt; indica la rete a valle; (inserire quella comunicata dal sysop)&lt;br /&gt;
* &amp;lt;code&amp;gt;RDNSS 2606:4700:4700::1111&amp;lt;/code&amp;gt; indica il server DNS (nell'esempio specifico, CloudFlare);&lt;br /&gt;
** ''Nota:'' in seguito a questioni legali, OpenDNS non è al momento disponibile in Francia.&lt;br /&gt;
&lt;br /&gt;
Una volta abilitato ''radvd'' sull'interfaccia di rete desiderata, gli host inizieranno ad assegnarsi automaticamente un indirizzo tramite SLAAC, e potranno navigare in IPv6.&lt;br /&gt;
&lt;br /&gt;
==== Verificare il collegamento ====&lt;br /&gt;
Questo paragrafo contiene alcuni suggerimenti per la risoluzione dei problemi.&lt;br /&gt;
&lt;br /&gt;
# Collegare un client ignaro alla rete gestita dal nuovo gateway IPv6 (es. un computer terzo, tramite uno switch)&lt;br /&gt;
# Verificare che si auto-assegni un indirizzo IPv6 nella rete di cui viene fatto advertising dal router con &amp;lt;code&amp;gt;ip addr&amp;lt;/code&amp;gt;. Se non succede:&lt;br /&gt;
## verificare la configurazione di ''radvd'' sul gateway&lt;br /&gt;
## verificare che il computer riceva correttamente i pacchetti di router advertise (es. con wireshark)&lt;br /&gt;
## verificare che l'IPv6 sia abilitato sul sistema operativo e sull'interfaccia di rete (molto probabilmente è già abilitato)&lt;br /&gt;
# Pingare il gateway tramite il suo indirizzo IPv6. Se non funziona:&lt;br /&gt;
## controllare che il firewall del gateway o del computer non stia bloccando ICMPv6 (improbabile)&lt;br /&gt;
# Pingare un IPv6 appartenente alla rete del GOLEM (vedere la sezione sul client &amp;quot;foglia&amp;quot;) o all'Internet IPv6 pubblico. Se non funziona:&lt;br /&gt;
## verificare che il gateway inoltri correttamente i pacchetti dalla vostra isola locale alla VPN&lt;br /&gt;
## utilizzare &amp;lt;code&amp;gt;traceroute&amp;lt;/code&amp;gt; per determinare in quale punto dell'instradamento si bloccano i pacchetti&lt;br /&gt;
&lt;br /&gt;
Se tutto funziona, evviva: il livello di rete è configurato correttamente! (Ma attenzione all'MTU)&lt;br /&gt;
&lt;br /&gt;
==== Una nota sull'MTU del collegamento ====&lt;br /&gt;
Con la configurazione appena descritta, gli host crederanno di utilizzare una rete nativa dual-stack (o IPv6-only, nel caso non fosse previsto IPv4).&lt;br /&gt;
In realtà, però, i pacchetti IPv6 non sono &amp;quot;nativi&amp;quot;, bensì, una volta giunti al gateway, vengono poi incapsulati in maniera completamente trasparente.&lt;br /&gt;
&lt;br /&gt;
Ciò significa che gli host crederanno di poter generare pacchetti IPv6 della dimensione massima ammessa dal link a cui sono collegati (es. Ethernet, WiFi), che in genere è di 1500 bytes.&lt;br /&gt;
Però, pacchetti così grandi non possono essere incapsulati, in quanto anche il link che il gateway utilizza per la VPN, in genere, consente pacchetti di dimensione massima di 1500 bytes: non rimane spazio per l'incapsulamento.&lt;br /&gt;
&lt;br /&gt;
Questo può creare problemi, talvolta sporadici, non facilmente ripetibili, o ancora, dipendenti dal sito a cui si sta tentando di collegarsi, specialmente se si usa TCP.&lt;br /&gt;
Un sintomo molto comune è che, navigando sul web, si può rilevare che alcuni siti - ma solo alcuni, perfettamente funzionanti sia da IPv4 che da altre connessioni IPv6, vanno in timeout quando si prova ad accedervi.&lt;br /&gt;
&lt;br /&gt;
Questo succede perché TCP tenta di massimizzare la quantità di informazione contenuta all'interno di un pacchetto IP, generando pacchetti molto grandi, e talvolta raggiungendo il limite oltre il quale il pacchetto non può più essere incapsulato dal gateway.&lt;br /&gt;
&lt;br /&gt;
{{Template:Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Per verificare che il problema sia questo, provare a forzare una MTU artificialmente più bassa sulla scheda di rete, tramite il comando &amp;lt;code&amp;gt;ip link set enp1s0 mtu 1400&amp;lt;/code&amp;gt;, e poi verificare se il problema scompare.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Perciò, sarà necessario fare in modo che il gateway modifichi i pacchetti di handshake del TCP in maniera tale che non venga mai negoziata una ''Max Segment Size'' troppo alta per il link.&lt;br /&gt;
&lt;br /&gt;
===== Modificare la Max Segment Size =====&lt;br /&gt;
&lt;br /&gt;
{{Template:Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Abbassare la MSS elimina il problema, ma al contempo aumenta l'overhead, rendendo la connessione leggermente più lenta. È consigliabile trovare il giusto compromesso che soddisfi sia le esigenze di funzionamento che le esigenze in termini di prestazioni. Per farlo, ci si può aiutare con &amp;lt;code&amp;gt;tracepath&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* con un gateway Linux:&lt;br /&gt;
** TODO: è davvero necessario? Lo fa da solo?&lt;br /&gt;
* con un gateway Mikrotik:&lt;br /&gt;
 /ipv6/firewall/mangle/add out-interface=wg0 protocol=tcp tcp-flags=syn action=change-mss new-mss=1300 chain=forward tcp-mss=1301-65535&lt;br /&gt;
&lt;br /&gt;
== Firewall ==&lt;br /&gt;
=== Per il VPS ===&lt;br /&gt;
Inoltrare solo i pacchetti da/per le reti note.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text=Non ancora testato!&lt;br /&gt;
}}&lt;br /&gt;
 # ip6tables -A FORWARD -d 2001:470:c844::/48 -i he6in4 -j ACCEPT&lt;br /&gt;
 # ip6tables -A FORWARD -s 2001:470:c844::/48 -o he6in4 -j ACCEPT&lt;br /&gt;
 # ip6tables -P FORWARD DROP&lt;br /&gt;
&lt;br /&gt;
=== Per i client ===&lt;br /&gt;
Gli indirizzi IPv6 sono &amp;quot;tutti&amp;quot; pubblici. Gli indirizzi IPv6 forniti dal GOLEM sono pubblicamente instradabili. In più, il GOLEM non mette in atto '''nessuna''' misura atta a prevenire connessioni dirette verso gli host della VPN (al netto di configurazioni specifiche sulle macchine direttamente di proprietà del GOLEM).&lt;br /&gt;
Ciò significa che '''tutti''' gli host degli utenti/soci, compresi quelli domestici che sin'ora sono stati dietro a un (s)comodo NAT, possono essere acceduti attraverso la rete Internet globale, quando sono connessi alla VPN del GOLEM.&lt;br /&gt;
&lt;br /&gt;
Pertanto, è consigliato attivare degli strumenti atti a prevenire accessi indesiderati dall'esterno, come un firewall, in special modo se il proprio computer &amp;quot;fornisce servizi&amp;quot; (eg. condivisione di file via rete, server web di sviluppo, ...)&lt;br /&gt;
&lt;br /&gt;
==== Direttamente sull'host ====&lt;br /&gt;
Si può agire direttamente sugli host da proteggere (versione conservativa):&lt;br /&gt;
 # ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # ip6tables -A INPUT -p icmpv6 -j ACCEPT&lt;br /&gt;
 # ip6tables -P INPUT DROP&lt;br /&gt;
&lt;br /&gt;
In generale con Linux questa operazione non è comunque necessaria, perché tanto non vi sono servizi esposti a meno che non siano stati installati esplicitamente.&lt;br /&gt;
Si noti che ICMPv6 deve comunque sempre essere abilitato in quanto necessario al funzionamento di IPv6.&lt;br /&gt;
&lt;br /&gt;
Si può anche utilizzare una regola più rilassata (es. per sfruttare la VPN del GOLEM come VPN &amp;quot;personale&amp;quot; tra i propri host), tipo:&lt;br /&gt;
 # ip6tables -A INPUT -s 2001:470:c844:uu00::/56 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
Queste regole possono essere salvate in uno script, ad esempio &amp;lt;code&amp;gt;/etc/wireguard/wg0-postup.sh&amp;lt;/code&amp;gt;, ed invocate automaticamente all'atto della connessione alla VPN tramite la direttiva `PostUp` nel file di configurazione di WireGuard.&lt;br /&gt;
Sarà poi necessario aggiungere un equivalente PostDown che rimuova le regole all'atto della disconnessione.&lt;br /&gt;
&lt;br /&gt;
Ad esempio:&lt;br /&gt;
&lt;br /&gt;
 # /etc/wireguard/wg0.conf&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # ...                  &lt;br /&gt;
 # -----8&amp;lt;------&lt;br /&gt;
 # Possono coesistere anche più direttive PostUp/PostDown, aggiungere in coda:&lt;br /&gt;
 PostUp = /etc/wireguard/wg0-postup.sh&lt;br /&gt;
 PostDown = /etc/wireguard/wg0-postdown.sh&lt;br /&gt;
 # -----8&amp;lt;------&lt;br /&gt;
&lt;br /&gt;
 # /etc/wireguard/wg0-postup.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ip6tables -A INPUT -i wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 ip6tables -A INPUT -i wg0 -p icmpv6 -j ACCEPT&lt;br /&gt;
 ip6tables -P INPUT DROP&lt;br /&gt;
&lt;br /&gt;
 # /etc/wireguard/wg0-postdown.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ip6tables -D INPUT -i wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 ip6tables -D INPUT -i wg0 -p icmpv6 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=I pacchetti della VPN viaggiano crittografati sulla rete pubblica (almeno finché si trovano all'interno della VPN del GOLEM), ma sul server vengono decifrati e cifrati di nuovo per permetterne il routing!&lt;br /&gt;
In caso di compromissione del VPS del GOLEM, pertanto, i pacchetti non possono essere considerati al sicuro da sguardi indiscreti. È sempre buona norma utilizzare crittografia end-to-end, anche all'interno di una VPN.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Dal gateway ====&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text='''Nota bene''': salvare queste impostazioni, per esempio con &amp;lt;code&amp;gt;ip6tables-save&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;ip6tables-restore&amp;lt;/code&amp;gt;, altrimenti verranno perse al riavvio.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Invece di configurare il firewall su ogni host singolarmente, si può configurare il gateway una volta sola per proteggere tutta la rete a valle:&lt;br /&gt;
 # ip6tables -A FORWARD -s 2001:470:c844:rrrr::/64 -j ACCEPT&lt;br /&gt;
 # ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # ip6tables -P FORWARD DROP&lt;br /&gt;
&lt;br /&gt;
Nell'ordine:&lt;br /&gt;
* blocca l'inoltro di tutti i pacchetti&lt;br /&gt;
* abilita l'inoltro dei pacchetti in uscita dalla rete&lt;br /&gt;
* abilita l'inoltro dei pacchetti correlati a connessioni già stabilite&lt;br /&gt;
&lt;br /&gt;
Questo impedisce l'accesso indesiderato a tutti gli host della rete, compresi gli host con Windows che possono starsene &amp;quot;sicuri&amp;quot; anche senza il firewall, pur esponendo servizi (NetBIOS, Samba).&lt;br /&gt;
&lt;br /&gt;
===== Eccezioni =====&lt;br /&gt;
Se si desidera comunque rendere accessibile un proprio server in particolare, è possibile istruire il gateway con un'eccezione, aggiungendo:&lt;br /&gt;
 # ip6tables -A FORWARD -d 2001:470:c844:rrrr::host -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
Questo è qualcosa che &amp;quot;assomiglia&amp;quot; vagamente al vecchio ''port forwarding''.&lt;br /&gt;
&lt;br /&gt;
=== Torrent ===&lt;br /&gt;
La banda è limitata, e non è consentito traffico di materiale illegale. Occore limitare il traffico ''bit-torrent'' almeno al gateway finale (VPS).&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text=TODO: Questa sezione è da fare!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Risoluzione problemi =&lt;br /&gt;
== Geolocalizzazione ==&lt;br /&gt;
Il tunnel è localizzato in Francia.&lt;br /&gt;
A causa di restrizioni imposte a causa del diritto d'autore, alcuni siti, specialmente di streaming video, come Netflix, Rai.tv o Youtube, potrebbero bloccare l'accesso ai contenuti italiani dal tunnel francese.&lt;br /&gt;
Per inibire temporaneamente l'uso del tunnel IPv6 su un host:&lt;br /&gt;
 # sysctl -w net.ipv6.conf.all.disable_ipv6=1&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Howto]]&lt;br /&gt;
[[Categoria:Officina]]&lt;br /&gt;
[[Category:Sysop]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=IPv6_@_GOLEM&amp;diff=9647</id>
		<title>IPv6 @ GOLEM</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=IPv6_@_GOLEM&amp;diff=9647"/>
		<updated>2025-02-27T16:53:16Z</updated>

		<summary type="html">&lt;p&gt;Giomba: /* Correzione piccoli refusi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Due parole su questa pagina ==&lt;br /&gt;
Questa pagina è un maldestro tentativo:&lt;br /&gt;
* per riassumere le ragioni che ci hanno portato a decidere di dotarci di IPv6;&lt;br /&gt;
* per documentare la nostra infrastruttura di rete;&lt;br /&gt;
&lt;br /&gt;
=== A chi si rivolge questa pagina ===&lt;br /&gt;
* se sei l''''amministratore di rete''', buona lettura :-)&lt;br /&gt;
* se sei un '''socio''', vedi come [[#Configurazione_lato_client | configurare il tuo client]]; è sufficiente leggere solo questo paragrafo.&lt;br /&gt;
&lt;br /&gt;
== Due parole sull'IPv6 ==&lt;br /&gt;
[https://it.wikipedia.org/wiki/IPv6 IPv6] è un &amp;quot;nuovo&amp;quot; protocollo a livello di rete che da diversi anni sta sostituendo IPv4.&lt;br /&gt;
Le novità introdotte da IPv6 sono molteplici; tra queste, quella che balza immediatamente all'occhio è l'enorme dimensione dello spazio di indirizzamento.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Protocollo'''&lt;br /&gt;
| '''lunghezza indirizzo'''&lt;br /&gt;
| '''numero indirizzi'''&lt;br /&gt;
|-&lt;br /&gt;
| IPv4&lt;br /&gt;
| 32 bit&lt;br /&gt;
| 2&amp;lt;sup&amp;gt;32&amp;lt;/sup&amp;gt; = 4 miliardi&lt;br /&gt;
|-&lt;br /&gt;
| IPv6&lt;br /&gt;
| 128 bit&lt;br /&gt;
| 2&amp;lt;sup&amp;gt;128&amp;lt;/sup&amp;gt; = 256 miliardi di miliardi di miliardi di miliardi&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Su questo pianeta vi sono circa 8 miliardi di persone [https://it.wikipedia.org/wiki/Popolazione_mondiale], di cui la metà [http://www.lastampa.it/2018/01/31/tecnologia/gli-utenti-di-internet-sono-pi-di-quattro-miliardi-nel-mondo-milioni-in-italia-wMxQskzXeabwa3wgWI2jUO/pagina.html] è connessa a Internet, e nei paesi sviluppati hanno anche più di un dispositivo connesso. Si aggiungano i numerosissimi apparati di rete e server necessari per il funzionamento dell'infrastruttura e la fornitura di servizi, e si può facilmente intuire che IPv4 non è più sufficiente per le attuali necessità.&lt;br /&gt;
&lt;br /&gt;
Mentre questa pagina veniva scritta, gli IPv4 stavano finendo [https://en.wikipedia.org/wiki/IPv4_address_exhaustion].&lt;br /&gt;
Nel novembre 2019, il RIPE (il registro europeo) ha terminato l'assegnazione degli ultimi indirizzi IPv4 assegnati all'Europa, [https://www.ripe.net/publications/ipv6-info-centre/about-ipv6/ipv4-exhaustion/ipv4-available-pool] e adesso vengono solo riutilizzati quelli vecchi, che significa che:&lt;br /&gt;
* non ci sono più indirizzi &amp;quot;nuovi&amp;quot; e dunque non è più possibile richiederli con facilità;&lt;br /&gt;
* se si vogliono degli indirizzi IPv4, si viene messi in lista d'attesa, finché il precedente proprietario fallisce e rilascia i propri.&lt;br /&gt;
&lt;br /&gt;
=== IPv4 vs IPv6 ===&lt;br /&gt;
==== Notazione ====&lt;br /&gt;
* IPv4 &amp;amp;rarr; 4 byte rappresentati con numeri decimali separati da un punto, es: &amp;lt;code&amp;gt;192.0.2.127&amp;lt;/code&amp;gt;&lt;br /&gt;
* IPv6 &amp;amp;rarr; 16 byte, ogni byte è rappresentato da due cifre esadecimali; ogni 4 cifre esadecimali si inseriscono i ''due punti'' &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;; come in IPv4 è possibile omettere gli zeri in testa; la più lunga sequenza di zeri allineata a 4 può essere omessa per intero; esempi (indirizzi equivalenti):&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:0470:c844:0020:0000:0000:0000:0001&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:470:c844:20:0:0:0:1&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:470:c844:20::1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipi di indirizzi ====&lt;br /&gt;
* IPv6 Reference Card by RIPE [https://www.ripe.net/manage-ips-and-asns/ipv6/ipv6-address-types/ipv6_reference_card_July2015.pdf]&lt;br /&gt;
&lt;br /&gt;
Riassunto:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''IPv6'''&lt;br /&gt;
| '''Equivalente IPv4'''&lt;br /&gt;
| '''Significato'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;::1/128&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo loopback&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fc00::/7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;192.168.0.0/16&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;10.0.0.0/8&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;172.16.0.0/12&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo privato&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fe80::/10&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;169.254.0.0/16&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo link-local (univoco nella rete locale, e autoassegnato)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2001:db8::/32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;192.0.2.0/24&amp;lt;/code&amp;gt;&lt;br /&gt;
| Esempi e documentazione&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| Indirizzi unicast globalmente raggiungibili&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Indirizzi pubblici vs privati ====&lt;br /&gt;
Gli IPv6 sono così tanti che non c'è bisogno di utilizzare indirizzi privati: niente NAT, niente port-forwarding. Questo restituisce connettività end-to-end ai dispositivi e apre numerose nuove possibilità di impiego, rimaste nascoste per anni a causa della scarsità di IPv4 e degli osceni espedienti inventati. Una banalità: non sarà più necessario passare attraverso un server terzo per condividere documenti, chattare o telefonare ai propri contatti.&lt;br /&gt;
&lt;br /&gt;
Se necessarie, le caratteristiche di &amp;quot;sicurezza&amp;quot; introdotte dal NAT possono essere sostituite e accorpate a un banale firewall.&lt;br /&gt;
&lt;br /&gt;
==== Progettazione di una rete ====&lt;br /&gt;
Nel progettare una rete con IPv4, la necessità principale è quella di risparmiare sugli indirizzi, perciò vengono usati prefissi di rete di varia lunghezza.&lt;br /&gt;
Nel progettare una rete con IPv6, si hanno a disposizione così tanti indirizzi che conviene utilizzarli in maniera da renderne più agevole una distribuzione logica.&lt;br /&gt;
&lt;br /&gt;
Sono così identificate le seguenti dimensioni standard per le reti IPv6 (nulla vieta di usare dimensioni personalizzate):&lt;br /&gt;
* '''/126''': contiene 2 soli host, utilizzata per i collegamenti punto-punto nell'infrastruttura di rete;&lt;br /&gt;
* '''/64''': è la più piccola rete che dovrebbe essere fatta; dimensione utilizzata nelle LAN; lo spazio di indirizzamento è esageratamente sovradimensionato ed è sufficiente per qualunque LAN immaginabile (è 4 miliardi di volte più grande di tutta la rete Internet IPv4); viene usata in ambito domestico;&lt;br /&gt;
* '''/56''': contiene 256 reti di dimensione /64, viene usata in ambito domestico o per piccole imprese;&lt;br /&gt;
* '''/48''': contiene 65536 reti di dimensione /64, viene usata in ambito aziendale;&lt;br /&gt;
&lt;br /&gt;
Le LAN non devono avere un prefisso più lungo di /64, perché molte nuove funzionalità introdotte con IPv6 (es SLAAC, Privacy Extension, ...), e anche funzionalità che saranno introdotte in futuro, daranno per scontato che le reti abbiano almeno questa dimensione.&lt;br /&gt;
&lt;br /&gt;
=== Ottenere connettività IPv6 ===&lt;br /&gt;
* si può richiedere nativamente al proprio ISP. Quando è stata scritta questa pagina, in Italia non erano molti gli operatori che fornivano connettività IPv6 nativa; adesso sono di più, perché gli IPv4 sono finiti, e non sarebbe altrimenti possibile fare business, ma alcuni operatori (specialmente quelli più grandi e noti), ancora non forniscono connettività IPv6 nativa;&lt;br /&gt;
* si possono fare dei tunnel che veicolano il traffico IPv6 all'interno dei pacchetti IPv4 (sprecando un po' di banda);&lt;br /&gt;
&lt;br /&gt;
Tunnel:&lt;br /&gt;
* pro:&lt;br /&gt;
** molti sono gratuiti;&lt;br /&gt;
* contro:&lt;br /&gt;
** spreco di banda per incapsulare i pacchetti (qualche decina di byte in più per ogni pacchetto, circa 20 ogni 1500);&lt;br /&gt;
** maggiore latenza;&lt;br /&gt;
** alcuni richiedono un indirizzo IPv4 statico; altri richiedono complicate configurazioni per l'uso con indirizzi dinamici;&lt;br /&gt;
** alcuni non funzionano dietro NAT (la quasi totalità delle reti domestiche);&lt;br /&gt;
&lt;br /&gt;
== Considerazioni e descrizione generale ==&lt;br /&gt;
&lt;br /&gt;
Come portare IPv6 al GOLEM?&lt;br /&gt;
&lt;br /&gt;
È stato realizzato un tunnel tra un intermediario e il nostro VPS. L'intermediario inoltra al VPS tutti i pacchetti destinati alla nostra rete.&lt;br /&gt;
La nostra rete viene scomposta in sottoreti: una rete di backbone, una per l'officina e una per ogni altro punto di accesso necessario, es. uno per ogni abitazione dei soci.&lt;br /&gt;
Il VPS conosce le rotte per raggiungere ogni singola sottorete e inoltra i pacchetti che riceve dall'intermediario verso il giusto router di ogni punto di accesso.&lt;br /&gt;
Il router del punto di accesso inoltra i pacchetti allo specifico host destinatario.&lt;br /&gt;
&lt;br /&gt;
Si procede analogamente a ritroso.&lt;br /&gt;
&lt;br /&gt;
In figura è mostrata la prima versione di visione ''logica'' della rete realizzata:&lt;br /&gt;
* '''HE''' (Hurricane Electric) è il provider fornitore IPv6;&lt;br /&gt;
* '''OVH''' è il nostro provider per il VPS;&lt;br /&gt;
* '''VPS''' è il nostro VPS;&lt;br /&gt;
* '''serverozzo''' è il gateway in [[Officina Informatica]];&lt;br /&gt;
&lt;br /&gt;
Per permettere il collegamento tra il VPS e un punto di accesso (anche noto in questa pagina come ''gateway dell'utente''), non essendo possibile stendere dei cavi fisici in giro per l'Europa, utilizzeremo la nostra VPN.&lt;br /&gt;
Esistono delle pagine dedicate per la documentazione sulla [[Rete del GOLEM]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tunnel-ipv6.jpeg|Il primo prototipo della rete del GOLEM, con la VPN e il tunnel IPv6.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Iniziare: rete /64 ==&lt;br /&gt;
Sono l'amministratore di rete e voglio attivare il tunnel IPv6 per la prima volta. Come iniziare?&lt;br /&gt;
&lt;br /&gt;
Ci si registra su [https://tunnelbroker.net/ TunnelBroker] e viene assegnata d'ufficio una rete IPv6 ''/64''.&lt;br /&gt;
&lt;br /&gt;
Il broker comunica i dettagli del suo PoP (''Point of Presence''):&lt;br /&gt;
 IPv4: 216.66.84.42&lt;br /&gt;
 IPv6: 2001:470:1f12:69::1&lt;br /&gt;
&lt;br /&gt;
L'IPv6 sarà utilizzato sul collegamento ''tunnel virtuale'', collegato all'interfaccia del VPS che chiameremo ''he6in4''. Dalla nostra parte, ''he6in4'' avrà come indirizzo &amp;lt;code&amp;gt;2001:470:1f12:69::2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Attiviamo il tunnel, aggiungendo questo al ''/etc/network/interfaces'':&lt;br /&gt;
&lt;br /&gt;
 auto he6in4&lt;br /&gt;
 iface he6in4 inet6 v4tunnel&lt;br /&gt;
 	address 2001:470:1f12:69::2/64&lt;br /&gt;
         endpoint 216.66.84.42&lt;br /&gt;
         local 152.228.140.73&lt;br /&gt;
         ttl 255&lt;br /&gt;
&lt;br /&gt;
Se si vuole utilizzare il tunnel come default gateway, aggiungere anche:&lt;br /&gt;
 	gateway 2001:470:1f12:69::1&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning&lt;br /&gt;
|text=È possibile utilizzare un solo default gateway su Linux, perciò assicurarsi di non confliggere con la configurazione IPv6 del vostro provider (se c'è)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
e verificare la connettività tra il VPS e il PoP del broker con:&lt;br /&gt;
 $ ip -6 addr&lt;br /&gt;
 $ ping 2001:470:1f12:69::1&lt;br /&gt;
e la connettività con l'Internet IPv6 con:&lt;br /&gt;
 $ ping 2a00:1450:4002:80a::200e&lt;br /&gt;
che, per completezza, è l'IPv6 di &amp;lt;code&amp;gt;ipv6.google.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nella maggior parte dei casi il server DNS IPv4 usato sin'ora ha anche il supporto per risolvere nomi IPv6.&lt;br /&gt;
&lt;br /&gt;
Probabilmente però '''non''' si vorrà utilizzare questa configurazione, bensì sfruttare la rete /48 come spiegato nel prossimo paragrafo.&lt;br /&gt;
&lt;br /&gt;
== Rete /48 ==&lt;br /&gt;
Siccome una rete IPv6 fisica (per esempio, una rete domestica) ha dimensione /64, ma il GOLEM, a sua volta, diventa provider per i soci, noi vogliamo tante reti, per l'officina e per i soci, richiediamo manualmente una ''/48''. Non ci piace essere spreconi, ma ci piace rispettare ''anche'' le RFC: a new era of Internet: [https://tools.ietf.org/html/rfc3177] [https://tools.ietf.org/html/rfc5375#section-3.1]&lt;br /&gt;
&lt;br /&gt;
Ci è stata assegnata la rete &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;, che significa:&lt;br /&gt;
* tutto il traffico di Internet IPv6 diretto a un indirizzo che cade in 2001:470:c844::/48 verrà instradato verso il nostro VPS;&lt;br /&gt;
* abbiamo a disposizione ben 2&amp;lt;sup&amp;gt;80&amp;lt;/sup&amp;gt; indirizzi per pianificare la nostra rete come più ci aggrada;&lt;br /&gt;
&lt;br /&gt;
Lo so, dopo anni bui di NAT dopo NAT e carenza di indirizzi, questa sembra fantascienza.&lt;br /&gt;
&lt;br /&gt;
=== Routing ===&lt;br /&gt;
Si può decidere di instradare tutto il traffico IPv6 tramite il tunnel broker, senza mai utilizzare l'IPv6 assegnato dal provider.&lt;br /&gt;
&lt;br /&gt;
Se però il server dispone già di un IPv6 assegnato dal provider, probabilmente si vuole e si può:&lt;br /&gt;
* utilizzare il suo IPv6 per navigare dal server, usando il gateway del provider&lt;br /&gt;
* utilizzare il gateway del tunnel broker solo per instradare i pacchetti della rete /48 che è stata assegnata&lt;br /&gt;
&lt;br /&gt;
Al GOLEM abbiamo fatto questa seconda scelta.&lt;br /&gt;
Perciò, '''non''' si deve aggiungere il gateway del tunnel broker come default gateway della configurazione in ''/etc/network/interfaces'', ma si deve aggiungere una regola di routing a mano per la sottorete del GOLEM, di fatto implementando ''source routing''.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Chiamasi ''source routing'' l'instradamento dei pacchetti fatto in base al loro indirizzo sorgente e non quello di destinazione, che è il modo standard&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
1. Modificare ''/etc/iproute2/rt_tables'' aggiungendo una nuova tabella di routing:&lt;br /&gt;
 200	golemsix&lt;br /&gt;
&lt;br /&gt;
2. Aggiungere il routing dei pacchetti provenienti dalla sottorete del GOLEM automaticamente al post-up dell'interfaccia del tunnel in ''/etc/network/interfaces'':&lt;br /&gt;
  	post-up ip -6 rule add from 2001:470:c844::/48 table golemsix &amp;amp;&amp;amp; ip -6 rule add to 2001:470:c844::/48 table main &amp;amp;&amp;amp; ip -6 route add default via 2001:470:1f12:69::1 dev he6in4 table golemsix &amp;amp;&amp;amp; ip -6 route flush cache&lt;br /&gt;
 	pre-down ip -6 route del default via 2001:470:1f12:69::1 dev he6in4 table golemsix &amp;amp;&amp;amp; ip -6 rule del to 2001:470:c844::/48 table main &amp;amp;&amp;amp; ip -6 rule del from 2001:470:c844::/48 table golemsix &amp;amp;&amp;amp; ip -6 route flush cache&lt;br /&gt;
&lt;br /&gt;
Spiegazione:&lt;br /&gt;
* I pacchetti provenienti dalla sottorete del GOLEM devono utilizzare la tabella di routing &amp;lt;code&amp;gt;golemsix&amp;lt;/code&amp;gt;:&lt;br /&gt;
 ip -6 rule add from 2001:470:c844::/48 table golemsix&lt;br /&gt;
&lt;br /&gt;
* I pacchetti destinati alla sottorete del GOLEM devono utilizzare la tabella di routing &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, così da poter essere instradati correttamente anche ai soci collegati con la VPN Wireguard. Si noti che, se inserita in quest'ordine, questa seconda regola ha priorità sulla precedente, ed è quello che vogliamo.&lt;br /&gt;
 ip -6 rule add to 2001:470:c844::/48 table main&lt;br /&gt;
&lt;br /&gt;
* Il default gateway per i pacchetti che utilizzano la tabella di routing &amp;lt;code&amp;gt;golemsix&amp;lt;/code&amp;gt; è l'endpoint del tunnel broker&lt;br /&gt;
 ip -6 route add default via 2001:470:1f12:69::1 dev he6in4 table golemsix&lt;br /&gt;
&lt;br /&gt;
* Aggiorna la cache del routing:&lt;br /&gt;
 ip -6 route flush cache&lt;br /&gt;
&lt;br /&gt;
Analogamente, vengono eseguite le operazioni inverse quando viene spenta l'interfaccia di rete.&lt;br /&gt;
&lt;br /&gt;
=== Piano di indirizzamento ===&lt;br /&gt;
Chiamarlo ''piano di indirizzamento'' è fargli un complimento immeritato; chiamiamola ''guida ragionata all'assegnazione dei nostri indirizzi''.&lt;br /&gt;
&lt;br /&gt;
Sia dato l'indirizzo IPv6:&lt;br /&gt;
&lt;br /&gt;
 127                   79     63                         0&lt;br /&gt;
     2001 : 0470 : c844 : rrrr : xxxx : xxxx : xxxx : xxxx&lt;br /&gt;
&lt;br /&gt;
Siccome abbiamo 80 bit a disposizione e la rete più piccola che possiamo fare secondo RFC è di 64 bit, possiamo fare ben 2&amp;lt;sup&amp;gt;16&amp;lt;/sup&amp;gt; reti (''rrrr'' nell'esempio).&lt;br /&gt;
Per semplicità (perché alla fine è a questo che servono tutti questi indirizzi in IPv6), poniamo ''rrrr'' = ''uugy'', dove:&lt;br /&gt;
* ''uu'' (8 bit) identifica l'''utente'';&lt;br /&gt;
* ''g'' (4 bit) identifica il gateway dell'utente (2&amp;lt;sup&amp;gt;4&amp;lt;/sup = 16 gateway per utente)&lt;br /&gt;
* ''y'' (4 bit) identifica la ''sottorete personale'' di quel gateway dell'utente (2&amp;lt;sup&amp;gt;4&amp;lt;/sup&amp;gt; = 16 sottoreti per gateway)&lt;br /&gt;
&lt;br /&gt;
Il VPS instrada direttamente tutta la sottorete /60 verso il gateway dell'utente, il quale può decidere di suddividerla come preferisce su quel gateway, da un unica grande rete /60, a 16 &amp;quot;piccole&amp;quot; reti /64.&lt;br /&gt;
&lt;br /&gt;
Sono così riservate:&lt;br /&gt;
 00gy indirizzi di servizio per l'infrastruttura (OpenVPN)&lt;br /&gt;
 01gy indirizzi di servizio per l'infrastruttura (Wireguard)&lt;br /&gt;
 02gy Officina (16 gateway × 16 reti)&lt;br /&gt;
 03gy Socio-A (16 gateway × 16 reti)&lt;br /&gt;
 04gy Socio-B (16 gateway × 16 reti)&lt;br /&gt;
 05gy ...&lt;br /&gt;
&lt;br /&gt;
Il ''numero di rete'' &amp;lt;code&amp;gt;rrrr&amp;lt;/code&amp;gt; sarà usato:&lt;br /&gt;
* per instradare tutto il traffico diretto a &amp;lt;code&amp;gt;2001:470:c844:rrg0::/60&amp;lt;/code&amp;gt; verso il gateway dell'utente;&lt;br /&gt;
* per assegnare l'indirizzo &amp;lt;code&amp;gt;2001:470:c844::rrg0/64&amp;lt;/code&amp;gt; al gateway dell'utente nella rete di servizio;&lt;br /&gt;
Si noti la &amp;quot;piccola&amp;quot; differenza.&lt;br /&gt;
&lt;br /&gt;
Per esempio, supponiamo di voler attivare ''serverozzo'', per il quale:&lt;br /&gt;
* ''uu = 02'' (''02'' è l'utente ''Officina'')&lt;br /&gt;
* ''g = 0'' (''0'' il primo &amp;amp;mdash; e al momento unico &amp;amp;mdash; gateway in Officina)&lt;br /&gt;
allora:&lt;br /&gt;
* serverozzo avrà indirizzo &amp;lt;code&amp;gt;2001:470:c844::200/64&amp;lt;/code&amp;gt; lato VPN;&lt;br /&gt;
* tutto il traffico per &amp;lt;code&amp;gt;2001:470:c844:200::/60&amp;lt;/code&amp;gt; verrà instradato verso serverozzo;&lt;br /&gt;
&lt;br /&gt;
E su serverozzo potranno essere create fino a 16 reti, per esempio:&lt;br /&gt;
* per la rete cablata Ethernet dell'Officina (&amp;lt;code&amp;gt;2001:470:c844:200::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;ethI&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per la rete wireless dell'Officina (&amp;lt;code&amp;gt;2001:470:c844:201::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;wlan0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per la rete cablata bus RS-485 (&amp;lt;code&amp;gt;2001:470:c844:202::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;ttyS0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per le macchine virtuali su KVM (&amp;lt;code&amp;gt;2001:470:c844:203::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;vir0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per le macchine virtuali su docker (&amp;lt;code&amp;gt;2001:470:c844:204::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* ...&lt;br /&gt;
'''Nota:''' questo è solo un esempio, la configurazione finale su serverozzo è ancora in fase di definizione.&lt;br /&gt;
&lt;br /&gt;
Nella prima rete di servizio (&amp;lt;code&amp;gt;2001:470:c844::/64&amp;lt;/code&amp;gt;) ci sono:&lt;br /&gt;
* il VPS&lt;br /&gt;
* tutti i gateway&lt;br /&gt;
** per esempio, serverozzo&lt;br /&gt;
** per esempio, i gateway dei soci&lt;br /&gt;
I gateway dei soci non sono diversi da serverozzo, e tuttavia la loro configurazione può essere più semplice se invece che da gateway fungono come semplici end-point.&lt;br /&gt;
&lt;br /&gt;
Così organizzate, le risorse si esauriranno in questo ordine:&lt;br /&gt;
* la banda a disposizione del VPS (500M/500M);&lt;br /&gt;
* la capacità computazionale e di memoria del VPS per l'inoltro dei pacchetti;&lt;br /&gt;
* gli IPv6 (gli IPv6 non finiranno mai)&lt;br /&gt;
&lt;br /&gt;
Non essendo una rete a maglie, ma semplicemente un albero, il routing è definito staticamente.&lt;br /&gt;
Se la rete si evolverà e le singole &amp;quot;isole&amp;quot; dovessero iniziare a connettersi a maglia in maniera incontrollata, potranno essere impiegati algoritmi dinamici, ma considerata la dimensione del bacino di utenti, non dovrebbe essere necessario.&lt;br /&gt;
&lt;br /&gt;
== Installazione del server ==&lt;br /&gt;
La VPN del GOLEM può essere utilizzata per la navigazione in IPv6.&lt;br /&gt;
La VPN è realizzata per mezzo di Wireguard.&lt;br /&gt;
&lt;br /&gt;
A differenza di altri protocolli, come OpenVPN, Wireguard ha un approccio &amp;quot;peer to peer&amp;quot;, per cui la procedura di configurazione del server rispecchia per buona parte quella di ciascun client.&lt;br /&gt;
&lt;br /&gt;
Innanzitutto è necessario generare la coppia di chiavi pubblica/privata del server:&lt;br /&gt;
&lt;br /&gt;
 # wg genkey | tee /etc/wireguard/server.privkey | wg pubkey &amp;gt; /etc/wireguard/vpn.golem.linux.it.pubkey&lt;br /&gt;
&lt;br /&gt;
Per la configurazione è sufficiente creare un singolo file, ad esempio &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # Carica la chiave privata dal percorso dove la abbiamo generata precedentemente&lt;br /&gt;
 PostUp = wg set %i private-key /etc/wireguard/vpn.golem.linux.it.privkey&lt;br /&gt;
 # Porta UDP di ascolto del server, a piacere&lt;br /&gt;
 ListenPort = 51820&lt;br /&gt;
 # Indirizzo del server all'interno della VPN&lt;br /&gt;
 Address = 2001:470:c844:100::1&lt;br /&gt;
&lt;br /&gt;
Il server può essere avviato tramite ''systemd'', e con lo stesso sistema si può impostare l'avvio automatico.&lt;br /&gt;
Si noti che &amp;lt;code&amp;gt;@wg0&amp;lt;/code&amp;gt; corrisponde al file di configurazione precedentemente creato.&lt;br /&gt;
&lt;br /&gt;
 # systemctl start wg-quick@wg0&lt;br /&gt;
 # systemctl enable wg-quick@wg0&lt;br /&gt;
&lt;br /&gt;
== Aggiunta di un nuovo client ==&lt;br /&gt;
=== Configurazione lato server ===&lt;br /&gt;
il sysop aggiunge un blocco peer per ciascun client alla configurazione &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;, così:&lt;br /&gt;
&lt;br /&gt;
 ... altri client ...&lt;br /&gt;
 &lt;br /&gt;
 # porceddu.net.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = tHeClIeNtFaNtAsTiCpUbLiCkEy=&lt;br /&gt;
 AllowedIPs = 2001:470:c844:100::200/128, 2001:470:c844:200::/62&lt;br /&gt;
 &lt;br /&gt;
 ... altri client ...&lt;br /&gt;
&lt;br /&gt;
Altro che OpenVPN.&lt;br /&gt;
&lt;br /&gt;
=== Configurazione lato client ===&lt;br /&gt;
1. Lato client, generare una coppia di chiavi pubblica/privata e inviare la chiave pubblica al sysop.&lt;br /&gt;
&lt;br /&gt;
 $ wg genkey | tee client.example.com.privkey | wg pubkey &amp;gt; client.example.com.pubkey&lt;br /&gt;
&lt;br /&gt;
Il sysop si occuperà di aggiungere la chiave pubblica tra quelle consentite al server, sceglierà un indirizzo IP in base al piano di indirizzamento, e ve lo comunicherà.&lt;br /&gt;
&lt;br /&gt;
2. Creare un file di configurazione come segue, in cui scrivere opportunamente la vostra chiave privata e l'indirizzo IP assegnato. Prestare particolare attenzione a modificare i campi della sezione &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt;, come indicato nelle note.&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # PrivateKey = YoUrGoRgEoUsAnDsEcUrEpRiVaTeKeY=               # vedi note, scegliere questo...&lt;br /&gt;
 # PostUp = wg set %i private-key ./client.example.com.privkey # vedi note,                 ...oppure questo&lt;br /&gt;
 Address = 2001:470:c844:100::'''200'''/64                           # vedi note&lt;br /&gt;
 &lt;br /&gt;
 # vpn.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = w63aGvoyPaUTgA8nW/NJS6Qqp2hUFvHRBbIH8Qb5ISY=   &lt;br /&gt;
 AllowedIPs = 2000::/3                                      &lt;br /&gt;
 Endpoint = vpn.golem.linux.it:51280&lt;br /&gt;
 PersistentKeepalive = 37&lt;br /&gt;
&lt;br /&gt;
'''Note'''&lt;br /&gt;
* &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''locale'')&lt;br /&gt;
** scegliere una delle seguenti opzioni per indicare la chiave privata del client, scommentando la riga apposita.&lt;br /&gt;
*** ''PrivateKey'': chiave privata del client, da custodire con cura, inline&lt;br /&gt;
*** ''PostUp = command'': chiave privata del client, da custodire con cura, e caricata automaticamente da un file esterno (es. creato col comando mostrato in precedenza)&lt;br /&gt;
** ''Address'': indirizzo IP comunicato dal sysop: riportarlo accuratamente, altrimenti non sarà possibile utilizzare la VPN&lt;br /&gt;
* &amp;lt;code&amp;gt;[Peer]&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''remoto'' / server)&lt;br /&gt;
** ''PublicKey'': chiave pubblica del server (sì, è proprio quella)&lt;br /&gt;
** ''AllowedIPs'': indirizzi raggiungibili tramite la VPN, a scelta:&lt;br /&gt;
*** &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;: solo la [[IPv6 @ GOLEM | rete IPv6 virtuale del GOLEM]]&lt;br /&gt;
*** &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;: tutti gli indirizzi IPv6 (è possibile utilizzare la VPN del GOLEM per [[IPv6 @ GOLEM | navigare ''davvero'' in IPv6]])&lt;br /&gt;
** ''Endpoint'': indirizzo del server&lt;br /&gt;
** ''PersistentKeepalive'': timer per mantenimento del tunnel attivo (in secondi); particolarmente utile se l'indirizzo IP del client cambia o è soggetto a NAT&lt;br /&gt;
&lt;br /&gt;
La connessione può essere attivata tramite systemd come sul server (spostandola in ''/etc/wireguard/''), oppure manualmente utilizzando &amp;lt;code&amp;gt;wg-quick&amp;lt;/code&amp;gt;:&lt;br /&gt;
* Attivazione del tunnel&lt;br /&gt;
 wg-quick up client.example.conf&lt;br /&gt;
* Disattivazione del tunnel&lt;br /&gt;
 wg-quick down client.example.conf&lt;br /&gt;
&lt;br /&gt;
3. Provare il collegamento&lt;br /&gt;
 # ping 2001:470:c844:100::1    # server VPN, dentro al tunnel (per verificare se il collegamento funziona)&lt;br /&gt;
 # ping 2001:470:c844:100::200  # gateway in Officina (per verificare se il collegamento funziona; talvolta non raggiungibile se abbiamo staccato la luce)&lt;br /&gt;
 # ping ipv6.google.com         # per verificare l'accessibilità dell'Internet pubblico IPv6, nel caso non si abbia già accesso&lt;br /&gt;
&lt;br /&gt;
4. Successo!&lt;br /&gt;
* Se il client della VPN è un nodo foglia della rete, cioè non funge da gateway perché si deve collegare solo lui (es. smartphone), allora c'è già connettività IPv6 e non serve fare altro. È comunque consigliato leggere la sezione relativa al [[#Firewall | firewall]] per ragioni di sicurezza ed eventualmente attivarlo.&lt;br /&gt;
* Se invece il client è il gateway della rete IPv6 (es. ''serverozzo'', o il router di casa di uno dei soci che vuole navigare in IPv6), allora bisogna proseguire a configurarlo come indicato anche nella [[#Client_VPN_come_gateway | sezione apposita]].&lt;br /&gt;
&lt;br /&gt;
== Client VPN come gateway ==&lt;br /&gt;
=== Impostare il client VPN come gateway IPv6 per l'isola ===&lt;br /&gt;
==== Abilitare inoltro pacchetti IPv6 ====&lt;br /&gt;
Nel file ''/etc/sysctl.conf'':&lt;br /&gt;
 net.ipv6.conf.all.forwarding=1&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' la modifica non ha effetto immediato, ma è necessario un &amp;lt;code&amp;gt;sysctl --system&amp;lt;/code&amp;gt; o un riavvio.&lt;br /&gt;
&lt;br /&gt;
==== Installare e configurare radvd ====&lt;br /&gt;
''radvd'' è il demone di ''router advertisement''.&lt;br /&gt;
Per la configurazione automatica degli indirizzi e del gateway in IPv6 non è necessario un ''complesso'' server DHCP, ma vista la vastità dello spazio di indirizzamento (anche la rete più piccola ha ben 2&amp;lt;sup&amp;gt;64&amp;lt;/sup&amp;gt; indirizzi disponibili) basta il più semplice ''radvd''.&lt;br /&gt;
Un router con ''radvd'', a intervalli regolari, trasmette un messaggio in broadcast a tutti gli host della rete, informandoli sul prefisso di rete da utilizzare; a questo punto gli host possono autoconfigurarsi col metodo che preferiscono (es. [https://tools.ietf.org/search/rfc4862 SLAAC] con o senza [https://tools.ietf.org/html/rfc4941.html estensione per la privacy]).&lt;br /&gt;
&lt;br /&gt;
Installare ''radvd'':&lt;br /&gt;
 # apt install radvd&lt;br /&gt;
&lt;br /&gt;
Configurare il file ''/etc/radvd.conf'':&lt;br /&gt;
 interface ethI {&lt;br /&gt;
         AdvSendAdvert on;&lt;br /&gt;
         MinRtrAdvInterval 2;&lt;br /&gt;
         MaxRtrAdvInterval 10;&lt;br /&gt;
         prefix 2001:db8::/64 {&lt;br /&gt;
                 AdvOnLink on;&lt;br /&gt;
                 AdvAutonomous on;&lt;br /&gt;
                 AdvRouterAddr on;&lt;br /&gt;
         };&lt;br /&gt;
         RDNSS 2606:4700:4700::1111 {&lt;br /&gt;
                 AdvRDNSSLifetime 3600;&lt;br /&gt;
         };&lt;br /&gt;
 };&lt;br /&gt;
dove&lt;br /&gt;
* &amp;lt;code&amp;gt;interface ethI&amp;lt;/code&amp;gt; indica l'interfaccia interna su cui fare ''advertise'';&lt;br /&gt;
* &amp;lt;code&amp;gt;prefix 2001:db8::/64&amp;lt;/code&amp;gt; indica la rete a valle; (inserire quella comunicata dal sysop)&lt;br /&gt;
* &amp;lt;code&amp;gt;RDNSS 2606:4700:4700::1111&amp;lt;/code&amp;gt; indica il server DNS (nell'esempio specifico, CloudFlare);&lt;br /&gt;
** ''Nota:'' in seguito a questioni legali, OpenDNS non è al momento disponibile in Francia.&lt;br /&gt;
&lt;br /&gt;
Una volta abilitato ''radvd'' sull'interfaccia di rete desiderata, gli host inizieranno ad assegnarsi automaticamente un indirizzo tramite SLAAC, e potranno navigare in IPv6.&lt;br /&gt;
&lt;br /&gt;
==== Una nota sull'MTU del collegamento ====&lt;br /&gt;
Con la configurazione appena descritta, gli host crederanno di utilizzare una rete nativa dual-stack (o IPv6-only, nel caso non fosse previsto IPv4).&lt;br /&gt;
In realtà, però, i pacchetti IPv6 non sono &amp;quot;nativi&amp;quot;, bensì, una volta giunti al gateway, vengono poi incapsulati in maniera completamente trasparente.&lt;br /&gt;
&lt;br /&gt;
Ciò significa che gli host crederanno di poter generare pacchetti IPv6 della dimensione massima ammessa dal link a cui sono collegati (es. Ethernet, WiFi), che in genere è di 1500 bytes.&lt;br /&gt;
Però, pacchetti così grandi non possono essere incapsulati, in quanto anche il link che il gateway utilizza per la VPN, in genere, consente pacchetti di dimensione massima di 1500 bytes: non rimane spazio per l'incapsulamento.&lt;br /&gt;
&lt;br /&gt;
Questo può creare problemi, talvolta sporadici, non facilmente ripetibili, o ancora, dipendenti dal sito a cui si sta tentando di collegarsi, specialmente se si usa TCP.&lt;br /&gt;
Un sintomo molto comune è che, navigando sul web, si può rilevare che alcuni siti - ma solo alcuni, perfettamente funzionanti sia da IPv4 che da altre connessioni IPv6, vanno in timeout quando si prova ad accedervi.&lt;br /&gt;
&lt;br /&gt;
Questo succede perché TCP tenta di massimizzare la quantità di informazione contenuta all'interno di un pacchetto IP, generando pacchetti molto grandi, e talvolta raggiungendo il limite oltre il quale il pacchetto non può più essere incapsulato dal gateway.&lt;br /&gt;
&lt;br /&gt;
{{Template:Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Per verificare che il problema sia questo, provare a forzare una MTU artificialmente più bassa sulla scheda di rete, tramite il comando &amp;lt;code&amp;gt;ip link set enp1s0 mtu 1400&amp;lt;/code&amp;gt;, e poi verificare se il problema scompare.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Perciò, sarà necessario fare in modo che il gateway modifichi i pacchetti di handshake del TCP in maniera tale che non venga mai negoziata una ''Max Segment Size'' troppo alta per il link.&lt;br /&gt;
&lt;br /&gt;
===== Modificare la Max Segment Size =====&lt;br /&gt;
&lt;br /&gt;
{{Template:Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Abbassare la MSS elimina il problema, ma al contempo aumenta l'overhead, rendendo la connessione leggermente più lenta. È consigliabile trovare il giusto compromesso che soddisfi sia le esigenze di funzionamento che le esigenze in termini di prestazioni. Per farlo, ci si può aiutare con &amp;lt;code&amp;gt;tracepath&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* con un gateway Linux:&lt;br /&gt;
** TODO: è davvero necessario? Lo fa da solo?&lt;br /&gt;
* con un gateway Mikrotik:&lt;br /&gt;
 /ipv6/firewall/mangle/add out-interface=wg0 protocol=tcp tcp-flags=syn action=change-mss new-mss=1300 chain=forward tcp-mss=1301-65535&lt;br /&gt;
&lt;br /&gt;
== Firewall ==&lt;br /&gt;
=== Per il VPS ===&lt;br /&gt;
Inoltrare solo i pacchetti da/per le reti note.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text=Non ancora testato!&lt;br /&gt;
}}&lt;br /&gt;
 # ip6tables -A FORWARD -d 2001:470:c844::/48 -i he6in4 -j ACCEPT&lt;br /&gt;
 # ip6tables -A FORWARD -s 2001:470:c844::/48 -o he6in4 -j ACCEPT&lt;br /&gt;
 # ip6tables -P FORWARD DROP&lt;br /&gt;
&lt;br /&gt;
=== Per i client ===&lt;br /&gt;
Gli indirizzi IPv6 sono &amp;quot;tutti&amp;quot; pubblici. Gli indirizzi IPv6 forniti dal GOLEM sono pubblicamente instradabili. In più, il GOLEM non mette in atto '''nessuna''' misura atta a prevenire connessioni dirette verso gli host della VPN (al netto di configurazioni specifiche sulle macchine direttamente di proprietà del GOLEM).&lt;br /&gt;
Ciò significa che '''tutti''' gli host degli utenti/soci, compresi quelli domestici che sin'ora sono stati dietro a un (s)comodo NAT, possono essere acceduti attraverso la rete Internet globale, quando sono connessi alla VPN del GOLEM.&lt;br /&gt;
&lt;br /&gt;
Pertanto, è consigliato attivare degli strumenti atti a prevenire accessi indesiderati dall'esterno, come un firewall, in special modo se il proprio computer &amp;quot;fornisce servizi&amp;quot; (eg. condivisione di file via rete, server web di sviluppo, ...)&lt;br /&gt;
&lt;br /&gt;
==== Direttamente sull'host ====&lt;br /&gt;
Si può agire direttamente sugli host da proteggere (versione conservativa):&lt;br /&gt;
 # ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # ip6tables -A INPUT -p icmpv6 -j ACCEPT&lt;br /&gt;
 # ip6tables -P INPUT DROP&lt;br /&gt;
&lt;br /&gt;
In generale con Linux questa operazione non è comunque necessaria, perché tanto non vi sono servizi esposti a meno che non siano stati installati esplicitamente.&lt;br /&gt;
Si noti che ICMPv6 deve comunque sempre essere abilitato in quanto necessario al funzionamento di IPv6.&lt;br /&gt;
&lt;br /&gt;
Si può anche utilizzare una regola più rilassata (es. per sfruttare la VPN del GOLEM come VPN &amp;quot;personale&amp;quot; tra i propri host), tipo:&lt;br /&gt;
 # ip6tables -A INPUT -s 2001:470:c844:uu00::/56 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
Queste regole possono essere salvate in uno script, ad esempio &amp;lt;code&amp;gt;/etc/wireguard/wg0-postup.sh&amp;lt;/code&amp;gt;, ed invocate automaticamente all'atto della connessione alla VPN tramite la direttiva `PostUp` nel file di configurazione di WireGuard.&lt;br /&gt;
Sarà poi necessario aggiungere un equivalente PostDown che rimuova le regole all'atto della disconnessione.&lt;br /&gt;
&lt;br /&gt;
Ad esempio:&lt;br /&gt;
&lt;br /&gt;
 # /etc/wireguard/wg0.conf&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # ...                  &lt;br /&gt;
 # -----8&amp;lt;------&lt;br /&gt;
 # Possono coesistere anche più direttive PostUp/PostDown, aggiungere in coda:&lt;br /&gt;
 PostUp = /etc/wireguard/wg0-postup.sh&lt;br /&gt;
 PostDown = /etc/wireguard/wg0-postdown.sh&lt;br /&gt;
 # -----8&amp;lt;------&lt;br /&gt;
&lt;br /&gt;
 # /etc/wireguard/wg0-postup.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ip6tables -A INPUT -i wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 ip6tables -A INPUT -i wg0 -p icmpv6 -j ACCEPT&lt;br /&gt;
 ip6tables -P INPUT DROP&lt;br /&gt;
&lt;br /&gt;
 # /etc/wireguard/wg0-postdown.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ip6tables -D INPUT -i wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 ip6tables -D INPUT -i wg0 -p icmpv6 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=I pacchetti della VPN viaggiano crittografati sulla rete pubblica (almeno finché si trovano all'interno della VPN del GOLEM), ma sul server vengono decifrati e cifrati di nuovo per permetterne il routing!&lt;br /&gt;
In caso di compromissione del VPS del GOLEM, pertanto, i pacchetti non possono essere considerati al sicuro da sguardi indiscreti. È sempre buona norma utilizzare crittografia end-to-end, anche all'interno di una VPN.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Dal gateway ====&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text='''Nota bene''': salvare queste impostazioni, per esempio con &amp;lt;code&amp;gt;ip6tables-save&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;ip6tables-restore&amp;lt;/code&amp;gt;, altrimenti verranno perse al riavvio.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Invece di configurare il firewall su ogni host singolarmente, si può configurare il gateway una volta sola per proteggere tutta la rete a valle:&lt;br /&gt;
 # ip6tables -A FORWARD -s 2001:470:c844:rrrr::/64 -j ACCEPT&lt;br /&gt;
 # ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # ip6tables -P FORWARD DROP&lt;br /&gt;
&lt;br /&gt;
Nell'ordine:&lt;br /&gt;
* blocca l'inoltro di tutti i pacchetti&lt;br /&gt;
* abilita l'inoltro dei pacchetti in uscita dalla rete&lt;br /&gt;
* abilita l'inoltro dei pacchetti correlati a connessioni già stabilite&lt;br /&gt;
&lt;br /&gt;
Questo impedisce l'accesso indesiderato a tutti gli host della rete, compresi gli host con Windows che possono starsene &amp;quot;sicuri&amp;quot; anche senza il firewall, pur esponendo servizi (NetBIOS, Samba).&lt;br /&gt;
&lt;br /&gt;
===== Eccezioni =====&lt;br /&gt;
Se si desidera comunque rendere accessibile un proprio server in particolare, è possibile istruire il gateway con un'eccezione, aggiungendo:&lt;br /&gt;
 # ip6tables -A FORWARD -d 2001:470:c844:rrrr::host -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
Questo è qualcosa che &amp;quot;assomiglia&amp;quot; vagamente al vecchio ''port forwarding''.&lt;br /&gt;
&lt;br /&gt;
=== Torrent ===&lt;br /&gt;
La banda è limitata, e non è consentito traffico di materiale illegale. Occore limitare il traffico ''bit-torrent'' almeno al gateway finale (VPS).&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text=TODO: Questa sezione è da fare!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Risoluzione problemi =&lt;br /&gt;
== Geolocalizzazione ==&lt;br /&gt;
Il tunnel è localizzato in Francia.&lt;br /&gt;
A causa di restrizioni imposte a causa del diritto d'autore, alcuni siti, specialmente di streaming video, come Netflix, Rai.tv o Youtube, potrebbero bloccare l'accesso ai contenuti italiani dal tunnel francese.&lt;br /&gt;
Per inibire temporaneamente l'uso del tunnel IPv6 su un host:&lt;br /&gt;
 # sysctl -w net.ipv6.conf.all.disable_ipv6=1&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Howto]]&lt;br /&gt;
[[Categoria:Officina]]&lt;br /&gt;
[[Category:Sysop]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=IPv6_@_GOLEM&amp;diff=9646</id>
		<title>IPv6 @ GOLEM</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=IPv6_@_GOLEM&amp;diff=9646"/>
		<updated>2025-02-27T16:51:29Z</updated>

		<summary type="html">&lt;p&gt;Giomba: /* Abilitare inoltro pacchetti IPv6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Due parole su questa pagina ==&lt;br /&gt;
Questa pagina è un maldestro tentativo:&lt;br /&gt;
* per riassumere le ragioni che ci hanno portato a decidere di dotarci di IPv6;&lt;br /&gt;
* per documentare la nostra infrastruttura di rete;&lt;br /&gt;
&lt;br /&gt;
=== A chi si rivolge questa pagina ===&lt;br /&gt;
* se sei l''''amministratore di rete''', buona lettura :-)&lt;br /&gt;
* se sei un '''socio''', vedi come [[#Configurazione_lato_client | configurare il tuo client]]; è sufficiente leggere solo questo paragrafo.&lt;br /&gt;
&lt;br /&gt;
== Due parole sull'IPv6 ==&lt;br /&gt;
[https://it.wikipedia.org/wiki/IPv6 IPv6] è un &amp;quot;nuovo&amp;quot; protocollo a livello di rete che da diversi anni sta sostituendo IPv4.&lt;br /&gt;
Le novità introdotte da IPv6 sono molteplici; tra queste, quella che balza immediatamente all'occhio è l'enorme dimensione dello spazio di indirizzamento.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Protocollo'''&lt;br /&gt;
| '''lunghezza indirizzo'''&lt;br /&gt;
| '''numero indirizzi'''&lt;br /&gt;
|-&lt;br /&gt;
| IPv4&lt;br /&gt;
| 32 bit&lt;br /&gt;
| 2&amp;lt;sup&amp;gt;32&amp;lt;/sup&amp;gt; = 4 miliardi&lt;br /&gt;
|-&lt;br /&gt;
| IPv6&lt;br /&gt;
| 128 bit&lt;br /&gt;
| 2&amp;lt;sup&amp;gt;128&amp;lt;/sup&amp;gt; = 256 miliardi di miliardi di miliardi di miliardi&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Su questo pianeta vi sono circa 8 miliardi di persone [https://it.wikipedia.org/wiki/Popolazione_mondiale], di cui la metà [http://www.lastampa.it/2018/01/31/tecnologia/gli-utenti-di-internet-sono-pi-di-quattro-miliardi-nel-mondo-milioni-in-italia-wMxQskzXeabwa3wgWI2jUO/pagina.html] è connessa a Internet, e nei paesi sviluppati hanno anche più di un dispositivo connesso. Si aggiungano i numerosissimi apparati di rete e server necessari per il funzionamento dell'infrastruttura e la fornitura di servizi, e si può facilmente intuire che IPv4 non è più sufficiente per le attuali necessità.&lt;br /&gt;
&lt;br /&gt;
Mentre questa pagina veniva scritta, gli IPv4 stavano finendo [https://en.wikipedia.org/wiki/IPv4_address_exhaustion].&lt;br /&gt;
Nel novembre 2019, il RIPE (il registro europeo) ha terminato l'assegnazione degli ultimi indirizzi IPv4 assegnati all'Europa, [https://www.ripe.net/publications/ipv6-info-centre/about-ipv6/ipv4-exhaustion/ipv4-available-pool] e adesso vengono solo riutilizzati quelli vecchi, che significa che:&lt;br /&gt;
* non ci sono più indirizzi &amp;quot;nuovi&amp;quot; e dunque non è più possibile richiederli con facilità;&lt;br /&gt;
* se si vogliono degli indirizzi IPv4, si viene messi in lista d'attesa, finché il precedente proprietario fallisce e rilascia i propri.&lt;br /&gt;
&lt;br /&gt;
=== IPv4 vs IPv6 ===&lt;br /&gt;
==== Notazione ====&lt;br /&gt;
* IPv4 &amp;amp;rarr; 4 byte rappresentati con numeri decimali separati da un punto, es: &amp;lt;code&amp;gt;192.0.2.127&amp;lt;/code&amp;gt;&lt;br /&gt;
* IPv6 &amp;amp;rarr; 16 byte, ogni byte è rappresentato da due cifre esadecimali; ogni 4 cifre esadecimali si inseriscono i ''due punti'' &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;; come in IPv4 è possibile omettere gli zeri in testa; la più lunga sequenza di zeri allineata a 4 può essere omessa per intero; esempi (indirizzi equivalenti):&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:0470:c844:0020:0000:0000:0000:0001&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:470:c844:20:0:0:0:1&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:470:c844:20::1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipi di indirizzi ====&lt;br /&gt;
* IPv6 Reference Card by RIPE [https://www.ripe.net/manage-ips-and-asns/ipv6/ipv6-address-types/ipv6_reference_card_July2015.pdf]&lt;br /&gt;
&lt;br /&gt;
Riassunto:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''IPv6'''&lt;br /&gt;
| '''Equivalente IPv4'''&lt;br /&gt;
| '''Significato'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;::1/128&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo loopback&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fc00::/7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;192.168.0.0/16&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;10.0.0.0/8&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;172.16.0.0/12&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo privato&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fe80::/10&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;169.254.0.0/16&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo link-local (univoco nella rete locale, e autoassegnato)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2001:db8::/32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;192.0.2.0/24&amp;lt;/code&amp;gt;&lt;br /&gt;
| Esempi e documentazione&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| Indirizzi unicast globalmente raggiungibili&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Indirizzi pubblici vs privati ====&lt;br /&gt;
Gli IPv6 sono così tanti che non c'è bisogno di utilizzare indirizzi privati: niente NAT, niente port-forwarding. Questo restituisce connettività end-to-end ai dispositivi e apre numerose nuove possibilità di impiego, rimaste nascoste per anni a causa della scarsità di IPv4 e degli osceni espedienti inventati. Una banalità: non sarà più necessario passare attraverso un server terzo per condividere documenti, chattare o telefonare ai propri contatti.&lt;br /&gt;
&lt;br /&gt;
Se necessarie, le caratteristiche di &amp;quot;sicurezza&amp;quot; introdotte dal NAT possono essere sostituite e accorpate a un banale firewall.&lt;br /&gt;
&lt;br /&gt;
==== Progettazione di una rete ====&lt;br /&gt;
Nel progettare una rete con IPv4, la necessità principale è quella di risparmiare sugli indirizzi, perciò vengono usati prefissi di rete di varia lunghezza.&lt;br /&gt;
Nel progettare una rete con IPv6, si hanno a disposizione così tanti indirizzi che conviene utilizzarli in maniera da renderne più agevole una distribuzione logica.&lt;br /&gt;
&lt;br /&gt;
Sono così identificate le seguenti dimensioni standard per le reti IPv6 (nulla vieta di usare dimensioni personalizzate):&lt;br /&gt;
* '''/126''': contiene 2 soli host, utilizzata per i collegamenti punto-punto nell'infrastruttura di rete;&lt;br /&gt;
* '''/64''': è la più piccola rete che dovrebbe essere fatta; dimensione utilizzata nelle LAN; lo spazio di indirizzamento è esageratamente sovradimensionato ed è sufficiente per qualunque LAN immaginabile (è 4 miliardi di volte più grande di tutta la rete Internet IPv4); viene usata in ambito domestico;&lt;br /&gt;
* '''/56''': contiene 256 reti di dimensione /64, viene usata in ambito domestico o per piccole imprese;&lt;br /&gt;
* '''/48''': contiene 65536 reti di dimensione /64, viene usata in ambito aziendale;&lt;br /&gt;
&lt;br /&gt;
Le LAN non devono avere un prefisso più lungo di /64, perché molte nuove funzionalità introdotte con IPv6 (es SLAAC, Privacy Extension, ...), e anche funzionalità che saranno introdotte in futuro, daranno per scontato che le reti abbiano almeno questa dimensione.&lt;br /&gt;
&lt;br /&gt;
=== Ottenere connettività IPv6 ===&lt;br /&gt;
* si può richiedere nativamente al proprio ISP. Quando è stata scritta questa pagina, in Italia non erano molti gli operatori che fornivano connettività IPv6 nativa; adesso sono di più, perché gli IPv4 sono finiti, e non sarebbe altrimenti possibile fare business, ma alcuni operatori (specialmente quelli più grandi e noti), ancora non forniscono connettività IPv6 nativa;&lt;br /&gt;
* si possono fare dei tunnel che veicolano il traffico IPv6 all'interno dei pacchetti IPv4 (sprecando un po' di banda);&lt;br /&gt;
&lt;br /&gt;
Tunnel:&lt;br /&gt;
* pro:&lt;br /&gt;
** molti sono gratuiti;&lt;br /&gt;
* contro:&lt;br /&gt;
** spreco di banda per incapsulare i pacchetti (qualche decina di byte in più per ogni pacchetto, circa 20 ogni 1500);&lt;br /&gt;
** maggiore latenza;&lt;br /&gt;
** alcuni richiedono un indirizzo IPv4 statico; altri richiedono complicate configurazioni per l'uso con indirizzi dinamici;&lt;br /&gt;
** alcuni non funzionano dietro NAT (la quasi totalità delle reti domestiche);&lt;br /&gt;
&lt;br /&gt;
== Considerazioni e descrizione generale ==&lt;br /&gt;
&lt;br /&gt;
Come portare IPv6 al GOLEM?&lt;br /&gt;
&lt;br /&gt;
È stato realizzato un tunnel tra un intermediario e il nostro VPS. L'intermediario inoltra al VPS tutti i pacchetti destinati alla nostra rete.&lt;br /&gt;
La nostra rete viene scomposta in sottoreti: una rete di backbone, una per l'officina e una per ogni altro punto di accesso necessario, es. uno per ogni abitazione dei soci.&lt;br /&gt;
Il VPS conosce le rotte per raggiungere ogni singola sottorete e inoltra i pacchetti che riceve dall'intermediario verso il giusto router di ogni punto di accesso.&lt;br /&gt;
Il router del punto di accesso inoltra i pacchetti allo specifico host destinatario.&lt;br /&gt;
&lt;br /&gt;
Si procede analogamente a ritroso.&lt;br /&gt;
&lt;br /&gt;
In figura è mostrata la prima versione di visione ''logica'' della rete realizzata:&lt;br /&gt;
* '''HE''' (Hurricane Electric) è il provider fornitore IPv6;&lt;br /&gt;
* '''OVH''' è il nostro provider per il VPS;&lt;br /&gt;
* '''VPS''' è il nostro VPS;&lt;br /&gt;
* '''serverozzo''' è il gateway in [[Officina Informatica]];&lt;br /&gt;
&lt;br /&gt;
Per permettere il collegamento tra il VPS e un punto di accesso (anche noto in questa pagina come ''gateway dell'utente''), non essendo possibile stendere dei cavi fisici in giro per l'Europa, utilizzeremo la nostra VPN.&lt;br /&gt;
Esistono delle pagine dedicate per la documentazione sulla [[Rete del GOLEM]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tunnel-ipv6.jpeg|Il primo prototipo della rete del GOLEM, con la VPN e il tunnel IPv6.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Iniziare: rete /64 ==&lt;br /&gt;
Sono l'amministratore di rete e voglio attivare il tunnel IPv6 per la prima volta. Come iniziare?&lt;br /&gt;
&lt;br /&gt;
Ci si registra su [https://tunnelbroker.net/ TunnelBroker] e viene assegnata d'ufficio una rete IPv6 ''/64''.&lt;br /&gt;
&lt;br /&gt;
Il broker comunica i dettagli del suo PoP (''Point of Presence''):&lt;br /&gt;
 IPv4: 216.66.84.42&lt;br /&gt;
 IPv6: 2001:470:1f12:69::1&lt;br /&gt;
&lt;br /&gt;
L'IPv6 sarà utilizzato sul collegamento ''tunnel virtuale'', collegato all'interfaccia del VPS che chiameremo ''he6in4''. Dalla nostra parte, ''he6in4'' avrà come indirizzo &amp;lt;code&amp;gt;2001:470:1f12:69::2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Attiviamo il tunnel, aggiungendo questo al ''/etc/network/interfaces'':&lt;br /&gt;
&lt;br /&gt;
 auto he6in4&lt;br /&gt;
 iface he6in4 inet6 v4tunnel&lt;br /&gt;
 	address 2001:470:1f12:69::2/64&lt;br /&gt;
         endpoint 216.66.84.42&lt;br /&gt;
         local 152.228.140.73&lt;br /&gt;
         ttl 255&lt;br /&gt;
&lt;br /&gt;
Se si vuole utilizzare il tunnel come default gateway, aggiungere anche:&lt;br /&gt;
 	gateway 2001:470:1f12:69::1&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning&lt;br /&gt;
|text=È possibile utilizzare un solo default gateway su Linux, perciò assicurarsi di non confliggere con la configurazione IPv6 del vostro provider (se c'è)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
e verificare la connettività tra il VPS e il PoP del broker con:&lt;br /&gt;
 $ ip -6 addr&lt;br /&gt;
 $ ping 2001:470:1f12:69::1&lt;br /&gt;
e la connettività con l'Internet IPv6 con:&lt;br /&gt;
 $ ping 2a00:1450:4002:80a::200e&lt;br /&gt;
che, per completezza, è l'IPv6 di &amp;lt;code&amp;gt;ipv6.google.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nella maggior parte dei casi il server DNS IPv4 usato sin'ora ha anche il supporto per risolvere nomi IPv6.&lt;br /&gt;
&lt;br /&gt;
Probabilmente però '''non''' si vorrà utilizzare questa configurazione, bensì sfruttare la rete /48 come spiegato nel prossimo paragrafo.&lt;br /&gt;
&lt;br /&gt;
== Rete /48 ==&lt;br /&gt;
Siccome una rete IPv6 fisica (per esempio, una rete domestica) ha dimensione /64, ma il GOLEM, a sua volta, diventa provider per i soci, noi vogliamo tante reti, per l'officina e per i soci, richiediamo manualmente una ''/48''. Non ci piace essere spreconi, ma ci piace rispettare ''anche'' le RFC: a new era of Internet: [https://tools.ietf.org/html/rfc3177] [https://tools.ietf.org/html/rfc5375#section-3.1]&lt;br /&gt;
&lt;br /&gt;
Ci è stata assegnata la rete &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;, che significa:&lt;br /&gt;
* tutto il traffico di Internet IPv6 diretto a un indirizzo che cade in 2001:470:c844::/48 verrà instradato verso il nostro VPS;&lt;br /&gt;
* abbiamo a disposizione ben 2&amp;lt;sup&amp;gt;80&amp;lt;/sup&amp;gt; indirizzi per pianificare la nostra rete come più ci aggrada;&lt;br /&gt;
&lt;br /&gt;
Lo so, dopo anni bui di NAT dopo NAT e carenza di indirizzi, questa sembra fantascienza.&lt;br /&gt;
&lt;br /&gt;
=== Routing ===&lt;br /&gt;
Si può decidere di instradare tutto il traffico IPv6 tramite il tunnel broker, senza mai utilizzare l'IPv6 assegnato dal provider.&lt;br /&gt;
&lt;br /&gt;
Se però il server dispone già di un IPv6 assegnato dal provider, probabilmente si vuole e si può:&lt;br /&gt;
* utilizzare il suo IPv6 per navigare dal server, usando il gateway del provider&lt;br /&gt;
* utilizzare il gateway del tunnel broker solo per instradare i pacchetti della rete /48 che è stata assegnata&lt;br /&gt;
&lt;br /&gt;
Al GOLEM abbiamo fatto questa seconda scelta.&lt;br /&gt;
Perciò, '''non''' si deve aggiungere il gateway del tunnel broker come default gateway della configurazione in ''/etc/network/interfaces'', ma si deve aggiungere una regola di routing a mano per la sottorete del GOLEM, di fatto implementando ''source routing''.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Chiamasi ''source routing'' l'instradamento dei pacchetti fatto in base al loro indirizzo sorgente e non quello di destinazione, che è il modo standard&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
1. Modificare ''/etc/iproute2/rt_tables'' aggiungendo una nuova tabella di routing:&lt;br /&gt;
 200	golemsix&lt;br /&gt;
&lt;br /&gt;
2. Aggiungere il routing dei pacchetti provenienti dalla sottorete del GOLEM automaticamente al post-up dell'interfaccia del tunnel in ''/etc/network/interfaces'':&lt;br /&gt;
  	post-up ip -6 rule add from 2001:470:c844::/48 table golemsix &amp;amp;&amp;amp; ip -6 rule add to 2001:470:c844::/48 table main &amp;amp;&amp;amp; ip -6 route add default via 2001:470:1f12:69::1 dev he6in4 table golemsix &amp;amp;&amp;amp; ip -6 route flush cache&lt;br /&gt;
 	pre-down ip -6 route del default via 2001:470:1f12:69::1 dev he6in4 table golemsix &amp;amp;&amp;amp; ip -6 rule del to 2001:470:c844::/48 table main &amp;amp;&amp;amp; ip -6 rule del from 2001:470:c844::/48 table golemsix &amp;amp;&amp;amp; ip -6 route flush cache&lt;br /&gt;
&lt;br /&gt;
Spiegazione:&lt;br /&gt;
* I pacchetti provenienti dalla sottorete del GOLEM devono utilizzare la tabella di routing &amp;lt;code&amp;gt;golemsix&amp;lt;/code&amp;gt;:&lt;br /&gt;
 ip -6 rule add from 2001:470:c844::/48 table golemsix&lt;br /&gt;
&lt;br /&gt;
* I pacchetti destinati alla sottorete del GOLEM devono utilizzare la tabella di routing &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, così da poter essere instradati correttamente anche ai soci collegati con la VPN Wireguard. Si noti che, se inserita in quest'ordine, questa seconda regola ha priorità sulla precedente, ed è quello che vogliamo.&lt;br /&gt;
 ip -6 rule add to 2001:470:c844::/48 table main&lt;br /&gt;
&lt;br /&gt;
* Il default gateway per i pacchetti che utilizzano la tabella di routing &amp;lt;code&amp;gt;golemsix&amp;lt;/code&amp;gt; è l'endpoint del tunnel broker&lt;br /&gt;
 ip -6 route add default via 2001:470:1f12:69::1 dev he6in4 table golemsix&lt;br /&gt;
&lt;br /&gt;
* Aggiorna la cache del routing:&lt;br /&gt;
 ip -6 route flush cache&lt;br /&gt;
&lt;br /&gt;
Analogamente, vengono eseguite le operazioni inverse quando viene spenta l'interfaccia di rete.&lt;br /&gt;
&lt;br /&gt;
=== Piano di indirizzamento ===&lt;br /&gt;
Chiamarlo ''piano di indirizzamento'' è fargli un complimento immeritato; chiamiamola ''guida ragionata all'assegnazione dei nostri indirizzi''.&lt;br /&gt;
&lt;br /&gt;
Sia dato l'indirizzo IPv6:&lt;br /&gt;
&lt;br /&gt;
 127                   79     63                         0&lt;br /&gt;
     2001 : 0470 : c844 : rrrr : xxxx : xxxx : xxxx : xxxx&lt;br /&gt;
&lt;br /&gt;
Siccome abbiamo 80 bit a disposizione e la rete più piccola che possiamo fare secondo RFC è di 64 bit, possiamo fare ben 2&amp;lt;sup&amp;gt;16&amp;lt;/sup&amp;gt; reti (''rrrr'' nell'esempio).&lt;br /&gt;
Per semplicità (perché alla fine è a questo che servono tutti questi indirizzi in IPv6), poniamo ''rrrr'' = ''uugy'', dove:&lt;br /&gt;
* ''uu'' (8 bit) identifica l'''utente'';&lt;br /&gt;
* ''g'' (4 bit) identifica il gateway dell'utente (2&amp;lt;sup&amp;gt;4&amp;lt;/sup = 16 gateway per utente)&lt;br /&gt;
* ''y'' (4 bit) identifica la ''sottorete personale'' di quel gateway dell'utente (2&amp;lt;sup&amp;gt;4&amp;lt;/sup&amp;gt; = 16 sottoreti per gateway)&lt;br /&gt;
&lt;br /&gt;
Il VPS instrada direttamente tutta la sottorete /60 verso il gateway dell'utente, il quale può decidere di suddividerla come preferisce su quel gateway, da un unica grande rete /60, a 16 &amp;quot;piccole&amp;quot; reti /64.&lt;br /&gt;
&lt;br /&gt;
Sono così riservate:&lt;br /&gt;
 00gy indirizzi di servizio per l'infrastruttura (OpenVPN)&lt;br /&gt;
 01gy indirizzi di servizio per l'infrastruttura (Wireguard)&lt;br /&gt;
 02gy Officina (16 gateway × 16 reti)&lt;br /&gt;
 03gy Socio-A (16 gateway × 16 reti)&lt;br /&gt;
 04gy Socio-B (16 gateway × 16 reti)&lt;br /&gt;
 05gy ...&lt;br /&gt;
&lt;br /&gt;
Il ''numero di rete'' &amp;lt;code&amp;gt;rrrr&amp;lt;/code&amp;gt; sarà usato:&lt;br /&gt;
* per instradare tutto il traffico diretto a &amp;lt;code&amp;gt;2001:470:c844:rrg0::/60&amp;lt;/code&amp;gt; verso il gateway dell'utente;&lt;br /&gt;
* per assegnare l'indirizzo &amp;lt;code&amp;gt;2001:470:c844::rrg0/64&amp;lt;/code&amp;gt; al gateway dell'utente nella rete di servizio;&lt;br /&gt;
Si noti la &amp;quot;piccola&amp;quot; differenza.&lt;br /&gt;
&lt;br /&gt;
Per esempio, supponiamo di voler attivare ''serverozzo'', per il quale:&lt;br /&gt;
* ''uu = 02'' (''02'' è l'utente ''Officina'')&lt;br /&gt;
* ''g = 0'' (''0'' il primo &amp;amp;mdash; e al momento unico &amp;amp;mdash; gateway in Officina)&lt;br /&gt;
allora:&lt;br /&gt;
* serverozzo avrà indirizzo &amp;lt;code&amp;gt;2001:470:c844::200/64&amp;lt;/code&amp;gt; lato VPN;&lt;br /&gt;
* tutto il traffico per &amp;lt;code&amp;gt;2001:470:c844:200::/60&amp;lt;/code&amp;gt; verrà instradato verso serverozzo;&lt;br /&gt;
&lt;br /&gt;
E su serverozzo potranno essere create fino a 16 reti, per esempio:&lt;br /&gt;
* per la rete cablata Ethernet dell'Officina (&amp;lt;code&amp;gt;2001:470:c844:200::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;ethI&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per la rete wireless dell'Officina (&amp;lt;code&amp;gt;2001:470:c844:201::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;wlan0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per la rete cablata bus RS-485 (&amp;lt;code&amp;gt;2001:470:c844:202::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;ttyS0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per le macchine virtuali su KVM (&amp;lt;code&amp;gt;2001:470:c844:203::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;vir0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per le macchine virtuali su docker (&amp;lt;code&amp;gt;2001:470:c844:204::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* ...&lt;br /&gt;
'''Nota:''' questo è solo un esempio, la configurazione finale su serverozzo è ancora in fase di definizione.&lt;br /&gt;
&lt;br /&gt;
Nella prima rete di servizio (&amp;lt;code&amp;gt;2001:470:c844::/64&amp;lt;/code&amp;gt;) ci sono:&lt;br /&gt;
* il VPS&lt;br /&gt;
* tutti i gateway&lt;br /&gt;
** per esempio, serverozzo&lt;br /&gt;
** per esempio, i gateway dei soci&lt;br /&gt;
I gateway dei soci non sono diversi da serverozzo, e tuttavia la loro configurazione può essere più semplice se invece che da gateway fungono come semplici end-point.&lt;br /&gt;
&lt;br /&gt;
Così organizzate, le risorse si esauriranno in questo ordine:&lt;br /&gt;
* la banda a disposizione del VPS (500M/500M);&lt;br /&gt;
* la capacità computazionale e di memoria del VPS per l'inoltro dei pacchetti;&lt;br /&gt;
* gli IPv6 (gli IPv6 non finiranno mai)&lt;br /&gt;
&lt;br /&gt;
Non essendo una rete a maglie, ma semplicemente un albero, il routing è definito staticamente.&lt;br /&gt;
Se la rete si evolverà e le singole &amp;quot;isole&amp;quot; dovessero iniziare a connettersi a maglia in maniera incontrollata, potranno essere impiegati algoritmi dinamici, ma considerata la dimensione del bacino di utenti, non dovrebbe essere necessario.&lt;br /&gt;
&lt;br /&gt;
== Installazione del server ==&lt;br /&gt;
La VPN del GOLEM può essere utilizzata per la navigazione in IPv6.&lt;br /&gt;
La VPN è realizzata per mezzo di Wireguard.&lt;br /&gt;
&lt;br /&gt;
A differenza di altri protocolli, come OpenVPN, Wireguard ha un approccio &amp;quot;peer to peer&amp;quot;, per cui la procedura di configurazione del server rispecchia per buona parte quella di ciascun client.&lt;br /&gt;
&lt;br /&gt;
Innanzitutto è necessario generare la coppia di chiavi pubblica/privata del server:&lt;br /&gt;
&lt;br /&gt;
 # wg genkey | tee /etc/wireguard/server.privkey | wg pubkey &amp;gt; /etc/wireguard/vpn.golem.linux.it.pubkey&lt;br /&gt;
&lt;br /&gt;
Per la configurazione è sufficiente creare un singolo file, ad esempio &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # Carica la chiave privata dal percorso dove la abbiamo generata precedentemente&lt;br /&gt;
 PostUp = wg set %i private-key /etc/wireguard/vpn.golem.linux.it.privkey&lt;br /&gt;
 # Porta UDP di ascolto del server, a piacere&lt;br /&gt;
 ListenPort = 51820&lt;br /&gt;
 # Indirizzo del server all'interno della VPN&lt;br /&gt;
 Address = 2001:470:c844:100::1&lt;br /&gt;
&lt;br /&gt;
Il server può essere avviato tramite ''systemd'', e con lo stesso sistema si può impostare l'avvio automatico.&lt;br /&gt;
Si noti che &amp;lt;code&amp;gt;@wg0&amp;lt;/code&amp;gt; corrisponde al file di configurazione precedentemente creato.&lt;br /&gt;
&lt;br /&gt;
 # systemctl start wg-quick@wg0&lt;br /&gt;
 # systemctl enable wg-quick@wg0&lt;br /&gt;
&lt;br /&gt;
== Aggiunta di un nuovo client ==&lt;br /&gt;
=== Configurazione lato server ===&lt;br /&gt;
il sysop aggiunge un blocco peer per ciascun client alla configurazione &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;, così:&lt;br /&gt;
&lt;br /&gt;
 ... altri client ...&lt;br /&gt;
 &lt;br /&gt;
 # porceddu.net.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = tHeClIeNtFaNtAsTiCpUbLiCkEy=&lt;br /&gt;
 AllowedIPs = 2001:470:c844:100::200/128, 2001:470:c844:200::/62&lt;br /&gt;
 &lt;br /&gt;
 ... altri client ...&lt;br /&gt;
&lt;br /&gt;
Altro che OpenVPN.&lt;br /&gt;
&lt;br /&gt;
=== Configurazione lato client ===&lt;br /&gt;
1. Lato client, generare una coppia di chiavi pubblica/privata e inviare la chiave pubblica al sysop.&lt;br /&gt;
&lt;br /&gt;
 $ wg genkey | tee client.example.com.privkey | wg pubkey &amp;gt; client.example.com.pubkey&lt;br /&gt;
&lt;br /&gt;
Il sysop si occuperà di aggiungere la chiave pubblica tra quelle consentite al server, sceglierà un indirizzo IP in base al piano di indirizzamento, e ve lo comunicherà.&lt;br /&gt;
&lt;br /&gt;
2. Creare un file di configurazione come segue, in cui scrivere opportunamente la vostra chiave privata e l'indirizzo IP assegnato. Prestare particolare attenzione a modificare i campi della sezione &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt;, come indicato nelle note.&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # PrivateKey = YoUrGoRgEoUsAnDsEcUrEpRiVaTeKeY=               # vedi note, scegliere questo...&lt;br /&gt;
 # PostUp = wg set %i private-key ./client.example.com.privkey # vedi note,                 ...oppure questo&lt;br /&gt;
 Address = 2001:470:c844:100::'''200'''/64                           # vedi note&lt;br /&gt;
 &lt;br /&gt;
 # vpn.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = w63aGvoyPaUTgA8nW/NJS6Qqp2hUFvHRBbIH8Qb5ISY=   &lt;br /&gt;
 AllowedIPs = 2000::/3                                      &lt;br /&gt;
 Endpoint = vpn.golem.linux.it:51280&lt;br /&gt;
 PersistentKeepalive = 37&lt;br /&gt;
&lt;br /&gt;
'''Note'''&lt;br /&gt;
* &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''locale'')&lt;br /&gt;
** scegliere una delle seguenti opzioni per indicare la chiave privata del client, scommentando la riga apposita.&lt;br /&gt;
*** ''PrivateKey'': chiave privata del client, da custodire con cura, inline&lt;br /&gt;
*** ''PostUp = command'': chiave privata del client, da custodire con cura, e caricata automaticamente da un file esterno (es. creato col comando mostrato in precedenza)&lt;br /&gt;
** ''Address'': indirizzo IP comunicato dal sysop: riportarlo accuratamente, altrimenti non sarà possibile utilizzare la VPN&lt;br /&gt;
* &amp;lt;code&amp;gt;[Peer]&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''remoto'' / server)&lt;br /&gt;
** ''PublicKey'': chiave pubblica del server (sì, è proprio quella)&lt;br /&gt;
** ''AllowedIPs'': indirizzi raggiungibili tramite la VPN, a scelta:&lt;br /&gt;
*** &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;: solo la [[IPv6 @ GOLEM | rete IPv6 virtuale del GOLEM]]&lt;br /&gt;
*** &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;: tutti gli indirizzi IPv6 (è possibile utilizzare la VPN del GOLEM per [[IPv6 @ GOLEM | navigare ''davvero'' in IPv6]])&lt;br /&gt;
** ''Endpoint'': indirizzo del server&lt;br /&gt;
** ''PersistentKeepalive'': timer per mantenimento del tunnel attivo (in secondi); particolarmente utile se l'indirizzo IP del client cambia o è soggetto a NAT&lt;br /&gt;
&lt;br /&gt;
La connessione può essere attivata tramite systemd come sul server (spostandola in ''/etc/wireguard/''), oppure manualmente utilizzando &amp;lt;code&amp;gt;wg-quick&amp;lt;/code&amp;gt;:&lt;br /&gt;
* Attivazione del tunnel&lt;br /&gt;
 wg-quick up client.example.conf&lt;br /&gt;
* Disattivazione del tunnel&lt;br /&gt;
 wg-quick down client.example.conf&lt;br /&gt;
&lt;br /&gt;
3. Provare il collegamento&lt;br /&gt;
 # ping 2001:470:c844:100::1    # server VPN, dentro al tunnel (per verificare se il collegamento funziona)&lt;br /&gt;
 # ping 2001:470:c844:100::200  # gateway in Officina (per verificare se il collegamento funziona; talvolta non raggiungibile se abbiamo staccato la luce)&lt;br /&gt;
 # ping ipv6.google.com         # per verificare l'accessibilità dell'Internet pubblico IPv6, nel caso non si abbia già accesso&lt;br /&gt;
&lt;br /&gt;
4. Successo!&lt;br /&gt;
* Se il client della VPN è un nodo foglia della rete, cioè non funge da gateway perché si deve collegare solo lui (es. smartphone), allora c'è già connettività IPv6 e non serve fare altro. È comunque consigliato leggere la sezione relativa al [[#Firewall | firewall]] per ragioni di sicurezza ed eventualmente attivarlo.&lt;br /&gt;
* Se invece il client è il gateway della rete IPv6 (es. ''serverozzo'', o il router di casa di uno dei soci che vuole navigare in IPv6), allora bisogna proseguire a configurarlo come indicato anche nella [[#Client_VPN_come_gateway | sezione apposita]].&lt;br /&gt;
&lt;br /&gt;
== Client VPN come gateway ==&lt;br /&gt;
=== Impostare il client VPN come gateway IPv6 per l'isola ===&lt;br /&gt;
==== Abilitare inoltro pacchetti IPv6 ====&lt;br /&gt;
Nel file ''/etc/sysctl.conf'':&lt;br /&gt;
 net.ipv6.conf.all.forwarding=1&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' la modifica non ha effetto immediato, ma è necessario un &amp;lt;code&amp;gt;sysctl --system&amp;lt;/code&amp;gt; o un riavvio.&lt;br /&gt;
&lt;br /&gt;
==== Installare e configurare radvd ====&lt;br /&gt;
''radvd'' è il demone di ''router advertisement''.&lt;br /&gt;
Per la configurazione automatica degli indirizzi e del gateway in IPv6 non è necessario un ''complesso'' server DHCP, ma vista la vastità dello spazio di indirizzamento (anche la rete più piccola ha ben 2&amp;lt;sup&amp;gt;64&amp;lt;/sup&amp;gt; indirizzi disponibili) basta il più semplice ''radvd''.&lt;br /&gt;
Un router con ''radvd'', a intervalli regolari, trasmette un messaggio in broadcast a tutti gli host della rete, informandoli sul prefisso di rete da utilizzare; a questo punto gli host possono autoconfigurarsi col metodo che preferiscono (es. [https://tools.ietf.org/search/rfc4862 SLAAC] con o senza [https://tools.ietf.org/html/rfc4941.html estensione per la privacy]).&lt;br /&gt;
&lt;br /&gt;
Installare ''radvd'':&lt;br /&gt;
 # apt install radvd&lt;br /&gt;
&lt;br /&gt;
Configurare il file ''/etc/radvd.conf'':&lt;br /&gt;
 interface ethI {&lt;br /&gt;
         AdvSendAdvert on;&lt;br /&gt;
         MinRtrAdvInterval 2;&lt;br /&gt;
         MaxRtrAdvInterval 10;&lt;br /&gt;
         prefix 2001:db8::/64 {&lt;br /&gt;
                 AdvOnLink on;&lt;br /&gt;
                 AdvAutonomous on;&lt;br /&gt;
                 AdvRouterAddr on;&lt;br /&gt;
         };&lt;br /&gt;
         RDNSS 2606:4700:4700::1111 {&lt;br /&gt;
                 AdvRDNSSLifetime 3600;&lt;br /&gt;
         };&lt;br /&gt;
 };&lt;br /&gt;
dove&lt;br /&gt;
* &amp;lt;code&amp;gt;interface br0&amp;lt;/code&amp;gt; indica l'interfaccia interna su cui fare ''advertise'';&lt;br /&gt;
* &amp;lt;code&amp;gt;prefix 2001:db8::/64&amp;lt;/code&amp;gt; indica la rete a valle;&lt;br /&gt;
* &amp;lt;code&amp;gt;RDNSS 2606:4700:4700::1111&amp;lt;/code&amp;gt; indica il server DNS (nell'esempio specifico, CloudFlare);&lt;br /&gt;
** ''Nota:'' in seguito a questioni legali, OpenDNS non è al momento disponibile in Francia.&lt;br /&gt;
&lt;br /&gt;
Una volta abilitato ''radvd'' sull'interfaccia di rete desiderata, gli host inizieranno ad assegnarsi automaticamente un indirizzo tramite SLAAC, e potranno navigare in IPv6.&lt;br /&gt;
&lt;br /&gt;
==== Una nota sull'MTU del collegamento ====&lt;br /&gt;
Con la configurazione appena descritta, gli host crederanno di utilizzare una rete nativa dual-stack (o IPv6-only, nel caso non fosse previsto IPv4).&lt;br /&gt;
In realtà, però, i pacchetti IPv6 non sono &amp;quot;nativi&amp;quot;, bensì, una volta giunti al gateway, vengono poi incapsulati in maniera completamente trasparente.&lt;br /&gt;
&lt;br /&gt;
Ciò significa che gli host crederanno di poter generare pacchetti IPv6 della dimensione massima ammessa dal link a cui sono collegati (es. Ethernet, WiFi), che in genere è di 1500 bytes.&lt;br /&gt;
Però, pacchetti così grandi non possono essere incapsulati, in quanto anche il link che il gateway utilizza per la VPN, in genere, consente pacchetti di dimensione massima di 1500 bytes: non rimane spazio per l'incapsulamento.&lt;br /&gt;
&lt;br /&gt;
Questo può creare problemi, talvolta sporadici, non facilmente ripetibili, o ancora, dipendenti dal sito a cui si sta tentando di collegarsi, specialmente se si usa TCP.&lt;br /&gt;
Un sintomo molto comune è che, navigando sul web, si può rilevare che alcuni siti - ma solo alcuni, perfettamente funzionanti sia da IPv4 che da altre connessioni IPv6, vanno in timeout quando si prova ad accedervi.&lt;br /&gt;
&lt;br /&gt;
Questo succede perché TCP tenta di massimizzare la quantità di informazione contenuta all'interno di un pacchetto IP, generando pacchetti molto grandi, e talvolta raggiungendo il limite oltre il quale il pacchetto non può più essere incapsulato dal gateway.&lt;br /&gt;
&lt;br /&gt;
{{Template:Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Per verificare che il problema sia questo, provare a forzare una MTU artificialmente più bassa sulla scheda di rete, tramite il comando &amp;lt;code&amp;gt;ip link set enp1s0 mtu 1400&amp;lt;/code&amp;gt;, e poi verificare se il problema scompare.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Perciò, sarà necessario fare in modo che il gateway modifichi i pacchetti di handshake del TCP in maniera tale che non venga mai negoziata una ''Max Segment Size'' troppo alta per il link.&lt;br /&gt;
&lt;br /&gt;
===== Modificare la Max Segment Size =====&lt;br /&gt;
&lt;br /&gt;
{{Template:Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Abbassare la MSS elimina il problema, ma al contempo aumenta l'overhead, rendendo la connessione leggermente più lenta. È consigliabile trovare il giusto compromesso che soddisfi sia le esigenze di funzionamento che le esigenze in termini di prestazioni. Per farlo, ci si può aiutare con &amp;lt;code&amp;gt;tracepath&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* con un gateway Linux:&lt;br /&gt;
** TODO: è davvero necessario? Lo fa da solo?&lt;br /&gt;
* con un gateway Mikrotik:&lt;br /&gt;
 /ipv6/firewall/mangle/add out-interface=wg0 protocol=tcp tcp-flags=syn action=change-mss new-mss=1300 chain=forward tcp-mss=1301-65535&lt;br /&gt;
&lt;br /&gt;
== Firewall ==&lt;br /&gt;
=== Per il VPS ===&lt;br /&gt;
Inoltrare solo i pacchetti da/per le reti note.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text=Non ancora testato!&lt;br /&gt;
}}&lt;br /&gt;
 # ip6tables -A FORWARD -d 2001:470:c844::/48 -i he6in4 -j ACCEPT&lt;br /&gt;
 # ip6tables -A FORWARD -s 2001:470:c844::/48 -o he6in4 -j ACCEPT&lt;br /&gt;
 # ip6tables -P FORWARD DROP&lt;br /&gt;
&lt;br /&gt;
=== Per i client ===&lt;br /&gt;
Gli indirizzi IPv6 sono &amp;quot;tutti&amp;quot; pubblici. Gli indirizzi IPv6 forniti dal GOLEM sono pubblicamente instradabili. In più, il GOLEM non mette in atto '''nessuna''' misura atta a prevenire connessioni dirette verso gli host della VPN (al netto di configurazioni specifiche sulle macchine direttamente di proprietà del GOLEM).&lt;br /&gt;
Ciò significa che '''tutti''' gli host degli utenti/soci, compresi quelli domestici che sin'ora sono stati dietro a un (s)comodo NAT, possono essere acceduti attraverso la rete Internet globale, quando sono connessi alla VPN del GOLEM.&lt;br /&gt;
&lt;br /&gt;
Pertanto, è consigliato attivare degli strumenti atti a prevenire accessi indesiderati dall'esterno, come un firewall, in special modo se il proprio computer &amp;quot;fornisce servizi&amp;quot; (eg. condivisione di file via rete, server web di sviluppo, ...)&lt;br /&gt;
&lt;br /&gt;
==== Direttamente sull'host ====&lt;br /&gt;
Si può agire direttamente sugli host da proteggere (versione conservativa):&lt;br /&gt;
 # ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # ip6tables -A INPUT -p icmpv6 -j ACCEPT&lt;br /&gt;
 # ip6tables -P INPUT DROP&lt;br /&gt;
&lt;br /&gt;
In generale con Linux questa operazione non è comunque necessaria, perché tanto non vi sono servizi esposti a meno che non siano stati installati esplicitamente.&lt;br /&gt;
Si noti che ICMPv6 deve comunque sempre essere abilitato in quanto necessario al funzionamento di IPv6.&lt;br /&gt;
&lt;br /&gt;
Si può anche utilizzare una regola più rilassata (es. per sfruttare la VPN del GOLEM come VPN &amp;quot;personale&amp;quot; tra i propri host), tipo:&lt;br /&gt;
 # ip6tables -A INPUT -s 2001:470:c844:uu00::/56 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
Queste regole possono essere salvate in uno script, ad esempio &amp;lt;code&amp;gt;/etc/wireguard/wg0-postup.sh&amp;lt;/code&amp;gt;, ed invocate automaticamente all'atto della connessione alla VPN tramite la direttiva `PostUp` nel file di configurazione di WireGuard.&lt;br /&gt;
Sarà poi necessario aggiungere un equivalente PostDown che rimuova le regole all'atto della disconnessione.&lt;br /&gt;
&lt;br /&gt;
Ad esempio:&lt;br /&gt;
&lt;br /&gt;
 # /etc/wireguard/wg0.conf&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # ...                  &lt;br /&gt;
 # -----8&amp;lt;------&lt;br /&gt;
 # Possono coesistere anche più direttive PostUp/PostDown, aggiungere in coda:&lt;br /&gt;
 PostUp = /etc/wireguard/wg0-postup.sh&lt;br /&gt;
 PostDown = /etc/wireguard/wg0-postdown.sh&lt;br /&gt;
 # -----8&amp;lt;------&lt;br /&gt;
&lt;br /&gt;
 # /etc/wireguard/wg0-postup.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ip6tables -A INPUT -i wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 ip6tables -A INPUT -i wg0 -p icmpv6 -j ACCEPT&lt;br /&gt;
 ip6tables -P INPUT DROP&lt;br /&gt;
&lt;br /&gt;
 # /etc/wireguard/wg0-postdown.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ip6tables -D INPUT -i wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 ip6tables -D INPUT -i wg0 -p icmpv6 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=I pacchetti della VPN viaggiano crittografati sulla rete pubblica (almeno finché si trovano all'interno della VPN del GOLEM), ma sul server vengono decifrati e cifrati di nuovo per permetterne il routing!&lt;br /&gt;
In caso di compromissione del VPS del GOLEM, pertanto, i pacchetti non possono essere considerati al sicuro da sguardi indiscreti. È sempre buona norma utilizzare crittografia end-to-end, anche all'interno di una VPN.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Dal gateway ====&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text='''Nota bene''': salvare queste impostazioni, per esempio con &amp;lt;code&amp;gt;ip6tables-save&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;ip6tables-restore&amp;lt;/code&amp;gt;, altrimenti verranno perse al riavvio.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Invece di configurare il firewall su ogni host singolarmente, si può configurare il gateway una volta sola per proteggere tutta la rete a valle:&lt;br /&gt;
 # ip6tables -A FORWARD -s 2001:470:c844:rrrr::/64 -j ACCEPT&lt;br /&gt;
 # ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # ip6tables -P FORWARD DROP&lt;br /&gt;
&lt;br /&gt;
Nell'ordine:&lt;br /&gt;
* blocca l'inoltro di tutti i pacchetti&lt;br /&gt;
* abilita l'inoltro dei pacchetti in uscita dalla rete&lt;br /&gt;
* abilita l'inoltro dei pacchetti correlati a connessioni già stabilite&lt;br /&gt;
&lt;br /&gt;
Questo impedisce l'accesso indesiderato a tutti gli host della rete, compresi gli host con Windows che possono starsene &amp;quot;sicuri&amp;quot; anche senza il firewall, pur esponendo servizi (NetBIOS, Samba).&lt;br /&gt;
&lt;br /&gt;
===== Eccezioni =====&lt;br /&gt;
Se si desidera comunque rendere accessibile un proprio server in particolare, è possibile istruire il gateway con un'eccezione, aggiungendo:&lt;br /&gt;
 # ip6tables -A FORWARD -d 2001:470:c844:rrrr::host -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
Questo è qualcosa che &amp;quot;assomiglia&amp;quot; vagamente al vecchio ''port forwarding''.&lt;br /&gt;
&lt;br /&gt;
=== Torrent ===&lt;br /&gt;
La banda è limitata, e non è consentito traffico di materiale illegale. Occore limitare il traffico ''bit-torrent'' almeno al gateway finale (VPS).&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text=TODO: Questa sezione è da fare!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Risoluzione problemi =&lt;br /&gt;
== Geolocalizzazione ==&lt;br /&gt;
Il tunnel è localizzato in Francia.&lt;br /&gt;
A causa di restrizioni imposte a causa del diritto d'autore, alcuni siti, specialmente di streaming video, come Netflix, Rai.tv o Youtube, potrebbero bloccare l'accesso ai contenuti italiani dal tunnel francese.&lt;br /&gt;
Per inibire temporaneamente l'uso del tunnel IPv6 su un host:&lt;br /&gt;
 # sysctl -w net.ipv6.conf.all.disable_ipv6=1&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Howto]]&lt;br /&gt;
[[Categoria:Officina]]&lt;br /&gt;
[[Category:Sysop]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=IPv6_@_GOLEM&amp;diff=9645</id>
		<title>IPv6 @ GOLEM</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=IPv6_@_GOLEM&amp;diff=9645"/>
		<updated>2025-02-27T16:46:29Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Corretti imprecisioni e refusi&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Due parole su questa pagina ==&lt;br /&gt;
Questa pagina è un maldestro tentativo:&lt;br /&gt;
* per riassumere le ragioni che ci hanno portato a decidere di dotarci di IPv6;&lt;br /&gt;
* per documentare la nostra infrastruttura di rete;&lt;br /&gt;
&lt;br /&gt;
=== A chi si rivolge questa pagina ===&lt;br /&gt;
* se sei l''''amministratore di rete''', buona lettura :-)&lt;br /&gt;
* se sei un '''socio''', vedi come [[#Configurazione_lato_client | configurare il tuo client]]; è sufficiente leggere solo questo paragrafo.&lt;br /&gt;
&lt;br /&gt;
== Due parole sull'IPv6 ==&lt;br /&gt;
[https://it.wikipedia.org/wiki/IPv6 IPv6] è un &amp;quot;nuovo&amp;quot; protocollo a livello di rete che da diversi anni sta sostituendo IPv4.&lt;br /&gt;
Le novità introdotte da IPv6 sono molteplici; tra queste, quella che balza immediatamente all'occhio è l'enorme dimensione dello spazio di indirizzamento.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Protocollo'''&lt;br /&gt;
| '''lunghezza indirizzo'''&lt;br /&gt;
| '''numero indirizzi'''&lt;br /&gt;
|-&lt;br /&gt;
| IPv4&lt;br /&gt;
| 32 bit&lt;br /&gt;
| 2&amp;lt;sup&amp;gt;32&amp;lt;/sup&amp;gt; = 4 miliardi&lt;br /&gt;
|-&lt;br /&gt;
| IPv6&lt;br /&gt;
| 128 bit&lt;br /&gt;
| 2&amp;lt;sup&amp;gt;128&amp;lt;/sup&amp;gt; = 256 miliardi di miliardi di miliardi di miliardi&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Su questo pianeta vi sono circa 8 miliardi di persone [https://it.wikipedia.org/wiki/Popolazione_mondiale], di cui la metà [http://www.lastampa.it/2018/01/31/tecnologia/gli-utenti-di-internet-sono-pi-di-quattro-miliardi-nel-mondo-milioni-in-italia-wMxQskzXeabwa3wgWI2jUO/pagina.html] è connessa a Internet, e nei paesi sviluppati hanno anche più di un dispositivo connesso. Si aggiungano i numerosissimi apparati di rete e server necessari per il funzionamento dell'infrastruttura e la fornitura di servizi, e si può facilmente intuire che IPv4 non è più sufficiente per le attuali necessità.&lt;br /&gt;
&lt;br /&gt;
Mentre questa pagina veniva scritta, gli IPv4 stavano finendo [https://en.wikipedia.org/wiki/IPv4_address_exhaustion].&lt;br /&gt;
Nel novembre 2019, il RIPE (il registro europeo) ha terminato l'assegnazione degli ultimi indirizzi IPv4 assegnati all'Europa, [https://www.ripe.net/publications/ipv6-info-centre/about-ipv6/ipv4-exhaustion/ipv4-available-pool] e adesso vengono solo riutilizzati quelli vecchi, che significa che:&lt;br /&gt;
* non ci sono più indirizzi &amp;quot;nuovi&amp;quot; e dunque non è più possibile richiederli con facilità;&lt;br /&gt;
* se si vogliono degli indirizzi IPv4, si viene messi in lista d'attesa, finché il precedente proprietario fallisce e rilascia i propri.&lt;br /&gt;
&lt;br /&gt;
=== IPv4 vs IPv6 ===&lt;br /&gt;
==== Notazione ====&lt;br /&gt;
* IPv4 &amp;amp;rarr; 4 byte rappresentati con numeri decimali separati da un punto, es: &amp;lt;code&amp;gt;192.0.2.127&amp;lt;/code&amp;gt;&lt;br /&gt;
* IPv6 &amp;amp;rarr; 16 byte, ogni byte è rappresentato da due cifre esadecimali; ogni 4 cifre esadecimali si inseriscono i ''due punti'' &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;; come in IPv4 è possibile omettere gli zeri in testa; la più lunga sequenza di zeri allineata a 4 può essere omessa per intero; esempi (indirizzi equivalenti):&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:0470:c844:0020:0000:0000:0000:0001&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:470:c844:20:0:0:0:1&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:470:c844:20::1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipi di indirizzi ====&lt;br /&gt;
* IPv6 Reference Card by RIPE [https://www.ripe.net/manage-ips-and-asns/ipv6/ipv6-address-types/ipv6_reference_card_July2015.pdf]&lt;br /&gt;
&lt;br /&gt;
Riassunto:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''IPv6'''&lt;br /&gt;
| '''Equivalente IPv4'''&lt;br /&gt;
| '''Significato'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;::1/128&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo loopback&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fc00::/7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;192.168.0.0/16&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;10.0.0.0/8&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;172.16.0.0/12&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo privato&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fe80::/10&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;169.254.0.0/16&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo link-local (univoco nella rete locale, e autoassegnato)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2001:db8::/32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;192.0.2.0/24&amp;lt;/code&amp;gt;&lt;br /&gt;
| Esempi e documentazione&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| Indirizzi unicast globalmente raggiungibili&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Indirizzi pubblici vs privati ====&lt;br /&gt;
Gli IPv6 sono così tanti che non c'è bisogno di utilizzare indirizzi privati: niente NAT, niente port-forwarding. Questo restituisce connettività end-to-end ai dispositivi e apre numerose nuove possibilità di impiego, rimaste nascoste per anni a causa della scarsità di IPv4 e degli osceni espedienti inventati. Una banalità: non sarà più necessario passare attraverso un server terzo per condividere documenti, chattare o telefonare ai propri contatti.&lt;br /&gt;
&lt;br /&gt;
Se necessarie, le caratteristiche di &amp;quot;sicurezza&amp;quot; introdotte dal NAT possono essere sostituite e accorpate a un banale firewall.&lt;br /&gt;
&lt;br /&gt;
==== Progettazione di una rete ====&lt;br /&gt;
Nel progettare una rete con IPv4, la necessità principale è quella di risparmiare sugli indirizzi, perciò vengono usati prefissi di rete di varia lunghezza.&lt;br /&gt;
Nel progettare una rete con IPv6, si hanno a disposizione così tanti indirizzi che conviene utilizzarli in maniera da renderne più agevole una distribuzione logica.&lt;br /&gt;
&lt;br /&gt;
Sono così identificate le seguenti dimensioni standard per le reti IPv6 (nulla vieta di usare dimensioni personalizzate):&lt;br /&gt;
* '''/126''': contiene 2 soli host, utilizzata per i collegamenti punto-punto nell'infrastruttura di rete;&lt;br /&gt;
* '''/64''': è la più piccola rete che dovrebbe essere fatta; dimensione utilizzata nelle LAN; lo spazio di indirizzamento è esageratamente sovradimensionato ed è sufficiente per qualunque LAN immaginabile (è 4 miliardi di volte più grande di tutta la rete Internet IPv4); viene usata in ambito domestico;&lt;br /&gt;
* '''/56''': contiene 256 reti di dimensione /64, viene usata in ambito domestico o per piccole imprese;&lt;br /&gt;
* '''/48''': contiene 65536 reti di dimensione /64, viene usata in ambito aziendale;&lt;br /&gt;
&lt;br /&gt;
Le LAN non devono avere un prefisso più lungo di /64, perché molte nuove funzionalità introdotte con IPv6 (es SLAAC, Privacy Extension, ...), e anche funzionalità che saranno introdotte in futuro, daranno per scontato che le reti abbiano almeno questa dimensione.&lt;br /&gt;
&lt;br /&gt;
=== Ottenere connettività IPv6 ===&lt;br /&gt;
* si può richiedere nativamente al proprio ISP. Quando è stata scritta questa pagina, in Italia non erano molti gli operatori che fornivano connettività IPv6 nativa; adesso sono di più, perché gli IPv4 sono finiti, e non sarebbe altrimenti possibile fare business, ma alcuni operatori (specialmente quelli più grandi e noti), ancora non forniscono connettività IPv6 nativa;&lt;br /&gt;
* si possono fare dei tunnel che veicolano il traffico IPv6 all'interno dei pacchetti IPv4 (sprecando un po' di banda);&lt;br /&gt;
&lt;br /&gt;
Tunnel:&lt;br /&gt;
* pro:&lt;br /&gt;
** molti sono gratuiti;&lt;br /&gt;
* contro:&lt;br /&gt;
** spreco di banda per incapsulare i pacchetti (qualche decina di byte in più per ogni pacchetto, circa 20 ogni 1500);&lt;br /&gt;
** maggiore latenza;&lt;br /&gt;
** alcuni richiedono un indirizzo IPv4 statico; altri richiedono complicate configurazioni per l'uso con indirizzi dinamici;&lt;br /&gt;
** alcuni non funzionano dietro NAT (la quasi totalità delle reti domestiche);&lt;br /&gt;
&lt;br /&gt;
== Considerazioni e descrizione generale ==&lt;br /&gt;
&lt;br /&gt;
Come portare IPv6 al GOLEM?&lt;br /&gt;
&lt;br /&gt;
È stato realizzato un tunnel tra un intermediario e il nostro VPS. L'intermediario inoltra al VPS tutti i pacchetti destinati alla nostra rete.&lt;br /&gt;
La nostra rete viene scomposta in sottoreti: una rete di backbone, una per l'officina e una per ogni altro punto di accesso necessario, es. uno per ogni abitazione dei soci.&lt;br /&gt;
Il VPS conosce le rotte per raggiungere ogni singola sottorete e inoltra i pacchetti che riceve dall'intermediario verso il giusto router di ogni punto di accesso.&lt;br /&gt;
Il router del punto di accesso inoltra i pacchetti allo specifico host destinatario.&lt;br /&gt;
&lt;br /&gt;
Si procede analogamente a ritroso.&lt;br /&gt;
&lt;br /&gt;
In figura è mostrata la prima versione di visione ''logica'' della rete realizzata:&lt;br /&gt;
* '''HE''' (Hurricane Electric) è il provider fornitore IPv6;&lt;br /&gt;
* '''OVH''' è il nostro provider per il VPS;&lt;br /&gt;
* '''VPS''' è il nostro VPS;&lt;br /&gt;
* '''serverozzo''' è il gateway in [[Officina Informatica]];&lt;br /&gt;
&lt;br /&gt;
Per permettere il collegamento tra il VPS e un punto di accesso (anche noto in questa pagina come ''gateway dell'utente''), non essendo possibile stendere dei cavi fisici in giro per l'Europa, utilizzeremo la nostra VPN.&lt;br /&gt;
Esistono delle pagine dedicate per la documentazione sulla [[Rete del GOLEM]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tunnel-ipv6.jpeg|Il primo prototipo della rete del GOLEM, con la VPN e il tunnel IPv6.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Iniziare: rete /64 ==&lt;br /&gt;
Sono l'amministratore di rete e voglio attivare il tunnel IPv6 per la prima volta. Come iniziare?&lt;br /&gt;
&lt;br /&gt;
Ci si registra su [https://tunnelbroker.net/ TunnelBroker] e viene assegnata d'ufficio una rete IPv6 ''/64''.&lt;br /&gt;
&lt;br /&gt;
Il broker comunica i dettagli del suo PoP (''Point of Presence''):&lt;br /&gt;
 IPv4: 216.66.84.42&lt;br /&gt;
 IPv6: 2001:470:1f12:69::1&lt;br /&gt;
&lt;br /&gt;
L'IPv6 sarà utilizzato sul collegamento ''tunnel virtuale'', collegato all'interfaccia del VPS che chiameremo ''he6in4''. Dalla nostra parte, ''he6in4'' avrà come indirizzo &amp;lt;code&amp;gt;2001:470:1f12:69::2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Attiviamo il tunnel, aggiungendo questo al ''/etc/network/interfaces'':&lt;br /&gt;
&lt;br /&gt;
 auto he6in4&lt;br /&gt;
 iface he6in4 inet6 v4tunnel&lt;br /&gt;
 	address 2001:470:1f12:69::2/64&lt;br /&gt;
         endpoint 216.66.84.42&lt;br /&gt;
         local 152.228.140.73&lt;br /&gt;
         ttl 255&lt;br /&gt;
&lt;br /&gt;
Se si vuole utilizzare il tunnel come default gateway, aggiungere anche:&lt;br /&gt;
 	gateway 2001:470:1f12:69::1&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning&lt;br /&gt;
|text=È possibile utilizzare un solo default gateway su Linux, perciò assicurarsi di non confliggere con la configurazione IPv6 del vostro provider (se c'è)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
e verificare la connettività tra il VPS e il PoP del broker con:&lt;br /&gt;
 $ ip -6 addr&lt;br /&gt;
 $ ping 2001:470:1f12:69::1&lt;br /&gt;
e la connettività con l'Internet IPv6 con:&lt;br /&gt;
 $ ping 2a00:1450:4002:80a::200e&lt;br /&gt;
che, per completezza, è l'IPv6 di &amp;lt;code&amp;gt;ipv6.google.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nella maggior parte dei casi il server DNS IPv4 usato sin'ora ha anche il supporto per risolvere nomi IPv6.&lt;br /&gt;
&lt;br /&gt;
Probabilmente però '''non''' si vorrà utilizzare questa configurazione, bensì sfruttare la rete /48 come spiegato nel prossimo paragrafo.&lt;br /&gt;
&lt;br /&gt;
== Rete /48 ==&lt;br /&gt;
Siccome una rete IPv6 fisica (per esempio, una rete domestica) ha dimensione /64, ma il GOLEM, a sua volta, diventa provider per i soci, noi vogliamo tante reti, per l'officina e per i soci, richiediamo manualmente una ''/48''. Non ci piace essere spreconi, ma ci piace rispettare ''anche'' le RFC: a new era of Internet: [https://tools.ietf.org/html/rfc3177] [https://tools.ietf.org/html/rfc5375#section-3.1]&lt;br /&gt;
&lt;br /&gt;
Ci è stata assegnata la rete &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;, che significa:&lt;br /&gt;
* tutto il traffico di Internet IPv6 diretto a un indirizzo che cade in 2001:470:c844::/48 verrà instradato verso il nostro VPS;&lt;br /&gt;
* abbiamo a disposizione ben 2&amp;lt;sup&amp;gt;80&amp;lt;/sup&amp;gt; indirizzi per pianificare la nostra rete come più ci aggrada;&lt;br /&gt;
&lt;br /&gt;
Lo so, dopo anni bui di NAT dopo NAT e carenza di indirizzi, questa sembra fantascienza.&lt;br /&gt;
&lt;br /&gt;
=== Routing ===&lt;br /&gt;
Si può decidere di instradare tutto il traffico IPv6 tramite il tunnel broker, senza mai utilizzare l'IPv6 assegnato dal provider.&lt;br /&gt;
&lt;br /&gt;
Se però il server dispone già di un IPv6 assegnato dal provider, probabilmente si vuole e si può:&lt;br /&gt;
* utilizzare il suo IPv6 per navigare dal server, usando il gateway del provider&lt;br /&gt;
* utilizzare il gateway del tunnel broker solo per instradare i pacchetti della rete /48 che è stata assegnata&lt;br /&gt;
&lt;br /&gt;
Al GOLEM abbiamo fatto questa seconda scelta.&lt;br /&gt;
Perciò, '''non''' si deve aggiungere il gateway del tunnel broker come default gateway della configurazione in ''/etc/network/interfaces'', ma si deve aggiungere una regola di routing a mano per la sottorete del GOLEM, di fatto implementando ''source routing''.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Chiamasi ''source routing'' l'instradamento dei pacchetti fatto in base al loro indirizzo sorgente e non quello di destinazione, che è il modo standard&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
1. Modificare ''/etc/iproute2/rt_tables'' aggiungendo una nuova tabella di routing:&lt;br /&gt;
 200	golemsix&lt;br /&gt;
&lt;br /&gt;
2. Aggiungere il routing dei pacchetti provenienti dalla sottorete del GOLEM automaticamente al post-up dell'interfaccia del tunnel in ''/etc/network/interfaces'':&lt;br /&gt;
  	post-up ip -6 rule add from 2001:470:c844::/48 table golemsix &amp;amp;&amp;amp; ip -6 rule add to 2001:470:c844::/48 table main &amp;amp;&amp;amp; ip -6 route add default via 2001:470:1f12:69::1 dev he6in4 table golemsix &amp;amp;&amp;amp; ip -6 route flush cache&lt;br /&gt;
 	pre-down ip -6 route del default via 2001:470:1f12:69::1 dev he6in4 table golemsix &amp;amp;&amp;amp; ip -6 rule del to 2001:470:c844::/48 table main &amp;amp;&amp;amp; ip -6 rule del from 2001:470:c844::/48 table golemsix &amp;amp;&amp;amp; ip -6 route flush cache&lt;br /&gt;
&lt;br /&gt;
Spiegazione:&lt;br /&gt;
* I pacchetti provenienti dalla sottorete del GOLEM devono utilizzare la tabella di routing &amp;lt;code&amp;gt;golemsix&amp;lt;/code&amp;gt;:&lt;br /&gt;
 ip -6 rule add from 2001:470:c844::/48 table golemsix&lt;br /&gt;
&lt;br /&gt;
* I pacchetti destinati alla sottorete del GOLEM devono utilizzare la tabella di routing &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, così da poter essere instradati correttamente anche ai soci collegati con la VPN Wireguard. Si noti che, se inserita in quest'ordine, questa seconda regola ha priorità sulla precedente, ed è quello che vogliamo.&lt;br /&gt;
 ip -6 rule add to 2001:470:c844::/48 table main&lt;br /&gt;
&lt;br /&gt;
* Il default gateway per i pacchetti che utilizzano la tabella di routing &amp;lt;code&amp;gt;golemsix&amp;lt;/code&amp;gt; è l'endpoint del tunnel broker&lt;br /&gt;
 ip -6 route add default via 2001:470:1f12:69::1 dev he6in4 table golemsix&lt;br /&gt;
&lt;br /&gt;
* Aggiorna la cache del routing:&lt;br /&gt;
 ip -6 route flush cache&lt;br /&gt;
&lt;br /&gt;
Analogamente, vengono eseguite le operazioni inverse quando viene spenta l'interfaccia di rete.&lt;br /&gt;
&lt;br /&gt;
=== Piano di indirizzamento ===&lt;br /&gt;
Chiamarlo ''piano di indirizzamento'' è fargli un complimento immeritato; chiamiamola ''guida ragionata all'assegnazione dei nostri indirizzi''.&lt;br /&gt;
&lt;br /&gt;
Sia dato l'indirizzo IPv6:&lt;br /&gt;
&lt;br /&gt;
 127                   79     63                         0&lt;br /&gt;
     2001 : 0470 : c844 : rrrr : xxxx : xxxx : xxxx : xxxx&lt;br /&gt;
&lt;br /&gt;
Siccome abbiamo 80 bit a disposizione e la rete più piccola che possiamo fare secondo RFC è di 64 bit, possiamo fare ben 2&amp;lt;sup&amp;gt;16&amp;lt;/sup&amp;gt; reti (''rrrr'' nell'esempio).&lt;br /&gt;
Per semplicità (perché alla fine è a questo che servono tutti questi indirizzi in IPv6), poniamo ''rrrr'' = ''uugy'', dove:&lt;br /&gt;
* ''uu'' (8 bit) identifica l'''utente'';&lt;br /&gt;
* ''g'' (4 bit) identifica il gateway dell'utente (2&amp;lt;sup&amp;gt;4&amp;lt;/sup = 16 gateway per utente)&lt;br /&gt;
* ''y'' (4 bit) identifica la ''sottorete personale'' di quel gateway dell'utente (2&amp;lt;sup&amp;gt;4&amp;lt;/sup&amp;gt; = 16 sottoreti per gateway)&lt;br /&gt;
&lt;br /&gt;
Il VPS instrada direttamente tutta la sottorete /60 verso il gateway dell'utente, il quale può decidere di suddividerla come preferisce su quel gateway, da un unica grande rete /60, a 16 &amp;quot;piccole&amp;quot; reti /64.&lt;br /&gt;
&lt;br /&gt;
Sono così riservate:&lt;br /&gt;
 00gy indirizzi di servizio per l'infrastruttura (OpenVPN)&lt;br /&gt;
 01gy indirizzi di servizio per l'infrastruttura (Wireguard)&lt;br /&gt;
 02gy Officina (16 gateway × 16 reti)&lt;br /&gt;
 03gy Socio-A (16 gateway × 16 reti)&lt;br /&gt;
 04gy Socio-B (16 gateway × 16 reti)&lt;br /&gt;
 05gy ...&lt;br /&gt;
&lt;br /&gt;
Il ''numero di rete'' &amp;lt;code&amp;gt;rrrr&amp;lt;/code&amp;gt; sarà usato:&lt;br /&gt;
* per instradare tutto il traffico diretto a &amp;lt;code&amp;gt;2001:470:c844:rrg0::/60&amp;lt;/code&amp;gt; verso il gateway dell'utente;&lt;br /&gt;
* per assegnare l'indirizzo &amp;lt;code&amp;gt;2001:470:c844::rrg0/64&amp;lt;/code&amp;gt; al gateway dell'utente nella rete di servizio;&lt;br /&gt;
Si noti la &amp;quot;piccola&amp;quot; differenza.&lt;br /&gt;
&lt;br /&gt;
Per esempio, supponiamo di voler attivare ''serverozzo'', per il quale:&lt;br /&gt;
* ''uu = 02'' (''02'' è l'utente ''Officina'')&lt;br /&gt;
* ''g = 0'' (''0'' il primo &amp;amp;mdash; e al momento unico &amp;amp;mdash; gateway in Officina)&lt;br /&gt;
allora:&lt;br /&gt;
* serverozzo avrà indirizzo &amp;lt;code&amp;gt;2001:470:c844::200/64&amp;lt;/code&amp;gt; lato VPN;&lt;br /&gt;
* tutto il traffico per &amp;lt;code&amp;gt;2001:470:c844:200::/60&amp;lt;/code&amp;gt; verrà instradato verso serverozzo;&lt;br /&gt;
&lt;br /&gt;
E su serverozzo potranno essere create fino a 16 reti, per esempio:&lt;br /&gt;
* per la rete cablata Ethernet dell'Officina (&amp;lt;code&amp;gt;2001:470:c844:200::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;ethI&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per la rete wireless dell'Officina (&amp;lt;code&amp;gt;2001:470:c844:201::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;wlan0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per la rete cablata bus RS-485 (&amp;lt;code&amp;gt;2001:470:c844:202::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;ttyS0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per le macchine virtuali su KVM (&amp;lt;code&amp;gt;2001:470:c844:203::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;vir0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per le macchine virtuali su docker (&amp;lt;code&amp;gt;2001:470:c844:204::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* ...&lt;br /&gt;
'''Nota:''' questo è solo un esempio, la configurazione finale su serverozzo è ancora in fase di definizione.&lt;br /&gt;
&lt;br /&gt;
Nella prima rete di servizio (&amp;lt;code&amp;gt;2001:470:c844::/64&amp;lt;/code&amp;gt;) ci sono:&lt;br /&gt;
* il VPS&lt;br /&gt;
* tutti i gateway&lt;br /&gt;
** per esempio, serverozzo&lt;br /&gt;
** per esempio, i gateway dei soci&lt;br /&gt;
I gateway dei soci non sono diversi da serverozzo, e tuttavia la loro configurazione può essere più semplice se invece che da gateway fungono come semplici end-point.&lt;br /&gt;
&lt;br /&gt;
Così organizzate, le risorse si esauriranno in questo ordine:&lt;br /&gt;
* la banda a disposizione del VPS (500M/500M);&lt;br /&gt;
* la capacità computazionale e di memoria del VPS per l'inoltro dei pacchetti;&lt;br /&gt;
* gli IPv6 (gli IPv6 non finiranno mai)&lt;br /&gt;
&lt;br /&gt;
Non essendo una rete a maglie, ma semplicemente un albero, il routing è definito staticamente.&lt;br /&gt;
Se la rete si evolverà e le singole &amp;quot;isole&amp;quot; dovessero iniziare a connettersi a maglia in maniera incontrollata, potranno essere impiegati algoritmi dinamici, ma considerata la dimensione del bacino di utenti, non dovrebbe essere necessario.&lt;br /&gt;
&lt;br /&gt;
== Installazione del server ==&lt;br /&gt;
La VPN del GOLEM può essere utilizzata per la navigazione in IPv6.&lt;br /&gt;
La VPN è realizzata per mezzo di Wireguard.&lt;br /&gt;
&lt;br /&gt;
A differenza di altri protocolli, come OpenVPN, Wireguard ha un approccio &amp;quot;peer to peer&amp;quot;, per cui la procedura di configurazione del server rispecchia per buona parte quella di ciascun client.&lt;br /&gt;
&lt;br /&gt;
Innanzitutto è necessario generare la coppia di chiavi pubblica/privata del server:&lt;br /&gt;
&lt;br /&gt;
 # wg genkey | tee /etc/wireguard/server.privkey | wg pubkey &amp;gt; /etc/wireguard/vpn.golem.linux.it.pubkey&lt;br /&gt;
&lt;br /&gt;
Per la configurazione è sufficiente creare un singolo file, ad esempio &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # Carica la chiave privata dal percorso dove la abbiamo generata precedentemente&lt;br /&gt;
 PostUp = wg set %i private-key /etc/wireguard/vpn.golem.linux.it.privkey&lt;br /&gt;
 # Porta UDP di ascolto del server, a piacere&lt;br /&gt;
 ListenPort = 51820&lt;br /&gt;
 # Indirizzo del server all'interno della VPN&lt;br /&gt;
 Address = 2001:470:c844:100::1&lt;br /&gt;
&lt;br /&gt;
Il server può essere avviato tramite ''systemd'', e con lo stesso sistema si può impostare l'avvio automatico.&lt;br /&gt;
Si noti che &amp;lt;code&amp;gt;@wg0&amp;lt;/code&amp;gt; corrisponde al file di configurazione precedentemente creato.&lt;br /&gt;
&lt;br /&gt;
 # systemctl start wg-quick@wg0&lt;br /&gt;
 # systemctl enable wg-quick@wg0&lt;br /&gt;
&lt;br /&gt;
== Aggiunta di un nuovo client ==&lt;br /&gt;
=== Configurazione lato server ===&lt;br /&gt;
il sysop aggiunge un blocco peer per ciascun client alla configurazione &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;, così:&lt;br /&gt;
&lt;br /&gt;
 ... altri client ...&lt;br /&gt;
 &lt;br /&gt;
 # porceddu.net.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = tHeClIeNtFaNtAsTiCpUbLiCkEy=&lt;br /&gt;
 AllowedIPs = 2001:470:c844:100::200/128, 2001:470:c844:200::/62&lt;br /&gt;
 &lt;br /&gt;
 ... altri client ...&lt;br /&gt;
&lt;br /&gt;
Altro che OpenVPN.&lt;br /&gt;
&lt;br /&gt;
=== Configurazione lato client ===&lt;br /&gt;
1. Lato client, generare una coppia di chiavi pubblica/privata e inviare la chiave pubblica al sysop.&lt;br /&gt;
&lt;br /&gt;
 $ wg genkey | tee client.example.com.privkey | wg pubkey &amp;gt; client.example.com.pubkey&lt;br /&gt;
&lt;br /&gt;
Il sysop si occuperà di aggiungere la chiave pubblica tra quelle consentite al server, sceglierà un indirizzo IP in base al piano di indirizzamento, e ve lo comunicherà.&lt;br /&gt;
&lt;br /&gt;
2. Creare un file di configurazione come segue, in cui scrivere opportunamente la vostra chiave privata e l'indirizzo IP assegnato. Prestare particolare attenzione a modificare i campi della sezione &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt;, come indicato nelle note.&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # PrivateKey = YoUrGoRgEoUsAnDsEcUrEpRiVaTeKeY=               # vedi note, scegliere questo...&lt;br /&gt;
 # PostUp = wg set %i private-key ./client.example.com.privkey # vedi note,                 ...oppure questo&lt;br /&gt;
 Address = 2001:470:c844:100::'''200'''/64                           # vedi note&lt;br /&gt;
 &lt;br /&gt;
 # vpn.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = w63aGvoyPaUTgA8nW/NJS6Qqp2hUFvHRBbIH8Qb5ISY=   &lt;br /&gt;
 AllowedIPs = 2000::/3                                      &lt;br /&gt;
 Endpoint = vpn.golem.linux.it:51280&lt;br /&gt;
 PersistentKeepalive = 37&lt;br /&gt;
&lt;br /&gt;
'''Note'''&lt;br /&gt;
* &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''locale'')&lt;br /&gt;
** scegliere una delle seguenti opzioni per indicare la chiave privata del client, scommentando la riga apposita.&lt;br /&gt;
*** ''PrivateKey'': chiave privata del client, da custodire con cura, inline&lt;br /&gt;
*** ''PostUp = command'': chiave privata del client, da custodire con cura, e caricata automaticamente da un file esterno (es. creato col comando mostrato in precedenza)&lt;br /&gt;
** ''Address'': indirizzo IP comunicato dal sysop: riportarlo accuratamente, altrimenti non sarà possibile utilizzare la VPN&lt;br /&gt;
* &amp;lt;code&amp;gt;[Peer]&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''remoto'' / server)&lt;br /&gt;
** ''PublicKey'': chiave pubblica del server (sì, è proprio quella)&lt;br /&gt;
** ''AllowedIPs'': indirizzi raggiungibili tramite la VPN, a scelta:&lt;br /&gt;
*** &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;: solo la [[IPv6 @ GOLEM | rete IPv6 virtuale del GOLEM]]&lt;br /&gt;
*** &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;: tutti gli indirizzi IPv6 (è possibile utilizzare la VPN del GOLEM per [[IPv6 @ GOLEM | navigare ''davvero'' in IPv6]])&lt;br /&gt;
** ''Endpoint'': indirizzo del server&lt;br /&gt;
** ''PersistentKeepalive'': timer per mantenimento del tunnel attivo (in secondi); particolarmente utile se l'indirizzo IP del client cambia o è soggetto a NAT&lt;br /&gt;
&lt;br /&gt;
La connessione può essere attivata tramite systemd come sul server (spostandola in ''/etc/wireguard/''), oppure manualmente utilizzando &amp;lt;code&amp;gt;wg-quick&amp;lt;/code&amp;gt;:&lt;br /&gt;
* Attivazione del tunnel&lt;br /&gt;
 wg-quick up client.example.conf&lt;br /&gt;
* Disattivazione del tunnel&lt;br /&gt;
 wg-quick down client.example.conf&lt;br /&gt;
&lt;br /&gt;
3. Provare il collegamento&lt;br /&gt;
 # ping 2001:470:c844:100::1    # server VPN, dentro al tunnel (per verificare se il collegamento funziona)&lt;br /&gt;
 # ping 2001:470:c844:100::200  # gateway in Officina (per verificare se il collegamento funziona; talvolta non raggiungibile se abbiamo staccato la luce)&lt;br /&gt;
 # ping ipv6.google.com         # per verificare l'accessibilità dell'Internet pubblico IPv6, nel caso non si abbia già accesso&lt;br /&gt;
&lt;br /&gt;
4. Successo!&lt;br /&gt;
* Se il client della VPN è un nodo foglia della rete, cioè non funge da gateway perché si deve collegare solo lui (es. smartphone), allora c'è già connettività IPv6 e non serve fare altro. È comunque consigliato leggere la sezione relativa al [[#Firewall | firewall]] per ragioni di sicurezza ed eventualmente attivarlo.&lt;br /&gt;
* Se invece il client è il gateway della rete IPv6 (es. ''serverozzo'', o il router di casa di uno dei soci che vuole navigare in IPv6), allora bisogna proseguire a configurarlo come indicato anche nella [[#Client_VPN_come_gateway | sezione apposita]].&lt;br /&gt;
&lt;br /&gt;
== Client VPN come gateway ==&lt;br /&gt;
=== Impostare il client VPN come gateway IPv6 per l'isola ===&lt;br /&gt;
==== Abilitare inoltro pacchetti IPv6 ====&lt;br /&gt;
Nel file ''/etc/sysctl.conf'':&lt;br /&gt;
 net.ipv6.conf.all.forwarding=1&lt;br /&gt;
&lt;br /&gt;
==== Installare e configurare radvd ====&lt;br /&gt;
''radvd'' è il demone di ''router advertisement''.&lt;br /&gt;
Per la configurazione automatica degli indirizzi e del gateway in IPv6 non è necessario un ''complesso'' server DHCP, ma vista la vastità dello spazio di indirizzamento (anche la rete più piccola ha ben 2&amp;lt;sup&amp;gt;64&amp;lt;/sup&amp;gt; indirizzi disponibili) basta il più semplice ''radvd''.&lt;br /&gt;
Un router con ''radvd'', a intervalli regolari, trasmette un messaggio in broadcast a tutti gli host della rete, informandoli sul prefisso di rete da utilizzare; a questo punto gli host possono autoconfigurarsi col metodo che preferiscono (es. [https://tools.ietf.org/search/rfc4862 SLAAC] con o senza [https://tools.ietf.org/html/rfc4941.html estensione per la privacy]).&lt;br /&gt;
&lt;br /&gt;
Installare ''radvd'':&lt;br /&gt;
 # apt install radvd&lt;br /&gt;
&lt;br /&gt;
Configurare il file ''/etc/radvd.conf'':&lt;br /&gt;
 interface ethI {&lt;br /&gt;
         AdvSendAdvert on;&lt;br /&gt;
         MinRtrAdvInterval 2;&lt;br /&gt;
         MaxRtrAdvInterval 10;&lt;br /&gt;
         prefix 2001:db8::/64 {&lt;br /&gt;
                 AdvOnLink on;&lt;br /&gt;
                 AdvAutonomous on;&lt;br /&gt;
                 AdvRouterAddr on;&lt;br /&gt;
         };&lt;br /&gt;
         RDNSS 2606:4700:4700::1111 {&lt;br /&gt;
                 AdvRDNSSLifetime 3600;&lt;br /&gt;
         };&lt;br /&gt;
 };&lt;br /&gt;
dove&lt;br /&gt;
* &amp;lt;code&amp;gt;interface br0&amp;lt;/code&amp;gt; indica l'interfaccia interna su cui fare ''advertise'';&lt;br /&gt;
* &amp;lt;code&amp;gt;prefix 2001:db8::/64&amp;lt;/code&amp;gt; indica la rete a valle;&lt;br /&gt;
* &amp;lt;code&amp;gt;RDNSS 2606:4700:4700::1111&amp;lt;/code&amp;gt; indica il server DNS (nell'esempio specifico, CloudFlare);&lt;br /&gt;
** ''Nota:'' in seguito a questioni legali, OpenDNS non è al momento disponibile in Francia.&lt;br /&gt;
&lt;br /&gt;
Una volta abilitato ''radvd'' sull'interfaccia di rete desiderata, gli host inizieranno ad assegnarsi automaticamente un indirizzo tramite SLAAC, e potranno navigare in IPv6.&lt;br /&gt;
&lt;br /&gt;
==== Una nota sull'MTU del collegamento ====&lt;br /&gt;
Con la configurazione appena descritta, gli host crederanno di utilizzare una rete nativa dual-stack (o IPv6-only, nel caso non fosse previsto IPv4).&lt;br /&gt;
In realtà, però, i pacchetti IPv6 non sono &amp;quot;nativi&amp;quot;, bensì, una volta giunti al gateway, vengono poi incapsulati in maniera completamente trasparente.&lt;br /&gt;
&lt;br /&gt;
Ciò significa che gli host crederanno di poter generare pacchetti IPv6 della dimensione massima ammessa dal link a cui sono collegati (es. Ethernet, WiFi), che in genere è di 1500 bytes.&lt;br /&gt;
Però, pacchetti così grandi non possono essere incapsulati, in quanto anche il link che il gateway utilizza per la VPN, in genere, consente pacchetti di dimensione massima di 1500 bytes: non rimane spazio per l'incapsulamento.&lt;br /&gt;
&lt;br /&gt;
Questo può creare problemi, talvolta sporadici, non facilmente ripetibili, o ancora, dipendenti dal sito a cui si sta tentando di collegarsi, specialmente se si usa TCP.&lt;br /&gt;
Un sintomo molto comune è che, navigando sul web, si può rilevare che alcuni siti - ma solo alcuni, perfettamente funzionanti sia da IPv4 che da altre connessioni IPv6, vanno in timeout quando si prova ad accedervi.&lt;br /&gt;
&lt;br /&gt;
Questo succede perché TCP tenta di massimizzare la quantità di informazione contenuta all'interno di un pacchetto IP, generando pacchetti molto grandi, e talvolta raggiungendo il limite oltre il quale il pacchetto non può più essere incapsulato dal gateway.&lt;br /&gt;
&lt;br /&gt;
{{Template:Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Per verificare che il problema sia questo, provare a forzare una MTU artificialmente più bassa sulla scheda di rete, tramite il comando &amp;lt;code&amp;gt;ip link set enp1s0 mtu 1400&amp;lt;/code&amp;gt;, e poi verificare se il problema scompare.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Perciò, sarà necessario fare in modo che il gateway modifichi i pacchetti di handshake del TCP in maniera tale che non venga mai negoziata una ''Max Segment Size'' troppo alta per il link.&lt;br /&gt;
&lt;br /&gt;
===== Modificare la Max Segment Size =====&lt;br /&gt;
&lt;br /&gt;
{{Template:Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Abbassare la MSS elimina il problema, ma al contempo aumenta l'overhead, rendendo la connessione leggermente più lenta. È consigliabile trovare il giusto compromesso che soddisfi sia le esigenze di funzionamento che le esigenze in termini di prestazioni. Per farlo, ci si può aiutare con &amp;lt;code&amp;gt;tracepath&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* con un gateway Linux:&lt;br /&gt;
** TODO: è davvero necessario? Lo fa da solo?&lt;br /&gt;
* con un gateway Mikrotik:&lt;br /&gt;
 /ipv6/firewall/mangle/add out-interface=wg0 protocol=tcp tcp-flags=syn action=change-mss new-mss=1300 chain=forward tcp-mss=1301-65535&lt;br /&gt;
&lt;br /&gt;
== Firewall ==&lt;br /&gt;
=== Per il VPS ===&lt;br /&gt;
Inoltrare solo i pacchetti da/per le reti note.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text=Non ancora testato!&lt;br /&gt;
}}&lt;br /&gt;
 # ip6tables -A FORWARD -d 2001:470:c844::/48 -i he6in4 -j ACCEPT&lt;br /&gt;
 # ip6tables -A FORWARD -s 2001:470:c844::/48 -o he6in4 -j ACCEPT&lt;br /&gt;
 # ip6tables -P FORWARD DROP&lt;br /&gt;
&lt;br /&gt;
=== Per i client ===&lt;br /&gt;
Gli indirizzi IPv6 sono &amp;quot;tutti&amp;quot; pubblici. Gli indirizzi IPv6 forniti dal GOLEM sono pubblicamente instradabili. In più, il GOLEM non mette in atto '''nessuna''' misura atta a prevenire connessioni dirette verso gli host della VPN (al netto di configurazioni specifiche sulle macchine direttamente di proprietà del GOLEM).&lt;br /&gt;
Ciò significa che '''tutti''' gli host degli utenti/soci, compresi quelli domestici che sin'ora sono stati dietro a un (s)comodo NAT, possono essere acceduti attraverso la rete Internet globale, quando sono connessi alla VPN del GOLEM.&lt;br /&gt;
&lt;br /&gt;
Pertanto, è consigliato attivare degli strumenti atti a prevenire accessi indesiderati dall'esterno, come un firewall, in special modo se il proprio computer &amp;quot;fornisce servizi&amp;quot; (eg. condivisione di file via rete, server web di sviluppo, ...)&lt;br /&gt;
&lt;br /&gt;
==== Direttamente sull'host ====&lt;br /&gt;
Si può agire direttamente sugli host da proteggere (versione conservativa):&lt;br /&gt;
 # ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # ip6tables -A INPUT -p icmpv6 -j ACCEPT&lt;br /&gt;
 # ip6tables -P INPUT DROP&lt;br /&gt;
&lt;br /&gt;
In generale con Linux questa operazione non è comunque necessaria, perché tanto non vi sono servizi esposti a meno che non siano stati installati esplicitamente.&lt;br /&gt;
Si noti che ICMPv6 deve comunque sempre essere abilitato in quanto necessario al funzionamento di IPv6.&lt;br /&gt;
&lt;br /&gt;
Si può anche utilizzare una regola più rilassata (es. per sfruttare la VPN del GOLEM come VPN &amp;quot;personale&amp;quot; tra i propri host), tipo:&lt;br /&gt;
 # ip6tables -A INPUT -s 2001:470:c844:uu00::/56 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
Queste regole possono essere salvate in uno script, ad esempio &amp;lt;code&amp;gt;/etc/wireguard/wg0-postup.sh&amp;lt;/code&amp;gt;, ed invocate automaticamente all'atto della connessione alla VPN tramite la direttiva `PostUp` nel file di configurazione di WireGuard.&lt;br /&gt;
Sarà poi necessario aggiungere un equivalente PostDown che rimuova le regole all'atto della disconnessione.&lt;br /&gt;
&lt;br /&gt;
Ad esempio:&lt;br /&gt;
&lt;br /&gt;
 # /etc/wireguard/wg0.conf&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # ...                  &lt;br /&gt;
 # -----8&amp;lt;------&lt;br /&gt;
 # Possono coesistere anche più direttive PostUp/PostDown, aggiungere in coda:&lt;br /&gt;
 PostUp = /etc/wireguard/wg0-postup.sh&lt;br /&gt;
 PostDown = /etc/wireguard/wg0-postdown.sh&lt;br /&gt;
 # -----8&amp;lt;------&lt;br /&gt;
&lt;br /&gt;
 # /etc/wireguard/wg0-postup.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ip6tables -A INPUT -i wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 ip6tables -A INPUT -i wg0 -p icmpv6 -j ACCEPT&lt;br /&gt;
 ip6tables -P INPUT DROP&lt;br /&gt;
&lt;br /&gt;
 # /etc/wireguard/wg0-postdown.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ip6tables -D INPUT -i wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 ip6tables -D INPUT -i wg0 -p icmpv6 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=I pacchetti della VPN viaggiano crittografati sulla rete pubblica (almeno finché si trovano all'interno della VPN del GOLEM), ma sul server vengono decifrati e cifrati di nuovo per permetterne il routing!&lt;br /&gt;
In caso di compromissione del VPS del GOLEM, pertanto, i pacchetti non possono essere considerati al sicuro da sguardi indiscreti. È sempre buona norma utilizzare crittografia end-to-end, anche all'interno di una VPN.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Dal gateway ====&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text='''Nota bene''': salvare queste impostazioni, per esempio con &amp;lt;code&amp;gt;ip6tables-save&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;ip6tables-restore&amp;lt;/code&amp;gt;, altrimenti verranno perse al riavvio.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Invece di configurare il firewall su ogni host singolarmente, si può configurare il gateway una volta sola per proteggere tutta la rete a valle:&lt;br /&gt;
 # ip6tables -A FORWARD -s 2001:470:c844:rrrr::/64 -j ACCEPT&lt;br /&gt;
 # ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # ip6tables -P FORWARD DROP&lt;br /&gt;
&lt;br /&gt;
Nell'ordine:&lt;br /&gt;
* blocca l'inoltro di tutti i pacchetti&lt;br /&gt;
* abilita l'inoltro dei pacchetti in uscita dalla rete&lt;br /&gt;
* abilita l'inoltro dei pacchetti correlati a connessioni già stabilite&lt;br /&gt;
&lt;br /&gt;
Questo impedisce l'accesso indesiderato a tutti gli host della rete, compresi gli host con Windows che possono starsene &amp;quot;sicuri&amp;quot; anche senza il firewall, pur esponendo servizi (NetBIOS, Samba).&lt;br /&gt;
&lt;br /&gt;
===== Eccezioni =====&lt;br /&gt;
Se si desidera comunque rendere accessibile un proprio server in particolare, è possibile istruire il gateway con un'eccezione, aggiungendo:&lt;br /&gt;
 # ip6tables -A FORWARD -d 2001:470:c844:rrrr::host -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
Questo è qualcosa che &amp;quot;assomiglia&amp;quot; vagamente al vecchio ''port forwarding''.&lt;br /&gt;
&lt;br /&gt;
=== Torrent ===&lt;br /&gt;
La banda è limitata, e non è consentito traffico di materiale illegale. Occore limitare il traffico ''bit-torrent'' almeno al gateway finale (VPS).&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text=TODO: Questa sezione è da fare!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Risoluzione problemi =&lt;br /&gt;
== Geolocalizzazione ==&lt;br /&gt;
Il tunnel è localizzato in Francia.&lt;br /&gt;
A causa di restrizioni imposte a causa del diritto d'autore, alcuni siti, specialmente di streaming video, come Netflix, Rai.tv o Youtube, potrebbero bloccare l'accesso ai contenuti italiani dal tunnel francese.&lt;br /&gt;
Per inibire temporaneamente l'uso del tunnel IPv6 su un host:&lt;br /&gt;
 # sysctl -w net.ipv6.conf.all.disable_ipv6=1&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Howto]]&lt;br /&gt;
[[Categoria:Officina]]&lt;br /&gt;
[[Category:Sysop]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=UEFI_e_GPT&amp;diff=9636</id>
		<title>UEFI e GPT</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=UEFI_e_GPT&amp;diff=9636"/>
		<updated>2025-02-09T10:18:28Z</updated>

		<summary type="html">&lt;p&gt;Giomba: /* Configurazione di GRUB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduzione a UEFI e GPT=&lt;br /&gt;
&lt;br /&gt;
UEFI è il nuovo standard che sostituirà il BIOS, ovvero quel programma di base che viene lanciato all'avvio del computer e ne consente la configurazione base e l'avvio dei sistemi operativi. UEFI ha destato attenzione nel mondo '''Linux''' per tre motivi:&lt;br /&gt;
&lt;br /&gt;
# adotta nuovi metodi di '''avvio''' e di '''partizionamento''', infatti non è più presente la scelta di avvio dal primo/secondo disco o dal CD, bensì è UEFI a rilevare i supporti avviabili. Anche i CD e le pennine di installazione devono quindi essere '''UEFI-compatibili''', ma la maggior parte lo è (Ubuntu, Mint, Debian, ArchLinux...);&lt;br /&gt;
# il sistema di partizionamento MBR è stato soppiantato da '''GPT''', quindi bisogna imparare a partizionare i dischi seguendo questo standard: la nuova tabella partizioni consente di creare più di 4 partizioni primarie (fino a 128, e non esiste più il concetto di partizione estesa). Inoltre è necessaria una partizione dedicata per l'avvio, detta ''ESP (EFI System Partition)'', che contiene i file di avvio dei sistemi installati. I comandi fdisk e cfdisk sono stati aggiornati e supportano anche GPT. Su distro vecchie (precedenti al 2016-2017) è necessario usare rispettivamente '''gdisk''' e '''cgdisk''';&lt;br /&gt;
# '''Microsoft''' ha messo lo zampino nella tecnologia del '''secure boot''': un controllo che consente di bloccare l'installazione di sistemi non autorizzati; l'opzione sulla maggior parte dei dispositivi venduti può essere disabilitata, e se non può esserlo, spesso si riesce comunque a installare Linux, anche se con qualche grattacapo in più;&lt;br /&gt;
&lt;br /&gt;
In questa pagina si cerca di riassumere tutto quello che c'è da sapere su UEFI prendendo come obiettivo l'installazione della distribuzione '''ArchLinux'''.&lt;br /&gt;
&lt;br /&gt;
=Configurare UEFI=&lt;br /&gt;
Il primo passo da compiere è entrare nel menù di UEFI, premendo il tasto giusto all'avvio (di solito '''DEL/CANC''' o '''F2''', ma varia in base al modello). L'interfaccia grafica non è identica su tutti i computer: alcuni produttori usano quella simile al vecchio bios (bianca e blu/grigia), altri aggiungono a questa una versione più intuitiva e grafica dove è addirittura possibile usare il mouse, navigare un filesystem, catturare screenshot e navigare con un browser web.&lt;br /&gt;
 &lt;br /&gt;
Per installare sistemi ''diversi da Windows'' vanno disabilitati i parametri '''Fast Boot''' e '''Secure Boot''', dopodiché è possibile inserire il CD di installazione, da cui fare il boot (a volte è necessario riavviare per far rilevare il disco a UEFI).&lt;br /&gt;
&lt;br /&gt;
=Partizionamento=&lt;br /&gt;
Fatto il boot con il live CD, è possibile vedere tutti i dischi e le relative partizioni con il comando&lt;br /&gt;
 fdisk -l&lt;br /&gt;
&lt;br /&gt;
Eventualmente si può specificare un disco solo di cui si vogliono informazioni.&lt;br /&gt;
&lt;br /&gt;
 # fdisk -l /dev/sda&lt;br /&gt;
 Found valid GPT with protective MBR; using GPT.&lt;br /&gt;
 Disk /dev/sda: 976773168 sectors, 465.8 GiB&lt;br /&gt;
 Logical sector size: 512 bytes&lt;br /&gt;
 Disk identifier (GUID): XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&lt;br /&gt;
 [...]&lt;br /&gt;
&lt;br /&gt;
Individuato il disco, è possibile passare al ''partizionamento''.&lt;br /&gt;
&lt;br /&gt;
'''ATTENZIONE''' la procedura seguente eliminerà ogni dato già presente sul disco, ma in genere a nessuno importa...&lt;br /&gt;
&lt;br /&gt;
Utilizzare il comando&lt;br /&gt;
 cfdisk /dev/sda&lt;br /&gt;
&lt;br /&gt;
È possibile eliminare tutte le partizioni, tenendo a mente le '''dimensioni della prima''', contrassegnata dal codice '''EF00'''. Tale partizione va ricreata, per sicurezza '''della stessa dimensione e allineata allo stesso blocco''', dopodiché è possibile creare le altre partizioni (root, home, windows-dedicata) seguendo la medesima procedura:&lt;br /&gt;
&lt;br /&gt;
# Nello '''spazio libero''' (inizialmente tutto il disco) crea una ''nuova partizione'' (New);&lt;br /&gt;
# Richiesta del '''primo settore''' (First sector): premi invio per lasciare quello di default, ovvero a seguito della precedente partizione;&lt;br /&gt;
# '''Dimensione''' della partizione: questo è a scelta libera, il valore può essere inserito nelle unità comuni (Kilo, Mega, Giga), mentre dando invio usa il massimo spazio disponibile. Tieni sempre conto delle seguenti soglie minime&lt;br /&gt;
#*'''EFI''' - come detto prima, è bene ricrearla della dimensione originaria, nel mio caso era 300M&lt;br /&gt;
#*'''Root''' - senza la home, ovvero solo i file di sistema Linux, occupa al massimo una decina di Gb, quindi per lasciare un margine è bene assegnare 15G&lt;br /&gt;
#*'''/home''' - i dati utente hanno dimensione variabile, quindi è a propria discrezione&lt;br /&gt;
# Inserisci il tipo di partizione: '''EF00''' per la EFI, '''8300''' per Linux, '''8200'' per la swap, '''0700''' per Windows;&lt;br /&gt;
# Etichetta: sempre utile per identificare a occhio una partizione, è a discrezione dell'utente (esempio ''LinuxHome'' per la home);&lt;br /&gt;
# Ripeti dal punto 1 per tutte le partizioni necessarie&lt;br /&gt;
&lt;br /&gt;
Le partizioni possono essere formattate normalmente (mkfs.ext4 /dev/sdy), eccetto la partizione '''EFI''', che va formattata in '''FAT''' con&lt;br /&gt;
&lt;br /&gt;
 mkfs.vfat -T32 /dev/sda1&lt;br /&gt;
&lt;br /&gt;
Nel caso tu voglia installare anche Windows è preferibile installarlo dopo il partizionamento e prima di installare Linux.&lt;br /&gt;
&lt;br /&gt;
=Configurazione di GRUB=&lt;br /&gt;
Installato il sistema, bisogna configurare il bootloader per funzionare con EFI. GRUB ha una versione compatibile, da installare mentre si è chrootati. Per prima cosa la partizione EFI (in questo caso &amp;lt;code&amp;gt;/dev/sda1&amp;lt;/code&amp;gt;) deve essere montata in una qualsiasi cartella, in modo da consentirne la scrittura dei file di avvio. Successivamente si può installare GRUB e creare il file di configurazione relativo. In caso di dual-boot altri sistemi installati saranno rilevati automaticamente soltanto se la partizione EFI è montata.&lt;br /&gt;
&lt;br /&gt;
 # mkdir /boot/efi&lt;br /&gt;
 # mount /dev/sda1 /boot/efi&lt;br /&gt;
 # grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub --recheck --debug&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Convenzionalmente, la partizione EFI viene montata in &amp;lt;code&amp;gt;/boot/efi&amp;lt;/code&amp;gt; e, al suo interno, contiene una directory denominata &amp;lt;code&amp;gt;EFI&amp;lt;/code&amp;gt; che, a sua volta, contiene una directory per ogni sistema operativo installato.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Configurazione della BootList==&lt;br /&gt;
Il comando grub-install inserisce automaticamente Linux all'interno dei menù di avvio di EFI. In caso di dual boot sta poi all'utente decidere se impostarlo come scelta di avvio automatica, cosa che va fatta manualmente dai menù di EFI, all'avvio.&lt;br /&gt;
&lt;br /&gt;
Ci è stato riferito che a volte il metodo manuale da EFI può fallire: c'è anche il modo di modificare la lista degli avvii di EFI dall'interno di Linux.&lt;br /&gt;
&lt;br /&gt;
 $ efibootmgr&lt;br /&gt;
&lt;br /&gt;
 BootCurrent: 0000&lt;br /&gt;
 Timeout: 0 seconds&lt;br /&gt;
 BootOrder: 0000,0004&lt;br /&gt;
 Boot0000* Windows Boot Manager&lt;br /&gt;
 Boot0004* ArchLinux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'output del comando efibootmgr è la lista dei sistemi installati (in questo caso ArchLinux e Windows), insieme alla lista di avvio (BootOrder), che in questo caso privilegia Windows.&lt;br /&gt;
&lt;br /&gt;
Per modificarla basta aggiungere la relativa opzione, elencando gli ID dei sistemi operativi nell'ordine desiderato, separandoli da virgola&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --bootorder 0004,0000&lt;br /&gt;
&lt;br /&gt;
In questo esempio si imposta Linux come primo sistema.&lt;br /&gt;
&lt;br /&gt;
= Problemi =&lt;br /&gt;
Problema: avete rotto tutto, avete sovrascritto le variabili EFI, non funziona più nulla, vi rannicchiate in posizione fetale.&lt;br /&gt;
&lt;br /&gt;
Soluzione: impostare il boot da CD e procurarsi un disco di [http://www.rodsbooks.com/refind/ rEFInd]. rEFInd trova i sistemi che hanno un file di avvio nella ''ESP'' (EFI System Partition) e vi chiederà di sceglierne uno (vedi figura). rEFInd è utile anche per avviare altri utili ''strumentopoli'' che possono venire in nostro soccorso, come la ''EFI shell''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:refind.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Procurarsi la EFI-Shell (almeno v2), da qualche parte, es [https://github.com/tianocore/edk2/tree/master/ShellBinPkg github] o [https://aur.archlinux.org/packages/uefi-shell-git/ AUR].&lt;br /&gt;
&lt;br /&gt;
'''Attenzione''': alcune schede madri ce l'hanno integrata, ma potrebbe non essere completa (es schede MSI), perciò scaricarla ugualmente.&lt;br /&gt;
&lt;br /&gt;
Creare una directory &amp;lt;code&amp;gt;ESP/efishell/&amp;lt;/code&amp;gt; in cui mettere l'eseguibile della ''EFI Shell'' &amp;lt;code&amp;gt;shellx64_v2.efi&amp;lt;/code&amp;gt;, e avviarlo tramite il disco di rEFInd (o con la EFI shell già integrata)&lt;br /&gt;
&lt;br /&gt;
Prendere un po' di dimestichezza con l'EFI-Shell. È case-sensitive, ma fa cose &amp;quot;alla Windows&amp;quot;, quindi occhio:&lt;br /&gt;
* Vedere i device riconosciuti:&lt;br /&gt;
 &amp;gt; map&lt;br /&gt;
* ''fs0'', ''fs1'', ecc... indicano i filesystem delle ESP trovate; potete navigarci:&lt;br /&gt;
 &amp;gt; fs0:&lt;br /&gt;
 &amp;gt; ls&lt;br /&gt;
* ''blk0'', ''blk1'', ecc... indicano le partizioni trovate ma non leggibili (NTFS, EXT)&lt;br /&gt;
&lt;br /&gt;
Eliminare tutto ciò che non è necessario (file di avvio di Windows e cartelle). ''rm'' funziona sia con file che con directory:&lt;br /&gt;
 &amp;gt; rm filename&lt;br /&gt;
&lt;br /&gt;
Mostrare la lista della sequenza d'avvio. Ad ogni entry corrisponde un numero.&lt;br /&gt;
 &amp;gt; bcfg boot dump&lt;br /&gt;
&lt;br /&gt;
Prima di modificare qualunque cosa, cancellare tutto ciò che non è necessario (ma occhio a non cancellare cose preziose, tipo la ''EFI Shell'' integrata). Il numero indica l'entry desiderata. Occhio perché potrebbero riordinarsi automaticamente.&lt;br /&gt;
 &amp;gt; bcfg boot rm 3&lt;br /&gt;
&lt;br /&gt;
Aggiungere l'entry necessaria:&lt;br /&gt;
 &amp;gt; bcfg boot add 1 fs0:/EFI/arch/grubx64.efi &amp;quot;Arch&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Attenzione''' a volte la scheda madre vuole avviare per forza Windows. Facciamoglielo credere mettendo il ''grubx64.efi'' nella ESP sotto ''EFI/Microsoft/Boot/bootmgfw.efi'' (attenzione alle maiuscole, anche se è FAT).&lt;br /&gt;
&lt;br /&gt;
[[Category: Howto]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Recupero_Hardware&amp;diff=9633</id>
		<title>Recupero Hardware</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Recupero_Hardware&amp;diff=9633"/>
		<updated>2025-02-04T22:12:21Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Minimi cambiamenti estetici ai requisiti&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Guide&lt;br /&gt;
|immagine=oldpc.png&lt;br /&gt;
|guida=Trashware&lt;br /&gt;
|precedente=&lt;br /&gt;
|indice=Trashware&lt;br /&gt;
|successiva=Riconoscere il materiale&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Trashware]]: ''recupero dei computer dismessi, installazione  di software libero e donazione per finalità sociali''&lt;br /&gt;
&lt;br /&gt;
Siamo un'associazione di promozione sociale che ricondiziona i computer dismessi, vi installa tanti programmi utili, gratuiti e liberi, e poi dona i computer a chi ne ha bisogno.&lt;br /&gt;
&lt;br /&gt;
Accettiamo:&lt;br /&gt;
* apparecchiature funzionanti, perché vogliamo regalarle a delle '''persone''': un computer rotto non è un bel regalo da fare.&lt;br /&gt;
* computer completi&lt;br /&gt;
* periferiche&lt;br /&gt;
* pezzi hardware di ricambio&lt;br /&gt;
Il materiale deve rispettare almeno le caratteristiche minime riassunte in seguito.&lt;br /&gt;
&lt;br /&gt;
Siamo coscienti del fatto che i requisiti sono abbastanza elevati, ma abbiamo già sufficiente materiale più vecchio di quello indicato, e la nostra [[Officina Informatica | officina]] non è infinita.&lt;br /&gt;
&lt;br /&gt;
= Requisiti =&lt;br /&gt;
&lt;br /&gt;
Indicazione di massima: ritiriamo preferibilmente computer portatili con età massima 10 anni.&lt;br /&gt;
&lt;br /&gt;
* '''Processore minimo''' Architettura x86_64 compatibile (64 bit), multi core, per esempio:&lt;br /&gt;
** AMD Zen, Ryzen, Epic e superiori&lt;br /&gt;
** Intel Core i3, i5, i7-6xxx e superiori&lt;br /&gt;
* '''RAM''' almeno 4GB di RAM. Stiamo cercando DDR3 e DDR4.&lt;br /&gt;
* '''Hard Disk''' preferibilmente SSD&lt;br /&gt;
* '''Alimentatore''' preferibilmente ATX 24-pin, con connettori SATA (di più vecchi ne abbiamo abbastanza)&lt;br /&gt;
* '''Monitor a schermo piatto''' HDMI&lt;br /&gt;
* '''Schede di rete''' Giga Ethernet 1Gbps, almeno PCIe o piu recenti. Di Fast Ethernet PCI ne abbiamo a volontà. (No 10Mbps, no TokenRing)&lt;br /&gt;
* '''Router''' e '''switch''', preferibilmente Giga Ethernet 1Gbps (di Fast Ethernet 100Mbps ne abbiamo abbastanza)&lt;br /&gt;
* '''Access Point Wireless''' e '''antenne esterne''', 2.4GHz o 5GHz, almeno G (54Mbps), preferibilmente N (150, 300Mbps o più)&lt;br /&gt;
* '''Tastiere''' e '''mouse''' solo se USB e ''non'' wireless, perché non si trovano mai le batterie quando servono&lt;br /&gt;
* '''Schede audio''', PCIe o più recenti (no PCI/ISA)&lt;br /&gt;
* '''Altoparlanti''', solo con alimentazione, anche se non di alta qualità&lt;br /&gt;
* '''Cuffie''' e '''microfoni''', sia analogici che digitali (jack, USB), anche se non di alta qualità&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* '''Stampanti Inkjet e Laser''' USB, solo se perfettamente funzionanti e dotate di ''almeno'' una cartuccia per provarne le funzionalità. Anche multifunzione (con scanner/fotocopiatrice).&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Computer più vecchi =&lt;br /&gt;
Computer vecchi, ma non troppo:&lt;br /&gt;
* scrivere alla [https://lists.linux.it/listinfo/trashware lista nazionale Trashware]: qualche gruppo potrebbe essere interessato.&lt;br /&gt;
&lt;br /&gt;
Computer vecchissimi:&lt;br /&gt;
* accettiamo materiale informatico vecchissimo e di interesse storico: hardware non Intel-x86 compatibile, MOS, Motorola, Z80, Apple, Amiga, Amstrad, Atari, Commodore, Sinclair. In alternativa questo materiale è recuperato da associazioni di retrocomputing:&lt;br /&gt;
** associazione [http://www.bitretro.it/ Bit Retro] San Romano (PI)&lt;br /&gt;
** associazione [https://www.retrocomputer.org/ Firenze Vintage Bit] Lastra a Signa (FI)&lt;br /&gt;
&lt;br /&gt;
= Come riconoscere il materiale? =&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text=Se non si conoscono le caratteristiche tecniche del computer, è possibile visionarle autonomamente seguendo le brevi istruzioni nella mini-guida [[riconoscere il materiale]]. Se hai voglia ed esperienza puoi testare il materiale da solo leggendo le nostre [[pillole hardware]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
In caso di difficoltà, potete contattarci tramite il modulo di contatto:&lt;br /&gt;
* successivamente, sarete quasi sicuramente invitati a fornire foto e età del computer;&lt;br /&gt;
* altrimenti, possiamo accordarci e potete portare il materiale in officina durante uno dei nostri incontri, così possiamo valutarlo;&lt;br /&gt;
* altrimenti, possiamo fare un sopralluogo, ma solo se vi trovate in zona e avete molti computer.&lt;br /&gt;
&lt;br /&gt;
= Avvertenze =&lt;br /&gt;
* Non siamo un'azienda che si occupa di smaltimento rifiuti elettronici (RAEE), quindi non portateci materiale '''rotto''' e sicuramente inutilizzabile;&lt;br /&gt;
* Non ritiriamo rifiuti a domicilio;&lt;br /&gt;
* Non siamo un centro informatico: in Officina si impara, non si lascia fare agli altri;&lt;br /&gt;
* È vietato abbandonare materiale davanti alla sede (e anche dietro, di lato e persino sul tetto). Lasciare del materiale fuori dalla nostra sede, magari anche utilizzabile, è inutile in quanto gli agenti atmosferici (come pioggia, umidità e sole) rovinano le componenti elettroniche rendendo le macchine inutilizzabili.&lt;br /&gt;
&lt;br /&gt;
Nella maggior parte dei casi quando la gente sente parlare di trashware o vede in TV servizi come [[:Category:Stampa | quelli di Geo&amp;amp;Geo o di Report]] si ricorda che da qualche parte in soffitta o in cantina ha del materiale informatico messo da parte anni prima, pensando che prima o poi lo avrebbe rispolverato, e gli sarebbe magari stato utile per fare qualcosa. Così si rivolge all'associazione di turno e, pensando di fare una buona azione, nella migliore delle ipotesi propone loro il materiale, mentre nella peggiore glielo lascia abbandonato davanti la porta, magari in un giorno che diluvia.&lt;br /&gt;
&lt;br /&gt;
Forse quel materiale qualche anno prima sarebbe stato ancora riutilizzabile, ma adesso l'incalzare del tempo lo ha reso poco più che un rottame.&lt;br /&gt;
In linea teorica, e per puro esercizio didattico, anche su macchine molto molto vecchie può essere installato software libero e in modo da recuperarle per usi minimali; in pratica, il dispendio di tempo e l'uso abbastanza limitato a cui sarebbero destinate non lo rende conveniente.&lt;br /&gt;
&lt;br /&gt;
Facciamo un paragone per cercare di chiarire meglio questi concetti: ho dei vestiti che non mi stanno più, passati di moda ma buoni, ben conservati lontano delle tarme, lavati e stirati, saranno bene accetti da una associazione di volontariato che potrà riutilizzarli; ma se porto dei vestiti logori, strappati e sporchi, probabilmente me li tirano dietro perché sicuramente non potranno donarli a nessuno.&lt;br /&gt;
&lt;br /&gt;
Se vuoi donarci il tuo computer, perché ti sembra vecchio e lento, oppure vuoi scoprire se è possibile '''dargli nuova vita con Linux''', sei benvenuto. Al contrario, se il tuo computer è irrimediabilmente rotto, abbandonato all'umidità e alla polvere, non possiamo farci niente.&lt;br /&gt;
&lt;br /&gt;
= Cosa fare degli altri oggetti elettronici? =&lt;br /&gt;
Non ci portate telefoni, telecomandi, stereo, televisori o videoregistratori, a meno che non vogliate aiutarci a &amp;quot;spippolare&amp;quot; (es smartphone Android, VCR o Home Theatre con Linux). Le cose impossibili le facciamo, ma per i miracoli ci dobbiamo ancora attrezzare.&lt;br /&gt;
&lt;br /&gt;
Questo genere di cose possono trovare posto in:&lt;br /&gt;
&lt;br /&gt;
* mercatini di Economia Circolare&lt;br /&gt;
** per esempio, a Empoli [http://www.nonlobuttovia.it/?p=160 Non lo butto via]&lt;br /&gt;
* Restart Party&lt;br /&gt;
** per esempio, a Firenze [http://www.restartersfirenze.it/ Restarters Firenze]&lt;br /&gt;
&lt;br /&gt;
= Contatti =&lt;br /&gt;
Per qualunque dubbio non esitate a [http://golem.linux.it/wp/contatti/ contattarci] o a venirci a trovare!&lt;br /&gt;
&lt;br /&gt;
= Pagine correlate =&lt;br /&gt;
{{Guide&lt;br /&gt;
|immagine=oldpc.png&lt;br /&gt;
|guida=Trashware&lt;br /&gt;
|precedente=&lt;br /&gt;
|indice=Trashware&lt;br /&gt;
|successiva=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Officina]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Ore_del_GOLEM&amp;diff=9630</id>
		<title>Ore del GOLEM</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Ore_del_GOLEM&amp;diff=9630"/>
		<updated>2025-01-18T22:37:05Z</updated>

		<summary type="html">&lt;p&gt;Giomba: /* 2024 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Questa pagina raccoglie gli interventi passati. Se stai cercando gli eventi futuri, consulta il [https://blog.golem.linux.it/calendario calendario], o dai un'occhiata a [[Progetti]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
L'Ora del GOLEM è una serata a tema in cui si discute, più o meno formalmente, su qualunque cosa riguardi l'open source, dagli argomenti strettamente tecnici e pratici, alla &amp;quot;consapevolizzazione&amp;quot; e alla valutazione dell'uso dei vari strumenti. A volte i soci più smanettoni preparano delle piccole presentazioni su qualche nuova tecnologia, o qualche tema interessante; altre volte ci si arricchisce facendo brainstorming tutti insieme e si impara a utilizzarla. Spesso, le discussioni di queste serate, vengono tradotte in dei veri e propri [[Howto | how-to]].&lt;br /&gt;
&lt;br /&gt;
Qui puoi trovare tutte le serate passate (in ordine cronologico inverso), con riferimenti a materiale e/o guide prodotte.&lt;br /&gt;
Alcune serate sono anche state [https://video.linux.it/c/golem_channel/videos registrate].&lt;br /&gt;
&lt;br /&gt;
== 2024 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=17 dicembre: Liberiamo il BIOS con coreboot&lt;br /&gt;
|autore=aggro&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=In questa serata parleremo di coreboot, il bios libero. Faremo una chiacchierata in cui si parlerà di cos'è, su che macchine si può usare e quali sono i benefici. Mezzi permettendo, alla chiacchierata seguirà una fase pratica in cui flasheremo coreboot sul Thinkpad X230 del relatore. A cura di Alessandro, LUG di Prato&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=5 dicembre: IPv6 @ FLUG&lt;br /&gt;
|autore=[[Utente:giomba]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Internet è una rete di reti a cui sono connessi miliardi di dispositivi, dai nostri computer, ai nostri smartphone, a tutti quei server e router che permettono all'infrastruttura di funzionare, per non parlare di tutti i dispositivi di domotica e IoT che ormai pervadono le nostre vite. Tuttavia, in origine, erano stati previsti solo 4 miliardi di indirizzi (IPv4): com'è possibile dunque continuare a estendere la rete se gli indirizzi sono finiti? Quali trucchi vengono impiegati, e quali svantaggi ci sono nel perpetuare l'uso di un protocollo che ormai ha fatto il suo tempo? Ospitare un servizio in autonomia, un sito, può diventare appannaggio dei pochi che possono ancora permettersi di accedere a indirizzi IPv4? IPv6 è la soluzione e la sua promozione necessaria, sebbene in Italia sia ancora poco diffuso: in questa serata impareremo a conoscere IPv6, capiremo le differenze con IPv4, e valuteremo, in tempo reale, come potrebbe essere utilizzato al FLUG.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=22 ottobre: Come gestire nodi TOR dalla tua cantina&lt;br /&gt;
|autore=[https://osservatorionessuno.org/ Osservatorio Nessuno]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Gestire nodi TOR può essere divertente, ma anche ben fastidioso, come farlo in Italia? Per spiegarlo vi racconteremo una storia che parte dal processo Ruby ter, arriva in Siria e finisce in una cantinetta piastrellata della Torino Liberty. &lt;br /&gt;
A cura dell'Osservatorio Nessuno&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=25 giugno: Introduzione al mondo open source: consigli e strumenti per nuovi contributori&lt;br /&gt;
|autore=luigix25&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Contribuire a grandi progetti open-source può sembrare un'impresa ardua. Durante la serata esploreremo il funzionamento dello sviluppo in progetti di rilievo come Linux. Ci concentreremo su come avvicinarsi a questo mondo e sugli strumenti essenziali per iniziare.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=4 giugno: Il Processo di compilazione&lt;br /&gt;
|autore=Simone Guercini&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Durante la serata approfondiremo il processo di compilazione di un programma C++ tramite gcc, analizzando gli step che intercorrono tra il codice sorgente ed il file eseguibile. Sono compresi cenni alla struttura di un programma C++, una introduzione al linguaggio assembly x86_64 e numerosi esempi&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=9 aprile: Irrigazione domotica fai-da-te&lt;br /&gt;
|autore=Mario Alinari&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=In casa ho un piccolo terrazzo che ho rallegrato con un po’ di fiori. Da qui l’idea  di un sistema di irrigazione che annaffiasse le piante al posto mio. Avrei potuto acquistare qualcosa di già fatto? Sicuramente si ma mi sarei perso tutto il divertimento. Non rimaneva altro che realizzarlo home made.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=2 aprile: R Project&lt;br /&gt;
|autore=Fabio Frascati&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=Una serata di formazione sull'utilizzo del software statistico R per i dati qualitativi. In altre parole la gestione di dati categorici (non numerici) semplice ed intuitiva. Vengono illustrati gli oggetti R ad hoc per un supporto migliore del comune vettore di stringhe. Semplici esempi completeranno la sintetica parte teorica. Nessuna esperienza precedente in R o in programmazione è necessaria.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=12 marzo: Documentare il Sanco 8003: un'avventura inaspettata&lt;br /&gt;
|autore=[[Utente:giulio]] [[Utente:giomba]]&lt;br /&gt;
|immagine=Sanco8003.jpeg&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=In questa serata, a metà fra il vintage ed il moderno, racconteremo la storia del reverse engineering di un computer di inizio anni '80: il Sanco 8003. Utilizzando software ed hardware libero, si parlerà di come approcciarsi ad una scheda sconosciuta per ricavarne il relativo schema; come si possono interpretare i segreti celati all'interno delle EPROM; come disassemblare un intricato codici per Z80 e modificarlo a piacimento per creare un bootloader personalizzato; ed infine, come sfruttare tutte queste scoperte per realizzare un emulatore dedicato a questa misteriosa macchina!&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/pGdCgrdATtQc87E&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=5 marzo: Semplificare il controllo degli accessi su Linux con Systems Manager&lt;br /&gt;
|autore=Francesco Provino&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Come accedere a macchine Linux in cloud e on-premise (nonché qualsiasi altra risorsa) senza usare chiavi SSH o esponendo porte di rete, utilizzando AWS Systems Manager.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=6 febbraio: Introduzione a XMPP&lt;br /&gt;
|autore=Matteo Bini&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=XMPP è un protocollo che permette di scambiarsi messaggi proprio come WhatsApp, con tanto di chiamate audio e video e invio di allegati. Durante l’intervento sarà presentata una breve panoramica sulla struttura del protocollo in questione, oltre all'illustrazione dei vari programmi disponibili per utilizzarlo e per offrire tale servizio.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=http://choice.tiepi.it/~matteobin/scritti/presentazione-di-xmpp.html&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=9 gennaio: virtio e vsock: comunicazione tra host e VM&lt;br /&gt;
|autore=Stefano Garzarella e Luigi Leonardi&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=virtio è uno standard per la comunicazione fra host e macchine virtuali: saranno presentati la sua specifica, come funziona, e alcuni casi d'uso. In particolare ci focalizzaremo su vsock, una famiglia di socket per la comunicazione fra host e guest.&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/s2t24maeGfqiSzY&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2023 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=5 dicembre: Minigiochi al cubo&lt;br /&gt;
|autore=Zughy&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Mai pensato di voler sviluppare un videogioco? Detto fatto! Da anni i server minigiochi spopolano su Minecraft, facendo divertire milioni di persone. Usando il motore di gioco libero Minetest e una piccola libreria, imparerai a creare quelle avventure tanto anelate, arrivando ad avere il tuo piccolo titolo a fine laboratorio. Consigliato per tutte le età!&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://video.linux.it/w/3DtztwVqPLf2CwvnWnK8d7&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=7 marzo: Introduzione a Proxmox&lt;br /&gt;
|autore=Thomas Buonanno&lt;br /&gt;
|immagine=logo-proxmox.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Proxmox VE è una distribuzione debian-based per la gestione di macchine virtuali e container, che include anche un sistema di backup, per la gestione di file system distribuiti e per la migrazione rapida dei servizi. Durante questa serata sarà presentato il progetto e ne saranno mostrate alcune applicazioni pratiche.&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/KfiDYeczEop5WEo&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=7 febbraio: Le alternative al foglio di calcolo nella gestione ed analisi dei propri dati&lt;br /&gt;
|autore=Fabio Frascati&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Perché è così comune usare il foglio di calcolo nella gestione dei propri dati? È sempre la soluzione migliore? Esistono valide alternative gratuite ed open source per compiti specifici e spesso noiosi? Vediamo insieme alcuni semplici esempi in Libreoffice Calc ed R.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=3 Gennaio: Haskell&lt;br /&gt;
|autore=Mariano&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata di introduzione ad Haskell ed ai linguaggi funzionali&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/QDFGaYDfS7c6stP&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2021 ==&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=29 giugno: dotfiles - Gestione ragionata dei files di configurazione&lt;br /&gt;
|autore=[[Utente:Gbiotti]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata sulla gestione con versioning dei dotfiles di Linux&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=[https://git.golem.linux.it/gbiotti/sdf_appunti Appunti della serata] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=16 marzo: Blockchain - Il Free Software incontra la finanza&lt;br /&gt;
|autore=[[Utente:Linux-Lover]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata introduttiva e divulgativa sulle blockchain: cosa sono e perché sono importanti per la comunità del software libero.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=in caricamento&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=9 marzo: Due chiacchiere su buffer overflow&lt;br /&gt;
|autore=luigix25&lt;br /&gt;
|immagine=Stack-example.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Due chiacchiere informali sui buffer overflow e sulle tecniche di mitigrazione.&lt;br /&gt;
|presentazione=https://cloud.golem.linux.it/s/WkWf7XiNPPn7mqn&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://video.linux.it/w/8PG9X1PojpoVbeM5JtYLFn&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=27 gennaio: Programmare Arduino like a pro&lt;br /&gt;
|autore=[[Utente:Giulio]]&lt;br /&gt;
|immagine=Arduino-board.jpg&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=L'ecosistema Arduino consente di sviluppare semplici applicazioni in modo rapido e con conoscenze di programmazione non necessariamente approfondite. Ormai, volenti o nolenti tutti abbiamo una scheda Arduino in casa. Questo sarà il punto di partenza della serata, dove andremo a sviscerare come, partendo da uno sketch, si arrivi al codice macchina eseguito dal microcontrollore. Faremo la conoscenza dei varii strumenti della toolchain GCC: makefile, compilatori ed assemblatori, per comprendere meglio cosa avviene sotto il cofano dell'Arduino IDE e come sfruttarli per scrivere del codice &amp;quot;fuori dagli schemi&amp;quot;.&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/5M2SisqZmJ7PQXM&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://archivio.golem.linux.it/OreDelGolem/20210127-arduinolikeapro-parte1.mp4&lt;br /&gt;
|altro=[https://archivio.golem.linux.it/OreDelGolem/20210127-arduinolikeapro-parte2.mp4 Video sessione di approfondimento sul multitasking] [https://video.linux.it/videos/watch/f654157f-a4b6-4ebb-aaee-932b04bda1af Mirror1] [https://video.linux.it/videos/watch/e63d744f-2444-41c5-b852-fa79cedefde1 Mirror2]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=20 gennaio: Lineage OS: come installarla e... perché&lt;br /&gt;
|autore=Filippo Micheletti, [[Utente:Giomba]], Marco Castrovilli ([http://www.restartersfirenze.it/ Restarters Firenze])&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Tutti hanno uno smartphone, ma pochi sono coscienti del livello di pervasività che questo dispositivo ha nelle nostre vite, e sulla mancanza di controllo che abbiamo sui dati personali che lo attraversano. Conoscere come funziona è indispensabile per fare scelte consapevoli sull’uso che ne facciamo, e scoprire sistemi operativi e applicazioni alternative è uno dei primi passi per riprendere il controllo sui questi dati. Durante la serata, ci domanderemo perché usare LineageOS, quali programmi e applicazioni libere e rispettose possiamo usare, in alternativa ai soliti noti, come si installa questo sistema su uno smartphone, quali sono difficoltà, problemi e possibili rinunce che possiamo incontrare.&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/39dTAZxdpWfzHSp&lt;br /&gt;
|documenti=https://golem.linux.it/cloud/index.php/s/E9ZCm9fjFnq7egG&lt;br /&gt;
|video=https://video.linux.it/w/wSw212j2di8pM38E4g4DZY&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2020 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=7 ottobre: Linux per radioamatori&lt;br /&gt;
|autore=[[Utente:Giulio]] [[Utente:Lucam]]&lt;br /&gt;
|immagine=Tux-radio.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Introduzione a Linux e alle sue applicazioni in ambito radioamatoriale. Quali sono i programmi per fare radio su Linux? Come posso attivare un nodo webSDR?&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/8fLXfdwMwEpxxCq&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20201007-iu5mo-linuxradio.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=7 luglio: Flatcam&lt;br /&gt;
|autore=[[Utente:Glomant]]&lt;br /&gt;
|immagine=Flatcam.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Flatcam è un software che, a partire da file gerber o gcode, permette di passare all’incisione e all’intaglio vero e proprio del circuito tramite una macchina a controllo numerico. Al termine della serata, il prodotto potrà essere inciso tramite una CNC, come quella che abbiamo in officina, come vedremo nella serata successiva.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=https://golem.linux.it/cloud/index.php/s/RZZEfzF8f7C7CMA&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20200708-glomant-flatcam.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=30 giugno: KiCAD 2/2&lt;br /&gt;
|autore=[[Utente:Giulio]]&lt;br /&gt;
|immagine=Kicad.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Seconda serata sull'uso del software di disegno circuiti stampati: disegnato lo schema sarà necessario realizzare il layout, la controparte digitale del circuito stampato. Al termine della serata, il prodotto potrà essere mandato in stampa presso aziende specializzate tramite processi industriali, oppure potrà essere utilizzato la serata seguente. Saranno approfondite alcune funzioni supplementari di KiCAD, come la gestione della lista componenti e delle librerie.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20200630-giuliof-kicad.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=23 giugno: Scrivere un emulatore per il Commodore 64&lt;br /&gt;
|autore=luigix25&lt;br /&gt;
|immagine=c64-startup-screen.jpg&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://video.linux.it/w/qVJ5C78WVkJrDvDyBC57sf&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=16 giugno: KiCAD 1/2&lt;br /&gt;
|autore=[[Utente:Giulio]]&lt;br /&gt;
|immagine=Kicad.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Prima serata sull'uso del software di disegno circuiti stampati: Si tratta di un software opensource di Electronic Design Automation, ossia di progettazione assistita al computer per circuiti elettronici. KiCAD permette di progettare ogni fase della realizzazione del circuito, dalla sua prima bozza, alla scelta e al posizionamento dei componenti, allo sbroglio delle piste, alla produzione dei file per lo stampaggio vero e proprio. In questo primo incontro si vedrà perché e come disegnare uno schema elettronico al computer, come importare i componenti, come associare i simboli grafici agli oggetti fisici.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20200616-giuliof-kicad.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=26 maggio: Indipendenza Digitale?&lt;br /&gt;
|autore=[[Utente:Giomba]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Guida pratica per riappropriarsi della propria indipendenza e identità digitale. Quali compromessi possiamo fare nell'uso del software sul nostro computer e sul nostro smartphone?&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=https://golem.linux.it/cloud/index.php/s/WMDixxEjNtEadAj&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=12 maggio: Due parole su LaTeX&lt;br /&gt;
|autore=[[Utente:Giulio]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Introduzione al software di impaginazione LaTeX&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=''Presentazione in caricamento''&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=14 aprile: Riconoscimento oggetti con OpenCV&lt;br /&gt;
|autore=[[Utente:Linux-Lover]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/E9FxLxM5AEopZyJ&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2019 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=19 febbraio: 128 bit di IPv6&lt;br /&gt;
|autore=[[Utente:giomba]]&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Cos’è un indirizzo di rete? IPv4 vs IPv6. Perché IPv6? Come si legge un IPv6? Come posso realizzare una rete IPv6? Cosa sono NDP e SLAAC? Come ottenere IPv6? [[IPv6 @ GOLEM]]&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/pZcSHge3bBiQ37m&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://video.linux.it/w/e6oYr4MasX9NDVtkJ6jCU3&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=8 gennaio: Deepen Meltdown&lt;br /&gt;
|autore=[[Utente:Raistlin]]&lt;br /&gt;
|immagine=Meltdown-spectre-logo.png&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Aggiornamenti sui bug che hanno recentemente afflitto le CPU&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 2018 ==&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=16 Ottobre: NextCloud&lt;br /&gt;
|autore=Mattia &amp;amp; Carmelo&lt;br /&gt;
|immagine=Nextcloud-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Cos'è un sistema di clouding. Cloud commerciale vs. Nextcloud. Come configurare un cloud casalingo su PC o Raspberry.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=2 Ottobre: Python &amp;amp; grafici&lt;br /&gt;
|autore=giuliof&lt;br /&gt;
|immagine=Python-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Approfondimento sulle librerie &amp;lt;code&amp;gt;MatPlotLib&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;NumPy&amp;lt;/code&amp;gt;: creare e abbellire grafici, tracciare funzioni, importare e visualizzare dati da CSV, grafici professionali in LaTeX. ''To be continued...''&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/wteTWdnflCwWOXa/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20181002-giuliof-python-grafici.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=12 Settembre: PC4Beginners&lt;br /&gt;
|autore=jacopo&lt;br /&gt;
|immagine=&lt;br /&gt;
|dimensione_img=&lt;br /&gt;
|descrizione=Serata introduttiva all'informatica: cenni storici sul computer, cos'è l'hardware, cos'è il software, quali sono i componenti di un PC.&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/HoTfB2ilOWHl1Aq/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180918-jacopo-PC4Beginners.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=3 Luglio: Python 303&lt;br /&gt;
|autore=giuliof&lt;br /&gt;
|immagine=Python-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Avanziamo di livello e parliamo di: liste, dizionari, lettura/scrittura su file, accenno alle librerie e confronto Python2 vs Python3. ''To be continued...''&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/2gbp1UpORawCUkF/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180703-giuliof-python303.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=19 Giugno: Python 101 x2&lt;br /&gt;
|autore=giuliof&lt;br /&gt;
|immagine=Python-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Basi sul linguaggio di programmazione Python: esercizi con ''if...else'', funzioni, cicli ''while'' e ''for'', stringhe e operazioni su stringhe. ''To be continued...''&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/Qq99P5gwkno7H1q/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180619-giuliof-python101x2.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=12 Giugno: Technical deep dive: Meltdown + Spectre&lt;br /&gt;
|autore=Dario&lt;br /&gt;
|immagine=Meltdown-spectre-logo.png&lt;br /&gt;
|dimensione_img=250px&lt;br /&gt;
|descrizione=Da una panoramica sull'architettura e sul funzionamento dei processori moderni (architettura superscalare, memorie cache, TLB, memoria virtuale) arriviamo a capire come queste vulnerabilità scoperte di recente denominate ''Meltdown'' e ''Spectre'' (maggiori [https://meltdownattack.com info]) potrebbero mettere a rischio la sicurezza dell'utente.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180612-Meltdown-Spectre-Dario.mp4&lt;br /&gt;
|altro= concetti introduttivi ([https://en.wikipedia.org/wiki/Virtual_address_space Virtual Memory],&lt;br /&gt;
[https://wiki.osdev.org/Memory_management gestione della memoria],&lt;br /&gt;
esecuzione speculativa [https://en.wikipedia.org/wiki/Speculative_execution] [https://en.wikipedia.org/wiki/Branch_predictor],&lt;br /&gt;
[https://en.wikipedia.org/wiki/Instruction_pipelining pipeline],&lt;br /&gt;
[https://en.wikipedia.org/wiki/Tomasulo_algorithm algoritmo di Tomasulo],&lt;br /&gt;
memoria cache [https://en.wikipedia.org/wiki/CPU_cache] [https://www.extremetech.com/extreme/188776-how-l1-and-l2-cpu-caches-work-and-why-theyre-an-essential-part-of-modern-chips],&lt;br /&gt;
[https://en.wikipedia.org/wiki/Translation_lookaside_buffer TLB],&lt;br /&gt;
[https://en.wikipedia.org/wiki/Side-channel_attack side channel attack])&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
esempi di codice che sfrutta le vulnerabilità ([https://www.raspberrypi.org/blog/why-raspberry-pi-isnt-vulnerable-to-spectre-or-meltdown/], [https://medium.com/@mattklein123/meltdown-spectre-explained-6bc8634cc0c2])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=5 Giugno: Buildroot: distrubuzione personalizzata&lt;br /&gt;
|autore=$pookyh&lt;br /&gt;
|immagine=Logog-b.png&lt;br /&gt;
|dimensione_img=80px&lt;br /&gt;
|descrizione=[https://buildroot.org Buildroot] è un tool che permette di generare una distribuzione Linux essenziale cucita su misura per le proprie esigenze.&lt;br /&gt;
|presentazione=&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180605-spooky-buildroot.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{OraDelGolem&lt;br /&gt;
|nome=22 Maggio: Python - introduzione e basi&lt;br /&gt;
|autore=giuliof&lt;br /&gt;
|immagine=Python-logo.png&lt;br /&gt;
|dimensione_img=150px&lt;br /&gt;
|descrizione=Basi sul linguaggio di programmazione Python: esempi applicativi, installazione, variabili, istruzioni di stampa a schermo, blocchi condizionali. (Il video è parziale'''!''')&lt;br /&gt;
|presentazione=https://golem.linux.it/cloud/index.php/s/IroTEn8ZJhXTaGg/download&lt;br /&gt;
|documenti=&lt;br /&gt;
|video=https://golem.linux.it/pubblici/OreDelGolem/20180519-GiulioF-Python101x1.mp4&lt;br /&gt;
|altro=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 17 Aprile: R: software di analisi statistica ===&lt;br /&gt;
Basi sul linguaggio di programmazione R, applicazioni alla statistica ed esempi.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_files.jpg|40px|files]] [https://golem.linux.it/cloud/index.php/s/mY2GIXC1dIZPKpu Scarica] files (script utilizzati, lista comandi...) e presentazioni della serata.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_video.png|40px|video]] [https://golem.linux.it/pubblici/OreDelGolem/20180417-R-Frascati-Giorgetti.mp4 Guarda] o scarica il video della serata!&lt;br /&gt;
&lt;br /&gt;
=== 10 Aprile: Bash e scripting ===&lt;br /&gt;
Panoramica sui comandi utili e basi di scripting per automatizzare le attività.&lt;br /&gt;
&lt;br /&gt;
Consulta il prontuario sulla [[Linea_di_comando | linea di comando]].&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_video.png|40px|video]] [https://golem.linux.it/pubblici/OreDelGolem/20180410-Bash-Giomba.mp4 Guarda] o scarica il video della serata!&lt;br /&gt;
&lt;br /&gt;
''by Giomba''&lt;br /&gt;
&lt;br /&gt;
=== 23 Gennaio: Sviluppo di un'app per Android ===&lt;br /&gt;
Uno sguardo d'insieme sulla realizzazione di applicazioni per il proprio smartphone con [https://developer.android.com/studio/index.html AndroidStudio], iniziando con alcuni esempi.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_presentazione.png|40px|slides]]  [https://golem.linux.it/cloud/index.php/s/pGoCGHZKpo7C04f/download Presentazione] della serata.&lt;br /&gt;
&lt;br /&gt;
''by Omid''&lt;br /&gt;
&lt;br /&gt;
=== 16 Gennaio: Impariamo KiCad ===&lt;br /&gt;
Come utilizzare il software [http://kicad-pcb.org KiCad] per il disegno di schemi e la realizzazione di circuiti stampati.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_files.jpg|40px|files]]  [https://golem.linux.it/cloud/index.php/s/HLl9ZxreCLQUCH8 Scarica] i file prodotti durante la serata.&lt;br /&gt;
&lt;br /&gt;
''by Stefano''&lt;br /&gt;
&lt;br /&gt;
== 2017 ==&lt;br /&gt;
=== 12 Dicembre: Arduino avr-gcc ===&lt;br /&gt;
Programmazione a &amp;quot;basso livello&amp;quot; in C della scheda Arduino, bypassando l'IDE, per sfruttare a pieno le risorse del microcontrollore.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_video.png|40px|video]] [https://golem.linux.it/pubblici/OreDelGolem/20171212-AVRgcc-Giulio.mp4 Guarda] o scarica il video della serata!&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:Giulio | Giulio]]''&lt;br /&gt;
&lt;br /&gt;
=== 21 Novembre: Git ===&lt;br /&gt;
Un sistema di versionamento alla portata di tutti: come gestire i propri progetti al computer, tenere traccia dello sviluppo e apportare modifiche senza rischiare di danneggiare il lavoro precedente. Consulta il nostro [[Git | prontuario]] di riferimento.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_presentazione.png|40px|slides]]  [https://golem.linux.it/cloud/index.php/s/VL27wucLMsbCEDP Presentazione] della serata&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_video.png|40px|video]]  [https://golem.linux.it/pubblici/OreDelGolem/20171121-Git-Lucam.mp4 Video] della serata&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:Lucam | Lucam]]''&lt;br /&gt;
&lt;br /&gt;
=== 7 Novembre: Arduino e Wireless ===&lt;br /&gt;
Domotica: come integrare il proprio progetto di elettronica con Arduino con la rete WiFi di casa.&lt;br /&gt;
&lt;br /&gt;
[[File:Icona_presentazione.png|40px|slides]]  [https://golem.linux.it/cloud/index.php/s/fp7PgxzcdLRmKlx Presentazioni] della serata.&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:Giulio | Giulio]]''&lt;br /&gt;
&lt;br /&gt;
=== 17 ottobre: Introduzione a Wordpress ===&lt;br /&gt;
Procedure base e consigli per costruire un semplice sito dinamico con Wordpress.&lt;br /&gt;
&lt;br /&gt;
''by Pinpas''&lt;br /&gt;
&lt;br /&gt;
=== 3 Ottobre: Sviluppo HTML+CSS ===&lt;br /&gt;
I rudimenti per scrivere un sito statico. &lt;br /&gt;
&lt;br /&gt;
[[File:Icona_files.jpg|40px|files]] [https://golem.linux.it/cloud/index.php/s/uIz3QwcymtgTeNN Scarica] i file della serata!&lt;br /&gt;
&lt;br /&gt;
''by Francesco''&lt;br /&gt;
&lt;br /&gt;
=== 19 Settembre: Installazione Wordpress ===&lt;br /&gt;
Serata pratica di gruppo sull'installazione del CMS [[Wordpress]] e in generale di un applicativo web su piattaforma LAMP.&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:giomba | giomba]]''&lt;br /&gt;
&lt;br /&gt;
=== 5 Settembre: Il Terminale Unix/Linux ===&lt;br /&gt;
Introduzione ai concetti e ai comandi più utilizzati per gestire il sistema da terminale. Consulta il nostro How-To sul [[Linea_di_comando | terminale]].&lt;br /&gt;
&lt;br /&gt;
''by [[Utente:giomba | giomba]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Officina]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Diventa_socio&amp;diff=9629</id>
		<title>Diventa socio</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Diventa_socio&amp;diff=9629"/>
		<updated>2025-01-02T21:14:54Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Aggiornamento quota 2025&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Cena-sociale-estate-2018.jpeg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
L'Associazione GOLEM si sostenta principalmente grazie alle quote associative e alle donazioni dei propri soci.&lt;br /&gt;
&lt;br /&gt;
Associarsi al GOLEM permette di:&lt;br /&gt;
* accedere all'Officina Informatica&lt;br /&gt;
* partecipare ai corsi organizzati in sede&lt;br /&gt;
* usufruire del materiale e della strumentazione presente&lt;br /&gt;
* sostenere la promozione del software libero nel territorio&lt;br /&gt;
* e molto altro ([[Chi siamo|Chi siamo?]])&lt;br /&gt;
&lt;br /&gt;
La quota associativa per l'anno 2025 è fissata a 20€ per la Tessera Ordinaria e a 10€ per la Tessera Junior (under 19).&lt;br /&gt;
&lt;br /&gt;
== Modalità ==&lt;br /&gt;
La quota associativa può essere versata:&lt;br /&gt;
* in contanti direttamente al Tesoriere durante le serate in Officina. Verificare sul [https://blog.golem.linux.it/calendario calendario] quando l'Officina è aperta.&lt;br /&gt;
* tramite bonifico bancario intestato a &amp;quot;'''GOLEM Gruppo Operativo Linux Empoli'''&amp;quot; sull'IBAN '''IT08O0842538171000031246515'''.&lt;br /&gt;
* tramite PayPal utilizzando i pulsanti sottostanti&lt;br /&gt;
&lt;br /&gt;
'''Nota:''' specificare ''&amp;lt;nome&amp;gt; &amp;lt;cognome&amp;gt; &amp;lt;indirizzo email&amp;gt; &amp;lt;anno&amp;gt;'' nella causale del bonifico o nel messaggio Paypal.&lt;br /&gt;
&lt;br /&gt;
Esempio: ''Linus Torvalds torvalds@kernel.org 2025''&lt;br /&gt;
&lt;br /&gt;
'''Tessera'''&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;https://www.paypal.com/donate&amp;quot; method=&amp;quot;post&amp;quot; target=&amp;quot;_top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;hosted_button_id&amp;quot; value=&amp;quot;CTYBDKVB2L6Q4&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;image&amp;quot; src=&amp;quot;https://www.paypalobjects.com/it_IT/IT/i/btn/btn_donate_LG.gif&amp;quot; border=&amp;quot;0&amp;quot; name=&amp;quot;submit&amp;quot; title=&amp;quot;PayPal - The safer, easier way to pay online!&amp;quot; alt=&amp;quot;Donate with PayPal button&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img alt=&amp;quot;&amp;quot; border=&amp;quot;0&amp;quot; src=&amp;quot;https://www.paypal.com/it_IT/i/scr/pixel.gif&amp;quot; width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Tessera Junior'''&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;https://www.paypal.com/donate&amp;quot; method=&amp;quot;post&amp;quot; target=&amp;quot;_top&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;hosted_button_id&amp;quot; value=&amp;quot;MWPB8GW3SLTSQ&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;image&amp;quot; src=&amp;quot;https://www.paypalobjects.com/it_IT/IT/i/btn/btn_donate_LG.gif&amp;quot; border=&amp;quot;0&amp;quot; name=&amp;quot;submit&amp;quot; title=&amp;quot;PayPal - The safer, easier way to pay online!&amp;quot; alt=&amp;quot;Donate with PayPal button&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img alt=&amp;quot;&amp;quot; border=&amp;quot;0&amp;quot; src=&amp;quot;https://www.paypal.com/it_IT/i/scr/pixel.gif&amp;quot; width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Btrfs&amp;diff=9627</id>
		<title>Btrfs</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Btrfs&amp;diff=9627"/>
		<updated>2024-12-31T14:37:09Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Bilanciamento&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduzione =&lt;br /&gt;
Btrfs è un filesystem di nuova generazione designato per rimpiazzare Ext3 e Ext4 sui sistemi Linux.&lt;br /&gt;
&lt;br /&gt;
Integra a livello di filesystem la gestione di volumi, snapshot e RAID rendendo non più necessario il ricorso a [http://en.wikipedia.org/wiki/Logical_Volume_Manager_%28Linux%29 LVM]&lt;br /&gt;
&lt;br /&gt;
= Utilizzo di base =&lt;br /&gt;
==Creazione del filesystem==&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs ''/dev/partizione''&lt;br /&gt;
&lt;br /&gt;
== Montaggio del filesystem ==&lt;br /&gt;
 # mount -o compress=lzo ''/dev/partizione'' ''/mnt/punto_mount''&lt;br /&gt;
&lt;br /&gt;
(Si consiglia di usare l'opzione di compressione del filesystem per migliorare le performance ed ottimizzare l'utilizzo dello spazio)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Creazione di un subvolume==&lt;br /&gt;
 # btrfs subvolume create ''subvolume''&lt;br /&gt;
&lt;br /&gt;
== Montaggio di un subvolume ==&lt;br /&gt;
 # mount -o subvol=''subvolume'' ''/dev/partizione'' ''/mnt/punto_mount''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conversione da Ext3/4 a Btrfs==&lt;br /&gt;
 # btrfs-convert /dev/partizione&lt;br /&gt;
&lt;br /&gt;
Automaticamente è creata una snapshot contenente il vecchio filesystem (''/ext2_saved'')&lt;br /&gt;
&lt;br /&gt;
In caso di problemi può essere montata col comando&lt;br /&gt;
 # mount -t btrfs -o subvol=ext2_saved /dev/xxx /ext2_saved&lt;br /&gt;
 # mount -t ext3 -o loop,ro /ext2_saved/image /ext3&lt;br /&gt;
&lt;br /&gt;
Se tutto è andato a buon fine può invece essere eliminata&lt;br /&gt;
 # btrfs subvolume delete /ext2_saved&lt;br /&gt;
&lt;br /&gt;
=Riparazione di un filesystem danneggiato=&lt;br /&gt;
Ci sono due modalità:&lt;br /&gt;
&lt;br /&gt;
==Riparazione online==&lt;br /&gt;
Si può tentare di riparare il filesystem a caldo (mentre questo è montato)&lt;br /&gt;
 # btrfs scrub start -B /dev/partizione&lt;br /&gt;
o anche direttamente sulla root&lt;br /&gt;
 # btrfs scrub start -B /&lt;br /&gt;
&lt;br /&gt;
==Riparazione offline==&lt;br /&gt;
Precedentemente conosciuta come btrfsck, nel caso in cui l'operazione di ripristino precedente fallisca, si deve smontare il disco e, da live, dare:&lt;br /&gt;
 # btrfs check --repair /dev/partizione&lt;br /&gt;
&lt;br /&gt;
=Tips and tricks=&lt;br /&gt;
Se si preferisce non utilizzare una partizione /boot in formato tradizionale (ext2/3/4, reiser, etc...), al fine di evitare possibili problemi di avvio con GRUB, specialmente abilitando opzioni come la compressione del filesystem di root, si consiglia di partizionare il disco nel formato [[UEFI_e_GPT | GPT]] ed utilizzare la Bios Grub Partition o l'EFI System nel caso si possieda un moderno PC dotato di UEFI.&lt;br /&gt;
&lt;br /&gt;
=Gestione avanzata=&lt;br /&gt;
Normalmente la root di sistema viene collocata in un subvolume (es.: ''@''), per poter effettuare opzioni di snapshot etc e consigliabile montare il filesystem con l'opzione ''subvolid=0''. Nella directory di mount saranno visibili tutti i subvolumi e le snapshot della partizione e sarà quindi possibile effettuare tutte le operazioni indicate nei passaggi successivi.&lt;br /&gt;
&lt;br /&gt;
Ecco un '''/etc/fstab''' di esempio&lt;br /&gt;
 LABEL=ROOT       /             btrfs     defaults,compress=lzo,subvol=@            0 0&lt;br /&gt;
 LABEL=ROOT       /home         btrfs     defaults,compress=lzo,subvol=@home        0 0&lt;br /&gt;
 LABEL=ROOT       /mnt/btrfs    btrfs     defaults,noauto,subvolid=0,compress=lzo   0 0&lt;br /&gt;
&lt;br /&gt;
Montando la partizione con label ROOT su /mnt/btrfs saranno visibili tutti i subvolumi.&lt;br /&gt;
&lt;br /&gt;
==Creazione e gestione delle snapshot==&lt;br /&gt;
===Controllare i subvolumi presenti sul sistema===&lt;br /&gt;
 # btrfs subvolume list /&lt;br /&gt;
&lt;br /&gt;
In una tipica installazione Ubuntu avremo un output di questo tipo&lt;br /&gt;
 ID 257 gen 9755 top level 5 path @&lt;br /&gt;
 ID 292 gen 7624 top level 5 path @home&lt;br /&gt;
&lt;br /&gt;
''@'' è il nome del subvolume contenente la root '''/''' del filesystem&lt;br /&gt;
''@home'' è il nome del subvolume della /home&lt;br /&gt;
&lt;br /&gt;
===Effettuare una snapshot===&lt;br /&gt;
 # btrfs subvolume snapshot @ rootsnap&lt;br /&gt;
&lt;br /&gt;
Nell'esempio abbiamo effettuato il ''backup'' del filesystem di root e l'abbiamo chiamato ''rootsnap''&lt;br /&gt;
&lt;br /&gt;
=== Montare un subvolume/snapshot===&lt;br /&gt;
 # mount -t btrfs -o subvol=rootsnap /dev/partizione /mnt/snapshot&lt;br /&gt;
&lt;br /&gt;
===Cancellare un subvolume/snapshot===&lt;br /&gt;
 # btrfs subvolume delete rootsnap&lt;br /&gt;
&lt;br /&gt;
===Aggiungere a GRUB l'opzione per avviare una snapshot===&lt;br /&gt;
Editare ''/etc/grub.d/40_custom'' (o crearlo) e aggiungere quanto segue per permettere l'avvio della snapshot ''rootsnap''&lt;br /&gt;
&lt;br /&gt;
 menuentry 'Linux snapshot' {&lt;br /&gt;
        insmod gzio&lt;br /&gt;
        insmod part_gpt&lt;br /&gt;
        insmod btrfs&lt;br /&gt;
        set root='hd1,gpt3'&lt;br /&gt;
        linux   /rootsnap/boot/vmlinuz-linux root=/dev/partizione rw rootflags=subvol=rootsnap  quiet&lt;br /&gt;
        initrd  /rootsnap/boot/initramfs-linux.img&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
dopodichè aggiornare la configurazione di GRUB con&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
su Debian/Ubuntu si può anche dare&lt;br /&gt;
 # update-grub&lt;br /&gt;
&lt;br /&gt;
==RAID 0==&lt;br /&gt;
 # mkfs.btrfs -d raid0 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
=== Montare il raid ===&lt;br /&gt;
 # mount /dev/sda1 /mnt&lt;br /&gt;
&lt;br /&gt;
(È equivalente a ''mount /dev/sdb1 /mnt'', il sistema riconosce che è presente un raid 0 e provvede al montaggio corretto dei dischi)&lt;br /&gt;
&lt;br /&gt;
Verifica del montaggio&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 2 FS bytes used 27.75GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 17.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
===Aggiungere una partizione===&lt;br /&gt;
 # btrfs device add /dev/sdc1 /mnt&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 3 FS bytes used 27.75GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 17.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1&lt;br /&gt;
 devid    3 size 136.72GiB used 0.00 path /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Adesso è necessario effettuare una redistribuzione dei dati sui tre dischi&lt;br /&gt;
&lt;br /&gt;
 # btrfs balance start -d -m /mnt&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 3 FS bytes used 27.78GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 10.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 10.03GiB path /dev/sdb1&lt;br /&gt;
 devid    3 size 136.72GiB used 11.00GiB path /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
===Rimuovere un device===&lt;br /&gt;
 # btrfs device delete /dev/sdb1 /mnt&lt;br /&gt;
&lt;br /&gt;
L'operazione può impiegare parecchio tempo e per andare a buon fine sui dischi rimanenti deve essere rimasto sufficiente spazio libero da ospitare i dati contenuti nel device che vogliamo togliere dal raid.&lt;br /&gt;
&lt;br /&gt;
==RAID 1==&lt;br /&gt;
 # mkfs.btrfs -d raid1 -m raid1 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
== RAID 5 ==&lt;br /&gt;
=== Conversione a RAID5===&lt;br /&gt;
 # btrfs balance start -dconvert=raid5 -mconvert=raid5 ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
===Sostituzione device danneggiato===&lt;br /&gt;
 # btrfs replace start /dev/sdb1 /dev/sdc1 ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
In alcuni casi potrebbe essere necessario montare il filesystem in modalità '''degraded''' (con l'opzione ''-o degraded'') e lanciare il successivo comando per eliminare definitivamente il device dal raid.&lt;br /&gt;
 # btrfs device delete missing /mnt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quote ==&lt;br /&gt;
Per limitare le dimensioni di un subvolume è possibile abilitare la gestione delle '''quote'''.&lt;br /&gt;
&lt;br /&gt;
Utilizzare il seguente comando su un filesystem btrfs appena creato e privo di subvolumi&lt;br /&gt;
 # btrfs quota enable volume&lt;br /&gt;
&lt;br /&gt;
Se invece le quote non sono state abilitate subito su tutto il filesystem è necessario creare un qgroup (quota group) per ogni subvolume utilizzando il rispettivo ID e successivamente fare una scansione delle quote.&lt;br /&gt;
 # btrfs subvolume list &amp;lt;path&amp;gt; | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} &amp;lt;path&amp;gt;&lt;br /&gt;
 # btrfs quota rescan &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assegnare una quota limite ad un subvolume&lt;br /&gt;
 # btrfs qgroup limit size /volume/subvolume&lt;br /&gt;
&lt;br /&gt;
Es.:&lt;br /&gt;
 # btrfs qgroup limit 20g /mnt/@&lt;br /&gt;
 # btrfs qgroup limit 100g /mnt/@home&lt;br /&gt;
&lt;br /&gt;
Scoprire la quantità di spazio utilizzata da un subvolume&lt;br /&gt;
 # btrfs qgroup show &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Backup ==&lt;br /&gt;
Le snapshot possono essere salvate su un disco esterno, a patto che questo abbia un file system btrfs.&lt;br /&gt;
L'operazione di trasferimento può essere effettuata soltanto su snapshot in sola lettura.&lt;br /&gt;
Si ipotizza che il proprio disco di sistema sia montato in /mnt/btrfs ed il disco esterno in /mnt/ext&lt;br /&gt;
&lt;br /&gt;
* Creare la snapshot in sola lettura (opzione -r) oppure impostare il flag di sola lettura ad una snapshot già fatta&lt;br /&gt;
 btrfs subvolume snapshot -r @root @root-yymmdd-ro&lt;br /&gt;
 btrfs property set /mnt/btrfs/@root-yymmdd-ro ro true&lt;br /&gt;
* Trasferire la snapshot sul disco esterno.&lt;br /&gt;
 btrfs send /mnt/btrfs/@root-yymmdd-ro | btrfs receive /mnt/ext&lt;br /&gt;
* Quando necessario, ripristinare la snapshot&lt;br /&gt;
 btrfs send /mnt/ext/@root-yymmdd-ro | btrfs receive /mnt/btrfs/&lt;br /&gt;
* Eventualmente, rinominare la snapshot e reimpostare i privilegi di scrittura&lt;br /&gt;
 mv /mnt/ext/{@root-yymmdd-ro,@root}&lt;br /&gt;
 btrfs property set /mnt/btrfs/@root ro false&lt;br /&gt;
&lt;br /&gt;
== Bilanciamento ==&lt;br /&gt;
Btrfs tende ad utilizzare quanto più spazio possibile su disco, in maniera tale da massimizzare le performance.&lt;br /&gt;
Dopo un po' l'allocazione può risultare molto frammentata, e, se in generale non è un problema per i dischi a stato solido, a volte è anche necessario recuperare spazio, ad esempio per ridurre le dimensioni della partizione btrfs.&lt;br /&gt;
&lt;br /&gt;
Per ribilanciare i chunk parzialmente utilizzati (es. al ''40%''):&lt;br /&gt;
&lt;br /&gt;
 btrfs balance start -dusage=40 /mnt/btrfs&lt;br /&gt;
&lt;br /&gt;
'''Attenzione:''' a seconda della dimensione del filesystem e del tipo di supporto fisico sottostante (es. disco meccanico oppure a stato solido), questa operazione potrebbe richiedere anche diverse ore.&lt;br /&gt;
&lt;br /&gt;
= Bibliografia =&lt;br /&gt;
* http://lwn.net/Articles/577961/&lt;br /&gt;
* https://btrfs.readthedocs.io/&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Btrfs&amp;diff=9626</id>
		<title>Btrfs</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Btrfs&amp;diff=9626"/>
		<updated>2024-12-31T14:30:45Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Aggiornamento fonti bibliografiche&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduzione =&lt;br /&gt;
Btrfs è un filesystem di nuova generazione designato per rimpiazzare Ext3 e Ext4 sui sistemi Linux.&lt;br /&gt;
&lt;br /&gt;
Integra a livello di filesystem la gestione di volumi, snapshot e RAID rendendo non più necessario il ricorso a [http://en.wikipedia.org/wiki/Logical_Volume_Manager_%28Linux%29 LVM]&lt;br /&gt;
&lt;br /&gt;
= Utilizzo di base =&lt;br /&gt;
==Creazione del filesystem==&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs ''/dev/partizione''&lt;br /&gt;
&lt;br /&gt;
== Montaggio del filesystem ==&lt;br /&gt;
 # mount -o compress=lzo ''/dev/partizione'' ''/mnt/punto_mount''&lt;br /&gt;
&lt;br /&gt;
(Si consiglia di usare l'opzione di compressione del filesystem per migliorare le performance ed ottimizzare l'utilizzo dello spazio)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Creazione di un subvolume==&lt;br /&gt;
 # btrfs subvolume create ''subvolume''&lt;br /&gt;
&lt;br /&gt;
== Montaggio di un subvolume ==&lt;br /&gt;
 # mount -o subvol=''subvolume'' ''/dev/partizione'' ''/mnt/punto_mount''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conversione da Ext3/4 a Btrfs==&lt;br /&gt;
 # btrfs-convert /dev/partizione&lt;br /&gt;
&lt;br /&gt;
Automaticamente è creata una snapshot contenente il vecchio filesystem (''/ext2_saved'')&lt;br /&gt;
&lt;br /&gt;
In caso di problemi può essere montata col comando&lt;br /&gt;
 # mount -t btrfs -o subvol=ext2_saved /dev/xxx /ext2_saved&lt;br /&gt;
 # mount -t ext3 -o loop,ro /ext2_saved/image /ext3&lt;br /&gt;
&lt;br /&gt;
Se tutto è andato a buon fine può invece essere eliminata&lt;br /&gt;
 # btrfs subvolume delete /ext2_saved&lt;br /&gt;
&lt;br /&gt;
=Riparazione di un filesystem danneggiato=&lt;br /&gt;
Ci sono due modalità:&lt;br /&gt;
&lt;br /&gt;
==Riparazione online==&lt;br /&gt;
Si può tentare di riparare il filesystem a caldo (mentre questo è montato)&lt;br /&gt;
 # btrfs scrub start -B /dev/partizione&lt;br /&gt;
o anche direttamente sulla root&lt;br /&gt;
 # btrfs scrub start -B /&lt;br /&gt;
&lt;br /&gt;
==Riparazione offline==&lt;br /&gt;
Precedentemente conosciuta come btrfsck, nel caso in cui l'operazione di ripristino precedente fallisca, si deve smontare il disco e, da live, dare:&lt;br /&gt;
 # btrfs check --repair /dev/partizione&lt;br /&gt;
&lt;br /&gt;
=Tips and tricks=&lt;br /&gt;
Se si preferisce non utilizzare una partizione /boot in formato tradizionale (ext2/3/4, reiser, etc...), al fine di evitare possibili problemi di avvio con GRUB, specialmente abilitando opzioni come la compressione del filesystem di root, si consiglia di partizionare il disco nel formato [[UEFI_e_GPT | GPT]] ed utilizzare la Bios Grub Partition o l'EFI System nel caso si possieda un moderno PC dotato di UEFI.&lt;br /&gt;
&lt;br /&gt;
=Gestione avanzata=&lt;br /&gt;
Normalmente la root di sistema viene collocata in un subvolume (es.: ''@''), per poter effettuare opzioni di snapshot etc e consigliabile montare il filesystem con l'opzione ''subvolid=0''. Nella directory di mount saranno visibili tutti i subvolumi e le snapshot della partizione e sarà quindi possibile effettuare tutte le operazioni indicate nei passaggi successivi.&lt;br /&gt;
&lt;br /&gt;
Ecco un '''/etc/fstab''' di esempio&lt;br /&gt;
 LABEL=ROOT       /             btrfs     defaults,compress=lzo,subvol=@            0 0&lt;br /&gt;
 LABEL=ROOT       /home         btrfs     defaults,compress=lzo,subvol=@home        0 0&lt;br /&gt;
 LABEL=ROOT       /mnt/btrfs    btrfs     defaults,noauto,subvolid=0,compress=lzo   0 0&lt;br /&gt;
&lt;br /&gt;
Montando la partizione con label ROOT su /mnt/btrfs saranno visibili tutti i subvolumi.&lt;br /&gt;
&lt;br /&gt;
==Creazione e gestione delle snapshot==&lt;br /&gt;
===Controllare i subvolumi presenti sul sistema===&lt;br /&gt;
 # btrfs subvolume list /&lt;br /&gt;
&lt;br /&gt;
In una tipica installazione Ubuntu avremo un output di questo tipo&lt;br /&gt;
 ID 257 gen 9755 top level 5 path @&lt;br /&gt;
 ID 292 gen 7624 top level 5 path @home&lt;br /&gt;
&lt;br /&gt;
''@'' è il nome del subvolume contenente la root '''/''' del filesystem&lt;br /&gt;
''@home'' è il nome del subvolume della /home&lt;br /&gt;
&lt;br /&gt;
===Effettuare una snapshot===&lt;br /&gt;
 # btrfs subvolume snapshot @ rootsnap&lt;br /&gt;
&lt;br /&gt;
Nell'esempio abbiamo effettuato il ''backup'' del filesystem di root e l'abbiamo chiamato ''rootsnap''&lt;br /&gt;
&lt;br /&gt;
=== Montare un subvolume/snapshot===&lt;br /&gt;
 # mount -t btrfs -o subvol=rootsnap /dev/partizione /mnt/snapshot&lt;br /&gt;
&lt;br /&gt;
===Cancellare un subvolume/snapshot===&lt;br /&gt;
 # btrfs subvolume delete rootsnap&lt;br /&gt;
&lt;br /&gt;
===Aggiungere a GRUB l'opzione per avviare una snapshot===&lt;br /&gt;
Editare ''/etc/grub.d/40_custom'' (o crearlo) e aggiungere quanto segue per permettere l'avvio della snapshot ''rootsnap''&lt;br /&gt;
&lt;br /&gt;
 menuentry 'Linux snapshot' {&lt;br /&gt;
        insmod gzio&lt;br /&gt;
        insmod part_gpt&lt;br /&gt;
        insmod btrfs&lt;br /&gt;
        set root='hd1,gpt3'&lt;br /&gt;
        linux   /rootsnap/boot/vmlinuz-linux root=/dev/partizione rw rootflags=subvol=rootsnap  quiet&lt;br /&gt;
        initrd  /rootsnap/boot/initramfs-linux.img&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
dopodichè aggiornare la configurazione di GRUB con&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
su Debian/Ubuntu si può anche dare&lt;br /&gt;
 # update-grub&lt;br /&gt;
&lt;br /&gt;
==RAID 0==&lt;br /&gt;
 # mkfs.btrfs -d raid0 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
=== Montare il raid ===&lt;br /&gt;
 # mount /dev/sda1 /mnt&lt;br /&gt;
&lt;br /&gt;
(È equivalente a ''mount /dev/sdb1 /mnt'', il sistema riconosce che è presente un raid 0 e provvede al montaggio corretto dei dischi)&lt;br /&gt;
&lt;br /&gt;
Verifica del montaggio&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 2 FS bytes used 27.75GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 17.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
===Aggiungere una partizione===&lt;br /&gt;
 # btrfs device add /dev/sdc1 /mnt&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 3 FS bytes used 27.75GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 17.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1&lt;br /&gt;
 devid    3 size 136.72GiB used 0.00 path /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Adesso è necessario effettuare una redistribuzione dei dati sui tre dischi&lt;br /&gt;
&lt;br /&gt;
 # btrfs balance start -d -m /mnt&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 3 FS bytes used 27.78GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 10.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 10.03GiB path /dev/sdb1&lt;br /&gt;
 devid    3 size 136.72GiB used 11.00GiB path /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
===Rimuovere un device===&lt;br /&gt;
 # btrfs device delete /dev/sdb1 /mnt&lt;br /&gt;
&lt;br /&gt;
L'operazione può impiegare parecchio tempo e per andare a buon fine sui dischi rimanenti deve essere rimasto sufficiente spazio libero da ospitare i dati contenuti nel device che vogliamo togliere dal raid.&lt;br /&gt;
&lt;br /&gt;
==RAID 1==&lt;br /&gt;
 # mkfs.btrfs -d raid1 -m raid1 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
== RAID 5 ==&lt;br /&gt;
=== Conversione a RAID5===&lt;br /&gt;
 # btrfs balance start -dconvert=raid5 -mconvert=raid5 ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
===Sostituzione device danneggiato===&lt;br /&gt;
 # btrfs replace start /dev/sdb1 /dev/sdc1 ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
In alcuni casi potrebbe essere necessario montare il filesystem in modalità '''degraded''' (con l'opzione ''-o degraded'') e lanciare il successivo comando per eliminare definitivamente il device dal raid.&lt;br /&gt;
 # btrfs device delete missing /mnt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quote ==&lt;br /&gt;
Per limitare le dimensioni di un subvolume è possibile abilitare la gestione delle '''quote'''.&lt;br /&gt;
&lt;br /&gt;
Utilizzare il seguente comando su un filesystem btrfs appena creato e privo di subvolumi&lt;br /&gt;
 # btrfs quota enable volume&lt;br /&gt;
&lt;br /&gt;
Se invece le quote non sono state abilitate subito su tutto il filesystem è necessario creare un qgroup (quota group) per ogni subvolume utilizzando il rispettivo ID e successivamente fare una scansione delle quote.&lt;br /&gt;
 # btrfs subvolume list &amp;lt;path&amp;gt; | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} &amp;lt;path&amp;gt;&lt;br /&gt;
 # btrfs quota rescan &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assegnare una quota limite ad un subvolume&lt;br /&gt;
 # btrfs qgroup limit size /volume/subvolume&lt;br /&gt;
&lt;br /&gt;
Es.:&lt;br /&gt;
 # btrfs qgroup limit 20g /mnt/@&lt;br /&gt;
 # btrfs qgroup limit 100g /mnt/@home&lt;br /&gt;
&lt;br /&gt;
Scoprire la quantità di spazio utilizzata da un subvolume&lt;br /&gt;
 # btrfs qgroup show &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Backup ==&lt;br /&gt;
Le snapshot possono essere salvate su un disco esterno, a patto che questo abbia un file system btrfs.&lt;br /&gt;
L'operazione di trasferimento può essere effettuata soltanto su snapshot in sola lettura.&lt;br /&gt;
Si ipotizza che il proprio disco di sistema sia montato in /mnt/btrfs ed il disco esterno in /mnt/ext&lt;br /&gt;
&lt;br /&gt;
* Creare la snapshot in sola lettura (opzione -r) oppure impostare il flag di sola lettura ad una snapshot già fatta&lt;br /&gt;
 btrfs subvolume snapshot -r @root @root-yymmdd-ro&lt;br /&gt;
 btrfs property set /mnt/btrfs/@root-yymmdd-ro ro true&lt;br /&gt;
* Trasferire la snapshot sul disco esterno.&lt;br /&gt;
 btrfs send /mnt/btrfs/@root-yymmdd-ro | btrfs receive /mnt/ext&lt;br /&gt;
* Quando necessario, ripristinare la snapshot&lt;br /&gt;
 btrfs send /mnt/ext/@root-yymmdd-ro | btrfs receive /mnt/btrfs/&lt;br /&gt;
* Eventualmente, rinominare la snapshot e reimpostare i privilegi di scrittura&lt;br /&gt;
 mv /mnt/ext/{@root-yymmdd-ro,@root}&lt;br /&gt;
 btrfs property set /mnt/btrfs/@root ro false&lt;br /&gt;
&lt;br /&gt;
= Bibliografia =&lt;br /&gt;
* http://lwn.net/Articles/577961/&lt;br /&gt;
* https://btrfs.readthedocs.io/&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=IPv6_@_GOLEM&amp;diff=9624</id>
		<title>IPv6 @ GOLEM</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=IPv6_@_GOLEM&amp;diff=9624"/>
		<updated>2024-12-29T21:04:09Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Discorso su MTU e MSS per link ballerini&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Due parole su questa pagina ==&lt;br /&gt;
Questa pagina è un maldestro tentativo:&lt;br /&gt;
* per riassumere le ragioni che ci hanno portato a decidere di dotarci di IPv6;&lt;br /&gt;
* per documentare la nostra infrastruttura di rete;&lt;br /&gt;
&lt;br /&gt;
=== A chi si rivolge questa pagina ===&lt;br /&gt;
* se sei l''''amministratore di rete''', buona lettura :-)&lt;br /&gt;
* se sei un '''socio''', vedi come [[#Configurazione_lato_client | configurare il tuo client]]; è sufficiente leggere solo questo paragrafo.&lt;br /&gt;
&lt;br /&gt;
== Due parole sull'IPv6 ==&lt;br /&gt;
[https://it.wikipedia.org/wiki/IPv6 IPv6] è un &amp;quot;nuovo&amp;quot; protocollo a livello di rete che da diversi anni sta sostituendo IPv4.&lt;br /&gt;
Le novità introdotte da IPv6 sono molteplici; tra queste, quella che balza immediatamente all'occhio è l'enorme dimensione dello spazio di indirizzamento.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Protocollo'''&lt;br /&gt;
| '''lunghezza indirizzo'''&lt;br /&gt;
| '''numero indirizzi'''&lt;br /&gt;
|-&lt;br /&gt;
| IPv4&lt;br /&gt;
| 32 bit&lt;br /&gt;
| 2&amp;lt;sup&amp;gt;32&amp;lt;/sup&amp;gt; = 4 miliardi&lt;br /&gt;
|-&lt;br /&gt;
| IPv6&lt;br /&gt;
| 128 bit&lt;br /&gt;
| 2&amp;lt;sup&amp;gt;128&amp;lt;/sup&amp;gt; = 256 miliardi di miliardi di miliardi di miliardi&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Su questo pianeta vi sono circa 8 miliardi di persone [https://it.wikipedia.org/wiki/Popolazione_mondiale], di cui la metà [http://www.lastampa.it/2018/01/31/tecnologia/gli-utenti-di-internet-sono-pi-di-quattro-miliardi-nel-mondo-milioni-in-italia-wMxQskzXeabwa3wgWI2jUO/pagina.html] è connessa a Internet, e nei paesi sviluppati hanno anche più di un dispositivo connesso. Si aggiungano i numerosissimi apparati di rete e server necessari per il funzionamento dell'infrastruttura e la fornitura di servizi, e si può facilmente intuire che IPv4 non è più sufficiente per le attuali necessità.&lt;br /&gt;
&lt;br /&gt;
Mentre questa pagina veniva scritta, gli IPv4 stavano finendo [https://en.wikipedia.org/wiki/IPv4_address_exhaustion].&lt;br /&gt;
Nel novembre 2019, il RIPE (il registro europeo) ha terminato l'assegnazione degli ultimi indirizzi IPv4 assegnati all'Europa, [https://www.ripe.net/publications/ipv6-info-centre/about-ipv6/ipv4-exhaustion/ipv4-available-pool] e adesso vengono solo riutilizzati quelli vecchi, che significa che:&lt;br /&gt;
* non ci sono più indirizzi &amp;quot;nuovi&amp;quot; e dunque non è più possibile richiederli con facilità;&lt;br /&gt;
* se si vogliono degli indirizzi IPv4, si viene messi in lista d'attesa, finché il precedente proprietario fallisce e rilascia i propri.&lt;br /&gt;
&lt;br /&gt;
=== IPv4 vs IPv6 ===&lt;br /&gt;
==== Notazione ====&lt;br /&gt;
* IPv4 &amp;amp;rarr; 4 byte rappresentati con numeri decimali separati da un punto, es: &amp;lt;code&amp;gt;192.0.2.127&amp;lt;/code&amp;gt;&lt;br /&gt;
* IPv6 &amp;amp;rarr; 16 byte, ogni byte è rappresentato da due cifre esadecimali; ogni 4 cifre esadecimali si inseriscono i ''due punti'' &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;; come in IPv4 è possibile omettere gli zeri in testa; la più lunga sequenza di zeri allineata a 4 può essere omessa per intero; esempi (indirizzi equivalenti):&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:0470:c844:0020:0000:0000:0000:0001&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:470:c844:20:0:0:0:1&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:470:c844:20::1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipi di indirizzi ====&lt;br /&gt;
* IPv6 Reference Card by RIPE [https://www.ripe.net/manage-ips-and-asns/ipv6/ipv6-address-types/ipv6_reference_card_July2015.pdf]&lt;br /&gt;
&lt;br /&gt;
Riassunto:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''IPv6'''&lt;br /&gt;
| '''Equivalente IPv4'''&lt;br /&gt;
| '''Significato'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;::1/128&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo loopback&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fc00::/7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;192.168.0.0/16&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;10.0.0.0/8&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;172.16.0.0/12&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo privato&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fe80::/10&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;169.254.0.0/16&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo link-local (univoco nella rete locale, e autoassegnato)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2001:db8::/32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;192.0.2.0/24&amp;lt;/code&amp;gt;&lt;br /&gt;
| Esempi e documentazione&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| Indirizzi unicast globalmente raggiungibili&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Indirizzi pubblici vs privati ====&lt;br /&gt;
Gli IPv6 sono così tanti che non c'è bisogno di utilizzare indirizzi privati: niente NAT, niente port-forwarding. Questo restituisce connettività end-to-end ai dispositivi e apre numerose nuove possibilità di impiego, rimaste nascoste per anni a causa della scarsità di IPv4 e degli osceni espedienti inventati. Una banalità: non sarà più necessario passare attraverso un server terzo per condividere documenti, chattare o telefonare ai propri contatti.&lt;br /&gt;
&lt;br /&gt;
Se necessarie, le caratteristiche di &amp;quot;sicurezza&amp;quot; introdotte dal NAT possono essere sostituite e accorpate a un banale firewall.&lt;br /&gt;
&lt;br /&gt;
==== Progettazione di una rete ====&lt;br /&gt;
Nel progettare una rete con IPv4, la necessità principale è quella di risparmiare sugli indirizzi, perciò vengono usati prefissi di rete di varia lunghezza.&lt;br /&gt;
Nel progettare una rete con IPv6, si hanno a disposizione così tanti indirizzi che conviene utilizzarli in maniera da renderne più agevole una distribuzione logica.&lt;br /&gt;
&lt;br /&gt;
Sono così identificate le seguenti dimensioni standard per le reti IPv6 (nulla vieta di usare dimensioni personalizzate):&lt;br /&gt;
* '''/126''': contiene 2 soli host, utilizzata per i collegamenti punto-punto nell'infrastruttura di rete;&lt;br /&gt;
* '''/64''': è la più piccola rete che dovrebbe essere fatta; dimensione utilizzata nelle LAN; lo spazio di indirizzamento è esageratamente sovradimensionato ed è sufficiente per qualunque LAN immaginabile (è 4 miliardi di volte più grande di tutta la rete Internet IPv4); viene usata in ambito domestico;&lt;br /&gt;
* '''/56''': contiene 256 reti di dimensione /64, viene usata in ambito domestico o per piccole imprese;&lt;br /&gt;
* '''/48''': contiene 65536 reti di dimensione /64, viene usata in ambito aziendale;&lt;br /&gt;
&lt;br /&gt;
Le LAN non devono avere un prefisso più lungo di /64, perché molte nuove funzionalità introdotte con IPv6 (es SLAAC, Privacy Extension, ...), e anche funzionalità che saranno introdotte in futuro, daranno per scontato che le reti abbiano almeno questa dimensione.&lt;br /&gt;
&lt;br /&gt;
=== Ottenere connettività IPv6 ===&lt;br /&gt;
* si può richiedere nativamente al proprio ISP. Quando è stata scritta questa pagina, in Italia non erano molti gli operatori che fornivano connettività IPv6 nativa; adesso sono di più, perché gli IPv4 sono finiti, e non sarebbe altrimenti possibile fare business, ma alcuni operatori (specialmente quelli più grandi e noti), ancora non forniscono connettività IPv6 nativa;&lt;br /&gt;
* si possono fare dei tunnel che veicolano il traffico IPv6 all'interno dei pacchetti IPv4 (sprecando un po' di banda);&lt;br /&gt;
&lt;br /&gt;
Tunnel:&lt;br /&gt;
* pro:&lt;br /&gt;
** molti sono gratuiti;&lt;br /&gt;
* contro:&lt;br /&gt;
** spreco di banda per incapsulare i pacchetti (qualche decina di byte in più per ogni pacchetto, circa 20 ogni 1500);&lt;br /&gt;
** maggiore latenza;&lt;br /&gt;
** alcuni richiedono un indirizzo IPv4 statico; altri richiedono complicate configurazioni per l'uso con indirizzi dinamici;&lt;br /&gt;
** alcuni non funzionano dietro NAT (la quasi totalità delle reti domestiche);&lt;br /&gt;
&lt;br /&gt;
== Considerazioni e descrizione generale ==&lt;br /&gt;
&lt;br /&gt;
Come portare IPv6 al GOLEM?&lt;br /&gt;
&lt;br /&gt;
È stato realizzato un tunnel tra un intermediario e il nostro VPS. L'intermediario inoltra al VPS tutti i pacchetti destinati alla nostra rete.&lt;br /&gt;
La nostra rete viene scomposta in sottoreti: una rete di backbone, una per l'officina e una per ogni altro punto di accesso necessario, es. uno per ogni abitazione dei soci.&lt;br /&gt;
Il VPS conosce le rotte per raggiungere ogni singola sottorete e inoltra i pacchetti che riceve dall'intermediario verso il giusto router di ogni punto di accesso.&lt;br /&gt;
Il router del punto di accesso inoltra i pacchetti allo specifico host destinatario.&lt;br /&gt;
&lt;br /&gt;
Si procede analogamente a ritroso.&lt;br /&gt;
&lt;br /&gt;
In figura è mostrata la prima versione di visione ''logica'' della rete realizzata:&lt;br /&gt;
* '''HE''' (Hurricane Electric) è il provider fornitore IPv6;&lt;br /&gt;
* '''OVH''' è il nostro provider per il VPS;&lt;br /&gt;
* '''VPS''' è il nostro VPS;&lt;br /&gt;
* '''serverozzo''' è il gateway in [[Officina Informatica]];&lt;br /&gt;
&lt;br /&gt;
Per permettere il collegamento tra il VPS e un punto di accesso (anche noto in questa pagina come ''gateway dell'utente''), non essendo possibile stendere dei cavi fisici in giro per l'Europa, utilizzeremo la nostra VPN.&lt;br /&gt;
Esistono delle pagine dedicate per la documentazione sulla [[Rete del GOLEM]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tunnel-ipv6.jpeg|Il primo prototipo della rete del GOLEM, con la VPN e il tunnel IPv6.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Iniziare: rete /64 ==&lt;br /&gt;
Sono l'amministratore di rete e voglio attivare il tunnel IPv6 per la prima volta. Come iniziare?&lt;br /&gt;
&lt;br /&gt;
Ci si registra su [https://tunnelbroker.net/ TunnelBroker] e viene assegnata d'ufficio una rete IPv6 ''/64''.&lt;br /&gt;
&lt;br /&gt;
Il broker comunica i dettagli del suo PoP (''Point of Presence''):&lt;br /&gt;
 IPv4: 216.66.84.42&lt;br /&gt;
 IPv6: 2001:470:1f12:69::1&lt;br /&gt;
&lt;br /&gt;
L'IPv6 sarà utilizzato sul collegamento ''tunnel virtuale'', collegato all'interfaccia del VPS che chiameremo ''he6in4''. Dalla nostra parte, ''he6in4'' avrà come indirizzo &amp;lt;code&amp;gt;2001:470:1f12:69::2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Attiviamo il tunnel, aggiungendo questo al ''/etc/network/interfaces'':&lt;br /&gt;
&lt;br /&gt;
 auto he6in4&lt;br /&gt;
 iface he6in4 inet6 v4tunnel&lt;br /&gt;
 	address 2001:470:1f12:69::2/64&lt;br /&gt;
         endpoint 216.66.84.42&lt;br /&gt;
         local 152.228.140.73&lt;br /&gt;
         ttl 255&lt;br /&gt;
&lt;br /&gt;
Se si vuole utilizzare il tunnel come default gateway, aggiungere anche:&lt;br /&gt;
 	gateway 2001:470:1f12:69::1&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning&lt;br /&gt;
|text=È possibile utilizzare un solo default gateway su Linux, perciò assicurarsi di non confliggere con la configurazione IPv6 del vostro provider (se c'è)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
e verificare la connettività tra il VPS e il PoP del broker con:&lt;br /&gt;
 $ ip -6 addr&lt;br /&gt;
 $ ping 2001:470:1f12:69::1&lt;br /&gt;
e la connettività con l'Internet IPv6 con:&lt;br /&gt;
 $ ping 2a00:1450:4002:80a::200e&lt;br /&gt;
che, per completezza, è l'IPv6 di &amp;lt;code&amp;gt;ipv6.google.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nella maggior parte dei casi il server DNS IPv4 usato sin'ora ha anche il supporto per risolvere nomi IPv6.&lt;br /&gt;
&lt;br /&gt;
Probabilmente però '''non''' si vorrà utilizzare questa configurazione, bensì sfruttare la rete /48 come spiegato nel prossimo paragrafo.&lt;br /&gt;
&lt;br /&gt;
== Rete /48 ==&lt;br /&gt;
Siccome una rete IPv6 fisica (per esempio, una rete domestica) ha dimensione /64, ma il GOLEM, a sua volta, diventa provider per i soci, noi vogliamo tante reti, per l'officina e per i soci, richiediamo manualmente una ''/48''. Non ci piace essere spreconi, ma ci piace rispettare ''anche'' le RFC: a new era of Internet: [https://tools.ietf.org/html/rfc3177] [https://tools.ietf.org/html/rfc5375#section-3.1]&lt;br /&gt;
&lt;br /&gt;
Ci è stata assegnata la rete &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;, che significa:&lt;br /&gt;
* tutto il traffico di Internet IPv6 diretto a un indirizzo che cade in 2001:470:c844::/48 verrà instradato verso il nostro VPS;&lt;br /&gt;
* abbiamo a disposizione ben 2&amp;lt;sup&amp;gt;80&amp;lt;/sup&amp;gt; indirizzi per pianificare la nostra rete come più ci aggrada;&lt;br /&gt;
&lt;br /&gt;
Lo so, dopo anni bui di NAT dopo NAT e carenza di indirizzi, questa sembra fantascienza.&lt;br /&gt;
&lt;br /&gt;
=== Routing ===&lt;br /&gt;
Si può decidere di instradare tutto il traffico IPv6 tramite il tunnel broker, senza mai utilizzare l'IPv6 assegnato dal provider.&lt;br /&gt;
&lt;br /&gt;
Se però il server dispone già di un IPv6 assegnato dal provider, probabilmente si vuole e si può:&lt;br /&gt;
* utilizzare il suo IPv6 per navigare dal server, usando il gateway del provider&lt;br /&gt;
* utilizzare il gateway del tunnel broker solo per instradare i pacchetti della rete /48 che è stata assegnata&lt;br /&gt;
&lt;br /&gt;
Al GOLEM abbiamo fatto questa seconda scelta.&lt;br /&gt;
Perciò, '''non''' si deve aggiungere il gateway del tunnel broker come default gateway della configurazione in ''/etc/network/interfaces'', ma si deve aggiungere una regola di routing a mano per la sottorete del GOLEM, di fatto implementando ''source routing''.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Chiamasi ''source routing'' l'instradamento dei pacchetti fatto in base al loro indirizzo sorgente e non quello di destinazione, che è il modo standard&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
1. Modificare ''/etc/iproute2/rt_tables'' aggiungendo una nuova tabella di routing:&lt;br /&gt;
 200	golemsix&lt;br /&gt;
&lt;br /&gt;
2. Aggiungere il routing dei pacchetti provenienti dalla sottorete del GOLEM automaticamente al post-up dell'interfaccia del tunnel in ''/etc/network/interfaces'':&lt;br /&gt;
  	post-up ip -6 rule add from 2001:470:c844::/48 table golemsix &amp;amp;&amp;amp; ip -6 rule add to 2001:470:c844::/48 table main &amp;amp;&amp;amp; ip -6 route add default via 2001:470:1f12:69::1 dev he6in4 table golemsix &amp;amp;&amp;amp; ip -6 route flush cache&lt;br /&gt;
 	pre-down ip -6 route del default via 2001:470:1f12:69::1 dev he6in4 table golemsix &amp;amp;&amp;amp; ip -6 rule del to 2001:470:c844::/48 table main &amp;amp;&amp;amp; ip -6 rule del from 2001:470:c844::/48 table golemsix &amp;amp;&amp;amp; ip -6 route flush cache&lt;br /&gt;
&lt;br /&gt;
Spiegazione:&lt;br /&gt;
* I pacchetti provenienti dalla sottorete del GOLEM devono utilizzare la tabella di routing &amp;lt;code&amp;gt;golemsix&amp;lt;/code&amp;gt;:&lt;br /&gt;
 ip -6 rule add from 2001:470:c844::/48 table golemsix&lt;br /&gt;
&lt;br /&gt;
* I pacchetti destinati alla sottorete del GOLEM devono utilizzare la tabella di routing &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, così da poter essere instradati correttamente anche ai soci collegati con la VPN Wireguard. Si noti che, se inserita in quest'ordine, questa seconda regola ha priorità sulla precedente, ed è quello che vogliamo.&lt;br /&gt;
 ip -6 rule add to 2001:470:c844::/48 table main&lt;br /&gt;
&lt;br /&gt;
* Il default gateway per i pacchetti che utilizzano la tabella di routing &amp;lt;code&amp;gt;golemsix&amp;lt;/code&amp;gt; è l'endpoint del tunnel broker&lt;br /&gt;
 ip -6 route add default via 2001:470:1f12:69::1 dev he6in4 table golemsix&lt;br /&gt;
&lt;br /&gt;
* Aggiorna la cache del routing:&lt;br /&gt;
 ip -6 route flush cache&lt;br /&gt;
&lt;br /&gt;
Analogamente, vengono eseguite le operazioni inverse quando viene spenta l'interfaccia di rete.&lt;br /&gt;
&lt;br /&gt;
=== Piano di indirizzamento ===&lt;br /&gt;
Chiamarlo ''piano di indirizzamento'' è fargli un complimento immeritato; chiamiamola ''guida ragionata all'assegnazione dei nostri indirizzi''.&lt;br /&gt;
&lt;br /&gt;
Sia dato l'indirizzo IPv6:&lt;br /&gt;
&lt;br /&gt;
 127                   79     63                         0&lt;br /&gt;
     2001 : 0470 : c844 : rrrr : xxxx : xxxx : xxxx : xxxx&lt;br /&gt;
&lt;br /&gt;
Siccome abbiamo 80 bit a disposizione e la rete più piccola che possiamo fare secondo RFC è di 64 bit, possiamo fare ben 2&amp;lt;sup&amp;gt;16&amp;lt;/sup&amp;gt; reti (''rrrr'' nell'esempio).&lt;br /&gt;
Per semplicità (perché alla fine è a questo che servono tutti questi indirizzi in IPv6), poniamo ''rrrr'' = ''uugy'', dove:&lt;br /&gt;
* ''uu'' (8 bit) identifica l'''utente'';&lt;br /&gt;
* ''g'' (4 bit) identifica il gateway dell'utente (2&amp;lt;sup&amp;gt;4&amp;lt;/sup = 16 gateway per utente)&lt;br /&gt;
* ''y'' (4 bit) identifica la ''sottorete personale'' di quel gateway dell'utente (2&amp;lt;sup&amp;gt;4&amp;lt;/sup&amp;gt; = 16 sottoreti per gateway)&lt;br /&gt;
&lt;br /&gt;
Il VPS instrada direttamente tutta la sottorete /60 verso il gateway dell'utente, il quale può decidere di suddividerla come preferisce su quel gateway, da un unica grande rete /60, a 16 &amp;quot;piccole&amp;quot; reti /64.&lt;br /&gt;
&lt;br /&gt;
Sono così riservate:&lt;br /&gt;
 00gy indirizzi di servizio per l'infrastruttura (OpenVPN)&lt;br /&gt;
 01gy indirizzi di servizio per l'infrastruttura (Wireguard)&lt;br /&gt;
 02gy Officina (16 gateway × 16 reti)&lt;br /&gt;
 03gy Socio-A (16 gateway × 16 reti)&lt;br /&gt;
 04gy Socio-B (16 gateway × 16 reti)&lt;br /&gt;
 05gy ...&lt;br /&gt;
&lt;br /&gt;
Il ''numero di rete'' &amp;lt;code&amp;gt;rrrr&amp;lt;/code&amp;gt; sarà usato:&lt;br /&gt;
* per instradare tutto il traffico diretto a &amp;lt;code&amp;gt;2001:470:c844:rrg0::/60&amp;lt;/code&amp;gt; verso il gateway dell'utente;&lt;br /&gt;
* per assegnare l'indirizzo &amp;lt;code&amp;gt;2001:470:c844::rrg0/64&amp;lt;/code&amp;gt; al gateway dell'utente nella rete di servizio;&lt;br /&gt;
Si noti la &amp;quot;piccola&amp;quot; differenza.&lt;br /&gt;
&lt;br /&gt;
Per esempio, supponiamo di voler attivare ''serverozzo'', per il quale:&lt;br /&gt;
* ''uu = 02'' (''02'' è l'utente ''Officina'')&lt;br /&gt;
* ''g = 0'' (''0'' il primo &amp;amp;mdash; e al momento unico &amp;amp;mdash; gateway in Officina)&lt;br /&gt;
allora:&lt;br /&gt;
* serverozzo avrà indirizzo &amp;lt;code&amp;gt;2001:470:c844::200/64&amp;lt;/code&amp;gt; lato VPN;&lt;br /&gt;
* tutto il traffico per &amp;lt;code&amp;gt;2001:470:c844:200::/60&amp;lt;/code&amp;gt; verrà instradato verso serverozzo;&lt;br /&gt;
&lt;br /&gt;
E su serverozzo potranno essere create fino a 16 reti, per esempio:&lt;br /&gt;
* per la rete cablata Ethernet dell'Officina (&amp;lt;code&amp;gt;2001:470:c844:200::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;ethI&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per la rete wireless dell'Officina (&amp;lt;code&amp;gt;2001:470:c844:201::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;wlan0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per la rete cablata bus RS-485 (&amp;lt;code&amp;gt;2001:470:c844:202::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;ttyS0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per le macchine virtuali su KVM (&amp;lt;code&amp;gt;2001:470:c844:203::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;vir0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per le macchine virtuali su docker (&amp;lt;code&amp;gt;2001:470:c844:204::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* ...&lt;br /&gt;
'''Nota:''' questo è solo un esempio, la configurazione finale su serverozzo è ancora in fase di definizione.&lt;br /&gt;
&lt;br /&gt;
Nella prima rete di servizio (&amp;lt;code&amp;gt;2001:470:c844::/64&amp;lt;/code&amp;gt;) ci sono:&lt;br /&gt;
* il VPS&lt;br /&gt;
* tutti i gateway&lt;br /&gt;
** per esempio, serverozzo&lt;br /&gt;
** per esempio, i gateway dei soci&lt;br /&gt;
I gateway dei soci non sono diversi da serverozzo, e tuttavia la loro configurazione può essere più semplice se invece che da gateway fungono come semplici end-point.&lt;br /&gt;
&lt;br /&gt;
Così organizzate, le risorse si esauriranno in questo ordine:&lt;br /&gt;
* la banda a disposizione del VPS (500M/500M);&lt;br /&gt;
* la capacità computazionale e di memoria del VPS per l'inoltro dei pacchetti;&lt;br /&gt;
* gli IPv6 (gli IPv6 non finiranno mai)&lt;br /&gt;
&lt;br /&gt;
Non essendo una rete a maglie, ma semplicemente un albero, il routing è definito staticamente.&lt;br /&gt;
Se la rete si evolverà e le singole &amp;quot;isole&amp;quot; dovessero iniziare a connettersi a maglia in maniera incontrollata, potranno essere impiegati algoritmi dinamici, ma considerata la dimensione del bacino di utenti, non dovrebbe essere necessario.&lt;br /&gt;
&lt;br /&gt;
== Installazione del server ==&lt;br /&gt;
La VPN del GOLEM può essere utilizzata per la navigazione in IPv6.&lt;br /&gt;
La VPN è realizzata per mezzo di Wireguard.&lt;br /&gt;
&lt;br /&gt;
A differenza di altri protocolli, come OpenVPN, Wireguard ha un approccio &amp;quot;peer to peer&amp;quot;, per cui la procedura di configurazione del server rispecchia per buona parte quella di ciascun client.&lt;br /&gt;
&lt;br /&gt;
Innanzitutto è necessario generare la coppia di chiavi pubblica/privata del server:&lt;br /&gt;
&lt;br /&gt;
 # wg genkey | tee /etc/wireguard/server.privkey | wg pubkey &amp;gt; /etc/wireguard/vpn.golem.linux.it.pubkey&lt;br /&gt;
&lt;br /&gt;
Per la configurazione è sufficiente creare un singolo file, ad esempio &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # Carica la chiave privata dal percorso dove la abbiamo generata precedentemente&lt;br /&gt;
 PostUp = wg set %i private-key /etc/wireguard/vpn.golem.linux.it.privkey&lt;br /&gt;
 # Porta UDP di ascolto del server, a piacere&lt;br /&gt;
 ListenPort = 51820&lt;br /&gt;
 # Indirizzo del server all'interno della VPN&lt;br /&gt;
 Address = 2001:470:c844:100::1&lt;br /&gt;
&lt;br /&gt;
Il server può essere avviato tramite ''systemd'', e con lo stesso sistema si può impostare l'avvio automatico.&lt;br /&gt;
Si noti che &amp;lt;code&amp;gt;@wg0&amp;lt;/code&amp;gt; corrisponde al file di configurazione precedentemente creato.&lt;br /&gt;
&lt;br /&gt;
 # systemctl start wg-quick@wg0&lt;br /&gt;
 # systemctl enable wg-quick@wg0&lt;br /&gt;
&lt;br /&gt;
== Aggiunta di un nuovo client ==&lt;br /&gt;
=== Configurazione lato server ===&lt;br /&gt;
il sysop aggiunge un blocco peer per ciascun client alla configurazione &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;, così:&lt;br /&gt;
&lt;br /&gt;
 ... altri client ...&lt;br /&gt;
 &lt;br /&gt;
 # porceddu.net.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = tHeClIeNtFaNtAsTiCpUbLiCkEy=&lt;br /&gt;
 AllowedIPs = 2001:470:c844:100::200/128, 2001:470:c844:200::/62&lt;br /&gt;
 &lt;br /&gt;
 ... altri client ...&lt;br /&gt;
&lt;br /&gt;
Altro che OpenVPN.&lt;br /&gt;
&lt;br /&gt;
=== Configurazione lato client ===&lt;br /&gt;
1. Lato client, generare una coppia di chiavi pubblica/privata e inviare la chiave pubblica al sysop.&lt;br /&gt;
&lt;br /&gt;
 $ wg genkey | tee client.example.com.privkey | wg pubkey &amp;gt; client.example.com.pubkey&lt;br /&gt;
&lt;br /&gt;
Il sysop si occuperà di aggiungere la chiave pubblica tra quelle consentite al server, sceglierà un indirizzo IP in base al piano di indirizzamento, e ve lo comunicherà.&lt;br /&gt;
&lt;br /&gt;
2. Creare un file di configurazione come segue, in cui scrivere opportunamente la vostra chiave privata e l'indirizzo IP assegnato. Prestare particolare attenzione a modificare i campi della sezione &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt;, come indicato nelle note.&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # PrivateKey = YoUrGoRgEoUsAnDsEcUrEpRiVaTeKeY=               # vedi note, scegliere questo...&lt;br /&gt;
 # PostUp = wg set %i private-key ./client.example.com.privkey # vedi note,                 ...oppure questo&lt;br /&gt;
 Address = 2001:470:c844:100::'''200'''/64                           # vedi note&lt;br /&gt;
 &lt;br /&gt;
 # vpn.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = w63aGvoyPaUTgA8nW/NJS6Qqp2hUFvHRBbIH8Qb5ISY=   &lt;br /&gt;
 AllowedIPs = 2000::/3                                      &lt;br /&gt;
 Endpoint = vpn.golem.linux.it:51280&lt;br /&gt;
 PersistentKeepalive = 37&lt;br /&gt;
&lt;br /&gt;
'''Note'''&lt;br /&gt;
* &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''locale'')&lt;br /&gt;
** scegliere una delle seguenti opzioni per indicare la chiave privata del client, scommentando la riga apposita.&lt;br /&gt;
*** ''PrivateKey'': chiave privata del client, da custodire con cura, inline&lt;br /&gt;
*** ''PostUp = command'': chiave privata del client, da custodire con cura, e caricata automaticamente da un file esterno (es. creato col comando mostrato in precedenza)&lt;br /&gt;
** ''Address'': indirizzo IP comunicato dal sysop: riportarlo accuratamente, altrimenti non sarà possibile utilizzare la VPN&lt;br /&gt;
* &amp;lt;code&amp;gt;[Peer]&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''remoto'' / server)&lt;br /&gt;
** ''PublicKey'': chiave pubblica del server (sì, è proprio quella)&lt;br /&gt;
** ''AllowedIPs'': indirizzi raggiungibili tramite la VPN, a scelta:&lt;br /&gt;
*** &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;: solo la [[IPv6 @ GOLEM | rete IPv6 virtuale del GOLEM]]&lt;br /&gt;
*** &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;: tutti gli indirizzi IPv6 (è possibile utilizzare la VPN del GOLEM per [[IPv6 @ GOLEM | navigare ''davvero'' in IPv6]])&lt;br /&gt;
** ''Endpoint'': indirizzo del server&lt;br /&gt;
** ''PersistentKeepalive'': timer per mantenimento del tunnel attivo (in secondi); particolarmente utile se l'indirizzo IP del client cambia o è soggetto a NAT&lt;br /&gt;
&lt;br /&gt;
La connessione può essere attivata tramite systemd come sul server (spostandola in ''/etc/wireguard/''), oppure manualmente utilizzando &amp;lt;code&amp;gt;wg-quick&amp;lt;/code&amp;gt;:&lt;br /&gt;
* Attivazione del tunnel&lt;br /&gt;
 wg-quick up client.example.conf&lt;br /&gt;
* Disattivazione del tunnel&lt;br /&gt;
 wg-quick down client.example.conf&lt;br /&gt;
&lt;br /&gt;
3. Provare il collegamento&lt;br /&gt;
 # ping 2001:470:c844:100::1    # server VPN, dentro al tunnel (per verificare se il collegamento funziona)&lt;br /&gt;
 # ping 2001:470:c844:100::200  # gateway in Officina (per verificare se il collegamento funziona; talvolta non raggiungibile se abbiamo staccato la luce)&lt;br /&gt;
 # ping ipv6.google.com         # per verificare l'accessibilità dell'Internet pubblico IPv6, nel caso non si abbia già accesso&lt;br /&gt;
&lt;br /&gt;
4. Successo!&lt;br /&gt;
* Se il client OpenVPN è un nodo foglia della rete, cioè non funge da gateway perché si deve collegare solo lui (es. smartphone), allora c'è già connettività IPv6 e non serve fare altro. È comunque consigliato leggere la sezione relativa al [[#Firewall | firewall]] per ragioni di sicurezza ed eventualmente attivarlo.&lt;br /&gt;
* Se invece il client è il gateway della rete IPv6 (es. ''serverozzo'', o il router di casa di uno dei soci che vuole navigare in IPv6), allora bisogna configurarlo come indicato nella [[#Client_VPN_come_gateway | sezione apposita]].&lt;br /&gt;
&lt;br /&gt;
== Client VPN come gateway ==&lt;br /&gt;
=== Impostare il client VPN come gateway IPv6 per l'isola ===&lt;br /&gt;
==== Abilitare inoltro pacchetti IPv6 ====&lt;br /&gt;
Nel file ''/etc/sysctl.conf'':&lt;br /&gt;
 net.ipv6.conf.all.forwarding=1&lt;br /&gt;
&lt;br /&gt;
==== Installare e configurare radvd ====&lt;br /&gt;
''radvd'' è il demone di ''router advertisement''.&lt;br /&gt;
Per la configurazione automatica degli indirizzi e del gateway in IPv6 non è necessario un ''complesso'' server DHCP, ma vista la vastità dello spazio di indirizzamento (anche la rete più piccola ha ben 2&amp;lt;sup&amp;gt;64&amp;lt;/sup&amp;gt; indirizzi disponibili) basta il più semplice ''radvd''.&lt;br /&gt;
Un router con ''radvd'', a intervalli regolari, trasmette un messaggio in broadcast a tutti gli host della rete, informandoli sul prefisso di rete da utilizzare; a questo punto gli host possono autoconfigurarsi col metodo che preferiscono (es. [https://tools.ietf.org/search/rfc4862 SLAAC] con o senza [https://tools.ietf.org/html/rfc4941.html estensione per la privacy]).&lt;br /&gt;
&lt;br /&gt;
Installare ''radvd'':&lt;br /&gt;
 # apt install radvd&lt;br /&gt;
&lt;br /&gt;
Configurare il file ''/etc/radvd.conf'':&lt;br /&gt;
 interface ethI {&lt;br /&gt;
         AdvSendAdvert on;&lt;br /&gt;
         MinRtrAdvInterval 2;&lt;br /&gt;
         MaxRtrAdvInterval 10;&lt;br /&gt;
         prefix 2001:db8::/64 {&lt;br /&gt;
                 AdvOnLink on;&lt;br /&gt;
                 AdvAutonomous on;&lt;br /&gt;
                 AdvRouterAddr on;&lt;br /&gt;
         };&lt;br /&gt;
         RDNSS 2606:4700:4700::1111 {&lt;br /&gt;
                 AdvRDNSSLifetime 3600;&lt;br /&gt;
         };&lt;br /&gt;
 };&lt;br /&gt;
dove&lt;br /&gt;
* &amp;lt;code&amp;gt;interface br0&amp;lt;/code&amp;gt; indica l'interfaccia interna su cui fare ''advertise'';&lt;br /&gt;
* &amp;lt;code&amp;gt;prefix 2001:db8::/64&amp;lt;/code&amp;gt; indica la rete a valle;&lt;br /&gt;
* &amp;lt;code&amp;gt;RDNSS 2606:4700:4700::1111&amp;lt;/code&amp;gt; indica il server DNS (nell'esempio specifico, CloudFlare);&lt;br /&gt;
** ''Nota:'' in seguito a questioni legali, OpenDNS non è al momento disponibile in Francia.&lt;br /&gt;
&lt;br /&gt;
Una volta abilitato ''radvd'' sull'interfaccia di rete desiderata, gli host inizieranno ad assegnarsi automaticamente un indirizzo tramite SLAAC, e potranno navigare in IPv6.&lt;br /&gt;
&lt;br /&gt;
==== Una nota sull'MTU del collegamento ====&lt;br /&gt;
Con la configurazione appena descritta, gli host crederanno di utilizzare una rete nativa dual-stack (o IPv6-only, nel caso non fosse previsto IPv4).&lt;br /&gt;
In realtà, però, i pacchetti IPv6 non sono &amp;quot;nativi&amp;quot;, bensì, una volta giunti al gateway, vengono poi incapsulati in maniera completamente trasparente.&lt;br /&gt;
&lt;br /&gt;
Ciò significa che gli host crederanno di poter generare pacchetti IPv6 della dimensione massima ammessa dal link a cui sono collegati (es. Ethernet, WiFi), che in genere è di 1500 bytes.&lt;br /&gt;
Però, pacchetti così grandi non possono essere incapsulati, in quanto anche il link che il gateway utilizza per la VPN, in genere, consente pacchetti di dimensione massima di 1500 bytes: non rimane spazio per l'incapsulamento.&lt;br /&gt;
&lt;br /&gt;
Questo può creare problemi, talvolta sporadici, non facilmente ripetibili, o ancora, dipendenti dal sito a cui si sta tentando di collegarsi, specialmente se si usa TCP.&lt;br /&gt;
Un sintomo molto comune è che, navigando sul web, si può rilevare che alcuni siti - ma solo alcuni, perfettamente funzionanti sia da IPv4 che da altre connessioni IPv6, vanno in timeout quando si prova ad accedervi.&lt;br /&gt;
&lt;br /&gt;
Questo succede perché TCP tenta di massimizzare la quantità di informazione contenuta all'interno di un pacchetto IP, generando pacchetti molto grandi, e talvolta raggiungendo il limite oltre il quale il pacchetto non può più essere incapsulato dal gateway.&lt;br /&gt;
&lt;br /&gt;
{{Template:Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Per verificare che il problema sia questo, provare a forzare una MTU artificialmente più bassa sulla scheda di rete, tramite il comando &amp;lt;code&amp;gt;ip link set enp1s0 mtu 1400&amp;lt;/code&amp;gt;, e poi verificare se il problema scompare.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Perciò, sarà necessario fare in modo che il gateway modifichi i pacchetti di handshake del TCP in maniera tale che non venga mai negoziata una ''Max Segment Size'' troppo alta per il link.&lt;br /&gt;
&lt;br /&gt;
===== Modificare la Max Segment Size =====&lt;br /&gt;
&lt;br /&gt;
{{Template:Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Abbassare la MSS elimina il problema, ma al contempo aumenta l'overhead, rendendo la connessione leggermente più lenta. È consigliabile trovare il giusto compromesso che soddisfi sia le esigenze di funzionamento che le esigenze in termini di prestazioni. Per farlo, ci si può aiutare con &amp;lt;code&amp;gt;tracepath&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* con un gateway Linux:&lt;br /&gt;
** TODO: è davvero necessario? Lo fa da solo?&lt;br /&gt;
* con un gateway Mikrotik:&lt;br /&gt;
 /ipv6/firewall/mangle/add out-interface=wg0 protocol=tcp tcp-flags=syn action=change-mss new-mss=1300 chain=forward tcp-mss=1301-65535&lt;br /&gt;
&lt;br /&gt;
== Firewall ==&lt;br /&gt;
=== Per il VPS ===&lt;br /&gt;
Inoltrare solo i pacchetti da/per le reti note.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text=Non ancora testato!&lt;br /&gt;
}}&lt;br /&gt;
 # ip6tables -A FORWARD -d 2001:470:c844::/48 -i he6in4 -j ACCEPT&lt;br /&gt;
 # ip6tables -A FORWARD -s 2001:470:c844::/48 -o he6in4 -j ACCEPT&lt;br /&gt;
 # ip6tables -P FORWARD DROP&lt;br /&gt;
&lt;br /&gt;
=== Per i client ===&lt;br /&gt;
Gli indirizzi IPv6 sono &amp;quot;tutti&amp;quot; pubblici. Gli indirizzi IPv6 forniti dal GOLEM sono pubblicamente instradabili. In più, il GOLEM non mette in atto '''nessuna''' misura atta a prevenire connessioni dirette verso gli host della VPN (al netto di configurazioni specifiche sulle macchine direttamente di proprietà del GOLEM).&lt;br /&gt;
Ciò significa che '''tutti''' gli host degli utenti/soci, compresi quelli domestici che sin'ora sono stati dietro a un (s)comodo NAT, possono essere acceduti attraverso la rete Internet globale, quando sono connessi alla VPN del GOLEM.&lt;br /&gt;
&lt;br /&gt;
Pertanto, è consigliato attivare degli strumenti atti a prevenire accessi indesiderati dall'esterno, come un firewall, in special modo se il proprio computer &amp;quot;fornisce servizi&amp;quot; (eg. condivisione di file via rete, server web di sviluppo, ...)&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text='''Nota bene''': salvare queste impostazioni, per esempio con &amp;lt;code&amp;gt;ip6tables-save&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;ip6tables-restore&amp;lt;/code&amp;gt;, altrimenti verranno perse al riavvio.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Direttamente sull'host ====&lt;br /&gt;
Si può agire direttamente sugli host da proteggere (versione conservativa):&lt;br /&gt;
 # ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # ip6tables -A INPUT -p icmpv6 -j ACCEPT&lt;br /&gt;
 # ip6tables -P INPUT DROP&lt;br /&gt;
&lt;br /&gt;
In generale con Linux questa operazione non è comunque necessaria, perché tanto non vi sono servizi esposti a meno che non siano stati installati esplicitamente.&lt;br /&gt;
Si noti che ICMPv6 deve comunque sempre essere abilitato in quanto necessario al funzionamento di IPv6.&lt;br /&gt;
&lt;br /&gt;
Si può anche utilizzare una regola più rilassata (es. per sfruttare la VPN del GOLEM come VPN &amp;quot;personale&amp;quot; tra i propri host), tipo:&lt;br /&gt;
 # ip6tables -A INPUT -s 2001:470:c844:uu00::/56 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=I pacchetti della VPN viaggiano crittografati sulla rete pubblica (almeno finché si trovano all'interno della VPN del GOLEM), ma sul server vengono decifrati e cifrati di nuovo per permetterne il routing!&lt;br /&gt;
In caso di compromissione del VPS del GOLEM, pertanto, i pacchetti non possono essere considerati al sicuro da sguardi indiscreti. È sempre buona norma utilizzare crittografia end-to-end, anche all'interno di una VPN.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Dal gateway ====&lt;br /&gt;
Invece di configurare il firewall su ogni host singolarmente, si può configurare il gateway una volta sola per proteggere tutta la rete a valle:&lt;br /&gt;
 # ip6tables -A FORWARD -s 2001:470:c844:rrrr::/64 -j ACCEPT&lt;br /&gt;
 # ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # ip6tables -P FORWARD DROP&lt;br /&gt;
&lt;br /&gt;
Nell'ordine:&lt;br /&gt;
* blocca l'inoltro di tutti i pacchetti&lt;br /&gt;
* abilita l'inoltro dei pacchetti in uscita dalla rete&lt;br /&gt;
* abilita l'inoltro dei pacchetti correlati a connessioni già stabilite&lt;br /&gt;
&lt;br /&gt;
Questo impedisce l'accesso indesiderato a tutti gli host della rete, compresi gli host con Windows che possono starsene &amp;quot;sicuri&amp;quot; anche senza il firewall, pur esponendo servizi (NetBIOS, Samba).&lt;br /&gt;
&lt;br /&gt;
===== Eccezioni =====&lt;br /&gt;
Se si desidera comunque rendere accessibile un proprio server in particolare, è possibile istruire il gateway con un'eccezione, aggiungendo:&lt;br /&gt;
 # ip6tables -A FORWARD -d 2001:470:c844:rrrr::host -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
Questo è qualcosa che &amp;quot;assomiglia&amp;quot; vagamente al vecchio ''port forwarding''.&lt;br /&gt;
&lt;br /&gt;
=== Torrent ===&lt;br /&gt;
La banda è limitata, e non è consentito traffico di materiale illegale. Occore limitare il traffico ''bit-torrent'' almeno al gateway finale (VPS).&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text=TODO: Questa sezione è da fare!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Risoluzione problemi =&lt;br /&gt;
== Geolocalizzazione ==&lt;br /&gt;
Il tunnel è localizzato in Francia.&lt;br /&gt;
A causa di restrizioni imposte a causa del diritto d'autore, alcuni siti, specialmente di streaming video, come Netflix, Rai.tv o Youtube, potrebbero bloccare l'accesso ai contenuti italiani dal tunnel francese.&lt;br /&gt;
Per inibire temporaneamente l'uso del tunnel IPv6 su un host:&lt;br /&gt;
 # sysctl -w net.ipv6.conf.all.disable_ipv6=1&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Howto]]&lt;br /&gt;
[[Categoria:Officina]]&lt;br /&gt;
[[Category:Sysop]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=IPv6_@_GOLEM&amp;diff=9623</id>
		<title>IPv6 @ GOLEM</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=IPv6_@_GOLEM&amp;diff=9623"/>
		<updated>2024-12-29T20:32:19Z</updated>

		<summary type="html">&lt;p&gt;Giomba: 2^&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Due parole su questa pagina ==&lt;br /&gt;
Questa pagina è un maldestro tentativo:&lt;br /&gt;
* per riassumere le ragioni che ci hanno portato a decidere di dotarci di IPv6;&lt;br /&gt;
* per documentare la nostra infrastruttura di rete;&lt;br /&gt;
&lt;br /&gt;
=== A chi si rivolge questa pagina ===&lt;br /&gt;
* se sei l''''amministratore di rete''', buona lettura :-)&lt;br /&gt;
* se sei un '''socio''', vedi come [[#Configurazione_lato_client | configurare il tuo client]]; è sufficiente leggere solo questo paragrafo.&lt;br /&gt;
&lt;br /&gt;
== Due parole sull'IPv6 ==&lt;br /&gt;
[https://it.wikipedia.org/wiki/IPv6 IPv6] è un &amp;quot;nuovo&amp;quot; protocollo a livello di rete che da diversi anni sta sostituendo IPv4.&lt;br /&gt;
Le novità introdotte da IPv6 sono molteplici; tra queste, quella che balza immediatamente all'occhio è l'enorme dimensione dello spazio di indirizzamento.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Protocollo'''&lt;br /&gt;
| '''lunghezza indirizzo'''&lt;br /&gt;
| '''numero indirizzi'''&lt;br /&gt;
|-&lt;br /&gt;
| IPv4&lt;br /&gt;
| 32 bit&lt;br /&gt;
| 2&amp;lt;sup&amp;gt;32&amp;lt;/sup&amp;gt; = 4 miliardi&lt;br /&gt;
|-&lt;br /&gt;
| IPv6&lt;br /&gt;
| 128 bit&lt;br /&gt;
| 2&amp;lt;sup&amp;gt;128&amp;lt;/sup&amp;gt; = 256 miliardi di miliardi di miliardi di miliardi&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Su questo pianeta vi sono circa 8 miliardi di persone [https://it.wikipedia.org/wiki/Popolazione_mondiale], di cui la metà [http://www.lastampa.it/2018/01/31/tecnologia/gli-utenti-di-internet-sono-pi-di-quattro-miliardi-nel-mondo-milioni-in-italia-wMxQskzXeabwa3wgWI2jUO/pagina.html] è connessa a Internet, e nei paesi sviluppati hanno anche più di un dispositivo connesso. Si aggiungano i numerosissimi apparati di rete e server necessari per il funzionamento dell'infrastruttura e la fornitura di servizi, e si può facilmente intuire che IPv4 non è più sufficiente per le attuali necessità.&lt;br /&gt;
&lt;br /&gt;
Mentre questa pagina veniva scritta, gli IPv4 stavano finendo [https://en.wikipedia.org/wiki/IPv4_address_exhaustion].&lt;br /&gt;
Nel novembre 2019, il RIPE (il registro europeo) ha terminato l'assegnazione degli ultimi indirizzi IPv4 assegnati all'Europa, [https://www.ripe.net/publications/ipv6-info-centre/about-ipv6/ipv4-exhaustion/ipv4-available-pool] e adesso vengono solo riutilizzati quelli vecchi, che significa che:&lt;br /&gt;
* non ci sono più indirizzi &amp;quot;nuovi&amp;quot; e dunque non è più possibile richiederli con facilità;&lt;br /&gt;
* se si vogliono degli indirizzi IPv4, si viene messi in lista d'attesa, finché il precedente proprietario fallisce e rilascia i propri.&lt;br /&gt;
&lt;br /&gt;
=== IPv4 vs IPv6 ===&lt;br /&gt;
==== Notazione ====&lt;br /&gt;
* IPv4 &amp;amp;rarr; 4 byte rappresentati con numeri decimali separati da un punto, es: &amp;lt;code&amp;gt;192.0.2.127&amp;lt;/code&amp;gt;&lt;br /&gt;
* IPv6 &amp;amp;rarr; 16 byte, ogni byte è rappresentato da due cifre esadecimali; ogni 4 cifre esadecimali si inseriscono i ''due punti'' &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;; come in IPv4 è possibile omettere gli zeri in testa; la più lunga sequenza di zeri allineata a 4 può essere omessa per intero; esempi (indirizzi equivalenti):&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:0470:c844:0020:0000:0000:0000:0001&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:470:c844:20:0:0:0:1&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:470:c844:20::1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipi di indirizzi ====&lt;br /&gt;
* IPv6 Reference Card by RIPE [https://www.ripe.net/manage-ips-and-asns/ipv6/ipv6-address-types/ipv6_reference_card_July2015.pdf]&lt;br /&gt;
&lt;br /&gt;
Riassunto:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''IPv6'''&lt;br /&gt;
| '''Equivalente IPv4'''&lt;br /&gt;
| '''Significato'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;::1/128&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo loopback&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fc00::/7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;192.168.0.0/16&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;10.0.0.0/8&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;172.16.0.0/12&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo privato&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fe80::/10&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;169.254.0.0/16&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo link-local (univoco nella rete locale, e autoassegnato)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2001:db8::/32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;192.0.2.0/24&amp;lt;/code&amp;gt;&lt;br /&gt;
| Esempi e documentazione&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| Indirizzi unicast globalmente raggiungibili&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Indirizzi pubblici vs privati ====&lt;br /&gt;
Gli IPv6 sono così tanti che non c'è bisogno di utilizzare indirizzi privati: niente NAT, niente port-forwarding. Questo restituisce connettività end-to-end ai dispositivi e apre numerose nuove possibilità di impiego, rimaste nascoste per anni a causa della scarsità di IPv4 e degli osceni espedienti inventati. Una banalità: non sarà più necessario passare attraverso un server terzo per condividere documenti, chattare o telefonare ai propri contatti.&lt;br /&gt;
&lt;br /&gt;
Se necessarie, le caratteristiche di &amp;quot;sicurezza&amp;quot; introdotte dal NAT possono essere sostituite e accorpate a un banale firewall.&lt;br /&gt;
&lt;br /&gt;
==== Progettazione di una rete ====&lt;br /&gt;
Nel progettare una rete con IPv4, la necessità principale è quella di risparmiare sugli indirizzi, perciò vengono usati prefissi di rete di varia lunghezza.&lt;br /&gt;
Nel progettare una rete con IPv6, si hanno a disposizione così tanti indirizzi che conviene utilizzarli in maniera da renderne più agevole una distribuzione logica.&lt;br /&gt;
&lt;br /&gt;
Sono così identificate le seguenti dimensioni standard per le reti IPv6 (nulla vieta di usare dimensioni personalizzate):&lt;br /&gt;
* '''/126''': contiene 2 soli host, utilizzata per i collegamenti punto-punto nell'infrastruttura di rete;&lt;br /&gt;
* '''/64''': è la più piccola rete che dovrebbe essere fatta; dimensione utilizzata nelle LAN; lo spazio di indirizzamento è esageratamente sovradimensionato ed è sufficiente per qualunque LAN immaginabile (è 4 miliardi di volte più grande di tutta la rete Internet IPv4); viene usata in ambito domestico;&lt;br /&gt;
* '''/56''': contiene 256 reti di dimensione /64, viene usata in ambito domestico o per piccole imprese;&lt;br /&gt;
* '''/48''': contiene 65536 reti di dimensione /64, viene usata in ambito aziendale;&lt;br /&gt;
&lt;br /&gt;
Le LAN non devono avere un prefisso più lungo di /64, perché molte nuove funzionalità introdotte con IPv6 (es SLAAC, Privacy Extension, ...), e anche funzionalità che saranno introdotte in futuro, daranno per scontato che le reti abbiano almeno questa dimensione.&lt;br /&gt;
&lt;br /&gt;
=== Ottenere connettività IPv6 ===&lt;br /&gt;
* si può richiedere nativamente al proprio ISP. Quando è stata scritta questa pagina, in Italia non erano molti gli operatori che fornivano connettività IPv6 nativa; adesso sono di più, perché gli IPv4 sono finiti, e non sarebbe altrimenti possibile fare business, ma alcuni operatori (specialmente quelli più grandi e noti), ancora non forniscono connettività IPv6 nativa;&lt;br /&gt;
* si possono fare dei tunnel che veicolano il traffico IPv6 all'interno dei pacchetti IPv4 (sprecando un po' di banda);&lt;br /&gt;
&lt;br /&gt;
Tunnel:&lt;br /&gt;
* pro:&lt;br /&gt;
** molti sono gratuiti;&lt;br /&gt;
* contro:&lt;br /&gt;
** spreco di banda per incapsulare i pacchetti (qualche decina di byte in più per ogni pacchetto, circa 20 ogni 1500);&lt;br /&gt;
** maggiore latenza;&lt;br /&gt;
** alcuni richiedono un indirizzo IPv4 statico; altri richiedono complicate configurazioni per l'uso con indirizzi dinamici;&lt;br /&gt;
** alcuni non funzionano dietro NAT (la quasi totalità delle reti domestiche);&lt;br /&gt;
&lt;br /&gt;
== Considerazioni e descrizione generale ==&lt;br /&gt;
&lt;br /&gt;
Come portare IPv6 al GOLEM?&lt;br /&gt;
&lt;br /&gt;
È stato realizzato un tunnel tra un intermediario e il nostro VPS. L'intermediario inoltra al VPS tutti i pacchetti destinati alla nostra rete.&lt;br /&gt;
La nostra rete viene scomposta in sottoreti: una rete di backbone, una per l'officina e una per ogni altro punto di accesso necessario, es. uno per ogni abitazione dei soci.&lt;br /&gt;
Il VPS conosce le rotte per raggiungere ogni singola sottorete e inoltra i pacchetti che riceve dall'intermediario verso il giusto router di ogni punto di accesso.&lt;br /&gt;
Il router del punto di accesso inoltra i pacchetti allo specifico host destinatario.&lt;br /&gt;
&lt;br /&gt;
Si procede analogamente a ritroso.&lt;br /&gt;
&lt;br /&gt;
In figura è mostrata la prima versione di visione ''logica'' della rete realizzata:&lt;br /&gt;
* '''HE''' (Hurricane Electric) è il provider fornitore IPv6;&lt;br /&gt;
* '''OVH''' è il nostro provider per il VPS;&lt;br /&gt;
* '''VPS''' è il nostro VPS;&lt;br /&gt;
* '''serverozzo''' è il gateway in [[Officina Informatica]];&lt;br /&gt;
&lt;br /&gt;
Per permettere il collegamento tra il VPS e un punto di accesso (anche noto in questa pagina come ''gateway dell'utente''), non essendo possibile stendere dei cavi fisici in giro per l'Europa, utilizzeremo la nostra VPN.&lt;br /&gt;
Esistono delle pagine dedicate per la documentazione sulla [[Rete del GOLEM]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tunnel-ipv6.jpeg|Il primo prototipo della rete del GOLEM, con la VPN e il tunnel IPv6.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Iniziare: rete /64 ==&lt;br /&gt;
Sono l'amministratore di rete e voglio attivare il tunnel IPv6 per la prima volta. Come iniziare?&lt;br /&gt;
&lt;br /&gt;
Ci si registra su [https://tunnelbroker.net/ TunnelBroker] e viene assegnata d'ufficio una rete IPv6 ''/64''.&lt;br /&gt;
&lt;br /&gt;
Il broker comunica i dettagli del suo PoP (''Point of Presence''):&lt;br /&gt;
 IPv4: 216.66.84.42&lt;br /&gt;
 IPv6: 2001:470:1f12:69::1&lt;br /&gt;
&lt;br /&gt;
L'IPv6 sarà utilizzato sul collegamento ''tunnel virtuale'', collegato all'interfaccia del VPS che chiameremo ''he6in4''. Dalla nostra parte, ''he6in4'' avrà come indirizzo &amp;lt;code&amp;gt;2001:470:1f12:69::2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Attiviamo il tunnel, aggiungendo questo al ''/etc/network/interfaces'':&lt;br /&gt;
&lt;br /&gt;
 auto he6in4&lt;br /&gt;
 iface he6in4 inet6 v4tunnel&lt;br /&gt;
 	address 2001:470:1f12:69::2/64&lt;br /&gt;
         endpoint 216.66.84.42&lt;br /&gt;
         local 152.228.140.73&lt;br /&gt;
         ttl 255&lt;br /&gt;
&lt;br /&gt;
Se si vuole utilizzare il tunnel come default gateway, aggiungere anche:&lt;br /&gt;
 	gateway 2001:470:1f12:69::1&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning&lt;br /&gt;
|text=È possibile utilizzare un solo default gateway su Linux, perciò assicurarsi di non confliggere con la configurazione IPv6 del vostro provider (se c'è)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
e verificare la connettività tra il VPS e il PoP del broker con:&lt;br /&gt;
 $ ip -6 addr&lt;br /&gt;
 $ ping 2001:470:1f12:69::1&lt;br /&gt;
e la connettività con l'Internet IPv6 con:&lt;br /&gt;
 $ ping 2a00:1450:4002:80a::200e&lt;br /&gt;
che, per completezza, è l'IPv6 di &amp;lt;code&amp;gt;ipv6.google.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nella maggior parte dei casi il server DNS IPv4 usato sin'ora ha anche il supporto per risolvere nomi IPv6.&lt;br /&gt;
&lt;br /&gt;
Probabilmente però '''non''' si vorrà utilizzare questa configurazione, bensì sfruttare la rete /48 come spiegato nel prossimo paragrafo.&lt;br /&gt;
&lt;br /&gt;
== Rete /48 ==&lt;br /&gt;
Siccome una rete IPv6 fisica (per esempio, una rete domestica) ha dimensione /64, ma il GOLEM, a sua volta, diventa provider per i soci, noi vogliamo tante reti, per l'officina e per i soci, richiediamo manualmente una ''/48''. Non ci piace essere spreconi, ma ci piace rispettare ''anche'' le RFC: a new era of Internet: [https://tools.ietf.org/html/rfc3177] [https://tools.ietf.org/html/rfc5375#section-3.1]&lt;br /&gt;
&lt;br /&gt;
Ci è stata assegnata la rete &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;, che significa:&lt;br /&gt;
* tutto il traffico di Internet IPv6 diretto a un indirizzo che cade in 2001:470:c844::/48 verrà instradato verso il nostro VPS;&lt;br /&gt;
* abbiamo a disposizione ben 2&amp;lt;sup&amp;gt;80&amp;lt;/sup&amp;gt; indirizzi per pianificare la nostra rete come più ci aggrada;&lt;br /&gt;
&lt;br /&gt;
Lo so, dopo anni bui di NAT dopo NAT e carenza di indirizzi, questa sembra fantascienza.&lt;br /&gt;
&lt;br /&gt;
=== Routing ===&lt;br /&gt;
Si può decidere di instradare tutto il traffico IPv6 tramite il tunnel broker, senza mai utilizzare l'IPv6 assegnato dal provider.&lt;br /&gt;
&lt;br /&gt;
Se però il server dispone già di un IPv6 assegnato dal provider, probabilmente si vuole e si può:&lt;br /&gt;
* utilizzare il suo IPv6 per navigare dal server, usando il gateway del provider&lt;br /&gt;
* utilizzare il gateway del tunnel broker solo per instradare i pacchetti della rete /48 che è stata assegnata&lt;br /&gt;
&lt;br /&gt;
Al GOLEM abbiamo fatto questa seconda scelta.&lt;br /&gt;
Perciò, '''non''' si deve aggiungere il gateway del tunnel broker come default gateway della configurazione in ''/etc/network/interfaces'', ma si deve aggiungere una regola di routing a mano per la sottorete del GOLEM, di fatto implementando ''source routing''.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Chiamasi ''source routing'' l'instradamento dei pacchetti fatto in base al loro indirizzo sorgente e non quello di destinazione, che è il modo standard&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
1. Modificare ''/etc/iproute2/rt_tables'' aggiungendo una nuova tabella di routing:&lt;br /&gt;
 200	golemsix&lt;br /&gt;
&lt;br /&gt;
2. Aggiungere il routing dei pacchetti provenienti dalla sottorete del GOLEM automaticamente al post-up dell'interfaccia del tunnel in ''/etc/network/interfaces'':&lt;br /&gt;
  	post-up ip -6 rule add from 2001:470:c844::/48 table golemsix &amp;amp;&amp;amp; ip -6 rule add to 2001:470:c844::/48 table main &amp;amp;&amp;amp; ip -6 route add default via 2001:470:1f12:69::1 dev he6in4 table golemsix &amp;amp;&amp;amp; ip -6 route flush cache&lt;br /&gt;
 	pre-down ip -6 route del default via 2001:470:1f12:69::1 dev he6in4 table golemsix &amp;amp;&amp;amp; ip -6 rule del to 2001:470:c844::/48 table main &amp;amp;&amp;amp; ip -6 rule del from 2001:470:c844::/48 table golemsix &amp;amp;&amp;amp; ip -6 route flush cache&lt;br /&gt;
&lt;br /&gt;
Spiegazione:&lt;br /&gt;
* I pacchetti provenienti dalla sottorete del GOLEM devono utilizzare la tabella di routing &amp;lt;code&amp;gt;golemsix&amp;lt;/code&amp;gt;:&lt;br /&gt;
 ip -6 rule add from 2001:470:c844::/48 table golemsix&lt;br /&gt;
&lt;br /&gt;
* I pacchetti destinati alla sottorete del GOLEM devono utilizzare la tabella di routing &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, così da poter essere instradati correttamente anche ai soci collegati con la VPN Wireguard. Si noti che, se inserita in quest'ordine, questa seconda regola ha priorità sulla precedente, ed è quello che vogliamo.&lt;br /&gt;
 ip -6 rule add to 2001:470:c844::/48 table main&lt;br /&gt;
&lt;br /&gt;
* Il default gateway per i pacchetti che utilizzano la tabella di routing &amp;lt;code&amp;gt;golemsix&amp;lt;/code&amp;gt; è l'endpoint del tunnel broker&lt;br /&gt;
 ip -6 route add default via 2001:470:1f12:69::1 dev he6in4 table golemsix&lt;br /&gt;
&lt;br /&gt;
* Aggiorna la cache del routing:&lt;br /&gt;
 ip -6 route flush cache&lt;br /&gt;
&lt;br /&gt;
Analogamente, vengono eseguite le operazioni inverse quando viene spenta l'interfaccia di rete.&lt;br /&gt;
&lt;br /&gt;
=== Piano di indirizzamento ===&lt;br /&gt;
Chiamarlo ''piano di indirizzamento'' è fargli un complimento immeritato; chiamiamola ''guida ragionata all'assegnazione dei nostri indirizzi''.&lt;br /&gt;
&lt;br /&gt;
Sia dato l'indirizzo IPv6:&lt;br /&gt;
&lt;br /&gt;
 127                   79     63                         0&lt;br /&gt;
     2001 : 0470 : c844 : rrrr : xxxx : xxxx : xxxx : xxxx&lt;br /&gt;
&lt;br /&gt;
Siccome abbiamo 80 bit a disposizione e la rete più piccola che possiamo fare secondo RFC è di 64 bit, possiamo fare ben 2&amp;lt;sup&amp;gt;16&amp;lt;/sup&amp;gt; reti (''rrrr'' nell'esempio).&lt;br /&gt;
Per semplicità (perché alla fine è a questo che servono tutti questi indirizzi in IPv6), poniamo ''rrrr'' = ''uugy'', dove:&lt;br /&gt;
* ''uu'' (8 bit) identifica l'''utente'';&lt;br /&gt;
* ''g'' (4 bit) identifica il gateway dell'utente (2&amp;lt;sup&amp;gt;4&amp;lt;/sup = 16 gateway per utente)&lt;br /&gt;
* ''y'' (4 bit) identifica la ''sottorete personale'' di quel gateway dell'utente (2&amp;lt;sup&amp;gt;4&amp;lt;/sup&amp;gt; = 16 sottoreti per gateway)&lt;br /&gt;
&lt;br /&gt;
Il VPS instrada direttamente tutta la sottorete /60 verso il gateway dell'utente, il quale può decidere di suddividerla come preferisce su quel gateway, da un unica grande rete /60, a 16 &amp;quot;piccole&amp;quot; reti /64.&lt;br /&gt;
&lt;br /&gt;
Sono così riservate:&lt;br /&gt;
 00gy indirizzi di servizio per l'infrastruttura (OpenVPN)&lt;br /&gt;
 01gy indirizzi di servizio per l'infrastruttura (Wireguard)&lt;br /&gt;
 02gy Officina (16 gateway × 16 reti)&lt;br /&gt;
 03gy Socio-A (16 gateway × 16 reti)&lt;br /&gt;
 04gy Socio-B (16 gateway × 16 reti)&lt;br /&gt;
 05gy ...&lt;br /&gt;
&lt;br /&gt;
Il ''numero di rete'' &amp;lt;code&amp;gt;rrrr&amp;lt;/code&amp;gt; sarà usato:&lt;br /&gt;
* per instradare tutto il traffico diretto a &amp;lt;code&amp;gt;2001:470:c844:rrg0::/60&amp;lt;/code&amp;gt; verso il gateway dell'utente;&lt;br /&gt;
* per assegnare l'indirizzo &amp;lt;code&amp;gt;2001:470:c844::rrg0/64&amp;lt;/code&amp;gt; al gateway dell'utente nella rete di servizio;&lt;br /&gt;
Si noti la &amp;quot;piccola&amp;quot; differenza.&lt;br /&gt;
&lt;br /&gt;
Per esempio, supponiamo di voler attivare ''serverozzo'', per il quale:&lt;br /&gt;
* ''uu = 02'' (''02'' è l'utente ''Officina'')&lt;br /&gt;
* ''g = 0'' (''0'' il primo &amp;amp;mdash; e al momento unico &amp;amp;mdash; gateway in Officina)&lt;br /&gt;
allora:&lt;br /&gt;
* serverozzo avrà indirizzo &amp;lt;code&amp;gt;2001:470:c844::200/64&amp;lt;/code&amp;gt; lato VPN;&lt;br /&gt;
* tutto il traffico per &amp;lt;code&amp;gt;2001:470:c844:200::/60&amp;lt;/code&amp;gt; verrà instradato verso serverozzo;&lt;br /&gt;
&lt;br /&gt;
E su serverozzo potranno essere create fino a 16 reti, per esempio:&lt;br /&gt;
* per la rete cablata Ethernet dell'Officina (&amp;lt;code&amp;gt;2001:470:c844:200::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;ethI&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per la rete wireless dell'Officina (&amp;lt;code&amp;gt;2001:470:c844:201::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;wlan0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per la rete cablata bus RS-485 (&amp;lt;code&amp;gt;2001:470:c844:202::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;ttyS0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per le macchine virtuali su KVM (&amp;lt;code&amp;gt;2001:470:c844:203::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;vir0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per le macchine virtuali su docker (&amp;lt;code&amp;gt;2001:470:c844:204::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* ...&lt;br /&gt;
'''Nota:''' questo è solo un esempio, la configurazione finale su serverozzo è ancora in fase di definizione.&lt;br /&gt;
&lt;br /&gt;
Nella prima rete di servizio (&amp;lt;code&amp;gt;2001:470:c844::/64&amp;lt;/code&amp;gt;) ci sono:&lt;br /&gt;
* il VPS&lt;br /&gt;
* tutti i gateway&lt;br /&gt;
** per esempio, serverozzo&lt;br /&gt;
** per esempio, i gateway dei soci&lt;br /&gt;
I gateway dei soci non sono diversi da serverozzo, e tuttavia la loro configurazione può essere più semplice se invece che da gateway fungono come semplici end-point.&lt;br /&gt;
&lt;br /&gt;
Così organizzate, le risorse si esauriranno in questo ordine:&lt;br /&gt;
* la banda a disposizione del VPS (500M/500M);&lt;br /&gt;
* la capacità computazionale e di memoria del VPS per l'inoltro dei pacchetti;&lt;br /&gt;
* gli IPv6 (gli IPv6 non finiranno mai)&lt;br /&gt;
&lt;br /&gt;
Non essendo una rete a maglie, ma semplicemente un albero, il routing è definito staticamente.&lt;br /&gt;
Se la rete si evolverà e le singole &amp;quot;isole&amp;quot; dovessero iniziare a connettersi a maglia in maniera incontrollata, potranno essere impiegati algoritmi dinamici, ma considerata la dimensione del bacino di utenti, non dovrebbe essere necessario.&lt;br /&gt;
&lt;br /&gt;
== Installazione del server ==&lt;br /&gt;
La VPN del GOLEM può essere utilizzata per la navigazione in IPv6.&lt;br /&gt;
La VPN è realizzata per mezzo di Wireguard.&lt;br /&gt;
&lt;br /&gt;
A differenza di altri protocolli, come OpenVPN, Wireguard ha un approccio &amp;quot;peer to peer&amp;quot;, per cui la procedura di configurazione del server rispecchia per buona parte quella di ciascun client.&lt;br /&gt;
&lt;br /&gt;
Innanzitutto è necessario generare la coppia di chiavi pubblica/privata del server:&lt;br /&gt;
&lt;br /&gt;
 # wg genkey | tee /etc/wireguard/server.privkey | wg pubkey &amp;gt; /etc/wireguard/vpn.golem.linux.it.pubkey&lt;br /&gt;
&lt;br /&gt;
Per la configurazione è sufficiente creare un singolo file, ad esempio &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # Carica la chiave privata dal percorso dove la abbiamo generata precedentemente&lt;br /&gt;
 PostUp = wg set %i private-key /etc/wireguard/vpn.golem.linux.it.privkey&lt;br /&gt;
 # Porta UDP di ascolto del server, a piacere&lt;br /&gt;
 ListenPort = 51820&lt;br /&gt;
 # Indirizzo del server all'interno della VPN&lt;br /&gt;
 Address = 2001:470:c844:100::1&lt;br /&gt;
&lt;br /&gt;
Il server può essere avviato tramite ''systemd'', e con lo stesso sistema si può impostare l'avvio automatico.&lt;br /&gt;
Si noti che &amp;lt;code&amp;gt;@wg0&amp;lt;/code&amp;gt; corrisponde al file di configurazione precedentemente creato.&lt;br /&gt;
&lt;br /&gt;
 # systemctl start wg-quick@wg0&lt;br /&gt;
 # systemctl enable wg-quick@wg0&lt;br /&gt;
&lt;br /&gt;
== Aggiunta di un nuovo client ==&lt;br /&gt;
=== Configurazione lato server ===&lt;br /&gt;
il sysop aggiunge un blocco peer per ciascun client alla configurazione &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;, così:&lt;br /&gt;
&lt;br /&gt;
 ... altri client ...&lt;br /&gt;
 &lt;br /&gt;
 # porceddu.net.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = tHeClIeNtFaNtAsTiCpUbLiCkEy=&lt;br /&gt;
 AllowedIPs = 2001:470:c844:100::200/128, 2001:470:c844:200::/62&lt;br /&gt;
 &lt;br /&gt;
 ... altri client ...&lt;br /&gt;
&lt;br /&gt;
Altro che OpenVPN.&lt;br /&gt;
&lt;br /&gt;
=== Configurazione lato client ===&lt;br /&gt;
1. Lato client, generare una coppia di chiavi pubblica/privata e inviare la chiave pubblica al sysop.&lt;br /&gt;
&lt;br /&gt;
 $ wg genkey | tee client.example.com.privkey | wg pubkey &amp;gt; client.example.com.pubkey&lt;br /&gt;
&lt;br /&gt;
Il sysop si occuperà di aggiungere la chiave pubblica tra quelle consentite al server, sceglierà un indirizzo IP in base al piano di indirizzamento, e ve lo comunicherà.&lt;br /&gt;
&lt;br /&gt;
2. Creare un file di configurazione come segue, in cui scrivere opportunamente la vostra chiave privata e l'indirizzo IP assegnato. Prestare particolare attenzione a modificare i campi della sezione &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt;, come indicato nelle note.&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # PrivateKey = YoUrGoRgEoUsAnDsEcUrEpRiVaTeKeY=               # vedi note, scegliere questo...&lt;br /&gt;
 # PostUp = wg set %i private-key ./client.example.com.privkey # vedi note,                 ...oppure questo&lt;br /&gt;
 Address = 2001:470:c844:100::'''200'''/64                           # vedi note&lt;br /&gt;
 &lt;br /&gt;
 # vpn.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = w63aGvoyPaUTgA8nW/NJS6Qqp2hUFvHRBbIH8Qb5ISY=   &lt;br /&gt;
 AllowedIPs = 2000::/3                                      &lt;br /&gt;
 Endpoint = vpn.golem.linux.it:51280&lt;br /&gt;
 PersistentKeepalive = 37&lt;br /&gt;
&lt;br /&gt;
'''Note'''&lt;br /&gt;
* &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''locale'')&lt;br /&gt;
** scegliere una delle seguenti opzioni per indicare la chiave privata del client, scommentando la riga apposita.&lt;br /&gt;
*** ''PrivateKey'': chiave privata del client, da custodire con cura, inline&lt;br /&gt;
*** ''PostUp = command'': chiave privata del client, da custodire con cura, e caricata automaticamente da un file esterno (es. creato col comando mostrato in precedenza)&lt;br /&gt;
** ''Address'': indirizzo IP comunicato dal sysop: riportarlo accuratamente, altrimenti non sarà possibile utilizzare la VPN&lt;br /&gt;
* &amp;lt;code&amp;gt;[Peer]&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''remoto'' / server)&lt;br /&gt;
** ''PublicKey'': chiave pubblica del server (sì, è proprio quella)&lt;br /&gt;
** ''AllowedIPs'': indirizzi raggiungibili tramite la VPN, a scelta:&lt;br /&gt;
*** &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;: solo la [[IPv6 @ GOLEM | rete IPv6 virtuale del GOLEM]]&lt;br /&gt;
*** &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;: tutti gli indirizzi IPv6 (è possibile utilizzare la VPN del GOLEM per [[IPv6 @ GOLEM | navigare ''davvero'' in IPv6]])&lt;br /&gt;
** ''Endpoint'': indirizzo del server&lt;br /&gt;
** ''PersistentKeepalive'': timer per mantenimento del tunnel attivo (in secondi); particolarmente utile se l'indirizzo IP del client cambia o è soggetto a NAT&lt;br /&gt;
&lt;br /&gt;
La connessione può essere attivata tramite systemd come sul server (spostandola in ''/etc/wireguard/''), oppure manualmente utilizzando &amp;lt;code&amp;gt;wg-quick&amp;lt;/code&amp;gt;:&lt;br /&gt;
* Attivazione del tunnel&lt;br /&gt;
 wg-quick up client.example.conf&lt;br /&gt;
* Disattivazione del tunnel&lt;br /&gt;
 wg-quick down client.example.conf&lt;br /&gt;
&lt;br /&gt;
3. Provare il collegamento&lt;br /&gt;
 # ping 2001:470:c844:100::1    # server VPN, dentro al tunnel (per verificare se il collegamento funziona)&lt;br /&gt;
 # ping 2001:470:c844:100::200  # gateway in Officina (per verificare se il collegamento funziona; talvolta non raggiungibile se abbiamo staccato la luce)&lt;br /&gt;
 # ping ipv6.google.com         # per verificare l'accessibilità dell'Internet pubblico IPv6, nel caso non si abbia già accesso&lt;br /&gt;
&lt;br /&gt;
4. Successo!&lt;br /&gt;
* Se il client OpenVPN è un nodo foglia della rete, cioè non funge da gateway perché si deve collegare solo lui (es. smartphone), allora c'è già connettività IPv6 e non serve fare altro. È comunque consigliato leggere la sezione relativa al [[#Firewall | firewall]] per ragioni di sicurezza ed eventualmente attivarlo.&lt;br /&gt;
* Se invece il client è il gateway della rete IPv6 (es. ''serverozzo'', o il router di casa di uno dei soci che vuole navigare in IPv6), allora bisogna configurarlo come indicato nella [[#Client_VPN_come_gateway | sezione apposita]].&lt;br /&gt;
&lt;br /&gt;
== Client VPN come gateway ==&lt;br /&gt;
=== Impostare il client VPN come gateway IPv6 per l'isola ===&lt;br /&gt;
==== Abilitare inoltro pacchetti IPv6 ====&lt;br /&gt;
Nel file ''/etc/sysctl.conf'':&lt;br /&gt;
 net.ipv6.conf.all.forwarding=1&lt;br /&gt;
&lt;br /&gt;
==== Installare e configurare radvd ====&lt;br /&gt;
''radvd'' è il demone di ''router advertisement''.&lt;br /&gt;
Per la configurazione automatica degli indirizzi e del gateway in IPv6 non è necessario un ''complesso'' server DHCP, ma vista la vastità dello spazio di indirizzamento (anche la rete più piccola ha ben 2&amp;lt;sup&amp;gt;64&amp;lt;/sup&amp;gt; indirizzi disponibili) basta il più semplice ''radvd''.&lt;br /&gt;
Un router con ''radvd'', a intervalli regolari, trasmette un messaggio in broadcast a tutti gli host della rete, informandoli sul prefisso di rete da utilizzare; a questo punto gli host possono autoconfigurarsi col metodo che preferiscono (es. [https://tools.ietf.org/search/rfc4862 SLAAC] con o senza [https://tools.ietf.org/html/rfc4941.html estensione per la privacy]).&lt;br /&gt;
&lt;br /&gt;
Installare ''radvd'':&lt;br /&gt;
 # apt install radvd&lt;br /&gt;
&lt;br /&gt;
Configurare il file ''/etc/radvd.conf'':&lt;br /&gt;
 interface ethI {&lt;br /&gt;
         AdvSendAdvert on;&lt;br /&gt;
         MinRtrAdvInterval 2;&lt;br /&gt;
         MaxRtrAdvInterval 10;&lt;br /&gt;
         prefix 2001:db8::/64 {&lt;br /&gt;
                 AdvOnLink on;&lt;br /&gt;
                 AdvAutonomous on;&lt;br /&gt;
                 AdvRouterAddr on;&lt;br /&gt;
         };&lt;br /&gt;
         RDNSS 2606:4700:4700::1111 {&lt;br /&gt;
                 AdvRDNSSLifetime 3600;&lt;br /&gt;
         };&lt;br /&gt;
 };&lt;br /&gt;
dove&lt;br /&gt;
* &amp;lt;code&amp;gt;interface br0&amp;lt;/code&amp;gt; indica l'interfaccia interna su cui fare ''advertise'';&lt;br /&gt;
* &amp;lt;code&amp;gt;prefix 2001:db8::/64&amp;lt;/code&amp;gt; indica la rete a valle;&lt;br /&gt;
* &amp;lt;code&amp;gt;RDNSS 2606:4700:4700::1111&amp;lt;/code&amp;gt; indica il server DNS (nell'esempio specifico, CloudFlare);&lt;br /&gt;
** ''Nota:'' in seguito a questioni legali, OpenDNS non è al momento disponibile in Francia.&lt;br /&gt;
&lt;br /&gt;
== Firewall ==&lt;br /&gt;
=== Per il VPS ===&lt;br /&gt;
Inoltrare solo i pacchetti da/per le reti note.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text=Non ancora testato!&lt;br /&gt;
}}&lt;br /&gt;
 # ip6tables -A FORWARD -d 2001:470:c844::/48 -i he6in4 -j ACCEPT&lt;br /&gt;
 # ip6tables -A FORWARD -s 2001:470:c844::/48 -o he6in4 -j ACCEPT&lt;br /&gt;
 # ip6tables -P FORWARD DROP&lt;br /&gt;
&lt;br /&gt;
=== Per i client ===&lt;br /&gt;
Gli indirizzi IPv6 sono &amp;quot;tutti&amp;quot; pubblici. Gli indirizzi IPv6 forniti dal GOLEM sono pubblicamente instradabili. In più, il GOLEM non mette in atto '''nessuna''' misura atta a prevenire connessioni dirette verso gli host della VPN (al netto di configurazioni specifiche sulle macchine direttamente di proprietà del GOLEM).&lt;br /&gt;
Ciò significa che '''tutti''' gli host degli utenti/soci, compresi quelli domestici che sin'ora sono stati dietro a un (s)comodo NAT, possono essere acceduti attraverso la rete Internet globale, quando sono connessi alla VPN del GOLEM.&lt;br /&gt;
&lt;br /&gt;
Pertanto, è consigliato attivare degli strumenti atti a prevenire accessi indesiderati dall'esterno, come un firewall, in special modo se il proprio computer &amp;quot;fornisce servizi&amp;quot; (eg. condivisione di file via rete, server web di sviluppo, ...)&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text='''Nota bene''': salvare queste impostazioni, per esempio con &amp;lt;code&amp;gt;ip6tables-save&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;ip6tables-restore&amp;lt;/code&amp;gt;, altrimenti verranno perse al riavvio.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Direttamente sull'host ====&lt;br /&gt;
Si può agire direttamente sugli host da proteggere (versione conservativa):&lt;br /&gt;
 # ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # ip6tables -A INPUT -p icmpv6 -j ACCEPT&lt;br /&gt;
 # ip6tables -P INPUT DROP&lt;br /&gt;
&lt;br /&gt;
In generale con Linux questa operazione non è comunque necessaria, perché tanto non vi sono servizi esposti a meno che non siano stati installati esplicitamente.&lt;br /&gt;
Si noti che ICMPv6 deve comunque sempre essere abilitato in quanto necessario al funzionamento di IPv6.&lt;br /&gt;
&lt;br /&gt;
Si può anche utilizzare una regola più rilassata (es. per sfruttare la VPN del GOLEM come VPN &amp;quot;personale&amp;quot; tra i propri host), tipo:&lt;br /&gt;
 # ip6tables -A INPUT -s 2001:470:c844:uu00::/56 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=I pacchetti della VPN viaggiano crittografati sulla rete pubblica (almeno finché si trovano all'interno della VPN del GOLEM), ma sul server vengono decifrati e cifrati di nuovo per permetterne il routing!&lt;br /&gt;
In caso di compromissione del VPS del GOLEM, pertanto, i pacchetti non possono essere considerati al sicuro da sguardi indiscreti. È sempre buona norma utilizzare crittografia end-to-end, anche all'interno di una VPN.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Dal gateway ====&lt;br /&gt;
Invece di configurare il firewall su ogni host singolarmente, si può configurare il gateway una volta sola per proteggere tutta la rete a valle:&lt;br /&gt;
 # ip6tables -A FORWARD -s 2001:470:c844:rrrr::/64 -j ACCEPT&lt;br /&gt;
 # ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # ip6tables -P FORWARD DROP&lt;br /&gt;
&lt;br /&gt;
Nell'ordine:&lt;br /&gt;
* blocca l'inoltro di tutti i pacchetti&lt;br /&gt;
* abilita l'inoltro dei pacchetti in uscita dalla rete&lt;br /&gt;
* abilita l'inoltro dei pacchetti correlati a connessioni già stabilite&lt;br /&gt;
&lt;br /&gt;
Questo impedisce l'accesso indesiderato a tutti gli host della rete, compresi gli host con Windows che possono starsene &amp;quot;sicuri&amp;quot; anche senza il firewall, pur esponendo servizi (NetBIOS, Samba).&lt;br /&gt;
&lt;br /&gt;
===== Eccezioni =====&lt;br /&gt;
Se si desidera comunque rendere accessibile un proprio server in particolare, è possibile istruire il gateway con un'eccezione, aggiungendo:&lt;br /&gt;
 # ip6tables -A FORWARD -d 2001:470:c844:rrrr::host -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
Questo è qualcosa che &amp;quot;assomiglia&amp;quot; vagamente al vecchio ''port forwarding''.&lt;br /&gt;
&lt;br /&gt;
=== Torrent ===&lt;br /&gt;
La banda è limitata, e non è consentito traffico di materiale illegale. Occore limitare il traffico ''bit-torrent'' almeno al gateway finale (VPS).&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text=TODO: Questa sezione è da fare!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Risoluzione problemi =&lt;br /&gt;
== Geolocalizzazione ==&lt;br /&gt;
Il tunnel è localizzato in Francia.&lt;br /&gt;
A causa di restrizioni imposte a causa del diritto d'autore, alcuni siti, specialmente di streaming video, come Netflix, Rai.tv o Youtube, potrebbero bloccare l'accesso ai contenuti italiani dal tunnel francese.&lt;br /&gt;
Per inibire temporaneamente l'uso del tunnel IPv6 su un host:&lt;br /&gt;
 # sysctl -w net.ipv6.conf.all.disable_ipv6=1&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Howto]]&lt;br /&gt;
[[Categoria:Officina]]&lt;br /&gt;
[[Category:Sysop]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=IPv6_@_GOLEM&amp;diff=9482</id>
		<title>IPv6 @ GOLEM</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=IPv6_@_GOLEM&amp;diff=9482"/>
		<updated>2024-11-01T12:35:54Z</updated>

		<summary type="html">&lt;p&gt;Giomba: /* Routing - correzione routing con instradamento anche verso la rete interna (es. da host interno ad altro host interno), e spiegazione dettagliata */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Due parole su questa pagina ==&lt;br /&gt;
Questa pagina è un maldestro tentativo:&lt;br /&gt;
* per riassumere le ragioni che ci hanno portato a decidere di dotarci di IPv6;&lt;br /&gt;
* per documentare la nostra infrastruttura di rete;&lt;br /&gt;
&lt;br /&gt;
=== A chi si rivolge questa pagina ===&lt;br /&gt;
* se sei l''''amministratore di rete''', buona lettura :-)&lt;br /&gt;
* se sei un '''socio''', vedi come [[#Configurazione_lato_client | configurare il tuo client]]; è sufficiente leggere solo questo paragrafo.&lt;br /&gt;
&lt;br /&gt;
== Due parole sull'IPv6 ==&lt;br /&gt;
[https://it.wikipedia.org/wiki/IPv6 IPv6] è un &amp;quot;nuovo&amp;quot; protocollo a livello di rete che da diversi anni sta sostituendo IPv4.&lt;br /&gt;
Le novità introdotte da IPv6 sono molteplici; tra queste, quella che balza immediatamente all'occhio è l'enorme dimensione dello spazio di indirizzamento.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Protocollo'''&lt;br /&gt;
| '''lunghezza indirizzo'''&lt;br /&gt;
| '''numero indirizzi'''&lt;br /&gt;
|-&lt;br /&gt;
| IPv4&lt;br /&gt;
| 32 bit&lt;br /&gt;
| &amp;lt;math&amp;gt;2^{32}&amp;lt;/math&amp;gt; = 4 miliardi&lt;br /&gt;
|-&lt;br /&gt;
| IPv6&lt;br /&gt;
| 128 bit&lt;br /&gt;
| &amp;lt;math&amp;gt;2^{128}&amp;lt;/math&amp;gt; = 256 miliardi di miliardi di miliardi di miliardi&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Su questo pianeta vi sono circa 8 miliardi di persone [https://it.wikipedia.org/wiki/Popolazione_mondiale], di cui la metà [http://www.lastampa.it/2018/01/31/tecnologia/gli-utenti-di-internet-sono-pi-di-quattro-miliardi-nel-mondo-milioni-in-italia-wMxQskzXeabwa3wgWI2jUO/pagina.html] è connessa a Internet, e nei paesi sviluppati hanno anche più di un dispositivo connesso. Si aggiungano i numerosissimi apparati di rete e server necessari per il funzionamento dell'infrastruttura e la fornitura di servizi, e si può facilmente intuire che IPv4 non è più sufficiente per le attuali necessità.&lt;br /&gt;
&lt;br /&gt;
Mentre questa pagina veniva scritta, gli IPv4 stavano finendo [https://en.wikipedia.org/wiki/IPv4_address_exhaustion].&lt;br /&gt;
Nel novembre 2019, il RIPE (il registro europeo) ha terminato l'assegnazione degli ultimi indirizzi IPv4 assegnati all'Europa, [https://www.ripe.net/publications/ipv6-info-centre/about-ipv6/ipv4-exhaustion/ipv4-available-pool] e adesso vengono solo riutilizzati quelli vecchi, che significa che:&lt;br /&gt;
* non ci sono più indirizzi &amp;quot;nuovi&amp;quot; e dunque non è più possibile richiederli con facilità;&lt;br /&gt;
* se si vogliono degli indirizzi IPv4, si viene messi in lista d'attesa, finché il precedente proprietario fallisce e rilascia i propri.&lt;br /&gt;
&lt;br /&gt;
=== IPv4 vs IPv6 ===&lt;br /&gt;
==== Notazione ====&lt;br /&gt;
* IPv4 &amp;amp;rarr; 4 byte rappresentati con numeri decimali separati da un punto, es: &amp;lt;code&amp;gt;192.0.2.127&amp;lt;/code&amp;gt;&lt;br /&gt;
* IPv6 &amp;amp;rarr; 16 byte, ogni byte è rappresentato da due cifre esadecimali; ogni 4 cifre esadecimali si inseriscono i ''due punti'' &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;; come in IPv4 è possibile omettere gli zeri in testa; la più lunga sequenza di zeri allineata a 4 può essere omessa per intero; esempi (indirizzi equivalenti):&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:0470:c844:0020:0000:0000:0000:0001&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:470:c844:20:0:0:0:1&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:470:c844:20::1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipi di indirizzi ====&lt;br /&gt;
* IPv6 Reference Card by RIPE [https://www.ripe.net/manage-ips-and-asns/ipv6/ipv6-address-types/ipv6_reference_card_July2015.pdf]&lt;br /&gt;
&lt;br /&gt;
Riassunto:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''IPv6'''&lt;br /&gt;
| '''Equivalente IPv4'''&lt;br /&gt;
| '''Significato'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;::1/128&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo loopback&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fc00::/7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;192.168.0.0/16&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;10.0.0.0/8&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;172.16.0.0/12&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo privato&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fe80::/10&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;169.254.0.0/16&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo link-local (univoco nella rete locale, e autoassegnato)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2001:db8::/32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;192.0.2.0/24&amp;lt;/code&amp;gt;&lt;br /&gt;
| Esempi e documentazione&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| Indirizzi unicast globalmente raggiungibili&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Indirizzi pubblici vs privati ====&lt;br /&gt;
Gli IPv6 sono così tanti che non c'è bisogno di utilizzare indirizzi privati: niente NAT, niente port-forwarding. Questo restituisce connettività end-to-end ai dispositivi e apre numerose nuove possibilità di impiego, rimaste nascoste per anni a causa della scarsità di IPv4 e degli osceni espedienti inventati. Una banalità: non sarà più necessario passare attraverso un server terzo per condividere documenti, chattare o telefonare ai propri contatti.&lt;br /&gt;
&lt;br /&gt;
Se necessarie, le caratteristiche di &amp;quot;sicurezza&amp;quot; introdotte dal NAT possono essere sostituite e accorpate a un banale firewall.&lt;br /&gt;
&lt;br /&gt;
==== Progettazione di una rete ====&lt;br /&gt;
Nel progettare una rete con IPv4, la necessità principale è quella di risparmiare sugli indirizzi, perciò vengono usati prefissi di rete di varia lunghezza.&lt;br /&gt;
Nel progettare una rete con IPv6, si hanno a disposizione così tanti indirizzi che conviene utilizzarli in maniera da renderne più agevole una distribuzione logica.&lt;br /&gt;
&lt;br /&gt;
Sono così identificate le seguenti dimensioni standard per le reti IPv6 (nulla vieta di usare dimensioni personalizzate):&lt;br /&gt;
* '''/126''': contiene 2 soli host, utilizzata per i collegamenti punto-punto nell'infrastruttura di rete;&lt;br /&gt;
* '''/64''': è la più piccola rete che dovrebbe essere fatta; dimensione utilizzata nelle LAN; lo spazio di indirizzamento è esageratamente sovradimensionato ed è sufficiente per qualunque LAN immaginabile (è 4 miliardi di volte più grande di tutta la rete Internet IPv4); viene usata in ambito domestico;&lt;br /&gt;
* '''/56''': contiene 256 reti di dimensione /64, viene usata in ambito domestico o per piccole imprese;&lt;br /&gt;
* '''/48''': contiene 65536 reti di dimensione /64, viene usata in ambito aziendale;&lt;br /&gt;
&lt;br /&gt;
Le LAN non devono avere un prefisso più lungo di /64, perché molte nuove funzionalità introdotte con IPv6 (es SLAAC, Privacy Extension, ...), e anche funzionalità che saranno introdotte in futuro, daranno per scontato che le reti abbiano almeno questa dimensione.&lt;br /&gt;
&lt;br /&gt;
=== Ottenere connettività IPv6 ===&lt;br /&gt;
* si può richiedere nativamente al proprio ISP. Quando è stata scritta questa pagina, in Italia non erano molti gli operatori che fornivano connettività IPv6 nativa; adesso sono di più, perché gli IPv4 sono finiti, e non sarebbe altrimenti possibile fare business, ma alcuni operatori (specialmente quelli più grandi e noti), ancora non forniscono connettività IPv6 nativa;&lt;br /&gt;
* si possono fare dei tunnel che veicolano il traffico IPv6 all'interno dei pacchetti IPv4 (sprecando un po' di banda);&lt;br /&gt;
&lt;br /&gt;
Tunnel:&lt;br /&gt;
* pro:&lt;br /&gt;
** molti sono gratuiti;&lt;br /&gt;
* contro:&lt;br /&gt;
** spreco di banda per incapsulare i pacchetti (qualche decina di byte in più per ogni pacchetto, circa 20 ogni 1500);&lt;br /&gt;
** maggiore latenza;&lt;br /&gt;
** alcuni richiedono un indirizzo IPv4 statico; altri richiedono complicate configurazioni per l'uso con indirizzi dinamici;&lt;br /&gt;
** alcuni non funzionano dietro NAT (la quasi totalità delle reti domestiche);&lt;br /&gt;
&lt;br /&gt;
== Considerazioni e descrizione generale ==&lt;br /&gt;
&lt;br /&gt;
Come portare IPv6 al GOLEM?&lt;br /&gt;
&lt;br /&gt;
È stato realizzato un tunnel tra un intermediario e il nostro VPS. L'intermediario inoltra al VPS tutti i pacchetti destinati alla nostra rete.&lt;br /&gt;
La nostra rete viene scomposta in sottoreti: una rete di backbone, una per l'officina e una per ogni altro punto di accesso necessario, es. uno per ogni abitazione dei soci.&lt;br /&gt;
Il VPS conosce le rotte per raggiungere ogni singola sottorete e inoltra i pacchetti che riceve dall'intermediario verso il giusto router di ogni punto di accesso.&lt;br /&gt;
Il router del punto di accesso inoltra i pacchetti allo specifico host destinatario.&lt;br /&gt;
&lt;br /&gt;
Si procede analogamente a ritroso.&lt;br /&gt;
&lt;br /&gt;
In figura è mostrata la prima versione di visione ''logica'' della rete realizzata:&lt;br /&gt;
* '''HE''' (Hurricane Electric) è il provider fornitore IPv6;&lt;br /&gt;
* '''OVH''' è il nostro provider per il VPS;&lt;br /&gt;
* '''VPS''' è il nostro VPS;&lt;br /&gt;
* '''serverozzo''' è il gateway in [[Officina Informatica]];&lt;br /&gt;
&lt;br /&gt;
Per permettere il collegamento tra il VPS e un punto di accesso (anche noto in questa pagina come ''gateway dell'utente''), non essendo possibile stendere dei cavi fisici in giro per l'Europa, utilizzeremo la nostra VPN.&lt;br /&gt;
Esistono delle pagine dedicate per la documentazione sulla [[Rete del GOLEM]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tunnel-ipv6.jpeg|Il primo prototipo della rete del GOLEM, con la VPN e il tunnel IPv6.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Iniziare: rete /64 ==&lt;br /&gt;
Sono l'amministratore di rete e voglio attivare il tunnel IPv6 per la prima volta. Come iniziare?&lt;br /&gt;
&lt;br /&gt;
Ci si registra su [https://tunnelbroker.net/ TunnelBroker] e viene assegnata d'ufficio una rete IPv6 ''/64''.&lt;br /&gt;
&lt;br /&gt;
Il broker comunica i dettagli del suo PoP (''Point of Presence''):&lt;br /&gt;
 IPv4: 216.66.84.42&lt;br /&gt;
 IPv6: 2001:470:1f12:69::1&lt;br /&gt;
&lt;br /&gt;
L'IPv6 sarà utilizzato sul collegamento ''tunnel virtuale'', collegato all'interfaccia del VPS che chiameremo ''he6in4''. Dalla nostra parte, ''he6in4'' avrà come indirizzo &amp;lt;code&amp;gt;2001:470:1f12:69::2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Attiviamo il tunnel, aggiungendo questo al ''/etc/network/interfaces'':&lt;br /&gt;
&lt;br /&gt;
 auto he6in4&lt;br /&gt;
 iface he6in4 inet6 v4tunnel&lt;br /&gt;
 	address 2001:470:1f12:69::2/64&lt;br /&gt;
         endpoint 216.66.84.42&lt;br /&gt;
         local 152.228.140.73&lt;br /&gt;
         ttl 255&lt;br /&gt;
&lt;br /&gt;
Se si vuole utilizzare il tunnel come default gateway, aggiungere anche:&lt;br /&gt;
 	gateway 2001:470:1f12:69::1&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning&lt;br /&gt;
|text=È possibile utilizzare un solo default gateway su Linux, perciò assicurarsi di non confliggere con la configurazione IPv6 del vostro provider (se c'è)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
e verificare la connettività tra il VPS e il PoP del broker con:&lt;br /&gt;
 $ ip -6 addr&lt;br /&gt;
 $ ping 2001:470:1f12:69::1&lt;br /&gt;
e la connettività con l'Internet IPv6 con:&lt;br /&gt;
 $ ping 2a00:1450:4002:80a::200e&lt;br /&gt;
che, per completezza, è l'IPv6 di &amp;lt;code&amp;gt;ipv6.google.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nella maggior parte dei casi il server DNS IPv4 usato sin'ora ha anche il supporto per risolvere nomi IPv6.&lt;br /&gt;
&lt;br /&gt;
Probabilmente però '''non''' si vorrà utilizzare questa configurazione, bensì sfruttare la rete /48 come spiegato nel prossimo paragrafo.&lt;br /&gt;
&lt;br /&gt;
== Rete /48 ==&lt;br /&gt;
Siccome una rete IPv6 fisica (per esempio, una rete domestica) ha dimensione /64, ma il GOLEM, a sua volta, diventa provider per i soci, noi vogliamo tante reti, per l'officina e per i soci, richiediamo manualmente una ''/48''. Non ci piace essere spreconi, ma ci piace rispettare ''anche'' le RFC: a new era of Internet: [https://tools.ietf.org/html/rfc3177] [https://tools.ietf.org/html/rfc5375#section-3.1]&lt;br /&gt;
&lt;br /&gt;
Ci è stata assegnata la rete &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;, che significa:&lt;br /&gt;
* tutto il traffico di Internet IPv6 diretto a un indirizzo che cade in 2001:470:c844::/48 verrà instradato verso il nostro VPS;&lt;br /&gt;
* abbiamo a disposizione ben &amp;lt;math&amp;gt;2^{80}&amp;lt;/math&amp;gt; indirizzi per pianificare la nostra rete come più ci aggrada;&lt;br /&gt;
&lt;br /&gt;
Lo so, dopo anni bui di NAT dopo NAT e carenza di indirizzi, questa sembra fantascienza.&lt;br /&gt;
&lt;br /&gt;
=== Routing ===&lt;br /&gt;
Si può decidere di instradare tutto il traffico IPv6 tramite il tunnel broker, senza mai utilizzare l'IPv6 assegnato dal provider.&lt;br /&gt;
&lt;br /&gt;
Se però il server dispone già di un IPv6 assegnato dal provider, probabilmente si vuole e si può:&lt;br /&gt;
* utilizzare il suo IPv6 per navigare dal server, usando il gateway del provider&lt;br /&gt;
* utilizzare il gateway del tunnel broker solo per instradare i pacchetti della rete /48 che è stata assegnata&lt;br /&gt;
&lt;br /&gt;
Al GOLEM abbiamo fatto questa seconda scelta.&lt;br /&gt;
Perciò, '''non''' si deve aggiungere il gateway del tunnel broker come default gateway della configurazione in ''/etc/network/interfaces'', ma si deve aggiungere una regola di routing a mano per la sottorete del GOLEM, di fatto implementando ''source routing''.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Chiamasi ''source routing'' l'instradamento dei pacchetti fatto in base al loro indirizzo sorgente e non quello di destinazione, che è il modo standard&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
1. Modificare ''/etc/iproute2/rt_tables'' aggiungendo una nuova tabella di routing:&lt;br /&gt;
 200	golemsix&lt;br /&gt;
&lt;br /&gt;
2. Aggiungere il routing dei pacchetti provenienti dalla sottorete del GOLEM automaticamente al post-up dell'interfaccia del tunnel in ''/etc/network/interfaces'':&lt;br /&gt;
  	post-up ip -6 rule add from 2001:470:c844::/48 table golemsix &amp;amp;&amp;amp; ip -6 rule add to 2001:470:c844::/48 table main &amp;amp;&amp;amp; ip -6 route add default via 2001:470:1f12:69::1 dev he6in4 table golemsix &amp;amp;&amp;amp; ip -6 route flush cache&lt;br /&gt;
 	pre-down ip -6 route del default via 2001:470:1f12:69::1 dev he6in4 table golemsix &amp;amp;&amp;amp; ip -6 rule del to 2001:470:c844::/48 table main &amp;amp;&amp;amp; ip -6 rule del from 2001:470:c844::/48 table golemsix &amp;amp;&amp;amp; ip -6 route flush cache&lt;br /&gt;
&lt;br /&gt;
Spiegazione:&lt;br /&gt;
* I pacchetti provenienti dalla sottorete del GOLEM devono utilizzare la tabella di routing &amp;lt;code&amp;gt;golemsix&amp;lt;/code&amp;gt;:&lt;br /&gt;
 ip -6 rule add from 2001:470:c844::/48 table golemsix&lt;br /&gt;
&lt;br /&gt;
* I pacchetti destinati alla sottorete del GOLEM devono utilizzare la tabella di routing &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, così da poter essere instradati correttamente anche ai soci collegati con la VPN Wireguard. Si noti che, se inserita in quest'ordine, questa seconda regola ha priorità sulla precedente, ed è quello che vogliamo.&lt;br /&gt;
 ip -6 rule add to 2001:470:c844::/48 table main&lt;br /&gt;
&lt;br /&gt;
* Il default gateway per i pacchetti che utilizzano la tabella di routing &amp;lt;code&amp;gt;golemsix&amp;lt;/code&amp;gt; è l'endpoint del tunnel broker&lt;br /&gt;
 ip -6 route add default via 2001:470:1f12:69::1 dev he6in4 table golemsix&lt;br /&gt;
&lt;br /&gt;
* Aggiorna la cache del routing:&lt;br /&gt;
 ip -6 route flush cache&lt;br /&gt;
&lt;br /&gt;
Analogamente, vengono eseguite le operazioni inverse quando viene spenta l'interfaccia di rete.&lt;br /&gt;
&lt;br /&gt;
=== Piano di indirizzamento ===&lt;br /&gt;
Chiamarlo ''piano di indirizzamento'' è fargli un complimento immeritato; chiamiamola ''guida ragionata all'assegnazione dei nostri indirizzi''.&lt;br /&gt;
&lt;br /&gt;
Sia dato l'indirizzo IPv6:&lt;br /&gt;
&lt;br /&gt;
 127                   79     63                         0&lt;br /&gt;
     2001 : 0470 : c844 : rrrr : xxxx : xxxx : xxxx : xxxx&lt;br /&gt;
&lt;br /&gt;
Siccome abbiamo 80 bit a disposizione e la rete più piccola che possiamo fare secondo RFC è di 64 bit, possiamo fare ben &amp;lt;math&amp;gt;2^{16}&amp;lt;/math&amp;gt; reti (''rrrr'' nell'esempio).&lt;br /&gt;
Per semplicità (perché alla fine è a questo che servono tutti questi indirizzi in IPv6), poniamo ''rrrr'' = ''uugy'', dove:&lt;br /&gt;
* ''uu'' (8 bit) identifica l'''utente'';&lt;br /&gt;
* ''g'' (4 bit) identifica il gateway dell'utente (&amp;lt;math&amp;gt;2^4&amp;lt;/math&amp;gt; = 16 gateway per utente)&lt;br /&gt;
* ''y'' (4 bit) identifica la ''sottorete personale'' di quel gateway dell'utente (&amp;lt;math&amp;gt;2^4&amp;lt;/math&amp;gt; = 16 sottoreti per gateway)&lt;br /&gt;
&lt;br /&gt;
Il VPS instrada direttamente tutta la sottorete /60 verso il gateway dell'utente, il quale può decidere di suddividerla come preferisce su quel gateway, da un unica grande rete /60, a 16 &amp;quot;piccole&amp;quot; reti /64.&lt;br /&gt;
&lt;br /&gt;
Sono così riservate:&lt;br /&gt;
 00gy indirizzi di servizio per l'infrastruttura (OpenVPN)&lt;br /&gt;
 01gy indirizzi di servizio per l'infrastruttura (Wireguard)&lt;br /&gt;
 02gy Officina (16 gateway × 16 reti)&lt;br /&gt;
 03gy Socio-A (16 gateway × 16 reti)&lt;br /&gt;
 04gy Socio-B (16 gateway × 16 reti)&lt;br /&gt;
 05gy ...&lt;br /&gt;
&lt;br /&gt;
Il ''numero di rete'' &amp;lt;code&amp;gt;rrrr&amp;lt;/code&amp;gt; sarà usato:&lt;br /&gt;
* per instradare tutto il traffico diretto a &amp;lt;code&amp;gt;2001:470:c844:rrg0::/60&amp;lt;/code&amp;gt; verso il gateway dell'utente;&lt;br /&gt;
* per assegnare l'indirizzo &amp;lt;code&amp;gt;2001:470:c844::rrg0/64&amp;lt;/code&amp;gt; al gateway dell'utente nella rete di servizio;&lt;br /&gt;
Si noti la &amp;quot;piccola&amp;quot; differenza.&lt;br /&gt;
&lt;br /&gt;
Per esempio, supponiamo di voler attivare ''serverozzo'', per il quale:&lt;br /&gt;
* ''uu = 02'' (''02'' è l'utente ''Officina'')&lt;br /&gt;
* ''g = 0'' (''0'' il primo &amp;amp;mdash; e al momento unico &amp;amp;mdash; gateway in Officina)&lt;br /&gt;
allora:&lt;br /&gt;
* serverozzo avrà indirizzo &amp;lt;code&amp;gt;2001:470:c844::200/64&amp;lt;/code&amp;gt; lato VPN;&lt;br /&gt;
* tutto il traffico per &amp;lt;code&amp;gt;2001:470:c844:200::/60&amp;lt;/code&amp;gt; verrà instradato verso serverozzo;&lt;br /&gt;
&lt;br /&gt;
E su serverozzo potranno essere create fino a 16 reti, per esempio:&lt;br /&gt;
* per la rete cablata Ethernet dell'Officina (&amp;lt;code&amp;gt;2001:470:c844:200::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;ethI&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per la rete wireless dell'Officina (&amp;lt;code&amp;gt;2001:470:c844:201::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;wlan0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per la rete cablata bus RS-485 (&amp;lt;code&amp;gt;2001:470:c844:202::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;ttyS0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per le macchine virtuali su KVM (&amp;lt;code&amp;gt;2001:470:c844:203::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;vir0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per le macchine virtuali su docker (&amp;lt;code&amp;gt;2001:470:c844:204::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* ...&lt;br /&gt;
'''Nota:''' questo è solo un esempio, la configurazione finale su serverozzo è ancora in fase di definizione.&lt;br /&gt;
&lt;br /&gt;
Nella prima rete di servizio (&amp;lt;code&amp;gt;2001:470:c844::/64&amp;lt;/code&amp;gt;) ci sono:&lt;br /&gt;
* il VPS&lt;br /&gt;
* tutti i gateway&lt;br /&gt;
** per esempio, serverozzo&lt;br /&gt;
** per esempio, i gateway dei soci&lt;br /&gt;
I gateway dei soci non sono diversi da serverozzo, e tuttavia la loro configurazione può essere più semplice se invece che da gateway fungono come semplici end-point.&lt;br /&gt;
&lt;br /&gt;
Così organizzate, le risorse si esauriranno in questo ordine:&lt;br /&gt;
* la banda a disposizione del VPS (500M/500M);&lt;br /&gt;
* la capacità computazionale e di memoria del VPS per l'inoltro dei pacchetti;&lt;br /&gt;
* gli IPv6 (gli IPv6 non finiranno mai)&lt;br /&gt;
&lt;br /&gt;
Non essendo una rete a maglie, ma semplicemente un albero, il routing è definito staticamente.&lt;br /&gt;
Se la rete si evolverà e le singole &amp;quot;isole&amp;quot; dovessero iniziare a connettersi a maglia in maniera incontrollata, potranno essere impiegati algoritmi dinamici, ma considerata la dimensione del bacino di utenti, non dovrebbe essere necessario.&lt;br /&gt;
&lt;br /&gt;
== Installazione del server ==&lt;br /&gt;
La VPN del GOLEM può essere utilizzata per la navigazione in IPv6.&lt;br /&gt;
La VPN è realizzata per mezzo di Wireguard.&lt;br /&gt;
&lt;br /&gt;
A differenza di altri protocolli, come OpenVPN, Wireguard ha un approccio &amp;quot;peer to peer&amp;quot;, per cui la procedura di configurazione del server rispecchia per buona parte quella di ciascun client.&lt;br /&gt;
&lt;br /&gt;
Innanzitutto è necessario generare la coppia di chiavi pubblica/privata del server:&lt;br /&gt;
&lt;br /&gt;
 # wg genkey | tee /etc/wireguard/server.privkey | wg pubkey &amp;gt; /etc/wireguard/vpn.golem.linux.it.pubkey&lt;br /&gt;
&lt;br /&gt;
Per la configurazione è sufficiente creare un singolo file, ad esempio &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # Carica la chiave privata dal percorso dove la abbiamo generata precedentemente&lt;br /&gt;
 PostUp = wg set %i private-key /etc/wireguard/vpn.golem.linux.it.privkey&lt;br /&gt;
 # Porta UDP di ascolto del server, a piacere&lt;br /&gt;
 ListenPort = 51820&lt;br /&gt;
 # Indirizzo del server all'interno della VPN&lt;br /&gt;
 Address = 2001:470:c844:100::1&lt;br /&gt;
&lt;br /&gt;
Il server può essere avviato tramite ''systemd'', e con lo stesso sistema si può impostare l'avvio automatico.&lt;br /&gt;
Si noti che &amp;lt;code&amp;gt;@wg0&amp;lt;/code&amp;gt; corrisponde al file di configurazione precedentemente creato.&lt;br /&gt;
&lt;br /&gt;
 # systemctl start wg-quick@wg0&lt;br /&gt;
 # systemctl enable wg-quick@wg0&lt;br /&gt;
&lt;br /&gt;
== Aggiunta di un nuovo client ==&lt;br /&gt;
=== Configurazione lato server ===&lt;br /&gt;
il sysop aggiunge un blocco peer per ciascun client alla configurazione &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;, così:&lt;br /&gt;
&lt;br /&gt;
 ... altri client ...&lt;br /&gt;
 &lt;br /&gt;
 # porceddu.net.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = tHeClIeNtFaNtAsTiCpUbLiCkEy=&lt;br /&gt;
 AllowedIPs = 2001:470:c844:100::200/128, 2001:470:c844:200::/62&lt;br /&gt;
 &lt;br /&gt;
 ... altri client ...&lt;br /&gt;
&lt;br /&gt;
Altro che OpenVPN.&lt;br /&gt;
&lt;br /&gt;
=== Configurazione lato client ===&lt;br /&gt;
1. Lato client, generare una coppia di chiavi pubblica/privata e inviare la chiave pubblica al sysop.&lt;br /&gt;
&lt;br /&gt;
 $ wg genkey | tee client.example.com.privkey | wg pubkey &amp;gt; client.example.com.pubkey&lt;br /&gt;
&lt;br /&gt;
Il sysop si occuperà di aggiungere la chiave pubblica tra quelle consentite al server, sceglierà un indirizzo IP in base al piano di indirizzamento, e ve lo comunicherà.&lt;br /&gt;
&lt;br /&gt;
2. Creare un file di configurazione come segue, in cui scrivere opportunamente la vostra chiave privata e l'indirizzo IP assegnato. Prestare particolare attenzione a modificare i campi della sezione &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt;, come indicato nelle note.&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # PrivateKey = YoUrGoRgEoUsAnDsEcUrEpRiVaTeKeY=               # vedi note, scegliere questo...&lt;br /&gt;
 # PostUp = wg set %i private-key ./client.example.com.privkey # vedi note,                 ...oppure questo&lt;br /&gt;
 Address = 2001:470:c844:100::'''200'''/64                           # vedi note&lt;br /&gt;
 &lt;br /&gt;
 # vpn.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = w63aGvoyPaUTgA8nW/NJS6Qqp2hUFvHRBbIH8Qb5ISY=   &lt;br /&gt;
 AllowedIPs = 2000::/3                                      &lt;br /&gt;
 Endpoint = vpn.golem.linux.it:51280&lt;br /&gt;
 PersistentKeepalive = 37&lt;br /&gt;
&lt;br /&gt;
'''Note'''&lt;br /&gt;
* &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''locale'')&lt;br /&gt;
** scegliere una delle seguenti opzioni per indicare la chiave privata del client, scommentando la riga apposita.&lt;br /&gt;
*** ''PrivateKey'': chiave privata del client, da custodire con cura, inline&lt;br /&gt;
*** ''PostUp = command'': chiave privata del client, da custodire con cura, e caricata automaticamente da un file esterno (es. creato col comando mostrato in precedenza)&lt;br /&gt;
** ''Address'': indirizzo IP comunicato dal sysop: riportarlo accuratamente, altrimenti non sarà possibile utilizzare la VPN&lt;br /&gt;
* &amp;lt;code&amp;gt;[Peer]&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''remoto'' / server)&lt;br /&gt;
** ''PublicKey'': chiave pubblica del server (sì, è proprio quella)&lt;br /&gt;
** ''AllowedIPs'': indirizzi raggiungibili tramite la VPN, a scelta:&lt;br /&gt;
*** &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;: solo la [[IPv6 @ GOLEM | rete IPv6 virtuale del GOLEM]]&lt;br /&gt;
*** &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;: tutti gli indirizzi IPv6 (è possibile utilizzare la VPN del GOLEM per [[IPv6 @ GOLEM | navigare ''davvero'' in IPv6]])&lt;br /&gt;
** ''Endpoint'': indirizzo del server&lt;br /&gt;
** ''PersistentKeepalive'': timer per mantenimento del tunnel attivo (in secondi); particolarmente utile se l'indirizzo IP del client cambia o è soggetto a NAT&lt;br /&gt;
&lt;br /&gt;
La connessione può essere attivata tramite systemd come sul server (spostandola in ''/etc/wireguard/''), oppure manualmente utilizzando &amp;lt;code&amp;gt;wg-quick&amp;lt;/code&amp;gt;:&lt;br /&gt;
* Attivazione del tunnel&lt;br /&gt;
 wg-quick up client.example.conf&lt;br /&gt;
* Disattivazione del tunnel&lt;br /&gt;
 wg-quick down client.example.conf&lt;br /&gt;
&lt;br /&gt;
3. Provare il collegamento&lt;br /&gt;
 # ping 2001:470:c844:100::1    # server VPN, dentro al tunnel (per verificare se il collegamento funziona)&lt;br /&gt;
 # ping 2001:470:c844:100::200  # gateway in Officina (per verificare se il collegamento funziona; talvolta non raggiungibile se abbiamo staccato la luce)&lt;br /&gt;
 # ping ipv6.google.com         # per verificare l'accessibilità dell'Internet pubblico IPv6, nel caso non si abbia già accesso&lt;br /&gt;
&lt;br /&gt;
4. Successo!&lt;br /&gt;
* Se il client OpenVPN è un nodo foglia della rete, cioè non funge da gateway perché si deve collegare solo lui (es. smartphone), allora c'è già connettività IPv6 e non serve fare altro. È comunque consigliato leggere la sezione relativa al [[#Firewall | firewall]] per ragioni di sicurezza ed eventualmente attivarlo.&lt;br /&gt;
* Se invece il client è il gateway della rete IPv6 (es. ''serverozzo'', o il router di casa di uno dei soci che vuole navigare in IPv6), allora bisogna configurarlo come indicato nella [[#Client_VPN_come_gateway | sezione apposita]].&lt;br /&gt;
&lt;br /&gt;
== Client VPN come gateway ==&lt;br /&gt;
=== Impostare il client VPN come gateway IPv6 per l'isola ===&lt;br /&gt;
==== Abilitare inoltro pacchetti IPv6 ====&lt;br /&gt;
Nel file ''/etc/sysctl.conf'':&lt;br /&gt;
 net.ipv6.conf.all.forwarding=1&lt;br /&gt;
&lt;br /&gt;
==== Installare e configurare radvd ====&lt;br /&gt;
''radvd'' è il demone di ''router advertisement''.&lt;br /&gt;
Per la configurazione automatica degli indirizzi e del gateway in IPv6 non è necessario un ''complesso'' server DHCP, ma vista la vastità dello spazio di indirizzamento (anche la rete più piccola ha ben &amp;lt;math&amp;gt;2^{64}&amp;lt;/math&amp;gt; indirizzi disponibili) basta il più semplice ''radvd''.&lt;br /&gt;
Un router con ''radvd'', a intervalli regolari, trasmette un messaggio in broadcast a tutti gli host della rete, informandoli sul prefisso di rete da utilizzare; a questo punto gli host possono autoconfigurarsi col metodo che preferiscono (es. [https://tools.ietf.org/search/rfc4862 SLAAC] con o senza [https://tools.ietf.org/html/rfc4941.html estensione per la privacy]).&lt;br /&gt;
&lt;br /&gt;
Installare ''radvd'':&lt;br /&gt;
 # apt install radvd&lt;br /&gt;
&lt;br /&gt;
Configurare il file ''/etc/radvd.conf'':&lt;br /&gt;
 interface ethI {&lt;br /&gt;
         AdvSendAdvert on;&lt;br /&gt;
         MinRtrAdvInterval 2;&lt;br /&gt;
         MaxRtrAdvInterval 10;&lt;br /&gt;
         prefix 2001:db8::/64 {&lt;br /&gt;
                 AdvOnLink on;&lt;br /&gt;
                 AdvAutonomous on;&lt;br /&gt;
                 AdvRouterAddr on;&lt;br /&gt;
         };&lt;br /&gt;
         RDNSS 2606:4700:4700::1111 {&lt;br /&gt;
                 AdvRDNSSLifetime 3600;&lt;br /&gt;
         };&lt;br /&gt;
 };&lt;br /&gt;
dove&lt;br /&gt;
* &amp;lt;code&amp;gt;interface br0&amp;lt;/code&amp;gt; indica l'interfaccia interna su cui fare ''advertise'';&lt;br /&gt;
* &amp;lt;code&amp;gt;prefix 2001:db8::/64&amp;lt;/code&amp;gt; indica la rete a valle;&lt;br /&gt;
* &amp;lt;code&amp;gt;RDNSS 2606:4700:4700::1111&amp;lt;/code&amp;gt; indica il server DNS (nell'esempio specifico, CloudFlare);&lt;br /&gt;
** ''Nota:'' in seguito a questioni legali, OpenDNS non è al momento disponibile in Francia.&lt;br /&gt;
&lt;br /&gt;
== Firewall ==&lt;br /&gt;
=== Per il VPS ===&lt;br /&gt;
Inoltrare solo i pacchetti da/per le reti note.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text=Non ancora testato!&lt;br /&gt;
}}&lt;br /&gt;
 # ip6tables -A FORWARD -d 2001:470:c844::/48 -i he6in4 -j ACCEPT&lt;br /&gt;
 # ip6tables -A FORWARD -s 2001:470:c844::/48 -o he6in4 -j ACCEPT&lt;br /&gt;
 # ip6tables -P FORWARD DROP&lt;br /&gt;
&lt;br /&gt;
=== Per i client ===&lt;br /&gt;
Gli indirizzi IPv6 sono &amp;quot;tutti&amp;quot; pubblici. Gli indirizzi IPv6 forniti dal GOLEM sono pubblicamente instradabili. In più, il GOLEM non mette in atto '''nessuna''' misura atta a prevenire connessioni dirette verso gli host della VPN (al netto di configurazioni specifiche sulle macchine direttamente di proprietà del GOLEM).&lt;br /&gt;
Ciò significa che '''tutti''' gli host degli utenti/soci, compresi quelli domestici che sin'ora sono stati dietro a un (s)comodo NAT, possono essere acceduti attraverso la rete Internet globale, quando sono connessi alla VPN del GOLEM.&lt;br /&gt;
&lt;br /&gt;
Pertanto, è consigliato attivare degli strumenti atti a prevenire accessi indesiderati dall'esterno, come un firewall, in special modo se il proprio computer &amp;quot;fornisce servizi&amp;quot; (eg. condivisione di file via rete, server web di sviluppo, ...)&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text='''Nota bene''': salvare queste impostazioni, per esempio con &amp;lt;code&amp;gt;ip6tables-save&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;ip6tables-restore&amp;lt;/code&amp;gt;, altrimenti verranno perse al riavvio.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Direttamente sull'host ====&lt;br /&gt;
Si può agire direttamente sugli host da proteggere (versione conservativa):&lt;br /&gt;
 # ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # ip6tables -A INPUT -p icmpv6 -j ACCEPT&lt;br /&gt;
 # ip6tables -P INPUT DROP&lt;br /&gt;
&lt;br /&gt;
In generale con Linux questa operazione non è comunque necessaria, perché tanto non vi sono servizi esposti a meno che non siano stati installati esplicitamente.&lt;br /&gt;
Si noti che ICMPv6 deve comunque sempre essere abilitato in quanto necessario al funzionamento di IPv6.&lt;br /&gt;
&lt;br /&gt;
Si può anche utilizzare una regola più rilassata (es. per sfruttare la VPN del GOLEM come VPN &amp;quot;personale&amp;quot; tra i propri host), tipo:&lt;br /&gt;
 # ip6tables -A INPUT -s 2001:470:c844:uu00::/56 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=I pacchetti della VPN viaggiano crittografati sulla rete pubblica (almeno finché si trovano all'interno della VPN del GOLEM), ma sul server vengono decifrati e cifrati di nuovo per permetterne il routing!&lt;br /&gt;
In caso di compromissione del VPS del GOLEM, pertanto, i pacchetti non possono essere considerati al sicuro da sguardi indiscreti. È sempre buona norma utilizzare crittografia end-to-end, anche all'interno di una VPN.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Dal gateway ====&lt;br /&gt;
Invece di configurare il firewall su ogni host singolarmente, si può configurare il gateway una volta sola per proteggere tutta la rete a valle:&lt;br /&gt;
 # ip6tables -A FORWARD -s 2001:470:c844:rrrr::/64 -j ACCEPT&lt;br /&gt;
 # ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # ip6tables -P FORWARD DROP&lt;br /&gt;
&lt;br /&gt;
Nell'ordine:&lt;br /&gt;
* blocca l'inoltro di tutti i pacchetti&lt;br /&gt;
* abilita l'inoltro dei pacchetti in uscita dalla rete&lt;br /&gt;
* abilita l'inoltro dei pacchetti correlati a connessioni già stabilite&lt;br /&gt;
&lt;br /&gt;
Questo impedisce l'accesso indesiderato a tutti gli host della rete, compresi gli host con Windows che possono starsene &amp;quot;sicuri&amp;quot; anche senza il firewall, pur esponendo servizi (NetBIOS, Samba).&lt;br /&gt;
&lt;br /&gt;
===== Eccezioni =====&lt;br /&gt;
Se si desidera comunque rendere accessibile un proprio server in particolare, è possibile istruire il gateway con un'eccezione, aggiungendo:&lt;br /&gt;
 # ip6tables -A FORWARD -d 2001:470:c844:rrrr::host -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
Questo è qualcosa che &amp;quot;assomiglia&amp;quot; vagamente al vecchio ''port forwarding''.&lt;br /&gt;
&lt;br /&gt;
=== Torrent ===&lt;br /&gt;
La banda è limitata, e non è consentito traffico di materiale illegale. Occore limitare il traffico ''bit-torrent'' almeno al gateway finale (VPS).&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text=TODO: Questa sezione è da fare!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Risoluzione problemi =&lt;br /&gt;
== Geolocalizzazione ==&lt;br /&gt;
Il tunnel è localizzato in Francia.&lt;br /&gt;
A causa di restrizioni imposte a causa del diritto d'autore, alcuni siti, specialmente di streaming video, come Netflix, Rai.tv o Youtube, potrebbero bloccare l'accesso ai contenuti italiani dal tunnel francese.&lt;br /&gt;
Per inibire temporaneamente l'uso del tunnel IPv6 su un host:&lt;br /&gt;
 # sysctl -w net.ipv6.conf.all.disable_ipv6=1&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Howto]]&lt;br /&gt;
[[Categoria:Officina]]&lt;br /&gt;
[[Category:Sysop]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=IPv6_@_GOLEM&amp;diff=9481</id>
		<title>IPv6 @ GOLEM</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=IPv6_@_GOLEM&amp;diff=9481"/>
		<updated>2024-11-01T10:46:41Z</updated>

		<summary type="html">&lt;p&gt;Giomba: /* Rete /48 - precisazioni sul nuovo meccanismo di source routing che utilizziamo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Due parole su questa pagina ==&lt;br /&gt;
Questa pagina è un maldestro tentativo:&lt;br /&gt;
* per riassumere le ragioni che ci hanno portato a decidere di dotarci di IPv6;&lt;br /&gt;
* per documentare la nostra infrastruttura di rete;&lt;br /&gt;
&lt;br /&gt;
=== A chi si rivolge questa pagina ===&lt;br /&gt;
* se sei l''''amministratore di rete''', buona lettura :-)&lt;br /&gt;
* se sei un '''socio''', vedi come [[#Configurazione_lato_client | configurare il tuo client]]; è sufficiente leggere solo questo paragrafo.&lt;br /&gt;
&lt;br /&gt;
== Due parole sull'IPv6 ==&lt;br /&gt;
[https://it.wikipedia.org/wiki/IPv6 IPv6] è un &amp;quot;nuovo&amp;quot; protocollo a livello di rete che da diversi anni sta sostituendo IPv4.&lt;br /&gt;
Le novità introdotte da IPv6 sono molteplici; tra queste, quella che balza immediatamente all'occhio è l'enorme dimensione dello spazio di indirizzamento.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Protocollo'''&lt;br /&gt;
| '''lunghezza indirizzo'''&lt;br /&gt;
| '''numero indirizzi'''&lt;br /&gt;
|-&lt;br /&gt;
| IPv4&lt;br /&gt;
| 32 bit&lt;br /&gt;
| &amp;lt;math&amp;gt;2^{32}&amp;lt;/math&amp;gt; = 4 miliardi&lt;br /&gt;
|-&lt;br /&gt;
| IPv6&lt;br /&gt;
| 128 bit&lt;br /&gt;
| &amp;lt;math&amp;gt;2^{128}&amp;lt;/math&amp;gt; = 256 miliardi di miliardi di miliardi di miliardi&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Su questo pianeta vi sono circa 8 miliardi di persone [https://it.wikipedia.org/wiki/Popolazione_mondiale], di cui la metà [http://www.lastampa.it/2018/01/31/tecnologia/gli-utenti-di-internet-sono-pi-di-quattro-miliardi-nel-mondo-milioni-in-italia-wMxQskzXeabwa3wgWI2jUO/pagina.html] è connessa a Internet, e nei paesi sviluppati hanno anche più di un dispositivo connesso. Si aggiungano i numerosissimi apparati di rete e server necessari per il funzionamento dell'infrastruttura e la fornitura di servizi, e si può facilmente intuire che IPv4 non è più sufficiente per le attuali necessità.&lt;br /&gt;
&lt;br /&gt;
Mentre questa pagina veniva scritta, gli IPv4 stavano finendo [https://en.wikipedia.org/wiki/IPv4_address_exhaustion].&lt;br /&gt;
Nel novembre 2019, il RIPE (il registro europeo) ha terminato l'assegnazione degli ultimi indirizzi IPv4 assegnati all'Europa, [https://www.ripe.net/publications/ipv6-info-centre/about-ipv6/ipv4-exhaustion/ipv4-available-pool] e adesso vengono solo riutilizzati quelli vecchi, che significa che:&lt;br /&gt;
* non ci sono più indirizzi &amp;quot;nuovi&amp;quot; e dunque non è più possibile richiederli con facilità;&lt;br /&gt;
* se si vogliono degli indirizzi IPv4, si viene messi in lista d'attesa, finché il precedente proprietario fallisce e rilascia i propri.&lt;br /&gt;
&lt;br /&gt;
=== IPv4 vs IPv6 ===&lt;br /&gt;
==== Notazione ====&lt;br /&gt;
* IPv4 &amp;amp;rarr; 4 byte rappresentati con numeri decimali separati da un punto, es: &amp;lt;code&amp;gt;192.0.2.127&amp;lt;/code&amp;gt;&lt;br /&gt;
* IPv6 &amp;amp;rarr; 16 byte, ogni byte è rappresentato da due cifre esadecimali; ogni 4 cifre esadecimali si inseriscono i ''due punti'' &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;; come in IPv4 è possibile omettere gli zeri in testa; la più lunga sequenza di zeri allineata a 4 può essere omessa per intero; esempi (indirizzi equivalenti):&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:0470:c844:0020:0000:0000:0000:0001&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:470:c844:20:0:0:0:1&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:470:c844:20::1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipi di indirizzi ====&lt;br /&gt;
* IPv6 Reference Card by RIPE [https://www.ripe.net/manage-ips-and-asns/ipv6/ipv6-address-types/ipv6_reference_card_July2015.pdf]&lt;br /&gt;
&lt;br /&gt;
Riassunto:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''IPv6'''&lt;br /&gt;
| '''Equivalente IPv4'''&lt;br /&gt;
| '''Significato'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;::1/128&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo loopback&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fc00::/7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;192.168.0.0/16&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;10.0.0.0/8&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;172.16.0.0/12&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo privato&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fe80::/10&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;169.254.0.0/16&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo link-local (univoco nella rete locale, e autoassegnato)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2001:db8::/32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;192.0.2.0/24&amp;lt;/code&amp;gt;&lt;br /&gt;
| Esempi e documentazione&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| Indirizzi unicast globalmente raggiungibili&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Indirizzi pubblici vs privati ====&lt;br /&gt;
Gli IPv6 sono così tanti che non c'è bisogno di utilizzare indirizzi privati: niente NAT, niente port-forwarding. Questo restituisce connettività end-to-end ai dispositivi e apre numerose nuove possibilità di impiego, rimaste nascoste per anni a causa della scarsità di IPv4 e degli osceni espedienti inventati. Una banalità: non sarà più necessario passare attraverso un server terzo per condividere documenti, chattare o telefonare ai propri contatti.&lt;br /&gt;
&lt;br /&gt;
Se necessarie, le caratteristiche di &amp;quot;sicurezza&amp;quot; introdotte dal NAT possono essere sostituite e accorpate a un banale firewall.&lt;br /&gt;
&lt;br /&gt;
==== Progettazione di una rete ====&lt;br /&gt;
Nel progettare una rete con IPv4, la necessità principale è quella di risparmiare sugli indirizzi, perciò vengono usati prefissi di rete di varia lunghezza.&lt;br /&gt;
Nel progettare una rete con IPv6, si hanno a disposizione così tanti indirizzi che conviene utilizzarli in maniera da renderne più agevole una distribuzione logica.&lt;br /&gt;
&lt;br /&gt;
Sono così identificate le seguenti dimensioni standard per le reti IPv6 (nulla vieta di usare dimensioni personalizzate):&lt;br /&gt;
* '''/126''': contiene 2 soli host, utilizzata per i collegamenti punto-punto nell'infrastruttura di rete;&lt;br /&gt;
* '''/64''': è la più piccola rete che dovrebbe essere fatta; dimensione utilizzata nelle LAN; lo spazio di indirizzamento è esageratamente sovradimensionato ed è sufficiente per qualunque LAN immaginabile (è 4 miliardi di volte più grande di tutta la rete Internet IPv4); viene usata in ambito domestico;&lt;br /&gt;
* '''/56''': contiene 256 reti di dimensione /64, viene usata in ambito domestico o per piccole imprese;&lt;br /&gt;
* '''/48''': contiene 65536 reti di dimensione /64, viene usata in ambito aziendale;&lt;br /&gt;
&lt;br /&gt;
Le LAN non devono avere un prefisso più lungo di /64, perché molte nuove funzionalità introdotte con IPv6 (es SLAAC, Privacy Extension, ...), e anche funzionalità che saranno introdotte in futuro, daranno per scontato che le reti abbiano almeno questa dimensione.&lt;br /&gt;
&lt;br /&gt;
=== Ottenere connettività IPv6 ===&lt;br /&gt;
* si può richiedere nativamente al proprio ISP. Quando è stata scritta questa pagina, in Italia non erano molti gli operatori che fornivano connettività IPv6 nativa; adesso sono di più, perché gli IPv4 sono finiti, e non sarebbe altrimenti possibile fare business, ma alcuni operatori (specialmente quelli più grandi e noti), ancora non forniscono connettività IPv6 nativa;&lt;br /&gt;
* si possono fare dei tunnel che veicolano il traffico IPv6 all'interno dei pacchetti IPv4 (sprecando un po' di banda);&lt;br /&gt;
&lt;br /&gt;
Tunnel:&lt;br /&gt;
* pro:&lt;br /&gt;
** molti sono gratuiti;&lt;br /&gt;
* contro:&lt;br /&gt;
** spreco di banda per incapsulare i pacchetti (qualche decina di byte in più per ogni pacchetto, circa 20 ogni 1500);&lt;br /&gt;
** maggiore latenza;&lt;br /&gt;
** alcuni richiedono un indirizzo IPv4 statico; altri richiedono complicate configurazioni per l'uso con indirizzi dinamici;&lt;br /&gt;
** alcuni non funzionano dietro NAT (la quasi totalità delle reti domestiche);&lt;br /&gt;
&lt;br /&gt;
== Considerazioni e descrizione generale ==&lt;br /&gt;
&lt;br /&gt;
Come portare IPv6 al GOLEM?&lt;br /&gt;
&lt;br /&gt;
È stato realizzato un tunnel tra un intermediario e il nostro VPS. L'intermediario inoltra al VPS tutti i pacchetti destinati alla nostra rete.&lt;br /&gt;
La nostra rete viene scomposta in sottoreti: una rete di backbone, una per l'officina e una per ogni altro punto di accesso necessario, es. uno per ogni abitazione dei soci.&lt;br /&gt;
Il VPS conosce le rotte per raggiungere ogni singola sottorete e inoltra i pacchetti che riceve dall'intermediario verso il giusto router di ogni punto di accesso.&lt;br /&gt;
Il router del punto di accesso inoltra i pacchetti allo specifico host destinatario.&lt;br /&gt;
&lt;br /&gt;
Si procede analogamente a ritroso.&lt;br /&gt;
&lt;br /&gt;
In figura è mostrata la prima versione di visione ''logica'' della rete realizzata:&lt;br /&gt;
* '''HE''' (Hurricane Electric) è il provider fornitore IPv6;&lt;br /&gt;
* '''OVH''' è il nostro provider per il VPS;&lt;br /&gt;
* '''VPS''' è il nostro VPS;&lt;br /&gt;
* '''serverozzo''' è il gateway in [[Officina Informatica]];&lt;br /&gt;
&lt;br /&gt;
Per permettere il collegamento tra il VPS e un punto di accesso (anche noto in questa pagina come ''gateway dell'utente''), non essendo possibile stendere dei cavi fisici in giro per l'Europa, utilizzeremo la nostra VPN.&lt;br /&gt;
Esistono delle pagine dedicate per la documentazione sulla [[Rete del GOLEM]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tunnel-ipv6.jpeg|Il primo prototipo della rete del GOLEM, con la VPN e il tunnel IPv6.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Iniziare: rete /64 ==&lt;br /&gt;
Sono l'amministratore di rete e voglio attivare il tunnel IPv6 per la prima volta. Come iniziare?&lt;br /&gt;
&lt;br /&gt;
Ci si registra su [https://tunnelbroker.net/ TunnelBroker] e viene assegnata d'ufficio una rete IPv6 ''/64''.&lt;br /&gt;
&lt;br /&gt;
Il broker comunica i dettagli del suo PoP (''Point of Presence''):&lt;br /&gt;
 IPv4: 216.66.84.42&lt;br /&gt;
 IPv6: 2001:470:1f12:69::1&lt;br /&gt;
&lt;br /&gt;
L'IPv6 sarà utilizzato sul collegamento ''tunnel virtuale'', collegato all'interfaccia del VPS che chiameremo ''he6in4''. Dalla nostra parte, ''he6in4'' avrà come indirizzo &amp;lt;code&amp;gt;2001:470:1f12:69::2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Attiviamo il tunnel, aggiungendo questo al ''/etc/network/interfaces'':&lt;br /&gt;
&lt;br /&gt;
 auto he6in4&lt;br /&gt;
 iface he6in4 inet6 v4tunnel&lt;br /&gt;
 	address 2001:470:1f12:69::2/64&lt;br /&gt;
         endpoint 216.66.84.42&lt;br /&gt;
         local 152.228.140.73&lt;br /&gt;
         ttl 255&lt;br /&gt;
&lt;br /&gt;
Se si vuole utilizzare il tunnel come default gateway, aggiungere anche:&lt;br /&gt;
 	gateway 2001:470:1f12:69::1&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning&lt;br /&gt;
|text=È possibile utilizzare un solo default gateway su Linux, perciò assicurarsi di non confliggere con la configurazione IPv6 del vostro provider (se c'è)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
e verificare la connettività tra il VPS e il PoP del broker con:&lt;br /&gt;
 $ ip -6 addr&lt;br /&gt;
 $ ping 2001:470:1f12:69::1&lt;br /&gt;
e la connettività con l'Internet IPv6 con:&lt;br /&gt;
 $ ping 2a00:1450:4002:80a::200e&lt;br /&gt;
che, per completezza, è l'IPv6 di &amp;lt;code&amp;gt;ipv6.google.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nella maggior parte dei casi il server DNS IPv4 usato sin'ora ha anche il supporto per risolvere nomi IPv6.&lt;br /&gt;
&lt;br /&gt;
Probabilmente però '''non''' si vorrà utilizzare questa configurazione, bensì sfruttare la rete /48 come spiegato nel prossimo paragrafo.&lt;br /&gt;
&lt;br /&gt;
== Rete /48 ==&lt;br /&gt;
Siccome una rete IPv6 fisica (per esempio, una rete domestica) ha dimensione /64, ma il GOLEM, a sua volta, diventa provider per i soci, noi vogliamo tante reti, per l'officina e per i soci, richiediamo manualmente una ''/48''. Non ci piace essere spreconi, ma ci piace rispettare ''anche'' le RFC: a new era of Internet: [https://tools.ietf.org/html/rfc3177] [https://tools.ietf.org/html/rfc5375#section-3.1]&lt;br /&gt;
&lt;br /&gt;
Ci è stata assegnata la rete &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;, che significa:&lt;br /&gt;
* tutto il traffico di Internet IPv6 diretto a un indirizzo che cade in 2001:470:c844::/48 verrà instradato verso il nostro VPS;&lt;br /&gt;
* abbiamo a disposizione ben &amp;lt;math&amp;gt;2^{80}&amp;lt;/math&amp;gt; indirizzi per pianificare la nostra rete come più ci aggrada;&lt;br /&gt;
&lt;br /&gt;
Lo so, dopo anni bui di NAT dopo NAT e carenza di indirizzi, questa sembra fantascienza.&lt;br /&gt;
&lt;br /&gt;
=== Routing ===&lt;br /&gt;
Si può decidere di instradare tutto il traffico IPv6 tramite il tunnel broker, senza mai utilizzare l'IPv6 assegnato dal provider.&lt;br /&gt;
&lt;br /&gt;
Se però il server dispone già di un IPv6 assegnato dal provider, probabilmente si vuole e si può:&lt;br /&gt;
* utilizzare il suo IPv6 per navigare dal server, usando il gateway del provider&lt;br /&gt;
* utilizzare il gateway del tunnel broker solo per instradare i pacchetti della rete virtuale /48 che è stata assegnata&lt;br /&gt;
&lt;br /&gt;
Al GOLEM abbiamo fatto questa seconda scelta.&lt;br /&gt;
Perciò, '''non''' si deve aggiungere il gateway del tunnel broker come default gateway della configurazione in ''/etc/network/interfaces'', ma si deve aggiungere una regola di routing a mano per la sottorete del GOLEM, di fatto implementando ''source routing''.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Chiamasi ''source routing'' l'instradamento dei pacchetti fatto in base al loro indirizzo sorgente e non quello di destinazione, che è il modo standard&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
1. Modificare ''/etc/iproute2/rt_tables'' aggiungendo una nuova tabella di routing:&lt;br /&gt;
 200	golemsix&lt;br /&gt;
&lt;br /&gt;
2. Aggiungere il routing dei pacchetti provenienti dalla sottorete del GOLEM automaticamente al post-up dell'interfaccia del tunnel in ''/etc/network/interfaces'':&lt;br /&gt;
  	post-up ip -6 rule add from 2001:470:c844::/48 table golemsix &amp;amp;&amp;amp; ip -6 route add default via 2001:470:1f12:69::1 dev he6in4 table golemsix &amp;amp;&amp;amp; ip -6 route flush cache&lt;br /&gt;
 	pre-down ip -6 route del default via 2001:470:1f12:69::1 dev he6in4 table golemsix &amp;amp;&amp;amp; ip -6 rule del from 2001:470:c844::/48 table golemsix &amp;amp;&amp;amp; ip -6 route flush cache&lt;br /&gt;
&lt;br /&gt;
=== Piano di indirizzamento ===&lt;br /&gt;
Chiamarlo ''piano di indirizzamento'' è fargli un complimento immeritato; chiamiamola ''guida ragionata all'assegnazione dei nostri indirizzi''.&lt;br /&gt;
&lt;br /&gt;
Sia dato l'indirizzo IPv6:&lt;br /&gt;
&lt;br /&gt;
 127                   79     63                         0&lt;br /&gt;
     2001 : 0470 : c844 : rrrr : xxxx : xxxx : xxxx : xxxx&lt;br /&gt;
&lt;br /&gt;
Siccome abbiamo 80 bit a disposizione e la rete più piccola che possiamo fare secondo RFC è di 64 bit, possiamo fare ben &amp;lt;math&amp;gt;2^{16}&amp;lt;/math&amp;gt; reti (''rrrr'' nell'esempio).&lt;br /&gt;
Per semplicità (perché alla fine è a questo che servono tutti questi indirizzi in IPv6), poniamo ''rrrr'' = ''uugy'', dove:&lt;br /&gt;
* ''uu'' (8 bit) identifica l'''utente'';&lt;br /&gt;
* ''g'' (4 bit) identifica il gateway dell'utente (&amp;lt;math&amp;gt;2^4&amp;lt;/math&amp;gt; = 16 gateway per utente)&lt;br /&gt;
* ''y'' (4 bit) identifica la ''sottorete personale'' di quel gateway dell'utente (&amp;lt;math&amp;gt;2^4&amp;lt;/math&amp;gt; = 16 sottoreti per gateway)&lt;br /&gt;
&lt;br /&gt;
Il VPS instrada direttamente tutta la sottorete /60 verso il gateway dell'utente, il quale può decidere di suddividerla come preferisce su quel gateway, da un unica grande rete /60, a 16 &amp;quot;piccole&amp;quot; reti /64.&lt;br /&gt;
&lt;br /&gt;
Sono così riservate:&lt;br /&gt;
 00gy indirizzi di servizio per l'infrastruttura (OpenVPN)&lt;br /&gt;
 01gy indirizzi di servizio per l'infrastruttura (Wireguard)&lt;br /&gt;
 02gy Officina (16 gateway × 16 reti)&lt;br /&gt;
 03gy Socio-A (16 gateway × 16 reti)&lt;br /&gt;
 04gy Socio-B (16 gateway × 16 reti)&lt;br /&gt;
 05gy ...&lt;br /&gt;
&lt;br /&gt;
Il ''numero di rete'' &amp;lt;code&amp;gt;rrrr&amp;lt;/code&amp;gt; sarà usato:&lt;br /&gt;
* per instradare tutto il traffico diretto a &amp;lt;code&amp;gt;2001:470:c844:rrg0::/60&amp;lt;/code&amp;gt; verso il gateway dell'utente;&lt;br /&gt;
* per assegnare l'indirizzo &amp;lt;code&amp;gt;2001:470:c844::rrg0/64&amp;lt;/code&amp;gt; al gateway dell'utente nella rete di servizio;&lt;br /&gt;
Si noti la &amp;quot;piccola&amp;quot; differenza.&lt;br /&gt;
&lt;br /&gt;
Per esempio, supponiamo di voler attivare ''serverozzo'', per il quale:&lt;br /&gt;
* ''uu = 02'' (''02'' è l'utente ''Officina'')&lt;br /&gt;
* ''g = 0'' (''0'' il primo &amp;amp;mdash; e al momento unico &amp;amp;mdash; gateway in Officina)&lt;br /&gt;
allora:&lt;br /&gt;
* serverozzo avrà indirizzo &amp;lt;code&amp;gt;2001:470:c844::200/64&amp;lt;/code&amp;gt; lato VPN;&lt;br /&gt;
* tutto il traffico per &amp;lt;code&amp;gt;2001:470:c844:200::/60&amp;lt;/code&amp;gt; verrà instradato verso serverozzo;&lt;br /&gt;
&lt;br /&gt;
E su serverozzo potranno essere create fino a 16 reti, per esempio:&lt;br /&gt;
* per la rete cablata Ethernet dell'Officina (&amp;lt;code&amp;gt;2001:470:c844:200::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;ethI&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per la rete wireless dell'Officina (&amp;lt;code&amp;gt;2001:470:c844:201::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;wlan0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per la rete cablata bus RS-485 (&amp;lt;code&amp;gt;2001:470:c844:202::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;ttyS0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per le macchine virtuali su KVM (&amp;lt;code&amp;gt;2001:470:c844:203::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;vir0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per le macchine virtuali su docker (&amp;lt;code&amp;gt;2001:470:c844:204::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* ...&lt;br /&gt;
'''Nota:''' questo è solo un esempio, la configurazione finale su serverozzo è ancora in fase di definizione.&lt;br /&gt;
&lt;br /&gt;
Nella prima rete di servizio (&amp;lt;code&amp;gt;2001:470:c844::/64&amp;lt;/code&amp;gt;) ci sono:&lt;br /&gt;
* il VPS&lt;br /&gt;
* tutti i gateway&lt;br /&gt;
** per esempio, serverozzo&lt;br /&gt;
** per esempio, i gateway dei soci&lt;br /&gt;
I gateway dei soci non sono diversi da serverozzo, e tuttavia la loro configurazione può essere più semplice se invece che da gateway fungono come semplici end-point.&lt;br /&gt;
&lt;br /&gt;
Così organizzate, le risorse si esauriranno in questo ordine:&lt;br /&gt;
* la banda a disposizione del VPS (500M/500M);&lt;br /&gt;
* la capacità computazionale e di memoria del VPS per l'inoltro dei pacchetti;&lt;br /&gt;
* gli IPv6 (gli IPv6 non finiranno mai)&lt;br /&gt;
&lt;br /&gt;
Non essendo una rete a maglie, ma semplicemente un albero, il routing è definito staticamente.&lt;br /&gt;
Se la rete si evolverà e le singole &amp;quot;isole&amp;quot; dovessero iniziare a connettersi a maglia in maniera incontrollata, potranno essere impiegati algoritmi dinamici, ma considerata la dimensione del bacino di utenti, non dovrebbe essere necessario.&lt;br /&gt;
&lt;br /&gt;
== Installazione del server ==&lt;br /&gt;
La VPN del GOLEM può essere utilizzata per la navigazione in IPv6.&lt;br /&gt;
La VPN è realizzata per mezzo di Wireguard.&lt;br /&gt;
&lt;br /&gt;
A differenza di altri protocolli, come OpenVPN, Wireguard ha un approccio &amp;quot;peer to peer&amp;quot;, per cui la procedura di configurazione del server rispecchia per buona parte quella di ciascun client.&lt;br /&gt;
&lt;br /&gt;
Innanzitutto è necessario generare la coppia di chiavi pubblica/privata del server:&lt;br /&gt;
&lt;br /&gt;
 # wg genkey | tee /etc/wireguard/server.privkey | wg pubkey &amp;gt; /etc/wireguard/vpn.golem.linux.it.pubkey&lt;br /&gt;
&lt;br /&gt;
Per la configurazione è sufficiente creare un singolo file, ad esempio &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # Carica la chiave privata dal percorso dove la abbiamo generata precedentemente&lt;br /&gt;
 PostUp = wg set %i private-key /etc/wireguard/vpn.golem.linux.it.privkey&lt;br /&gt;
 # Porta UDP di ascolto del server, a piacere&lt;br /&gt;
 ListenPort = 51820&lt;br /&gt;
 # Indirizzo del server all'interno della VPN&lt;br /&gt;
 Address = 2001:470:c844:100::1&lt;br /&gt;
&lt;br /&gt;
Il server può essere avviato tramite ''systemd'', e con lo stesso sistema si può impostare l'avvio automatico.&lt;br /&gt;
Si noti che &amp;lt;code&amp;gt;@wg0&amp;lt;/code&amp;gt; corrisponde al file di configurazione precedentemente creato.&lt;br /&gt;
&lt;br /&gt;
 # systemctl start wg-quick@wg0&lt;br /&gt;
 # systemctl enable wg-quick@wg0&lt;br /&gt;
&lt;br /&gt;
== Aggiunta di un nuovo client ==&lt;br /&gt;
=== Configurazione lato server ===&lt;br /&gt;
il sysop aggiunge un blocco peer per ciascun client alla configurazione &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;, così:&lt;br /&gt;
&lt;br /&gt;
 ... altri client ...&lt;br /&gt;
 &lt;br /&gt;
 # porceddu.net.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = tHeClIeNtFaNtAsTiCpUbLiCkEy=&lt;br /&gt;
 AllowedIPs = 2001:470:c844:100::200/128, 2001:470:c844:200::/62&lt;br /&gt;
 &lt;br /&gt;
 ... altri client ...&lt;br /&gt;
&lt;br /&gt;
Altro che OpenVPN.&lt;br /&gt;
&lt;br /&gt;
=== Configurazione lato client ===&lt;br /&gt;
1. Lato client, generare una coppia di chiavi pubblica/privata e inviare la chiave pubblica al sysop.&lt;br /&gt;
&lt;br /&gt;
 $ wg genkey | tee client.example.com.privkey | wg pubkey &amp;gt; client.example.com.pubkey&lt;br /&gt;
&lt;br /&gt;
Il sysop si occuperà di aggiungere la chiave pubblica tra quelle consentite al server, sceglierà un indirizzo IP in base al piano di indirizzamento, e ve lo comunicherà.&lt;br /&gt;
&lt;br /&gt;
2. Creare un file di configurazione come segue, in cui scrivere opportunamente la vostra chiave privata e l'indirizzo IP assegnato. Prestare particolare attenzione a modificare i campi della sezione &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt;, come indicato nelle note.&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # PrivateKey = YoUrGoRgEoUsAnDsEcUrEpRiVaTeKeY=               # vedi note, scegliere questo...&lt;br /&gt;
 # PostUp = wg set %i private-key ./client.example.com.privkey # vedi note,                 ...oppure questo&lt;br /&gt;
 Address = 2001:470:c844:100::'''200'''/64                           # vedi note&lt;br /&gt;
 &lt;br /&gt;
 # vpn.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = w63aGvoyPaUTgA8nW/NJS6Qqp2hUFvHRBbIH8Qb5ISY=   &lt;br /&gt;
 AllowedIPs = 2000::/3                                      &lt;br /&gt;
 Endpoint = vpn.golem.linux.it:51280&lt;br /&gt;
 PersistentKeepalive = 37&lt;br /&gt;
&lt;br /&gt;
'''Note'''&lt;br /&gt;
* &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''locale'')&lt;br /&gt;
** scegliere una delle seguenti opzioni per indicare la chiave privata del client, scommentando la riga apposita.&lt;br /&gt;
*** ''PrivateKey'': chiave privata del client, da custodire con cura, inline&lt;br /&gt;
*** ''PostUp = command'': chiave privata del client, da custodire con cura, e caricata automaticamente da un file esterno (es. creato col comando mostrato in precedenza)&lt;br /&gt;
** ''Address'': indirizzo IP comunicato dal sysop: riportarlo accuratamente, altrimenti non sarà possibile utilizzare la VPN&lt;br /&gt;
* &amp;lt;code&amp;gt;[Peer]&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''remoto'' / server)&lt;br /&gt;
** ''PublicKey'': chiave pubblica del server (sì, è proprio quella)&lt;br /&gt;
** ''AllowedIPs'': indirizzi raggiungibili tramite la VPN, a scelta:&lt;br /&gt;
*** &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;: solo la [[IPv6 @ GOLEM | rete IPv6 virtuale del GOLEM]]&lt;br /&gt;
*** &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;: tutti gli indirizzi IPv6 (è possibile utilizzare la VPN del GOLEM per [[IPv6 @ GOLEM | navigare ''davvero'' in IPv6]])&lt;br /&gt;
** ''Endpoint'': indirizzo del server&lt;br /&gt;
** ''PersistentKeepalive'': timer per mantenimento del tunnel attivo (in secondi); particolarmente utile se l'indirizzo IP del client cambia o è soggetto a NAT&lt;br /&gt;
&lt;br /&gt;
La connessione può essere attivata tramite systemd come sul server (spostandola in ''/etc/wireguard/''), oppure manualmente utilizzando &amp;lt;code&amp;gt;wg-quick&amp;lt;/code&amp;gt;:&lt;br /&gt;
* Attivazione del tunnel&lt;br /&gt;
 wg-quick up client.example.conf&lt;br /&gt;
* Disattivazione del tunnel&lt;br /&gt;
 wg-quick down client.example.conf&lt;br /&gt;
&lt;br /&gt;
3. Provare il collegamento&lt;br /&gt;
 # ping 2001:470:c844:100::1    # server VPN, dentro al tunnel (per verificare se il collegamento funziona)&lt;br /&gt;
 # ping 2001:470:c844:100::200  # gateway in Officina (per verificare se il collegamento funziona; talvolta non raggiungibile se abbiamo staccato la luce)&lt;br /&gt;
 # ping ipv6.google.com         # per verificare l'accessibilità dell'Internet pubblico IPv6, nel caso non si abbia già accesso&lt;br /&gt;
&lt;br /&gt;
4. Successo!&lt;br /&gt;
* Se il client OpenVPN è un nodo foglia della rete, cioè non funge da gateway perché si deve collegare solo lui (es. smartphone), allora c'è già connettività IPv6 e non serve fare altro. È comunque consigliato leggere la sezione relativa al [[#Firewall | firewall]] per ragioni di sicurezza ed eventualmente attivarlo.&lt;br /&gt;
* Se invece il client è il gateway della rete IPv6 (es. ''serverozzo'', o il router di casa di uno dei soci che vuole navigare in IPv6), allora bisogna configurarlo come indicato nella [[#Client_VPN_come_gateway | sezione apposita]].&lt;br /&gt;
&lt;br /&gt;
== Client VPN come gateway ==&lt;br /&gt;
=== Impostare il client VPN come gateway IPv6 per l'isola ===&lt;br /&gt;
==== Abilitare inoltro pacchetti IPv6 ====&lt;br /&gt;
Nel file ''/etc/sysctl.conf'':&lt;br /&gt;
 net.ipv6.conf.all.forwarding=1&lt;br /&gt;
&lt;br /&gt;
==== Installare e configurare radvd ====&lt;br /&gt;
''radvd'' è il demone di ''router advertisement''.&lt;br /&gt;
Per la configurazione automatica degli indirizzi e del gateway in IPv6 non è necessario un ''complesso'' server DHCP, ma vista la vastità dello spazio di indirizzamento (anche la rete più piccola ha ben &amp;lt;math&amp;gt;2^{64}&amp;lt;/math&amp;gt; indirizzi disponibili) basta il più semplice ''radvd''.&lt;br /&gt;
Un router con ''radvd'', a intervalli regolari, trasmette un messaggio in broadcast a tutti gli host della rete, informandoli sul prefisso di rete da utilizzare; a questo punto gli host possono autoconfigurarsi col metodo che preferiscono (es. [https://tools.ietf.org/search/rfc4862 SLAAC] con o senza [https://tools.ietf.org/html/rfc4941.html estensione per la privacy]).&lt;br /&gt;
&lt;br /&gt;
Installare ''radvd'':&lt;br /&gt;
 # apt install radvd&lt;br /&gt;
&lt;br /&gt;
Configurare il file ''/etc/radvd.conf'':&lt;br /&gt;
 interface ethI {&lt;br /&gt;
         AdvSendAdvert on;&lt;br /&gt;
         MinRtrAdvInterval 2;&lt;br /&gt;
         MaxRtrAdvInterval 10;&lt;br /&gt;
         prefix 2001:db8::/64 {&lt;br /&gt;
                 AdvOnLink on;&lt;br /&gt;
                 AdvAutonomous on;&lt;br /&gt;
                 AdvRouterAddr on;&lt;br /&gt;
         };&lt;br /&gt;
         RDNSS 2606:4700:4700::1111 {&lt;br /&gt;
                 AdvRDNSSLifetime 3600;&lt;br /&gt;
         };&lt;br /&gt;
 };&lt;br /&gt;
dove&lt;br /&gt;
* &amp;lt;code&amp;gt;interface br0&amp;lt;/code&amp;gt; indica l'interfaccia interna su cui fare ''advertise'';&lt;br /&gt;
* &amp;lt;code&amp;gt;prefix 2001:db8::/64&amp;lt;/code&amp;gt; indica la rete a valle;&lt;br /&gt;
* &amp;lt;code&amp;gt;RDNSS 2606:4700:4700::1111&amp;lt;/code&amp;gt; indica il server DNS (nell'esempio specifico, CloudFlare);&lt;br /&gt;
** ''Nota:'' in seguito a questioni legali, OpenDNS non è al momento disponibile in Francia.&lt;br /&gt;
&lt;br /&gt;
== Firewall ==&lt;br /&gt;
=== Per il VPS ===&lt;br /&gt;
Inoltrare solo i pacchetti da/per le reti note.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text=Non ancora testato!&lt;br /&gt;
}}&lt;br /&gt;
 # ip6tables -A FORWARD -d 2001:470:c844::/48 -i he6in4 -j ACCEPT&lt;br /&gt;
 # ip6tables -A FORWARD -s 2001:470:c844::/48 -o he6in4 -j ACCEPT&lt;br /&gt;
 # ip6tables -P FORWARD DROP&lt;br /&gt;
&lt;br /&gt;
=== Per i client ===&lt;br /&gt;
Gli indirizzi IPv6 sono &amp;quot;tutti&amp;quot; pubblici. Gli indirizzi IPv6 forniti dal GOLEM sono pubblicamente instradabili. In più, il GOLEM non mette in atto '''nessuna''' misura atta a prevenire connessioni dirette verso gli host della VPN (al netto di configurazioni specifiche sulle macchine direttamente di proprietà del GOLEM).&lt;br /&gt;
Ciò significa che '''tutti''' gli host degli utenti/soci, compresi quelli domestici che sin'ora sono stati dietro a un (s)comodo NAT, possono essere acceduti attraverso la rete Internet globale, quando sono connessi alla VPN del GOLEM.&lt;br /&gt;
&lt;br /&gt;
Pertanto, è consigliato attivare degli strumenti atti a prevenire accessi indesiderati dall'esterno, come un firewall, in special modo se il proprio computer &amp;quot;fornisce servizi&amp;quot; (eg. condivisione di file via rete, server web di sviluppo, ...)&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text='''Nota bene''': salvare queste impostazioni, per esempio con &amp;lt;code&amp;gt;ip6tables-save&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;ip6tables-restore&amp;lt;/code&amp;gt;, altrimenti verranno perse al riavvio.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Direttamente sull'host ====&lt;br /&gt;
Si può agire direttamente sugli host da proteggere (versione conservativa):&lt;br /&gt;
 # ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # ip6tables -A INPUT -p icmpv6 -j ACCEPT&lt;br /&gt;
 # ip6tables -P INPUT DROP&lt;br /&gt;
&lt;br /&gt;
In generale con Linux questa operazione non è comunque necessaria, perché tanto non vi sono servizi esposti a meno che non siano stati installati esplicitamente.&lt;br /&gt;
Si noti che ICMPv6 deve comunque sempre essere abilitato in quanto necessario al funzionamento di IPv6.&lt;br /&gt;
&lt;br /&gt;
Si può anche utilizzare una regola più rilassata (es. per sfruttare la VPN del GOLEM come VPN &amp;quot;personale&amp;quot; tra i propri host), tipo:&lt;br /&gt;
 # ip6tables -A INPUT -s 2001:470:c844:uu00::/56 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=I pacchetti della VPN viaggiano crittografati sulla rete pubblica (almeno finché si trovano all'interno della VPN del GOLEM), ma sul server vengono decifrati e cifrati di nuovo per permetterne il routing!&lt;br /&gt;
In caso di compromissione del VPS del GOLEM, pertanto, i pacchetti non possono essere considerati al sicuro da sguardi indiscreti. È sempre buona norma utilizzare crittografia end-to-end, anche all'interno di una VPN.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Dal gateway ====&lt;br /&gt;
Invece di configurare il firewall su ogni host singolarmente, si può configurare il gateway una volta sola per proteggere tutta la rete a valle:&lt;br /&gt;
 # ip6tables -A FORWARD -s 2001:470:c844:rrrr::/64 -j ACCEPT&lt;br /&gt;
 # ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # ip6tables -P FORWARD DROP&lt;br /&gt;
&lt;br /&gt;
Nell'ordine:&lt;br /&gt;
* blocca l'inoltro di tutti i pacchetti&lt;br /&gt;
* abilita l'inoltro dei pacchetti in uscita dalla rete&lt;br /&gt;
* abilita l'inoltro dei pacchetti correlati a connessioni già stabilite&lt;br /&gt;
&lt;br /&gt;
Questo impedisce l'accesso indesiderato a tutti gli host della rete, compresi gli host con Windows che possono starsene &amp;quot;sicuri&amp;quot; anche senza il firewall, pur esponendo servizi (NetBIOS, Samba).&lt;br /&gt;
&lt;br /&gt;
===== Eccezioni =====&lt;br /&gt;
Se si desidera comunque rendere accessibile un proprio server in particolare, è possibile istruire il gateway con un'eccezione, aggiungendo:&lt;br /&gt;
 # ip6tables -A FORWARD -d 2001:470:c844:rrrr::host -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
Questo è qualcosa che &amp;quot;assomiglia&amp;quot; vagamente al vecchio ''port forwarding''.&lt;br /&gt;
&lt;br /&gt;
=== Torrent ===&lt;br /&gt;
La banda è limitata, e non è consentito traffico di materiale illegale. Occore limitare il traffico ''bit-torrent'' almeno al gateway finale (VPS).&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text=TODO: Questa sezione è da fare!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Risoluzione problemi =&lt;br /&gt;
== Geolocalizzazione ==&lt;br /&gt;
Il tunnel è localizzato in Francia.&lt;br /&gt;
A causa di restrizioni imposte a causa del diritto d'autore, alcuni siti, specialmente di streaming video, come Netflix, Rai.tv o Youtube, potrebbero bloccare l'accesso ai contenuti italiani dal tunnel francese.&lt;br /&gt;
Per inibire temporaneamente l'uso del tunnel IPv6 su un host:&lt;br /&gt;
 # sysctl -w net.ipv6.conf.all.disable_ipv6=1&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Howto]]&lt;br /&gt;
[[Categoria:Officina]]&lt;br /&gt;
[[Category:Sysop]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=IPv6_@_GOLEM&amp;diff=9480</id>
		<title>IPv6 @ GOLEM</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=IPv6_@_GOLEM&amp;diff=9480"/>
		<updated>2024-11-01T10:37:58Z</updated>

		<summary type="html">&lt;p&gt;Giomba: /* Iniziare: rete /64 - specificare l'utilizzo del default gateway, riportando anche la configurazione attualizzata */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Due parole su questa pagina ==&lt;br /&gt;
Questa pagina è un maldestro tentativo:&lt;br /&gt;
* per riassumere le ragioni che ci hanno portato a decidere di dotarci di IPv6;&lt;br /&gt;
* per documentare la nostra infrastruttura di rete;&lt;br /&gt;
&lt;br /&gt;
=== A chi si rivolge questa pagina ===&lt;br /&gt;
* se sei l''''amministratore di rete''', buona lettura :-)&lt;br /&gt;
* se sei un '''socio''', vedi come [[#Configurazione_lato_client | configurare il tuo client]]; è sufficiente leggere solo questo paragrafo.&lt;br /&gt;
&lt;br /&gt;
== Due parole sull'IPv6 ==&lt;br /&gt;
[https://it.wikipedia.org/wiki/IPv6 IPv6] è un &amp;quot;nuovo&amp;quot; protocollo a livello di rete che da diversi anni sta sostituendo IPv4.&lt;br /&gt;
Le novità introdotte da IPv6 sono molteplici; tra queste, quella che balza immediatamente all'occhio è l'enorme dimensione dello spazio di indirizzamento.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Protocollo'''&lt;br /&gt;
| '''lunghezza indirizzo'''&lt;br /&gt;
| '''numero indirizzi'''&lt;br /&gt;
|-&lt;br /&gt;
| IPv4&lt;br /&gt;
| 32 bit&lt;br /&gt;
| &amp;lt;math&amp;gt;2^{32}&amp;lt;/math&amp;gt; = 4 miliardi&lt;br /&gt;
|-&lt;br /&gt;
| IPv6&lt;br /&gt;
| 128 bit&lt;br /&gt;
| &amp;lt;math&amp;gt;2^{128}&amp;lt;/math&amp;gt; = 256 miliardi di miliardi di miliardi di miliardi&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Su questo pianeta vi sono circa 8 miliardi di persone [https://it.wikipedia.org/wiki/Popolazione_mondiale], di cui la metà [http://www.lastampa.it/2018/01/31/tecnologia/gli-utenti-di-internet-sono-pi-di-quattro-miliardi-nel-mondo-milioni-in-italia-wMxQskzXeabwa3wgWI2jUO/pagina.html] è connessa a Internet, e nei paesi sviluppati hanno anche più di un dispositivo connesso. Si aggiungano i numerosissimi apparati di rete e server necessari per il funzionamento dell'infrastruttura e la fornitura di servizi, e si può facilmente intuire che IPv4 non è più sufficiente per le attuali necessità.&lt;br /&gt;
&lt;br /&gt;
Mentre questa pagina veniva scritta, gli IPv4 stavano finendo [https://en.wikipedia.org/wiki/IPv4_address_exhaustion].&lt;br /&gt;
Nel novembre 2019, il RIPE (il registro europeo) ha terminato l'assegnazione degli ultimi indirizzi IPv4 assegnati all'Europa, [https://www.ripe.net/publications/ipv6-info-centre/about-ipv6/ipv4-exhaustion/ipv4-available-pool] e adesso vengono solo riutilizzati quelli vecchi, che significa che:&lt;br /&gt;
* non ci sono più indirizzi &amp;quot;nuovi&amp;quot; e dunque non è più possibile richiederli con facilità;&lt;br /&gt;
* se si vogliono degli indirizzi IPv4, si viene messi in lista d'attesa, finché il precedente proprietario fallisce e rilascia i propri.&lt;br /&gt;
&lt;br /&gt;
=== IPv4 vs IPv6 ===&lt;br /&gt;
==== Notazione ====&lt;br /&gt;
* IPv4 &amp;amp;rarr; 4 byte rappresentati con numeri decimali separati da un punto, es: &amp;lt;code&amp;gt;192.0.2.127&amp;lt;/code&amp;gt;&lt;br /&gt;
* IPv6 &amp;amp;rarr; 16 byte, ogni byte è rappresentato da due cifre esadecimali; ogni 4 cifre esadecimali si inseriscono i ''due punti'' &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;; come in IPv4 è possibile omettere gli zeri in testa; la più lunga sequenza di zeri allineata a 4 può essere omessa per intero; esempi (indirizzi equivalenti):&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:0470:c844:0020:0000:0000:0000:0001&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:470:c844:20:0:0:0:1&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;2001:470:c844:20::1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tipi di indirizzi ====&lt;br /&gt;
* IPv6 Reference Card by RIPE [https://www.ripe.net/manage-ips-and-asns/ipv6/ipv6-address-types/ipv6_reference_card_July2015.pdf]&lt;br /&gt;
&lt;br /&gt;
Riassunto:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''IPv6'''&lt;br /&gt;
| '''Equivalente IPv4'''&lt;br /&gt;
| '''Significato'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;::1/128&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo loopback&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fc00::/7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;192.168.0.0/16&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;10.0.0.0/8&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;172.16.0.0/12&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo privato&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fe80::/10&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;169.254.0.0/16&amp;lt;/code&amp;gt;&lt;br /&gt;
| Indirizzo link-local (univoco nella rete locale, e autoassegnato)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2001:db8::/32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;192.0.2.0/24&amp;lt;/code&amp;gt;&lt;br /&gt;
| Esempi e documentazione&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| Indirizzi unicast globalmente raggiungibili&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Indirizzi pubblici vs privati ====&lt;br /&gt;
Gli IPv6 sono così tanti che non c'è bisogno di utilizzare indirizzi privati: niente NAT, niente port-forwarding. Questo restituisce connettività end-to-end ai dispositivi e apre numerose nuove possibilità di impiego, rimaste nascoste per anni a causa della scarsità di IPv4 e degli osceni espedienti inventati. Una banalità: non sarà più necessario passare attraverso un server terzo per condividere documenti, chattare o telefonare ai propri contatti.&lt;br /&gt;
&lt;br /&gt;
Se necessarie, le caratteristiche di &amp;quot;sicurezza&amp;quot; introdotte dal NAT possono essere sostituite e accorpate a un banale firewall.&lt;br /&gt;
&lt;br /&gt;
==== Progettazione di una rete ====&lt;br /&gt;
Nel progettare una rete con IPv4, la necessità principale è quella di risparmiare sugli indirizzi, perciò vengono usati prefissi di rete di varia lunghezza.&lt;br /&gt;
Nel progettare una rete con IPv6, si hanno a disposizione così tanti indirizzi che conviene utilizzarli in maniera da renderne più agevole una distribuzione logica.&lt;br /&gt;
&lt;br /&gt;
Sono così identificate le seguenti dimensioni standard per le reti IPv6 (nulla vieta di usare dimensioni personalizzate):&lt;br /&gt;
* '''/126''': contiene 2 soli host, utilizzata per i collegamenti punto-punto nell'infrastruttura di rete;&lt;br /&gt;
* '''/64''': è la più piccola rete che dovrebbe essere fatta; dimensione utilizzata nelle LAN; lo spazio di indirizzamento è esageratamente sovradimensionato ed è sufficiente per qualunque LAN immaginabile (è 4 miliardi di volte più grande di tutta la rete Internet IPv4); viene usata in ambito domestico;&lt;br /&gt;
* '''/56''': contiene 256 reti di dimensione /64, viene usata in ambito domestico o per piccole imprese;&lt;br /&gt;
* '''/48''': contiene 65536 reti di dimensione /64, viene usata in ambito aziendale;&lt;br /&gt;
&lt;br /&gt;
Le LAN non devono avere un prefisso più lungo di /64, perché molte nuove funzionalità introdotte con IPv6 (es SLAAC, Privacy Extension, ...), e anche funzionalità che saranno introdotte in futuro, daranno per scontato che le reti abbiano almeno questa dimensione.&lt;br /&gt;
&lt;br /&gt;
=== Ottenere connettività IPv6 ===&lt;br /&gt;
* si può richiedere nativamente al proprio ISP. Quando è stata scritta questa pagina, in Italia non erano molti gli operatori che fornivano connettività IPv6 nativa; adesso sono di più, perché gli IPv4 sono finiti, e non sarebbe altrimenti possibile fare business, ma alcuni operatori (specialmente quelli più grandi e noti), ancora non forniscono connettività IPv6 nativa;&lt;br /&gt;
* si possono fare dei tunnel che veicolano il traffico IPv6 all'interno dei pacchetti IPv4 (sprecando un po' di banda);&lt;br /&gt;
&lt;br /&gt;
Tunnel:&lt;br /&gt;
* pro:&lt;br /&gt;
** molti sono gratuiti;&lt;br /&gt;
* contro:&lt;br /&gt;
** spreco di banda per incapsulare i pacchetti (qualche decina di byte in più per ogni pacchetto, circa 20 ogni 1500);&lt;br /&gt;
** maggiore latenza;&lt;br /&gt;
** alcuni richiedono un indirizzo IPv4 statico; altri richiedono complicate configurazioni per l'uso con indirizzi dinamici;&lt;br /&gt;
** alcuni non funzionano dietro NAT (la quasi totalità delle reti domestiche);&lt;br /&gt;
&lt;br /&gt;
== Considerazioni e descrizione generale ==&lt;br /&gt;
&lt;br /&gt;
Come portare IPv6 al GOLEM?&lt;br /&gt;
&lt;br /&gt;
È stato realizzato un tunnel tra un intermediario e il nostro VPS. L'intermediario inoltra al VPS tutti i pacchetti destinati alla nostra rete.&lt;br /&gt;
La nostra rete viene scomposta in sottoreti: una rete di backbone, una per l'officina e una per ogni altro punto di accesso necessario, es. uno per ogni abitazione dei soci.&lt;br /&gt;
Il VPS conosce le rotte per raggiungere ogni singola sottorete e inoltra i pacchetti che riceve dall'intermediario verso il giusto router di ogni punto di accesso.&lt;br /&gt;
Il router del punto di accesso inoltra i pacchetti allo specifico host destinatario.&lt;br /&gt;
&lt;br /&gt;
Si procede analogamente a ritroso.&lt;br /&gt;
&lt;br /&gt;
In figura è mostrata la prima versione di visione ''logica'' della rete realizzata:&lt;br /&gt;
* '''HE''' (Hurricane Electric) è il provider fornitore IPv6;&lt;br /&gt;
* '''OVH''' è il nostro provider per il VPS;&lt;br /&gt;
* '''VPS''' è il nostro VPS;&lt;br /&gt;
* '''serverozzo''' è il gateway in [[Officina Informatica]];&lt;br /&gt;
&lt;br /&gt;
Per permettere il collegamento tra il VPS e un punto di accesso (anche noto in questa pagina come ''gateway dell'utente''), non essendo possibile stendere dei cavi fisici in giro per l'Europa, utilizzeremo la nostra VPN.&lt;br /&gt;
Esistono delle pagine dedicate per la documentazione sulla [[Rete del GOLEM]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tunnel-ipv6.jpeg|Il primo prototipo della rete del GOLEM, con la VPN e il tunnel IPv6.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Iniziare: rete /64 ==&lt;br /&gt;
Sono l'amministratore di rete e voglio attivare il tunnel IPv6 per la prima volta. Come iniziare?&lt;br /&gt;
&lt;br /&gt;
Ci si registra su [https://tunnelbroker.net/ TunnelBroker] e viene assegnata d'ufficio una rete IPv6 ''/64''.&lt;br /&gt;
&lt;br /&gt;
Il broker comunica i dettagli del suo PoP (''Point of Presence''):&lt;br /&gt;
 IPv4: 216.66.84.42&lt;br /&gt;
 IPv6: 2001:470:1f12:69::1&lt;br /&gt;
&lt;br /&gt;
L'IPv6 sarà utilizzato sul collegamento ''tunnel virtuale'', collegato all'interfaccia del VPS che chiameremo ''he6in4''. Dalla nostra parte, ''he6in4'' avrà come indirizzo &amp;lt;code&amp;gt;2001:470:1f12:69::2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Attiviamo il tunnel, aggiungendo questo al ''/etc/network/interfaces'':&lt;br /&gt;
&lt;br /&gt;
 auto he6in4&lt;br /&gt;
 iface he6in4 inet6 v4tunnel&lt;br /&gt;
 	address 2001:470:1f12:69::2/64&lt;br /&gt;
         endpoint 216.66.84.42&lt;br /&gt;
         local 152.228.140.73&lt;br /&gt;
         ttl 255&lt;br /&gt;
&lt;br /&gt;
Se si vuole utilizzare il tunnel come default gateway, aggiungere anche:&lt;br /&gt;
 	gateway 2001:470:1f12:69::1&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning&lt;br /&gt;
|text=È possibile utilizzare un solo default gateway su Linux, perciò assicurarsi di non confliggere con la configurazione IPv6 del vostro provider (se c'è)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
e verificare la connettività tra il VPS e il PoP del broker con:&lt;br /&gt;
 $ ip -6 addr&lt;br /&gt;
 $ ping 2001:470:1f12:69::1&lt;br /&gt;
e la connettività con l'Internet IPv6 con:&lt;br /&gt;
 $ ping 2a00:1450:4002:80a::200e&lt;br /&gt;
che, per completezza, è l'IPv6 di &amp;lt;code&amp;gt;ipv6.google.com&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nella maggior parte dei casi il server DNS IPv4 usato sin'ora ha anche il supporto per risolvere nomi IPv6.&lt;br /&gt;
&lt;br /&gt;
Probabilmente però '''non''' si vorrà utilizzare questa configurazione, bensì sfruttare la rete /48 come spiegato nel prossimo paragrafo.&lt;br /&gt;
&lt;br /&gt;
== Rete /48 ==&lt;br /&gt;
Siccome una rete IPv6 fisica (per esempio, una rete domestica) ha dimensione /64, ma il GOLEM, a sua volta, diventa provider per i soci, noi vogliamo tante reti, per l'officina e per i soci, richiediamo manualmente una ''/48''. Non ci piace essere spreconi, ma ci piace rispettare ''anche'' le RFC: a new era of Internet: [https://tools.ietf.org/html/rfc3177] [https://tools.ietf.org/html/rfc5375#section-3.1]&lt;br /&gt;
&lt;br /&gt;
Ci è stata assegnata la rete &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;, che significa:&lt;br /&gt;
* tutto il traffico di Internet IPv6 diretto a un indirizzo che cade in 2001:470:c844::/48 verrà instradato verso il nostro VPS;&lt;br /&gt;
* abbiamo a disposizione ben &amp;lt;math&amp;gt;2^{80}&amp;lt;/math&amp;gt; indirizzi per pianificare la nostra rete come più ci aggrada;&lt;br /&gt;
&lt;br /&gt;
Lo so, dopo anni bui di NAT dopo NAT e carenza di indirizzi, questa sembra fantascienza.&lt;br /&gt;
&lt;br /&gt;
=== Piano di indirizzamento ===&lt;br /&gt;
Chiamarlo ''piano di indirizzamento'' è fargli un complimento immeritato; chiamiamola ''guida ragionata all'assegnazione dei nostri indirizzi''.&lt;br /&gt;
&lt;br /&gt;
Sia dato l'indirizzo IPv6:&lt;br /&gt;
&lt;br /&gt;
 127                   79     63                         0&lt;br /&gt;
     2001 : 0470 : c844 : rrrr : xxxx : xxxx : xxxx : xxxx&lt;br /&gt;
&lt;br /&gt;
Siccome abbiamo 80 bit a disposizione e la rete più piccola che possiamo fare secondo RFC è di 64 bit, possiamo fare ben &amp;lt;math&amp;gt;2^{16}&amp;lt;/math&amp;gt; reti (''rrrr'' nell'esempio).&lt;br /&gt;
Per semplicità (perché alla fine è a questo che servono tutti questi indirizzi in IPv6), poniamo ''rrrr'' = ''uugy'', dove:&lt;br /&gt;
* ''uu'' (8 bit) identifica l'''utente'';&lt;br /&gt;
* ''g'' (4 bit) identifica il gateway dell'utente (&amp;lt;math&amp;gt;2^4&amp;lt;/math&amp;gt; = 16 gateway per utente)&lt;br /&gt;
* ''y'' (4 bit) identifica la ''sottorete personale'' di quel gateway dell'utente (&amp;lt;math&amp;gt;2^4&amp;lt;/math&amp;gt; = 16 sottoreti per gateway)&lt;br /&gt;
&lt;br /&gt;
Il VPS instrada direttamente tutta la sottorete /60 verso il gateway dell'utente, il quale può decidere di suddividerla come preferisce su quel gateway, da un unica grande rete /60, a 16 &amp;quot;piccole&amp;quot; reti /64.&lt;br /&gt;
&lt;br /&gt;
Sono così riservate:&lt;br /&gt;
 00gy indirizzi di servizio per l'infrastruttura (OpenVPN)&lt;br /&gt;
 01gy indirizzi di servizio per l'infrastruttura (Wireguard)&lt;br /&gt;
 02gy Officina (16 gateway × 16 reti)&lt;br /&gt;
 03gy Socio-A (16 gateway × 16 reti)&lt;br /&gt;
 04gy Socio-B (16 gateway × 16 reti)&lt;br /&gt;
 05gy ...&lt;br /&gt;
&lt;br /&gt;
Il ''numero di rete'' &amp;lt;code&amp;gt;rrrr&amp;lt;/code&amp;gt; sarà usato:&lt;br /&gt;
* per instradare tutto il traffico diretto a &amp;lt;code&amp;gt;2001:470:c844:rrg0::/60&amp;lt;/code&amp;gt; verso il gateway dell'utente;&lt;br /&gt;
* per assegnare l'indirizzo &amp;lt;code&amp;gt;2001:470:c844::rrg0/64&amp;lt;/code&amp;gt; al gateway dell'utente nella rete di servizio;&lt;br /&gt;
Si noti la &amp;quot;piccola&amp;quot; differenza.&lt;br /&gt;
&lt;br /&gt;
Per esempio, supponiamo di voler attivare ''serverozzo'', per il quale:&lt;br /&gt;
* ''uu = 02'' (''02'' è l'utente ''Officina'')&lt;br /&gt;
* ''g = 0'' (''0'' il primo &amp;amp;mdash; e al momento unico &amp;amp;mdash; gateway in Officina)&lt;br /&gt;
allora:&lt;br /&gt;
* serverozzo avrà indirizzo &amp;lt;code&amp;gt;2001:470:c844::200/64&amp;lt;/code&amp;gt; lato VPN;&lt;br /&gt;
* tutto il traffico per &amp;lt;code&amp;gt;2001:470:c844:200::/60&amp;lt;/code&amp;gt; verrà instradato verso serverozzo;&lt;br /&gt;
&lt;br /&gt;
E su serverozzo potranno essere create fino a 16 reti, per esempio:&lt;br /&gt;
* per la rete cablata Ethernet dell'Officina (&amp;lt;code&amp;gt;2001:470:c844:200::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;ethI&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per la rete wireless dell'Officina (&amp;lt;code&amp;gt;2001:470:c844:201::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;wlan0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per la rete cablata bus RS-485 (&amp;lt;code&amp;gt;2001:470:c844:202::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;ttyS0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per le macchine virtuali su KVM (&amp;lt;code&amp;gt;2001:470:c844:203::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;vir0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* per le macchine virtuali su docker (&amp;lt;code&amp;gt;2001:470:c844:204::/64&amp;lt;/code&amp;gt; sull'interfaccia &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;);&lt;br /&gt;
* ...&lt;br /&gt;
'''Nota:''' questo è solo un esempio, la configurazione finale su serverozzo è ancora in fase di definizione.&lt;br /&gt;
&lt;br /&gt;
Nella prima rete di servizio (&amp;lt;code&amp;gt;2001:470:c844::/64&amp;lt;/code&amp;gt;) ci sono:&lt;br /&gt;
* il VPS&lt;br /&gt;
* tutti i gateway&lt;br /&gt;
** per esempio, serverozzo&lt;br /&gt;
** per esempio, i gateway dei soci&lt;br /&gt;
I gateway dei soci non sono diversi da serverozzo, e tuttavia la loro configurazione può essere più semplice se invece che da gateway fungono come semplici end-point.&lt;br /&gt;
&lt;br /&gt;
Così organizzate, le risorse si esauriranno in questo ordine:&lt;br /&gt;
* la banda a disposizione del VPS (500M/500M);&lt;br /&gt;
* la capacità computazionale e di memoria del VPS per l'inoltro dei pacchetti;&lt;br /&gt;
* gli IPv6 (gli IPv6 non finiranno mai)&lt;br /&gt;
&lt;br /&gt;
Non essendo una rete a maglie, ma semplicemente un albero, il routing è definito staticamente.&lt;br /&gt;
Se la rete si evolverà e le singole &amp;quot;isole&amp;quot; dovessero iniziare a connettersi a maglia in maniera incontrollata, potranno essere impiegati algoritmi dinamici, ma considerata la dimensione del bacino di utenti, non dovrebbe essere necessario.&lt;br /&gt;
&lt;br /&gt;
== Installazione del server ==&lt;br /&gt;
La VPN del GOLEM può essere utilizzata per la navigazione in IPv6.&lt;br /&gt;
La VPN è realizzata per mezzo di Wireguard.&lt;br /&gt;
&lt;br /&gt;
A differenza di altri protocolli, come OpenVPN, Wireguard ha un approccio &amp;quot;peer to peer&amp;quot;, per cui la procedura di configurazione del server rispecchia per buona parte quella di ciascun client.&lt;br /&gt;
&lt;br /&gt;
Innanzitutto è necessario generare la coppia di chiavi pubblica/privata del server:&lt;br /&gt;
&lt;br /&gt;
 # wg genkey | tee /etc/wireguard/server.privkey | wg pubkey &amp;gt; /etc/wireguard/vpn.golem.linux.it.pubkey&lt;br /&gt;
&lt;br /&gt;
Per la configurazione è sufficiente creare un singolo file, ad esempio &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # Carica la chiave privata dal percorso dove la abbiamo generata precedentemente&lt;br /&gt;
 PostUp = wg set %i private-key /etc/wireguard/vpn.golem.linux.it.privkey&lt;br /&gt;
 # Porta UDP di ascolto del server, a piacere&lt;br /&gt;
 ListenPort = 51820&lt;br /&gt;
 # Indirizzo del server all'interno della VPN&lt;br /&gt;
 Address = 2001:470:c844:100::1&lt;br /&gt;
&lt;br /&gt;
Il server può essere avviato tramite ''systemd'', e con lo stesso sistema si può impostare l'avvio automatico.&lt;br /&gt;
Si noti che &amp;lt;code&amp;gt;@wg0&amp;lt;/code&amp;gt; corrisponde al file di configurazione precedentemente creato.&lt;br /&gt;
&lt;br /&gt;
 # systemctl start wg-quick@wg0&lt;br /&gt;
 # systemctl enable wg-quick@wg0&lt;br /&gt;
&lt;br /&gt;
== Aggiunta di un nuovo client ==&lt;br /&gt;
=== Configurazione lato server ===&lt;br /&gt;
il sysop aggiunge un blocco peer per ciascun client alla configurazione &amp;lt;code&amp;gt;/etc/wireguard/wg0.conf&amp;lt;/code&amp;gt;, così:&lt;br /&gt;
&lt;br /&gt;
 ... altri client ...&lt;br /&gt;
 &lt;br /&gt;
 # porceddu.net.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = tHeClIeNtFaNtAsTiCpUbLiCkEy=&lt;br /&gt;
 AllowedIPs = 2001:470:c844:100::200/128, 2001:470:c844:200::/62&lt;br /&gt;
 &lt;br /&gt;
 ... altri client ...&lt;br /&gt;
&lt;br /&gt;
Altro che OpenVPN.&lt;br /&gt;
&lt;br /&gt;
=== Configurazione lato client ===&lt;br /&gt;
1. Lato client, generare una coppia di chiavi pubblica/privata e inviare la chiave pubblica al sysop.&lt;br /&gt;
&lt;br /&gt;
 $ wg genkey | tee client.example.com.privkey | wg pubkey &amp;gt; client.example.com.pubkey&lt;br /&gt;
&lt;br /&gt;
Il sysop si occuperà di aggiungere la chiave pubblica tra quelle consentite al server, sceglierà un indirizzo IP in base al piano di indirizzamento, e ve lo comunicherà.&lt;br /&gt;
&lt;br /&gt;
2. Creare un file di configurazione come segue, in cui scrivere opportunamente la vostra chiave privata e l'indirizzo IP assegnato. Prestare particolare attenzione a modificare i campi della sezione &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt;, come indicato nelle note.&lt;br /&gt;
&lt;br /&gt;
 [Interface]&lt;br /&gt;
 # PrivateKey = YoUrGoRgEoUsAnDsEcUrEpRiVaTeKeY=               # vedi note, scegliere questo...&lt;br /&gt;
 # PostUp = wg set %i private-key ./client.example.com.privkey # vedi note,                 ...oppure questo&lt;br /&gt;
 Address = 2001:470:c844:100::'''200'''/64                           # vedi note&lt;br /&gt;
 &lt;br /&gt;
 # vpn.golem.linux.it&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = w63aGvoyPaUTgA8nW/NJS6Qqp2hUFvHRBbIH8Qb5ISY=   &lt;br /&gt;
 AllowedIPs = 2000::/3                                      &lt;br /&gt;
 Endpoint = vpn.golem.linux.it:51280&lt;br /&gt;
 PersistentKeepalive = 37&lt;br /&gt;
&lt;br /&gt;
'''Note'''&lt;br /&gt;
* &amp;lt;code&amp;gt;Interface&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''locale'')&lt;br /&gt;
** scegliere una delle seguenti opzioni per indicare la chiave privata del client, scommentando la riga apposita.&lt;br /&gt;
*** ''PrivateKey'': chiave privata del client, da custodire con cura, inline&lt;br /&gt;
*** ''PostUp = command'': chiave privata del client, da custodire con cura, e caricata automaticamente da un file esterno (es. creato col comando mostrato in precedenza)&lt;br /&gt;
** ''Address'': indirizzo IP comunicato dal sysop: riportarlo accuratamente, altrimenti non sarà possibile utilizzare la VPN&lt;br /&gt;
* &amp;lt;code&amp;gt;[Peer]&amp;lt;/code&amp;gt; (sezione di configurazione dell'endpoint ''remoto'' / server)&lt;br /&gt;
** ''PublicKey'': chiave pubblica del server (sì, è proprio quella)&lt;br /&gt;
** ''AllowedIPs'': indirizzi raggiungibili tramite la VPN, a scelta:&lt;br /&gt;
*** &amp;lt;code&amp;gt;2001:470:c844::/48&amp;lt;/code&amp;gt;: solo la [[IPv6 @ GOLEM | rete IPv6 virtuale del GOLEM]]&lt;br /&gt;
*** &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;: tutti gli indirizzi IPv6 (è possibile utilizzare la VPN del GOLEM per [[IPv6 @ GOLEM | navigare ''davvero'' in IPv6]])&lt;br /&gt;
** ''Endpoint'': indirizzo del server&lt;br /&gt;
** ''PersistentKeepalive'': timer per mantenimento del tunnel attivo (in secondi); particolarmente utile se l'indirizzo IP del client cambia o è soggetto a NAT&lt;br /&gt;
&lt;br /&gt;
La connessione può essere attivata tramite systemd come sul server (spostandola in ''/etc/wireguard/''), oppure manualmente utilizzando &amp;lt;code&amp;gt;wg-quick&amp;lt;/code&amp;gt;:&lt;br /&gt;
* Attivazione del tunnel&lt;br /&gt;
 wg-quick up client.example.conf&lt;br /&gt;
* Disattivazione del tunnel&lt;br /&gt;
 wg-quick down client.example.conf&lt;br /&gt;
&lt;br /&gt;
3. Provare il collegamento&lt;br /&gt;
 # ping 2001:470:c844:100::1    # server VPN, dentro al tunnel (per verificare se il collegamento funziona)&lt;br /&gt;
 # ping 2001:470:c844:100::200  # gateway in Officina (per verificare se il collegamento funziona; talvolta non raggiungibile se abbiamo staccato la luce)&lt;br /&gt;
 # ping ipv6.google.com         # per verificare l'accessibilità dell'Internet pubblico IPv6, nel caso non si abbia già accesso&lt;br /&gt;
&lt;br /&gt;
4. Successo!&lt;br /&gt;
* Se il client OpenVPN è un nodo foglia della rete, cioè non funge da gateway perché si deve collegare solo lui (es. smartphone), allora c'è già connettività IPv6 e non serve fare altro. È comunque consigliato leggere la sezione relativa al [[#Firewall | firewall]] per ragioni di sicurezza ed eventualmente attivarlo.&lt;br /&gt;
* Se invece il client è il gateway della rete IPv6 (es. ''serverozzo'', o il router di casa di uno dei soci che vuole navigare in IPv6), allora bisogna configurarlo come indicato nella [[#Client_VPN_come_gateway | sezione apposita]].&lt;br /&gt;
&lt;br /&gt;
== Client VPN come gateway ==&lt;br /&gt;
=== Impostare il client VPN come gateway IPv6 per l'isola ===&lt;br /&gt;
==== Abilitare inoltro pacchetti IPv6 ====&lt;br /&gt;
Nel file ''/etc/sysctl.conf'':&lt;br /&gt;
 net.ipv6.conf.all.forwarding=1&lt;br /&gt;
&lt;br /&gt;
==== Installare e configurare radvd ====&lt;br /&gt;
''radvd'' è il demone di ''router advertisement''.&lt;br /&gt;
Per la configurazione automatica degli indirizzi e del gateway in IPv6 non è necessario un ''complesso'' server DHCP, ma vista la vastità dello spazio di indirizzamento (anche la rete più piccola ha ben &amp;lt;math&amp;gt;2^{64}&amp;lt;/math&amp;gt; indirizzi disponibili) basta il più semplice ''radvd''.&lt;br /&gt;
Un router con ''radvd'', a intervalli regolari, trasmette un messaggio in broadcast a tutti gli host della rete, informandoli sul prefisso di rete da utilizzare; a questo punto gli host possono autoconfigurarsi col metodo che preferiscono (es. [https://tools.ietf.org/search/rfc4862 SLAAC] con o senza [https://tools.ietf.org/html/rfc4941.html estensione per la privacy]).&lt;br /&gt;
&lt;br /&gt;
Installare ''radvd'':&lt;br /&gt;
 # apt install radvd&lt;br /&gt;
&lt;br /&gt;
Configurare il file ''/etc/radvd.conf'':&lt;br /&gt;
 interface ethI {&lt;br /&gt;
         AdvSendAdvert on;&lt;br /&gt;
         MinRtrAdvInterval 2;&lt;br /&gt;
         MaxRtrAdvInterval 10;&lt;br /&gt;
         prefix 2001:db8::/64 {&lt;br /&gt;
                 AdvOnLink on;&lt;br /&gt;
                 AdvAutonomous on;&lt;br /&gt;
                 AdvRouterAddr on;&lt;br /&gt;
         };&lt;br /&gt;
         RDNSS 2606:4700:4700::1111 {&lt;br /&gt;
                 AdvRDNSSLifetime 3600;&lt;br /&gt;
         };&lt;br /&gt;
 };&lt;br /&gt;
dove&lt;br /&gt;
* &amp;lt;code&amp;gt;interface br0&amp;lt;/code&amp;gt; indica l'interfaccia interna su cui fare ''advertise'';&lt;br /&gt;
* &amp;lt;code&amp;gt;prefix 2001:db8::/64&amp;lt;/code&amp;gt; indica la rete a valle;&lt;br /&gt;
* &amp;lt;code&amp;gt;RDNSS 2606:4700:4700::1111&amp;lt;/code&amp;gt; indica il server DNS (nell'esempio specifico, CloudFlare);&lt;br /&gt;
** ''Nota:'' in seguito a questioni legali, OpenDNS non è al momento disponibile in Francia.&lt;br /&gt;
&lt;br /&gt;
== Firewall ==&lt;br /&gt;
=== Per il VPS ===&lt;br /&gt;
Inoltrare solo i pacchetti da/per le reti note.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text=Non ancora testato!&lt;br /&gt;
}}&lt;br /&gt;
 # ip6tables -A FORWARD -d 2001:470:c844::/48 -i he6in4 -j ACCEPT&lt;br /&gt;
 # ip6tables -A FORWARD -s 2001:470:c844::/48 -o he6in4 -j ACCEPT&lt;br /&gt;
 # ip6tables -P FORWARD DROP&lt;br /&gt;
&lt;br /&gt;
=== Per i client ===&lt;br /&gt;
Gli indirizzi IPv6 sono &amp;quot;tutti&amp;quot; pubblici. Gli indirizzi IPv6 forniti dal GOLEM sono pubblicamente instradabili. In più, il GOLEM non mette in atto '''nessuna''' misura atta a prevenire connessioni dirette verso gli host della VPN (al netto di configurazioni specifiche sulle macchine direttamente di proprietà del GOLEM).&lt;br /&gt;
Ciò significa che '''tutti''' gli host degli utenti/soci, compresi quelli domestici che sin'ora sono stati dietro a un (s)comodo NAT, possono essere acceduti attraverso la rete Internet globale, quando sono connessi alla VPN del GOLEM.&lt;br /&gt;
&lt;br /&gt;
Pertanto, è consigliato attivare degli strumenti atti a prevenire accessi indesiderati dall'esterno, come un firewall, in special modo se il proprio computer &amp;quot;fornisce servizi&amp;quot; (eg. condivisione di file via rete, server web di sviluppo, ...)&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text='''Nota bene''': salvare queste impostazioni, per esempio con &amp;lt;code&amp;gt;ip6tables-save&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;ip6tables-restore&amp;lt;/code&amp;gt;, altrimenti verranno perse al riavvio.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Direttamente sull'host ====&lt;br /&gt;
Si può agire direttamente sugli host da proteggere (versione conservativa):&lt;br /&gt;
 # ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # ip6tables -A INPUT -p icmpv6 -j ACCEPT&lt;br /&gt;
 # ip6tables -P INPUT DROP&lt;br /&gt;
&lt;br /&gt;
In generale con Linux questa operazione non è comunque necessaria, perché tanto non vi sono servizi esposti a meno che non siano stati installati esplicitamente.&lt;br /&gt;
Si noti che ICMPv6 deve comunque sempre essere abilitato in quanto necessario al funzionamento di IPv6.&lt;br /&gt;
&lt;br /&gt;
Si può anche utilizzare una regola più rilassata (es. per sfruttare la VPN del GOLEM come VPN &amp;quot;personale&amp;quot; tra i propri host), tipo:&lt;br /&gt;
 # ip6tables -A INPUT -s 2001:470:c844:uu00::/56 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=I pacchetti della VPN viaggiano crittografati sulla rete pubblica (almeno finché si trovano all'interno della VPN del GOLEM), ma sul server vengono decifrati e cifrati di nuovo per permetterne il routing!&lt;br /&gt;
In caso di compromissione del VPS del GOLEM, pertanto, i pacchetti non possono essere considerati al sicuro da sguardi indiscreti. È sempre buona norma utilizzare crittografia end-to-end, anche all'interno di una VPN.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Dal gateway ====&lt;br /&gt;
Invece di configurare il firewall su ogni host singolarmente, si può configurare il gateway una volta sola per proteggere tutta la rete a valle:&lt;br /&gt;
 # ip6tables -A FORWARD -s 2001:470:c844:rrrr::/64 -j ACCEPT&lt;br /&gt;
 # ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # ip6tables -P FORWARD DROP&lt;br /&gt;
&lt;br /&gt;
Nell'ordine:&lt;br /&gt;
* blocca l'inoltro di tutti i pacchetti&lt;br /&gt;
* abilita l'inoltro dei pacchetti in uscita dalla rete&lt;br /&gt;
* abilita l'inoltro dei pacchetti correlati a connessioni già stabilite&lt;br /&gt;
&lt;br /&gt;
Questo impedisce l'accesso indesiderato a tutti gli host della rete, compresi gli host con Windows che possono starsene &amp;quot;sicuri&amp;quot; anche senza il firewall, pur esponendo servizi (NetBIOS, Samba).&lt;br /&gt;
&lt;br /&gt;
===== Eccezioni =====&lt;br /&gt;
Se si desidera comunque rendere accessibile un proprio server in particolare, è possibile istruire il gateway con un'eccezione, aggiungendo:&lt;br /&gt;
 # ip6tables -A FORWARD -d 2001:470:c844:rrrr::host -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
Questo è qualcosa che &amp;quot;assomiglia&amp;quot; vagamente al vecchio ''port forwarding''.&lt;br /&gt;
&lt;br /&gt;
=== Torrent ===&lt;br /&gt;
La banda è limitata, e non è consentito traffico di materiale illegale. Occore limitare il traffico ''bit-torrent'' almeno al gateway finale (VPS).&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=reminder&lt;br /&gt;
|text=TODO: Questa sezione è da fare!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Risoluzione problemi =&lt;br /&gt;
== Geolocalizzazione ==&lt;br /&gt;
Il tunnel è localizzato in Francia.&lt;br /&gt;
A causa di restrizioni imposte a causa del diritto d'autore, alcuni siti, specialmente di streaming video, come Netflix, Rai.tv o Youtube, potrebbero bloccare l'accesso ai contenuti italiani dal tunnel francese.&lt;br /&gt;
Per inibire temporaneamente l'uso del tunnel IPv6 su un host:&lt;br /&gt;
 # sysctl -w net.ipv6.conf.all.disable_ipv6=1&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Howto]]&lt;br /&gt;
[[Categoria:Officina]]&lt;br /&gt;
[[Category:Sysop]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_Day_2024&amp;diff=9479</id>
		<title>Linux Day 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_Day_2024&amp;diff=9479"/>
		<updated>2024-10-31T16:24:50Z</updated>

		<summary type="html">&lt;p&gt;Giomba: Aggiornate diapositive relatori&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:linuxday-logo.png|200px|right]]&lt;br /&gt;
&lt;br /&gt;
Il [http://www.linuxday.it Linux Day] è la giornata nazionale dedicata alla promozione di Linux e del software libero in genere.&lt;br /&gt;
Se senti la necessità di provare qualcosa di diverso sul tuo computer, se ti piace sperimentare un nuovo modo di vivere la tua vita digitale, se ti senti oppresso dai vincoli del software proprietario, se &amp;quot;non ti fidi&amp;quot; della rete e vuoi imparare a proteggere la tua privacy, allora sei nel posto giusto.&lt;br /&gt;
&lt;br /&gt;
L'evento è coordinato a livello nazionale da [http://www.ils.org ILS Italian Linux Society] e si svolge contemporaneamente in [https://www.linuxday.it/2024/ numerose città] in tutta Italia.&lt;br /&gt;
&lt;br /&gt;
L'edizione locale 2024 è organizzata da [https://golem.linux.it/ GOLEM - Gruppo Operativo Linux Empoli], [https://firenze.linux.it/ FLUG - Firenze Linux User Group] e il rinascente LUG di Prato.&lt;br /&gt;
L'evento si terrà presso la biblioteca comunale del Comune di [https://www.comune.scandicci.fi.it/ Scandicci], che patrocina l'evento.&lt;br /&gt;
&lt;br /&gt;
== Quando e dove ==&lt;br /&gt;
Quest'anno il Linux Day si terrà '''sabato 26 ottobre 2024''' presso i locali della [https://servizi-scandicci.055055.it/biblioteca-e-servizi-culturali Biblioteca Comunale di Scandicci (FI)], in via Roma 38/A.&lt;br /&gt;
&lt;br /&gt;
== Programma ==&lt;br /&gt;
Presso la Biblioteca Comunale di Scandicci, via Roma, 38/A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:volantino-linuxday-2024-fronte.jpeg&lt;br /&gt;
File:volantino-linuxday-2024-retro.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 10:00 – '''Introduzione al software libero''' ([https://cloud.golem.linux.it/s/g678qfKSpHJyZyf slides])&lt;br /&gt;
Il mondo del software libero e open source: perché è importante e come&lt;br /&gt;
utilizzarlo nella vita di tutti i giorni.&lt;br /&gt;
&lt;br /&gt;
Relatore: giomba del GOLEM&lt;br /&gt;
&lt;br /&gt;
* 11:00 – '''Coinvolgere le nuove generazioni: una storia di skateboard e gelato al lampone'''&lt;br /&gt;
Presentazione del libro Ada &amp;amp; Zangemann, che racconta la storia&lt;br /&gt;
dell'inventore Zangemann e della bambina Ada, una smanettona curiosa.&lt;br /&gt;
Ada sperimenta con hardware e software, e scopre quanto sia cruciale per&lt;br /&gt;
lei e per gli altri avere il controllo della tecnologia. Scritta da&lt;br /&gt;
Matthias Kirschner, presidente della Free Software Foundation Europe&lt;br /&gt;
(FSFE) [https://fsfe.org/], e pubblicata con la licenza libera di Creative Commons&lt;br /&gt;
ShareAlike [https://creativecommons.org/licenses/by-sa/4.0/deed.it], questa fiaba è stata ideata per avvicinare i bambini&lt;br /&gt;
alla tematica del software libero.&lt;br /&gt;
&lt;br /&gt;
Relatore: Alessandro Grassi del LUG di Prato&lt;br /&gt;
&lt;br /&gt;
* 12:00 – '''OONIProbe: misurare la censura delle connessioni all'internet'''&lt;br /&gt;
Di rado la connessione all'internet è libera, poiché sono quasi sempre&lt;br /&gt;
presenti miriadi di filtri che impediscono di visitare alcuni siti,&lt;br /&gt;
usufruire di servizi e di comunicare attraverso determinati canali.&lt;br /&gt;
L'origine di questi filtri è varia: alcuni sono stabiliti dalla legge,&lt;br /&gt;
alcuni da regolamenti interni aziendali o privati, altri ancora dalle&lt;br /&gt;
decisioni della compagnia fornitrice della connettività. L'Open&lt;br /&gt;
Observatory of Network Interference (OONI) [https://ooni.org/] realizza un programma,&lt;br /&gt;
OONIProbe [https://ooni.org/install], per misurare la quantità e la qualità di questi filtri.&lt;br /&gt;
Questo programma è software libero disponibile per tutti gli interessati&lt;br /&gt;
e per svariati sistemi. Durante la presentazione verrà proposto&lt;br /&gt;
d'installare OONIProbe per eseguire qualche misura.&lt;br /&gt;
&lt;br /&gt;
Relatore: Leandro Noferini&lt;br /&gt;
&lt;br /&gt;
* 13:00 – Pausa pranzo&lt;br /&gt;
&lt;br /&gt;
* 14:00 – '''Introduzione al P2P e al motore di ricerca per Torrent Jackett'''&lt;br /&gt;
Illustrazione del protocollo BitTorrent [http://www.bittorrent.org/] per la condivisione&lt;br /&gt;
decentralizzata dei file attraverso la rete, con spiegazione di che&lt;br /&gt;
cos'è il Peer-to-peer (P2P). Verrà mostrato come utilizzare il programma&lt;br /&gt;
qBittorrent [https://www.qbittorrent.org/] per scaricare in modo efficiente, insieme a Jackett,&lt;br /&gt;
che permette di migliorare la ricerca dei contenuti mediante i risultati&lt;br /&gt;
di Internet Archive, isoHunt e molti altri.&lt;br /&gt;
&lt;br /&gt;
Relatore: Martin Ligabue&lt;br /&gt;
&lt;br /&gt;
* 14:30 – '''LeoCAD, un CAD per i mattoncini'''&lt;br /&gt;
LeoCAD [https://www.leocad.org/] è un programma libero per la modellazione 3D dei famosi&lt;br /&gt;
mattoncini. Facile da usare e con una curva di apprendimento ridotta,&lt;br /&gt;
consente agli utenti di tutte le età e livelli di esperienza di creare&lt;br /&gt;
modelli personalizzati, grazie alla vasta libreria di pezzi disponibili.&lt;br /&gt;
Inoltre è compatibile col formato LDraw [https://ldraw.org/], lo standard per i&lt;br /&gt;
mattoncini digitali che facilita la condivisione dei progetti,&lt;br /&gt;
garantendo flessibilità e interoperabilità. LeoCAD è uno strumento&lt;br /&gt;
versatile per chiunque voglia trasformare le proprie idee in realtà, con&lt;br /&gt;
le costruzioni.&lt;br /&gt;
&lt;br /&gt;
Relatore: Enrico Bencini&lt;br /&gt;
&lt;br /&gt;
* 15:00 – '''Dall'apprendimento automatico ai modelli linguistici locali''' ([https://cloud.golem.linux.it/s/fJAQNXA4BWaLeKP slides])&lt;br /&gt;
Dall'apprendimento automatico al vero funzionamento dei modelli&lt;br /&gt;
linguistici, per spiegare le motivazioni per rilasciare i modelli&lt;br /&gt;
linguistici come software libero, con tanto di parametri pubblicati come&lt;br /&gt;
contenuto libero. I modelli linguistici locali sono essenziali poiché&lt;br /&gt;
permettono di decentralizzare questa tecnologia.&lt;br /&gt;
&lt;br /&gt;
Relatore: Andrea Malatesti del GOLEM&lt;br /&gt;
&lt;br /&gt;
* 16:00 – '''Non solo ChatGPT, le AI open source'''&lt;br /&gt;
Alla scoperta dei principali progetti d'intelligenza artificiale aperti,&lt;br /&gt;
come GPT-Neo, BERT e Stable Diffusion, insieme all'analisi di come&lt;br /&gt;
questi ultimi contribuiscano a compiti quali la generazione di&lt;br /&gt;
linguaggio naturale, la comprensione del testo e la creazione di&lt;br /&gt;
immagini. Infine sarà esaminato il ruolo delle comunità open source&lt;br /&gt;
nello sviluppo e nella diffusione di IA etiche e sostenibili,&lt;br /&gt;
evidenziando come la collaborazione aperta possa accelerare i progressi&lt;br /&gt;
e promuovere soluzioni inclusive.&lt;br /&gt;
&lt;br /&gt;
Relatore: Luca Landucci&lt;br /&gt;
&lt;br /&gt;
* 17:00 – '''Ha ancora senso parlare di software libero nel 2024?'''&lt;br /&gt;
Il mondo dei computer personali è cambiato radicalmente nell'ultimo&lt;br /&gt;
decennio, spostandosi su strumenti fuori dal nostro controllo: i&lt;br /&gt;
telefoni e i siti web. Quando tutto avviene dentro al programma per&lt;br /&gt;
navigare su Internet, e quando la vita privata ruota attorno ad app che&lt;br /&gt;
richiedono sistemi proprietari, ha ancora senso parlare di libertà dei&lt;br /&gt;
sistemi operativi?&lt;br /&gt;
&lt;br /&gt;
Relatore: Alessandro Grassi del LUG di Prato&lt;br /&gt;
&lt;br /&gt;
== Programma scuole ==&lt;br /&gt;
Sessione '''riservata''' agli studenti del'[https://www.ilpontormoempoli.edu.it/ IIS Pontormo] di Empoli (FI).&lt;br /&gt;
&lt;br /&gt;
* '''Introduzione al software libero''' ([https://cloud.golem.linux.it/s/yFnxSEHYaLgxzzN slides])&lt;br /&gt;
Cos'è un codice sorgente? Cosa c'entrano gli gnu ed i pinguini con l'informatica? Con questa introduzione si vuole dare una panoramica sul mondo di Linux e del software libero, citandone le implicazioni etiche ed i risvolti pratici. Segue una presentazione dell'associazione GOLEM e dell'attività svolta in merito ai temi trattati.&lt;br /&gt;
&lt;br /&gt;
* '''Dall'apprendimento automatico ai modelli linguistici locali''' ([https://cloud.golem.linux.it/s/cG5CFoSWP5ognML slides])&lt;br /&gt;
Partendo da alcuni cenni sull'apprendimento automatico, l'intervento punta a rendere gli studenti consapevoli del vero funzionamento dei modelli linguistici, per poi spiegare le motivazioni per rilasciare i tali modelli come software libero, con tanto di parametri rilasciati come contenuto libero. Parlare di modelli linguistici locali è essenziale in questo intervento, poiché permettono di avvicinarci alla decentralizzazione di questa tecnologia.&lt;br /&gt;
&lt;br /&gt;
* '''Siamo davvero al sicuro?''' ([https://cloud.golem.linux.it/s/aAB2bxeArwYwxqS slides])&lt;br /&gt;
&amp;quot;Questo talk è sponsorizzato da... nessuna VPN&amp;quot; &lt;br /&gt;
Dopo aver introdotto alcuni concetti preliminari relativi alla rete, si va ad illustrare a grandi linee il funzionamento di una VPN, spiegando gli usi originari di questa tecnologia e come viene tutt'ora impiegata sia in ambiti aziendali che personali, per poi dare una risposta all'interrogativo &amp;quot;ma una VPN mi mette davvero al riparo da tutte le minacce della rete?&amp;quot;. Infine, si presenteranno alcuni servizi che si appoggiano a tecnologie VPN libere, in alternativa ai più noti e pubblicizzati.&lt;br /&gt;
&lt;br /&gt;
* '''Radioascolto in libertà''' ([https://cloud.golem.linux.it/s/TT9majen8nmbggE slides])&lt;br /&gt;
Ascoltare la radio sembra quasi un passatempo superato, ma è in realtà un'azione che compiamo tutti i giorni senza rendercene conto. In questo intervento si dà una infarinatura sulle tecnologie senza fili, per poi illustrare applicativi e dispositivi per captare e decodificare i segnali radio nello spazio attorno a noi.&lt;br /&gt;
&lt;br /&gt;
== Fotografie ==&lt;br /&gt;
Dopo l'evento.&lt;br /&gt;
&lt;br /&gt;
[[Category:LinuxDay]]&lt;/div&gt;</summary>
		<author><name>Giomba</name></author>
	</entry>
</feed>