Su una istanza VPS virtualizzata, noleggiata presso un fornitore, ho in esecuzione un software NodeJS che qualche volta al giorno fa delle richieste HTTP verso due endpoint web, dei quali uno è l'api di invio messaggi di Telegram.
Mi sono accorto dalla mancata notifica di Telegram, e quindi dai log, che talvolta mi viene restituito da una o entrambe le chiamate precedenti il seguente errore (in questo caso verso api.telegram.org), prodotto da Node:
cause: Error: connect EHOSTUNREACH 2001:67c:4e8:f004::9:443
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1300:16) {
errno: -113,
code: 'EHOSTUNREACH',
syscall: 'connect',
address: '2001:67c:4e8:f004::9',
port: 443
}
Dopo che viene riportato, provando ad eseguire un traceroute
manuale, il primo restituisce il codice !H
sull'unico hop che corrisponde alla macchina locale.
$ traceroute6 2001:67c:4e8:f004::9
traceroute to 2001:67c:4e8:f004::9 (2001:67c:4e8:f004::9), 30 hops max, 80 byte packets
1 <ipv6 statico macchina> (<ipv6 statico macchina>) 1026.721 ms !H 1026.714 ms !H 1026.713 ms !H
Nei successivi, viene correttamente instradato e arriva senza problemi a destinazione.
$ traceroute6 2001:67c:4e8:f004::9
traceroute to 2001:67c:4e8:f004::9 (2001:67c:4e8:f004::9), 30 hops max, 80 byte packets
1 <hop1> (<hop1>) 0.704 ms 0.683 ms 0.683 ms
2 <hop2> (<hop2>) 0.967 ms 0.963 ms 0.915 ms
3 <hop3> (<hop3>) 5.371 ms 5.370 ms 5.374 ms
4 <hop4> (<hop4>) 7.356 ms 7.042 ms 6.691 ms
5 * * *
6 * e0-36.core2.dus1.he.net (2001:470:0:52e::2) 9.474 ms *
7 * * *
8 * * *
...
<hop destinazione>
A questo punto, per un po' di tempo che non ho però definito, le chiamate da Node risolte in IPv6 riprendono correttamente a funzionare... fino al ripresentarsi del problema.
La VPS è in dual stack, con indirizzi IPv4 e IPv6 statici. L'MTU per l'interfaccia IPv6 riportato da /proc/sys/net/ipv6/conf/eth0/mtu
è 1280. OS Debian 10.
Non saprei cosa altro monitorare per scoprire a cosa possa essere dovuta questa situazione... per il momento ho applicato un fallback delle richieste a IPv4 quando si verifica questo problema per non disattivare in toto IPv6, che vorrei vedere più spesso in azione. 😄