Le nœud forgeron de moul n’est pas à l’heure

Mon nœud calcule quelques blocs :

Il a peut-être un problème avec mon nœud.
Il a toujours un temps de propagation des blocs (Block propagation time) très lent : infini

Dans mes logs j’ai ceci :

2024-09-20 10:02:15 💔 Verification failed for block 0xb5c360683f586a36df4f45444ddef9ca579ea34dc2ab27ddbd0d4b462748d0f5 received from (12D3KooWBUofnBCndckssxLfMgygqioJTGWdfjkmjb8bDtjezWFE): "Header 0xb5c360683f586a36df4f45444ddef9ca579ea34dc2ab27ddbd0d4b462748d0f5 rejected: too far in the future"    
1 Like

Ça doit être toujours lié au problème du temps dans ton conteneur. Mais c’est un peu étrange :thinking:

[edit]

Quand as-tu eu la première fois ceci dans tes logs :

(avant tu ne l’avais pas)

Voici tes derniers blocs calculés sur la chaîne principale :

query Q {
  block(limit: 10, orderBy: {height: DESC}, where: {validator: {_eq: "\\xe40d623c09588b2044db653d9ce974f765e28db3fa4707750d25be6aa02f2a4c"}}) {
    height
  }
}
{
  "data": {
    "block": [
      {
        "height": 3048656
      },
      {
        "height": 3048640
      },
      {
        "height": 3048636
      },
      {
        "height": 3048635
      },
      {
        "height": 3048568
      },
      {
        "height": 3048567
      },
      {
        "height": 3048551
      },
      {
        "height": 3048550
      },
      {
        "height": 3048524
      },
      {
        "height": 3048414
      }
    ]
  }
}

Alors qu’on en est un peu plus loin :
image

Donc il a dû se passer quelque chose dans ces eaux là.
12/09/2024 20:03:18 pour ton dernier bloc 3048656
12/09/2024 20:03:12 pour le précédent par cgeek 3048655

1 Like

