Aller au contenu

Traefik macvlan inaccessible depuis l'extérieur


Aurel004

Messages recommandés

Bonjour,

Je viens vers vous pour demander de l'aide je suis en train de m'arracher les cheveux.

Voulant commencer à utiliser Authentik, j'ai dû mettre un terme à l'utilisation du reverse proxy de Synology et mettre en place Traefik.

Après de nombreux problèmes, j'ai réussi à faire fonctionner Traefik en local.

A savoir : J'utilise en local le DNS Server de Synology.

Traefik est placé dans un container en macvlan à l'IP 192.168.0.102, le Synology a une route avec son IP 192.168.0.103 et l'IP réseau (pour la box) du Synology est 192.168.0.48

Après avoir obtenu un certificat wildcard via Traefik et Let's Encrypt, je souhaite rendre certains sous-domaines accessibles depuis l'extérieur.

J'ai bien ajouté la redirection des ports 80 et 443 vers l'IP Traefik (192.168.0.102) sur la box.

Cependant, quand j'essaie d'accéder à un conteneur depuis l'extérieur, j'ai ces erreurs :

level=debug msg="http: TLS handshake error from XXX.XXX.XXX.XXX:2149: write tcp 192.168.0.102:443->XXX.XXX.XXX.XXX:2149: write: connection reset by peer"
level=debug msg="http: TLS handshake error from XXX.XXX.XXX.XXX:2150: write tcp 192.168.0.102:443->XXX.XXX.XXX.XXX:2150: write: connection reset by peer"
level=debug msg="http: TLS handshake error from XXX.XXX.XXX.XXX:2151: tls: client offered only unsupported versions: [301]"

En local, je vois bien le certificat Let's Encrypt valide sur les containers que je visite.

J'ai tenté l'entraide de communauté Traefik mais cela ne donne pour l'instant rien et je pense que le problème vient du macvlan sur Synology

Voici mes configurations :

  • docker-compose Traefik
version: '3'

secrets:
  ovh_application_key:
    file: blabla
  ovh_application_secret:
    file: blabla
  ovh_consumer_key:
    file: blabla

services:
  traefik:
    image: traefik:latest
    container_name: traefik
    restart: unless-stopped
    networks:
      macvlan:
      traefik:
    volumes:
      - /volume1/docker/traefik/config:/etc/traefik
      - /etc/localtime:/etc/localtime:ro

    labels:
      traefik.enable: true
      traefik.http.routers.dashboard.rule: Host(`traefik.mydomain.com`)
      traefik.http.routers.dashboard.service: api@internal
      traefik.http.routers.dashboard.middlewares: auth
      traefik.http.routers.dashboard.entrypoints: websecure
      traefik.http.middlewares.auth.basicauth.users: XXXXXXXXXXXXX
    depends_on:
      - socket-proxy

    secrets:
      - ovh_application_key
      - ovh_application_secret
      - ovh_consumer_key

    environment:
      OVH_ENDPOINT: ovh-eu
      OVH_APPLICATION_KEY_FILE: /run/secrets/ovh_application_key
      OVH_APPLICATION_SECRET_FILE: /run/secrets/ovh_application_secret
      OVH_CONSUMER_KEY_FILE: /run/secrets/ovh_consumer_key
  
  socket-proxy:
    image: tecnativa/docker-socket-proxy
    container_name: traefik_docker_socket-proxy
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      CONTAINERS: 1
    networks:
      - traefik

networks:
  macvlan:
    name: macvlan
  traefik:
    name: traefik
  • Configuration statique traefik.yml
global:
  checkNewVersion: true
  sendAnonymousUsage: false

entrypoints:
  web:
    address: :80
    http:
      redirections:
        entryPoint:
          to: websecure
          scheme: https
  websecure:
    address: :443
    http:
      tls:
        certResolver: letsencrypt
        domains:
          - main: mydomain.com
            sans: "*.mydomain.com"
    forwardedHeaders:
  traefik:
    address: :8080

ping : {}

log:
  level: debug

accessLog:
  filePath: "/etc/traefik/access.log"

serversTransport:
  insecureSkipVerify: true

api:
  dashboard: true
  debug: true

providers:
  docker:
    endpoint: tcp://socket-proxy:2375
    exposedByDefault: false
  file:
    filename: /etc/traefik/rules.yml

certificatesResolvers:
  letsencrypt:
    acme:
      email: XXXXX
      storage: /etc/traefik/acme.json
      caServer: "https://acme-v02.api.letsencrypt.org/directory"
      dnsChallenge:
        provider: ovh
        resolvers:
          - "1.1.1.1:53"
          - "8.8.8.8:53"
  • Un conteneur que j'essaie d'accéder
