My boring Blog

Home page di Mauro Frigerio

Attivare HTTP/3 in traefik v3

22-05-2024 Tempo di lettura 3 minuti Article

La recente major release v3 di Traefik, ha portato nuove funzionalità o concretizzato alcune. Come i certificati tramite Tailscale e HTTP3. In questa breve guida voglio presentare un esempio di configurazione per utilizzare HTTP3 in Traefik. Il cambiamento non è drastico, perché la funzionalità era già esistente come sperimentale.

Requisiti

  • macchina Linux con docker e compose (altrimenti non saresti qui)
  • un dominio
  • con il quale si possa ottenere un certificato TLS valido (HTTPS)
  • nel esempio uso il dominio, DNS e certificati di traefik.me

Procedura

  1. creare i file docker-compose.yml e tls.yml con il contenuto dei successivi capitoli

  2. modificare il file docker-compose.yml in particolare: il percorso delle cartelle per traefik e sostituire l’indirizzo IP del server (comando ip a) con il proprio

  3. creare una cartella cert per salvare i certificati TLS di traefik.me

  4. scaricare i certificati con il seguente comando (l’opzione -d non è presente):

sudo docker compose up helper
  1. creare il container traefik e whoami
sudo docker compose up -d traefik

sudo docker compose up -d whoami
  1. testare il funzionamento

Docker compose (docker-compose.yml)

services:

  traefik:
    image: traefik:v3.0
    container_name: traefik
    command:
      - "--log.level=DEBUG"
      - "--providers.docker=true"
      - "--providers.file.filename=/tls.yml"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.websecure.address=:443"
      - "--entrypoints.websecure.http3"
      - "--entrypoints.web.address=:80"
      - "--entryPoints.web.http.redirections.entryPoint.to=websecure"
    ports:
      - 80:80
      - 443:443/tcp
      - 443:443/udp
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - PATH/TO/cert:/etc/ssl/traefik
      - PATH/TO/tls.yml:/tls.yml

  whoami:
    image: containous/whoami:latest
    container_name: whoami
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.whoami.rule=Host(`1-2-3-4.traefik.me`)"  # change 1-2-3-4 with you server IP
      - "traefik.http.routers.whoami.tls.domains[0].main=*.traefik.me"
      - "traefik.http.routers.whoami.entrypoints=websecure"

  helper:
    image: alpine
    command: sh -c "cd /etc/ssl/traefik
      && wget traefik.me/cert.pem -O cert.pem
      && wget traefik.me/privkey.pem -O privkey.pem"
    volumes:
      - PATH/TO/cert:/etc/ssl/traefik

File provider di traefik (tls.yml)

tls:
  stores:
    default:
      defaultCertificate:
        certFile: /etc/ssl/traefik/cert.pem
        keyFile: /etc/ssl/traefik/privkey.pem
  certificates:
    - certFile: /etc/ssl/traefik/cert.pem
      keyFile: /etc/ssl/traefik/privkey.pem

Come testare

Vi consiglio di testare il funzionamento con Chrome o un browser derivato (io uso Brave). Su Firefox non sono ancora riuscito a far funzionare l’HTTP3.

Aprire gli strumenti per sviluppatori o click con il tasto destro e scegliere l’opzione ispeziona. Aprire il tab network o rete e ricaricare la pagina. Nella tabella è possibile visualizzare i vari file scaricati, nella colonna protocollo potete vederese il vostro server fornisce http2= h2 o http3= h3. Se avete aperto la pagina prima di cambiare la configurazione di traefik può essere consigliato riavviare il browser.

Problemi comuni

  • certificato non valido o scaduto: verificare che nella dashboard di traefik sia attivo il certificato TLS per il nostro router. Se il certificato è giusto ma scaduto, verificare che su traefik.me sia presente uno aggiornato. Se non si può aspettare allora usate Tailscale o acquistate il vostro dominio.
  • il dominio *.traefik.me non funziona: traefik.me permette varie notazioni, ma per i certificati gli indirizzi IP non devono essere scritti con il punto, ma con la linea ("-"). Si può testare il corretto funzionamento del dominio provando ad accedere alla dashboard di traefik con l’indirizzo http://1-2-3-4.traefik.me:8080 (attenzione al http non https e sostituire 1-2-3-4 con l’indirizzo IP giusto).
  • ho seguito tutti i passaggi, ma il certificato è sempre sbagliato: i file .pem devono essere salvati con diritti particolari. Usa il container helper per scaricarli con i giusti diritti.