Intéressant, sur ta capture on voit que tu as calculé les blocs 3145130 et 3145134. Mais ce sont tous les deux des blocs que j’ai calculé sur la chaîne principale (regarde sur un autre nœud miroir listé sur https://duniter-portal.axiom-team.fr/). Tu calcules des blocs sur ton fork, mais la chaîne principale ne les accepte pas. Par contre les autres blocs correspondent bien, et même leur hash. Donc le chaînage doit être cassé, et ce qui est affiché sur ton polkadotjs doit juste être les blocs reçus par ton nœud dont certains écrasés par les blocs calculés par ton nœud.

Et donc on doit avoir un bug des offenses à creuser, parce que je me serais attendu à ce que tu sois blacklisté des forgerons. Peut-être aussi qu’on aurait dû accompagner le “note stalled” de Finalisation bloquée #2 d’un nouveau set de forgerons.

1 Like

Dans mes logs, j’ai des lignes qui te concernent :

duniter-archive-1  | 2024-09-20 13:12:58 Report 12D3KooWAikpy6szmM7QW5QYEFqjiiWYJ3AXLU448htzFLqam2Qr: -2147483648 to -2147483648. Reason: Same block request multiple times. Banned, disconnecting.    

Apparemment ton nœud redemande les blocs en boucle.

[j’ai déplacé dans un nouveau sujet pour préserver l’autre]

Du point de vue de ton nœud :

Ces blocs sont bien écrits par moul :

Mais, il est vrai, que peu de blocs sont créés par moul par rapport aux autres identités. Il y a quand même un problème.

1 Like

Effectivement, c’est mon indexeur qui est en rade, ça facilite pas les recherches :

$ gcli indexer check
╭────────────────────────┬─────────────────────────────┬───────────────────────────────────────────╮
│ Variable               ┆ Duniter                     ┆ Indexer                                   │
╞════════════════════════╪═════════════════════════════╪═══════════════════════════════════════════╡
│ URL                    ┆ wss://gdev.p2p.legal:443/ws ┆ https://squid.gdev.coinduf.eu/v1/graphql/ │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ genesis hash           ┆ 0xc184…b6c3                 ┆ 0xc184…b6c3                               │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ finalized block number ┆ 3146955                     ┆ not indexed                               │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ finalized block hash   ┆ 0xad9f…955e                 ┆                                           │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ latest block number    ┆ 3146959                     ┆ 3048734                                   │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ latest block hash      ┆ 0xf453…ad49                 ┆ 0xb10e…17d4                               │
╰────────────────────────┴─────────────────────────────┴───────────────────────────────────────────╯

Ça montre que #16 est toujours d’actualité malgré une montée en version des dépendances.

Après réflexion, le problème de mon nœud semble être un “problème d’heure”, comme découvert dans ce poste de finalisation bloquée :

Mon nœud reçoit des blocs qui ne sont pas dans la fourchette de temps de GrandPa+Babe:

2024-09-24 12:50:43 Report 12D3KooWBfuEahrFypghc8niTseEq6ZVYkyXTUjTTcX6kkbFVgYB: -536870912 to -2147483648. Reason: Block verification failed. Banned, disconnecting.    
2024-09-24 12:50:44 💔 Verification failed for block 0x1f5dcc6c034b97436b18ceed32b0b317b85e02d65bca3d8b364ca64387ea9a6b received from (12D3KooWBUofnBCndckssxLfMgygqioJTGWdfjkmjb8bDtjezWFE): "Header 0x1f5dcc6c034b97436b18ceed32b0b317b85e02d65bca3d8b364ca64387ea9a6b rejected: too far in the future"    

du coup, mon nœud banni les autres nœuds et se retrouve de fait connecté à peu de pairs, j’ai pu observer de 0 à 2 pairs connectés contre entre 10 et 20 pour les autres nœuds.
Mon nœud fini par accepter les blocs plus tard, car ils entrent finalement dans la fourchette de blocs acceptables. C’est ma compréhension actuelle, une théorie.

Il faut que je regarde depuis quand j’ai ces erreurs en quantité dans mes logs. Je ne trouve pas où sont stockés les logs.

Il faut aussi que je résolve le problème avec le temps dans le conteneur.

2 Likes

Ce serait intéressant d’essayer de forcer le peering entre ton nœud et un autre du réseau en utilisant system.addReservedPeer(peer) (méthode de l’API RPC unsafe). Tu peux essayer avec un ou plusieurs de mes nœuds :

  • /dns/gdev.coinduf.eu/tcp/30333/p2p/12D3KooWHW1JXJNTVLRqtXmu6R7W9ohpRHcJGHNmw6wpVTukNAgZ
  • /dns/gdev.gyroi.de/tcp/30333/p2p/12D3KooWJtce4HiwrYbaV48CZjmb9QtatYmC3ANyVKT1wQRqARzd
  • /dns/gdev.trentesaux.fr/tcp/30333/p2p/12D3KooWBUofnBCndckssxLfMgygqioJTGWdfjkmjb8bDtjezWFE (mon nœud forgeron)

Je pourrais faire la même chose dans l’autre sens, mais je ne trouve pas comment remonter de ton peerId 12D3KooWGr8Qm3Rp3hMBPguJmnQgCy2rFCpr4DQ5iyT8yra1jNcx à ton IP. Ça devrait être possible en lisant la dht des pairs, mais la méthode system.peers() n’affiche que les peer id et pas les adresses.

Est-ce que tu peux me donner ton adresse p2p ? Si tu n’as pas mis de dns, c’est simplement /ip4/<ip>/tcp/<port>/p2p/<peerid>. J’imagine que le port est 30333 et que tu l’as bien ouvert, et j’ai le peerid, mais je ne vois pas comment trouver l’adresse simplement (alors qu’elle devrait tout simplement être dans les fiches de pair de mon nœud).

Ça devrait être l’adresse suivante p2p :

/ip4/188.23.44.109/tcp/30333/p2p/12D3KooWGr8Qm3Rp3hMBPguJmnQgCy2rFCpr4DQ5iyT8yra1jNcx

Je viens de rediriger le port 30333 vers ma machine.

1 Like

Donc ce n’était pas le cas avant ? Ça veut dire que les tentatives de connexions vers ton nœud ne pouvaient pas passer et que seules les connexions sortantes pouvaient fonctionner ?

      --out-peers <COUNT>
          Number of outgoing connections we're trying to maintain
          
          [default: 8]

      --in-peers <COUNT>
          Maximum number of inbound full nodes peers
          
          [default: 32]

Avec ces réglages par défaut, ton nœud essayait de maintenir 8 connexions, mais n’en recevait aucune.

[edit] désolé pour l’edit de ton message, je pensais être en train d’éditer le mien

J’utilise ipfs pour tester les connexions, c’est l’outil le plus simple que j’avais à portée de main, ça donne :

$ ipfs swarm connect /ip4/188.23.44.109/tcp/30333/p2p/12D3KooWGr8Qm3Rp3hMBPguJmnQgCy2rFCpr4DQ5iyT8yra1jNcx 
Error: connect 12D3KooWGr8Qm3Rp3hMBPguJmnQgCy2rFCpr4DQ5iyT8yra1jNcx failure: failed to dial: failed to dial 12D3KooWGr8Qm3Rp3hMBPguJmnQgCy2rFCpr4DQ5iyT8yra1jNcx: all dials failed
  * [/ip4/188.23.44.109/tcp/30333] dial tcp4 0.0.0.0:4001->188.23.44.109:30333: i/o timeout
$ ipfs swarm connect /dns/gdev.gyroi.de/tcp/30333/p2p/12D3KooWJtce4HiwrYbaV48CZjmb9QtatYmC3ANyVKT1wQRqARzd                                                                                     
connect 12D3KooWJtce4HiwrYbaV48CZjmb9QtatYmC3ANyVKT1wQRqARzd success

Donc je n’arrive pas à établir la connexion à ton nœud.

J’ai redirigé le port sur ma box. Je tente d’ouvrir le port sur le pare-feu de ma machine, mais firewalld n’est pas simple à prendre en main :frowning: J’ai installé kubo pour avoir la commande ipfs et pouvoir tester comme toi, mais la connexion ne s’établit même pas avec l’adresse IP locale. Faut que je continue de creuser.

Dans la doc, je ne trouve pas mention du fait qu’il faille ouvrir le port p2p. Les autres nœuds, ont-ils tous ce port ouvert ?
Ma théorie est la suivante : Le nœud forgeron de moul n’est pas à l’heure - #7 by Moul

Pfff, j’ai réussi en IPv6 :slight_smile:

ipfs swarm connect /ip6/2001:871:261:d2c7:de01:4670:5bd7:c021/tcp/30333/p2p/12D3KooWGr8Qm3Rp3hMBPguJmnQgCy2rFCpr4DQ5iyT8yra1jNcx
connect 12D3KooWGr8Qm3Rp3hMBPguJmnQgCy2rFCpr4DQ5iyT8yra1jNcx success
1 Like

Ça y est, j’ai résolu le problème :tada:
Le conteneur partage la même heure que la machine hôte.
J’ai activé le service systemd-timesyncd sur mon hôte.

Maintenant, plus d’erreurs dans les logs, mon nœud est connecté à six pairs. La durée de propagation des blocs est d’une durée acceptable !

Faut être (synchronisé) à l’heure avec l’utilisation de Babe+GrandPa, sinon ça ne fonctionne pas !

Du coup, pas vraiment besoin d’avoir le port 30333 ouvert ? Comme avec Duniter v1 et ws2p.
Après avoir fermé les ports, j’arrive à m’y connecter via les adresses IP locale, IPv4, IPv6 et nom de domaine !

1 Like

Dans la doc duniter ? Il faudrait que je l’ajoute parce que j’imagine qu’il vaut mieux ne pas avoir trop d’asymétrie au niveau des connexions p2p.

J’aimerais comprendre plus précisément quelles sont les conditions pour que ça fonctionne bien et d’où viennent les problèmes de peering, ça sera utile pour décider des conditions à remplir pour devenir forgeron.

Dans duniter v1 on recommandait de faire un reverse proxy sur le 443 avec des chemins comme /bma et /ws2p.

mon reverse proxy duniter v1
# https redirection bma / ws2p
server {
    listen 80;
    listen [::]:80;
    server_name g1.trentesaux.fr;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name g1.trentesaux.fr;
        
    ssl_certificate         /etc/letsencrypt/live/g1.trentesaux.fr/fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/g1.trentesaux.fr/privkey.pem;
 
  location / {
    proxy_pass http://127.0.0.1:10900;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }

  location /ws2p {
    proxy_pass http://127.0.0.1:20900;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
}

À noter qu’on peut également le faire sur duniter v2 qui gère aussi le websocket sur le 30333. Mais dans ce cas, il faut que DUNITER_PUBLIC_ADDR soit quelque chose comme /dns/example.org/tcp/443/ws/p2p. C’est du p2p sur websocket. Mais autant établir directement la connexion en tcp, il n’y a que les contextes avec de fortes restrictions où on a envie de passer par du websocket (proxy, navigateur…).

Ne pas fournir de endpoint p2p c’est ne pas participer à la décentralisation du réseau. Si un seul nœud expose un endpoint p2p, les autres nœuds ne pourront pas établir de connexions entre eux.

:thinking: Peux tu préciser ? Si tu essayes depuis le même réseau local ça ne me choque pas, mais je ne vois pas comment tu peux ouvrir une connexion depuis l’extérieur sans écouter les connexions extérieures.

Je n’arrive pas à me connecter aux adresses données, ni en IPv4 ni en IPv6.

Oui, dans la doc Duniter.

Il faut un nœud à l’heure, synchronisé à NTP ou équivalent. La machine hôte doit l’être, car le conteneur a la même heure que la machine hôte.

WS2P fonctionne très bien dans mon cas sans proxy, ni ouverture manuelle de port, surement avec UPnP qui s’occupe de l’ouverture de port ou via un autre mécanisme.

Je ne vois pas trop quoi préciser.

Ces trois adresses ne fonctionnent pas pour toi ? J’ai testé en local, faudrait que je teste depuis l’extérieur.

> ipfs swarm connect /dns/gdev.moul.re/tcp/30333/p2p/12D3KooWGr8Qm3Rp3hMBPguJmnQgCy2rFCpr4DQ5iyT8yra1jNcx
connect 12D3KooWGr8Qm3Rp3hMBPguJmnQgCy2rFCpr4DQ5iyT8yra1jNcx success

> ipfs swarm connect /ip4/188.23.44.109/tcp/30333/p2p/12D3KooWGr8Qm3Rp3hMBPguJmnQgCy2rFCpr4DQ5iyT8yra1jNcx
connect 12D3KooWGr8Qm3Rp3hMBPguJmnQgCy2rFCpr4DQ5iyT8yra1jNcx success

> ipfs swarm connect /ip6/2001:871:261:d2c7:de01:4670:5bd7:c021/tcp/30333/p2p/12D3KooWGr8Qm3Rp3hMBPguJmnQgCy2rFCpr4DQ5iyT8yra1jNcx
connect 12D3KooWGr8Qm3Rp3hMBPguJmnQgCy2rFCpr4DQ5iyT8yra1jNcx success

En tout cas dans Firefox, là où les autres nœuds donnent “connexion réinitialisée”, j’ai un timeout.

Le scan SYN est bloqué :

$ sudo nmap -Pn -sS 188.23.44.109 -p 30333
Starting Nmap 7.93 ( https://nmap.org ) at 2024-10-09 16:36 CEST
Nmap scan report for 188-23-44-109.adsl.highway.telekom.at (188.23.44.109)
Host is up.

PORT      STATE    SERVICE
30333/tcp filtered unknown

Nmap done: 1 IP address (1 host up) scanned in 2.14 seconds

Le port est ouvert en IPv6. En IPv4, en local le port est ouvert, mais est fermé depuis l’extérieur.

Ça doit être ma box qui bloque le port malgré l’ouverture de port que j’ai mis en place :

L’interface web de ma box est vraiment caduc. Mais, j’ai découvert ceci :

La libp2p ouvre bien les ports via UPnP comme Duniter v1 WS2P !

Pour référence : Hole Punching - libp2p

1 Like