version: '3.8'
services:
  pingvin-share:
    image: stonith404/pingvin-share
    container_name: pingvin-share
    restart: unless-stopped
    environment:
      - PORT:3000
    volumes:
      - blabla
      - blabla
    networks:
      traefik:
    labels:
      traefik.enable: true
      traefik.http.routers.pingvin-share.rule: Host(`share.mydomain.com`)
      traefik.http.routers.pingvin-share.entrypoints: websecure
      traefik.http.routers.pingvin-share.tls: true
      traefik.http.routers.pingvin-share.tls.certresolver: letsencrypt

networks:
  traefik:
    external: true

 

Merci pour votre aide

Lien vers le commentaire
Partager sur d’autres sites

@Aurel004

C'est très étrange que ça fonctionne en local mais pas à distance.
Hormis la bonne configuration de Traefik que je ne connais pas du tout, la seule possibilité que je vois serait que pingvin n'autorise pas les accès distants, vu que Traefik doit sûrement faire du forward d'IP (ce sera nécessaire pour utiliser Authentik).

Envoie-moi un MP avec tes dispos si tu veux qu'on regarde avec prise de contrôle à distance.

Parallèlement, je vois quand même des choses étranges dans tes compose, notamment :

Il y a 12 heures, Aurel004 a dit :
networks:
  macvlan:
    name: macvlan

Ce que tu fais là c'est créer un réseau bridge nommé macvlan et pas un réseau macvlan. Pour ce faire il faudrait plutôt écrire :

networks:
  macvlan:
    name: macvlan
    driver: macvlan
    driver_opts:
      parent: <nom_interface>
    ipam:
      config:
        - subnet: "192.168.0.0/w"
          ip_range: "192.168.0.x/y"
          gateway: "192.168.0.z"

Ca reste un réseau interne, j'aurais plutôt créer un réseau externe, histoire de ne pas faire péter l'interface virtuelle si tu arrêtes la stack de Traefik.

Il y a 12 heures, Aurel004 a dit :
environment:
      - PORT:3000

La syntaxe est mauvaise, c'est soit :

environment:
  - PORT=3000

ou :

environment:
  PORT: 3000

L'espace est important entre PORT: et 3000, je suis même étonné que tu n'aies pas d'erreur.
Et par défaut le frontend de pingvin semble écouter sur le port 3000, pas besoin de le préciser normalement, d'autant qu'ils ont des variables avec le même nom pour le backend et le frontend : https://github.com/stonith404/pingvin-share/issues/397

Modifié par .Shad.
Lien vers le commentaire
Partager sur d’autres sites

Salut,

Il y a 2 heures, .Shad. a dit :

la seule possibilité que je vois serait que pingvin n'autorise pas les accès distants

Ça fonctionnait bien avec le reverse proxy de Synology, et j’ai le même problème sur tous mes containers

Il y a 2 heures, .Shad. a dit :

ce sera nécessaire pour utiliser Authentik

C’est la raison pour laquelle j’ai décidé (d’essayer) de passer du reverse proxy Synology à Traefik

Il y a 2 heures, .Shad. a dit :

Envoie-moi un MP avec tes dispos si tu veux qu'on regarde avec prise de contrôle à distance.

Je t’envoie un MP, merci!

Il y a 2 heures, .Shad. a dit :

networks: macvlan: name: macvlan driver: macvlan driver_opts: parent: <nom_interface> ipam: config: - subnet: "192.168.0.0/w" ip_range: "192.168.0.x/y" gateway: "192.168.0.z"

C’est ce que je fais effectivement, j’avais juste simplifié le copier/coller en effaçant ça

Il y a 2 heures, .Shad. a dit :

La syntaxe est mauvaise, c'est soit :

environment:
  - PORT=3000

ou :

environment:
  PORT: 3000

 

My bad, je rectifie mais effectivement comme c’est le port par défaut ça fonctionnait quand même

Si cela marche en local c’est peut être qu’il doit ignorer la vérification SSL, mais pas si cela vient de l’extérieur, en tout cas je pense vraiment qu’il y a quelque chose qui ne va pas au niveau du certificat ou de comment Syno accepte la requête forwardée au macvlan

Traefik est basé sur le même principe que nginx proxy

Lien vers le commentaire
Partager sur d’autres sites

Il y a 2 heures, Aurel004 a dit :

C’est la raison pour laquelle j’ai décidé (d’essayer) de passer du reverse proxy Synology à Traefik

Soit dit en passant, SWAG gère parfaitement Authentik comme Authelia, pour avoir testé le premier quelques semaines je n'ai pas eu le moindre souci.

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.