BillMaier
Supporter
Anmeldungsdatum: 4. Dezember 2008
Beiträge: 6389
|
Moin,
kann mir jemand erklären, nach welchen Regeln / Prios die Namensauflösung für und das Routing von IPv4/IPv6 funktioniert? Oder einen Link zum Wiki schicken ... Hintergrund meiner Frage: # netstat -tulpn | grep 8086
tcp6 0 0 :::8086 :::* LISTEN 76751/docker-proxy
Der Dienst lauscht hier also auf IPv6. | # curl localhost:8086
404 page not found
|
ok. (der Dienst antwortet, dass er mit 404 antwortet tut nichts zur Sache) | # curl 127.0.0.1:8086
404 page not found
|
Warum? Wird da IPv4 nach IPv6 geroutet? Gestern hatte ich ich den Effekt, dass bei gleicher netstat-Ausgabe ein Dienst nur auf
und nicht auf antwortete. Da war meine Verwirrung perfekt. Danke schon mal für die Hilfe.
|
kB
Supporter, Wikiteam
Anmeldungsdatum: 4. Oktober 2007
Beiträge: 7816
|
BillMaier schrieb: […] Namensauflösung …
und das Routing von IPv4/IPv6 funktioniert?
| # curl localhost:8086
404 page not found
|
[…] | # curl 127.0.0.1:8086
404 page not found
|
Warum?
Wird da IPv4 nach IPv6 geroutet?
|
BillMaier
Supporter
(Themenstarter)
Anmeldungsdatum: 4. Dezember 2008
Beiträge: 6389
|
kB schrieb: ich weiß. # host localhost
localhost has address 127.0.0.1
localhost has IPv6 address ::1
gibt es hier eine Prio? Wenn ja, wo wird sie definiert?
Wird da IPv4 nach IPv6 geroutet?
es sei denn es ist explizit eingerichtet https://de.wikipedia.org/wiki/NAT64
|
BillMaier
Supporter
(Themenstarter)
Anmeldungsdatum: 4. Dezember 2008
Beiträge: 6389
|
so, ich bin einen Schritt weiter: root@docker2:~# netstat -tulpn | grep 8086
tcp6 0 0 :::8086 :::* LISTEN 20441/dockerd
root@docker2:~# curl -4 http://localhost:8086
404 page not found
root@docker2:~# curl -6 http://localhost:8086
^C
root@docker2:~# curl -4 http://docker2:8086
404 page not found
root@docker2:~# curl -6 http://docker2:8086
curl: (6) Could not resolve host: docker2
root@docker2:~# host localhost
localhost has address 127.0.0.1
localhost has IPv6 address ::1
root@docker2:~# host docker2
docker2 has address 192.168.253.102 root@docker2:~# curl http://localhost:8086
^C
root@docker2:~# curl http://docker2:8086
404 page not found curl nutzt hier also standardmäßig zur Namensauflösung IPv6.
Falls es dafür keinen Eintrag gibt, nimmt er IPv4. Warum zeigt dann netstat nur 'tcp6' auf diesem Port? kB Ganz so einfach scheint es doch nicht zu sein wie du schreibst. Schau mal https://unix.stackexchange.com/questions/152612/netstat-why-are-ipv4-daemons-listening-to-ports-listed-only-in-a-inet6?answertab=votes#tab-top und https://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses
Mal abgesehen von der Technik (ist jetzt kein Routing), aber ein Mapping scheint es zu geben.
|
kB
Supporter, Wikiteam
Anmeldungsdatum: 4. Oktober 2007
Beiträge: 7816
|
BillMaier schrieb: […]
# host localhost
localhost has address 127.0.0.1
localhost has IPv6 address ::1 }}}
gibt es hier eine Prio? Wenn ja, wo wird sie definiert?
Wird da IPv4 nach IPv6 geroutet?
es sei denn es ist explizit eingerichtet https://de.wikipedia.org/wiki/NAT64
Auch NAT64 ist kein Routing zwischen IPv6 und IPv4. Wie gesagt, aus technischen Gründen geht ein solchen Routing gar nicht. NAT64 ist NAT für IPv6, wobei die IPv6-Adressen algorithmisch aus IPv4-Adressen berechnet werden und ein Gateway (welches zwar 64-Router genannt wird, aber kein Router auf Layer-3 ist) die Layer-4-Nutzdaten aus dem IPv6-Paket auspackt und neu in IPv4 verpackt. Ein Router arbeitet auf Layer-3, NAT64 funktioniert auf Layer-4.
|
kB
Supporter, Wikiteam
Anmeldungsdatum: 4. Oktober 2007
Beiträge: 7816
|
BillMaier schrieb: […]
kB Ganz so einfach scheint es doch nicht zu sein wie du schreibst. Schau mal https://unix.stackexchange.com/questions/152612/netstat-why-are-ipv4-daemons-listening-to-ports-listed-only-in-a-inet6?answertab=votes#tab-top und https://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses
Mal abgesehen von der Technik (ist jetzt kein Routing), aber ein Mapping scheint es zu geben.
Ja, diese beiden Zitate beschreiben, dass man IPv4-Adressen im IPv6-Adress-Namensraum darstellen kann. Das ist nur eine Notation und hat nichts mit IPv4 ←→ IPv6 Kommunikation auf Layer-3 (Routing) zu tun, was nicht funktionieren kann.
|
BillMaier
Supporter
(Themenstarter)
Anmeldungsdatum: 4. Dezember 2008
Beiträge: 6389
|
Allein schon das mit der Notation erzeugt Haarausfall!
Ich will doch nicht sehen, dass mein Dienst auf tcp6 lauscht mit einer IPv4-notierten IPv6-Adresse 🙄 //edited:
mit einer IPv6-notierten IPv4-Adresse (confused)
|
kB
Supporter, Wikiteam
Anmeldungsdatum: 4. Oktober 2007
Beiträge: 7816
|
BillMaier schrieb: […] (confused)
Willkommen im Club!
|
thomasschaefer
Anmeldungsdatum: 20. Dezember 2013
Beiträge: 54
|
Das ist ganz einfach: ist unter linux in der Regel ein Dualstacksocket, es sei denn irgendwo beim Aufruf der Socketfunktion wird IPv6-only mitgegeben. das "tcp6" bei einigen Netstat-Versionen, vor allem die bei Ubuntu und debian, ist schlichtweg falsch. Zum einen ist es nur tcp und zum anderen verwirrt es mit der Angabe "6", wenn unter diesem Socket auch IPv4-Packete angenommen werden. Das ganze hat nichts mit DNS oder gar NAT64 zu tun. DNS spielt nur dann eine Rolle wenn z.B. localhost in der nur für eines der beiden Protokolle definiert ist. Beim direkten Aufruf von 127.0.0.1 bzw. ::1 wird es uninteressant. Beispiel von Netstat (opensuse) | tcp 0 0 :::80 :::* LISTEN 2779/httpd-prefork
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2814/sshd
tcp 0 0 :::22 :::* LISTEN 2814/sshd
|
Der Apache bedient hier ipv4 und ipv6 mit einem Socket und sshd verwendet dafür zwei. Obendrauf ist tcp und nicht tcp4 oder tcp6.
|
BillMaier
Supporter
(Themenstarter)
Anmeldungsdatum: 4. Dezember 2008
Beiträge: 6389
|
kB schrieb:
"meistens" stelle ich hiermit mal in Frage: aus der /etc/hosts , Ubuntu 16.04:
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
//edited: selbst wenn ich es da entferne, wird es per
host localhost
immer noch aufgelöst. Scheint also noch andere Ecken zu geben...
|
BillMaier
Supporter
(Themenstarter)
Anmeldungsdatum: 4. Dezember 2008
Beiträge: 6389
|
thomasschaefer schrieb: Das ist ganz einfach: ist unter linux in der Regel ein Dualstacksocket, es sei denn irgendwo beim Aufruf der Socketfunktion wird IPv6-only mitgegeben. das "tcp6" bei einigen Netstat-Versionen, vor allem die bei Ubuntu und debian, ist schlichtweg falsch. Zum einen ist es nur tcp und zum anderen verwirrt es mit der Angabe "6", wenn unter diesem Socket auch IPv4-Packete angenommen werden. Das ganze hat nichts mit DNS oder gar NAT64 zu tun. DNS spielt nur dann eine Rolle wenn z.B. localhost in der nur für eines der beiden Protokolle definiert ist. Beim direkten Aufruf von 127.0.0.1 bzw. ::1 wird es uninteressant. Beispiel von Netstat (opensuse) | tcp 0 0 :::80 :::* LISTEN 2779/httpd-prefork
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2814/sshd
tcp 0 0 :::22 :::* LISTEN 2814/sshd
|
Der Apache bedient hier ipv4 und ipv6 mit einem Socket und sshd verwendet dafür zwei. Obendrauf ist tcp und nicht tcp4 oder tcp6.
So gehört das! 👍
Aber mich fragt ja keiner 😲 Dumm nur, wenn irgendwelche Applikationen im Hintergrund curl verwenden (solls geben...) und deshalb für IPv6 zwar eine Namensauflösung bekommen, aber kein Dienst antwortet. Jetzt kann man entweder versuchen curl umzubiegen oder dem Host die Namensauflösung für IPv6 weg nehmen (versuchen...) oder den IPv6-Weg sicher zu stellen. Letzteres wäre zwar ideal, aber das kann nicht der Anspruch von heute auf morgen sein... Von daher werde ich mich mal daran versuchen: https://unix.stackexchange.com/questions/265597/how-to-avoid-curl-trying-ipv6-name-resolution
|
thomasschaefer
Anmeldungsdatum: 20. Dezember 2013
Beiträge: 54
|
Normalerweise testet man ja erst die Applikationen via IPv6 und setzt dann die AAAA-Records. Bei Localhost mit gesetzten ::1 localhost in /etc/hosts muss man auch ein wenig den Zusammenstellern der Distribution trauen.
Ordentlich (vor)konfiguriert gibt es praktisch keinen Dienst, der noch kein IPv6 unterstützt. Im Moment leide ich noch unter xrdp, einige Paketmaintainer halten es schlichtweg nicht für nötig, dort Dualstack einzuschalten. (betrifft aber nicht localhost sondern vorallem das Problem von DS-lite)
|
BillMaier
Supporter
(Themenstarter)
Anmeldungsdatum: 4. Dezember 2008
Beiträge: 6389
|
Bei mir ist es Docker.
"By default, the Docker daemon configures the container network for IPv4 only"
https://docs.docker.com/engine/userguide/networking/default_network/ipv6/
Allerdings lässt es sich wohl einfach aktivieren. Mal schaun, ob das zuverlässig funktioniert.
|
BillMaier
Supporter
(Themenstarter)
Anmeldungsdatum: 4. Dezember 2008
Beiträge: 6389
|
thomasschaefer schrieb: Das ist ganz einfach: ist unter linux in der Regel ein Dualstacksocket, es sei denn irgendwo beim Aufruf der Socketfunktion wird IPv6-only mitgegeben. das "tcp6" bei einigen Netstat-Versionen, vor allem die bei Ubuntu und debian, ist schlichtweg falsch.
Vielen Dank noch für diese Klarstellung! 👍
|
BillMaier
Supporter
(Themenstarter)
Anmeldungsdatum: 4. Dezember 2008
Beiträge: 6389
|
|