Sur un serveur Debian avec nginx, je ne reçois aucune réponse d'un serveur Web via HTTPS et IPv6. HTTP fonctionne bien.
- netstat signale que le port 443 écoute sur l'adresse IPv6
- le pare-feu est ouvert, ipv6scanner.com signale que le port 443 est ouvert
- localement (sur le terminal) wget et curl reçoivent une réponse correcte, donc la configuration nginx est OK
- aucun signe d'erreur de nginx error.log
- aucun enregistrement dans access.log en cas d'échec, de sorte que la communication n'atteint probablement pas le serveur Web
- DNS est très bien. La traduction fonctionne et la connexion ne fonctionne pas même lorsque l'adresse IP est accessible directement
Chaque tentative de connexion depuis "l'extérieur" (c'est-à-dire en dehors du réseau, depuis Internet) échoue (navigateur web, telnet, ipv6-test.com, curl ...). Il n'y a aucune réponse.
Il peut être testé sur www.ekasparova.eu. Je n'ai aucune idée. Que puis-je vérifier d'autre?
Éditer:
la sortie de traceroute6 --mtu www.google.com
est la suivante:
traceroute to www.google.com (2a00:1450:4014:800::2004), 30 hops max, 65000 byte packets
1 * F=1500 * *
2 * * *
~
30 * * *
Alors ça n'arrive jamais à la fin ...
edit2:
Ma sortie ip6tables-save (pare-feu local):
# Generated by ip6tables-save v1.6.0 on Wed Oct 17 06:25:40 2018
*filter
:INPUT DROP [32:9320]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:ufw6-after-forward - [0:0]
:ufw6-after-input - [0:0]
:ufw6-after-logging-forward - [0:0]
:ufw6-after-logging-input - [0:0]
:ufw6-after-logging-output - [0:0]
:ufw6-after-output - [0:0]
:ufw6-before-forward - [0:0]
:ufw6-before-input - [0:0]
:ufw6-before-logging-forward - [0:0]
:ufw6-before-logging-input - [0:0]
:ufw6-before-logging-output - [0:0]
:ufw6-before-output - [0:0]
:ufw6-logging-allow - [0:0]
:ufw6-logging-deny - [0:0]
:ufw6-reject-forward - [0:0]
:ufw6-reject-input - [0:0]
:ufw6-reject-output - [0:0]
:ufw6-skip-to-policy-forward - [0:0]
:ufw6-skip-to-policy-input - [0:0]
:ufw6-skip-to-policy-output - [0:0]
:ufw6-track-forward - [0:0]
:ufw6-track-input - [0:0]
:ufw6-track-output - [0:0]
:ufw6-user-forward - [0:0]
:ufw6-user-input - [0:0]
:ufw6-user-limit - [0:0]
:ufw6-user-limit-accept - [0:0]
:ufw6-user-logging-forward - [0:0]
:ufw6-user-logging-input - [0:0]
:ufw6-user-logging-output - [0:0]
:ufw6-user-output - [0:0]
-A INPUT -j ufw6-before-logging-input
-A INPUT -j ufw6-before-input
-A INPUT -j ufw6-after-input
-A INPUT -j ufw6-after-logging-input
-A INPUT -j ufw6-reject-input
-A INPUT -j ufw6-track-input
-A INPUT -j LOG --log-prefix "[IPTABLES] " --log-tcp-options
-A INPUT -j LOG --log-prefix "[IPTABLES] " --log-tcp-options
-A FORWARD -j ufw6-before-logging-forward
-A FORWARD -j ufw6-before-forward
-A FORWARD -j ufw6-after-forward
-A FORWARD -j ufw6-after-logging-forward
-A FORWARD -j ufw6-reject-forward
-A FORWARD -j ufw6-track-forward
-A FORWARD -j LOG --log-prefix "[IPTABLES] " --log-tcp-options
-A FORWARD -j LOG --log-prefix "[IPTABLES] " --log-tcp-options
-A OUTPUT -j ufw6-before-logging-output
-A OUTPUT -j ufw6-before-output
-A OUTPUT -j ufw6-after-output
-A OUTPUT -j ufw6-after-logging-output
-A OUTPUT -j ufw6-reject-output
-A OUTPUT -j ufw6-track-output
-A ufw6-after-input -p udp -m udp --dport 137 -j ufw6-skip-to-policy-input
-A ufw6-after-input -p udp -m udp --dport 138 -j ufw6-skip-to-policy-input
-A ufw6-after-input -p tcp -m tcp --dport 139 -j ufw6-skip-to-policy-input
-A ufw6-after-input -p tcp -m tcp --dport 445 -j ufw6-skip-to-policy-input
-A ufw6-after-input -p udp -m udp --dport 546 -j ufw6-skip-to-policy-input
-A ufw6-after-input -p udp -m udp --dport 547 -j ufw6-skip-to-policy-input
-A ufw6-after-logging-forward -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw6-after-logging-input -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw6-before-forward -m rt --rt-type 0 -j DROP
-A ufw6-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw6-before-forward -p ipv6-icmp -m icmp6 --icmpv6-type 1 -j ACCEPT
-A ufw6-before-forward -p ipv6-icmp -m icmp6 --icmpv6-type 2 -j ACCEPT
-A ufw6-before-forward -p ipv6-icmp -m icmp6 --icmpv6-type 3 -j ACCEPT
-A ufw6-before-forward -p ipv6-icmp -m icmp6 --icmpv6-type 4 -j ACCEPT
-A ufw6-before-forward -p ipv6-icmp -m icmp6 --icmpv6-type 128 -j ACCEPT
-A ufw6-before-forward -p ipv6-icmp -m icmp6 --icmpv6-type 129 -j ACCEPT
-A ufw6-before-forward -j ufw6-user-forward
-A ufw6-before-input -i lo -j ACCEPT
-A ufw6-before-input -m rt --rt-type 0 -j DROP
-A ufw6-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw6-before-input -m conntrack --ctstate INVALID -j ufw6-logging-deny
-A ufw6-before-input -m conntrack --ctstate INVALID -j DROP
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 1 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 2 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 3 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 4 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 128 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 129 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 133 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 134 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 135 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 136 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 141 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 142 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 130 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 131 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 132 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 143 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 148 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 149 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 151 -m hl --hl-eq 1 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 152 -m hl --hl-eq 1 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 153 -m hl --hl-eq 1 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 144 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 145 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 146 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 147 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -d fe80::/10 -p udp -m udp --sport 547 --dport 546 -j ACCEPT
-A ufw6-before-input -d ff02::fb/128 -p udp -m udp --dport 5353 -j ACCEPT
-A ufw6-before-input -d ff02::f/128 -p udp -m udp --dport 1900 -j ACCEPT
-A ufw6-before-input -j ufw6-user-input
-A ufw6-before-output -o lo -j ACCEPT
-A ufw6-before-output -m rt --rt-type 0 -j DROP
-A ufw6-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 1 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 2 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 3 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 4 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 128 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 129 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 133 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 136 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 135 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 134 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 141 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 142 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 130 -j ACCEPT
-A ufw6-before-output -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 131 -j ACCEPT
-A ufw6-before-output -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 132 -j ACCEPT
-A ufw6-before-output -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 143 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 148 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 149 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 151 -m hl --hl-eq 1 -j ACCEPT
-A ufw6-before-output -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 152 -m hl --hl-eq 1 -j ACCEPT
-A ufw6-before-output -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 153 -m hl --hl-eq 1 -j ACCEPT
-A ufw6-before-output -j ufw6-user-output
-A ufw6-logging-allow -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW ALLOW] "
-A ufw6-logging-deny -m conntrack --ctstate INVALID -m limit --limit 3/min --limit-burst 10 -j RETURN
-A ufw6-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw6-skip-to-policy-forward -j DROP
-A ufw6-skip-to-policy-input -j DROP
-A ufw6-skip-to-policy-output -j ACCEPT
-A ufw6-track-output -p tcp -m conntrack --ctstate NEW -j ACCEPT
-A ufw6-track-output -p udp -m conntrack --ctstate NEW -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 20 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 21 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 25 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 53 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 80 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 110 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 143 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 587 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 993 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 995 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 8080 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 8081 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 10000 -j ACCEPT
-A ufw6-user-input -p udp -m udp --dport 53 -j ACCEPT
-A ufw6-user-input -p tcp -m multiport --dports 29799:29899 -j ACCEPT
-A ufw6-user-input -p udp -m udp --dport 25 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 8082 -j ACCEPT
-A ufw6-user-limit -m limit --limit 3/min -j LOG --log-prefix "[UFW LIMIT BLOCK] "
-A ufw6-user-limit -j REJECT --reject-with icmp6-port-unreachable
-A ufw6-user-limit-accept -j ACCEPT
COMMIT
# Completed on Wed Oct 17 06:25:40 2018
edit3:
Grâce à l'aide de tous, j'ai pu convaincre l'opérateur du centre de données que le problème est dans leur infrastructure. Le problème était vraiment dans le paramètre MTU sur un routeur virtuel sur le chemin d'Internet.
ip6table-save
serait pertinente.ip6tables-save
je voulais voir. Cette commande affichera les règles complètes.Réponses:
Vous avez un problème MTU.
J'ai testé
wget -O /dev/null https://www.ekasparova.eu
tout en observant le trafic avectcpdump
. Voici ce que j'ai vu:Les 3 premiers paquets sont la poignée de main. Les deux extrémités annoncent
mss 1440
ce qui signifie qu'elles sont capables de recevoir des paquets avec 1440 octets de charge utile TCP, en comptant les en-têtes et cela totalise jusqu'à 1500 octets de trafic IP, ce que Ethernet prend généralement en charge.Les 2 paquets suivants sont le bonjour au client et l'accusé de réception a été reçu par le serveur.
Les 2 derniers paquets sont là où les choses deviennent intéressantes. Par défaut,
tcpdump
affiche les numéros de séquence relatifs, qui dans ce cas facilitent la lecture de la capture. Dans le paquet du serveur, c'est la partie intéressanteseq 2857:3678
. Nous voyons un saut de1
à ce2857
qui signifie qu'il ya un écart de 2856 octets que le client n'a pas encore RECEIVE. 2856 octets correspond à deux paquets de 1428 octets. La différence entre 1440 et 1428 est la taille d'une option d'horodatage.Ainsi, le serveur a envoyé le serveur bonjour divisé en 3 paquets. Mais les deux premiers étaient trop volumineux pour le réseau et n'ont pas été livrés au client.
Dans le paquet final du client au serveur, nous voyons cela
sack 1 {2857:3678}
. Il s'agit d'un accusé de réception sélectif envoyé par le client informant le serveur qu'il existe un écart dans les données qu'il a reçues jusqu'à présent.Il est probable que le serveur envoie sans cesse les deux paquets perdus. Mais peu importe combien de fois il retransmet les deux mêmes paquets, ils restent trop gros pour le réseau. Et probablement un routeur sur le chemin envoie un message d'erreur au serveur l'informant que les paquets sont trop gros et doivent être retransmis en paquets plus petits.
Si le serveur recevait ces messages d'erreur, il retransmettrait les paquets plus petits selon les besoins. Et il se souviendrait du PMTU plus petit, de sorte que lors des demandes ultérieures, il n'aurait pas à répéter cette étape de découverte.
Une explication possible de tout cela est que vous avez un pare-feu mal configuré qui supprime tous les messages d'erreur informant votre serveur qu'il doit retransmettre les données en paquets plus petits.
la source
traceroute6 --mtu www.google.com
chercherF=####
inséré dans les lignes de sortie, ou les lignes de sortie où aucune réponse ne revient du tout. Après réflexion, exécutez-le et modifiez votre question avec la sortie.Je suis d'accord avec @kasperd qu'il s'agit d'un problème MTU. Par exemple, par défaut,
wget -6 -O/dev/null http://www.ekasparova.eu
cela ne fonctionnerait pas (il obtiendrait une redirection courte vers lahttps://www.babysoul.cz/
même IP, mais il se bloquerait ensuite sur le prochain paquet plus gros). Ensuite, j'ai réduit le MSS de force pour votre hôte:et après cela
wget
fonctionne normalement. C'est donc un problème de MTU. La comparaison de la sortie demtr -6 -n --psize 1410 www.ekasparova.eu
(qui fonctionne) avecmtr -6 -n --psize 1411 www.ekasparova.eu
indiquerait que le problème est soit sur votre hôte,2a04:f310:100:3:f816:3eff:fea3:4553
soit en amont sur2a04:f310:100::125
Ce que vous pourriez faire comme solution de contournement (à part contacter votre amont):
Testez à quelle taille de paquet il casse (c.-à-d.
wget -6 -O/dev/null http://v6.testmyipv6.com/MTUtest/1500.dat
Ne fonctionnera probablement pas pour vous alors qu'il le devrait, maiswget -6 -O/dev/null http://v6.testmyipv6.com/MTUtest/1000.dat
fonctionnera très bien), puis soit:ifconfig eth0 mtu 1200
). Cela devrait fonctionner pour tous les paquets. Le problème est que si quelque chose sur le chemin a un MTU encore plus bas, vous ne pourrez pas communiquer avec eux. Et la baisse de MTU entraînera des performances quelque peu inférieures (ce n'est pas grave, sauf si vous êtes généralement un gros site)la source
ip6tables
). Vous n'êtes pas censé faire cela, mais il s'avère que le serrage du MSS en transit à un maximum de 1220 est une solution de contournement très efficace pour les problèmes de MTU. Et cela peut être fait sur l'un ou l'autre des terminaux ou sur n'importe quel routeur intermédiaire, et cela atténuera les problèmes de MTU pour TCP dans les deux sens.advmss
vous n'influencez que la taille des segments que vous allez recevoir et non les segments que vous allez envoyer. Le maximum que vous êtes prêt à envoyer n'est pas communiqué - car cela n'est pas nécessaire. Les deux dérivent leur valeur par défaut du MTU, l'un des deux peut être remplacé paradvmss
. Je ne connais pas un moyen pour une entrée de routage de remplacer l'autre, mais s'il y en a un, j'aimerais apprendre.