Probleme mit ipv6 Server (network is unreachable -> Routing?)

Hallo zusammen!

Ich habe mir heute einen einfachen tcp server für das testen von IPV6 aufgesetzt. Dieser läuft über meinen Heimrechner. Gemäss meinem ISP hat der Router selbst zwar immernoch eine IPV4 aber jedes kompatible Gerät hat eine eigene öffentliche IPV6 adresse und sollte ja somit theoretisch öffentlich vom internet erreichbar sein. Der Server selbst ist über einen Client auf dem gleichen Gerät erreichbar. Probleme gab es aber als ich versuchte diesen über ein anderes Gerät (Ubuntu) über eine andere Internet Verbindung zu erreichen. Die Fehlermeldung lautete: network is unreachable
Folglich fand ich heraus das ich selbst auf dem Rechner auf dem der ipv6 Server läuft, jeglicher ping versuch an IPV6 only webseiten im selben Error scheiterten.

Bin kein Networking Profi und bin um jeden Tipp und Input herzlich Dankbar, wäre natuerlich toll wenn ich das kleine Projekt zum laufen bringen würde.
Mein eigenes Fazit nach vielen Internetrecherchen lautet das es wahrscheinlich am Gateaway und Routing liegt.
Ich denke es ist am besten wenn ich mal ein paar commands und Fakten teile, ich danke herzlich im vorraus:

PC:
  • OS: Almalinux (RHEL)
  • Server: Go -> standard library, daran kann es aber denke ich nicht liegen, ist ja ein allgemeines Problem
2. PC:
  • OS: Ubuntu
  • Keine global scope Addresse vorhanden (siehe unten). Sonst ipv6 normal vorhanden
Alle Commands wurden auf dem PC auf dem der Server laueft ausgefuehrt:
Router:
  • Firewall von Router erlaubt bei IPV6 ausgehende und einkommende Verbindungen. Beinhaltet auch bekannte Protokolle wie tcp etc.
  • Port forwarding gemaess ISP bei IPV6 nicht noetig.
  • Gemeass ISP werden IPV6 Addressen werden dynamisch zugewiesen, sollte aber trotzdem keine Problem sein fuer denn oeffentlichen Zugriff
--------------------------------------------------------
$ ping -c 2 -6 www.cyberciti.biz
ping: connect: Network is unreachable
$ ping [xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]:1025
Hallo Welt!
-------------------------------------------------------
$ modinfo ipv6
name: ipv6
filename: (builtin)
alias: net-pf-10
license: GPL
file: net/ipv6/ipv6
description: IPv6 protocol stack for Linux
author: Cast of dozens
parm: disable:Disable IPv6 module such that it is non-functional (int)
parm: disable_ipv6:Disable IPv6 on all interfaces (int)
parm: autoconf:Enable IPv6 address autoconfiguration on all interfaces (int)
---------------------------------------------------
$ sudo cat /etc/sysconfig/ip6tables
[sudo] password for user:
# Generated by ip6tables-save v1.8.8 (nf_tables) on Sun Jun 18 17:02:56 2023
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p tcp -m tcp --dport 1025 -j ACCEPT <-- Denn Port auf dem ich den Server laufen lasse
COMMIT
---------------------------------------------------
$ ip -6 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 2xxx:1xxx:1xxx:3xxx:dxxx:cxxx:fxxx:cxxx/64 scope global deprecated dynamic noprefixroute
valid_lft 7066sec preferred_lft 0sec
inet6 fxxx::dxxx:cxxx:fxxx:cxxx/64 scope link noprefixroute
valid_lft forever preferred_lft forever
Gemaess Internet:
1687115956046.png

--------------------------------------------------
$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6
0
-------------------------------------------------
$ [ -f /proc/net/if_inet6 ] && echo 'IPv6 OK' || echo 'No IPv6'
IPv6 OK
------------------------------------------------
$ ip -6 route
::1 dev lo proto kernel metric 256 pref medium
2xxx:1xxx:1xxx:3xxx::/64 dev enp4s0 proto ra metric 100 pref medium -> entspricht 2xxx:1xxx:1xxx:3xxx:dxxx:cxxx:fxxx:cxxx/
fe80::/64 dev enp4s0 proto kernel metric 1024 pref medium
$ ping6 2xxx:1xxx:1xxx:3xxx::
PING 2xxx:1xxx:1xxx:3xxx::(2xxx:1xxx:1xxx:3xxx::) 56 data bytes
...bleibt haengen nach dem ersten mal / keine weiteren pings
---------------------------------------------------
$ cat /proc/net/if_inet6
00000000000000000000000000000001 01 80 10 80 lo
2xxx1xxx1xxx3xxxdxxxcxxxfxxxcxxx 02 40 00 20 enp4s0
fxx0000000000000dxxxcxxxfxxxc4xx 02 40 20 80 enp4s0
 
Zuletzt bearbeitet von einem Moderator:
Also du bekommst eine valide, öffentliche ipv6 addresse in deinem netzwerk, aber ein ping6 auf irgendeine seite funktioniert nicht?

Gilt das auch für ping6 auf lokale rechner?

Bist du sicher das das Gateway da nichts blockt?

Kannst du das Problem mit anderen Betriebsystemen im gleichen netz nachstellen?
 
Also du bekommst eine valide, öffentliche ipv6 addresse in deinem netzwerk, aber ein ping6 auf irgendeine seite funktioniert nicht?

Gilt das auch für ping6 auf lokale rechner?

Bist du sicher das das Gateway da nichts blockt?

Kannst du das Problem mit anderen Betriebsystemen im gleichen netz nachstellen?
Danke fuer deine schnelle Rueckmeldung!

Commands auf Pc auf dem der Server laueft:
$ go run http.go &
[1] 9934
$ curl http://[2xxx:1xxx:1xxx:3xxx:dxxx:cxxx:fxxx:cxxx]:1025/
Hello, World!
$ curl [2xxx:1xxx:1xxx:3xxx:dxxx:cxxx:fxxx:cxxx]:1025/
Hello, World!
$ ping6 http://[2xxx:1xxx:1xxx:3xxx:dxxx:cxxx:fxxx:cxxx]:1025/
ping6: http://[2xxx:1xxx:1xxx:3xxx:dxxx:cxxx:fxxx:cxxx]:1025/ Name or service not known
$ ping6 [2xxx:1xxx:1xxx:3xxx:dxxx:cxxx:fxxx:cxxx]:1025/

ping6: [2xxx:1xxx:1xxx:3xxx:dxxx:cxxx:fxxx:cxxx]:1025/ Name or service not known
$ kill 10124

signal: terminated
$ go run tcp.go &
[1] 10646
$ ping6 [2xxx:1xxx:1xxx:3xxx:dxxx:cxxx:fxxx:cxxx]:1025/
ping6: [2xxx:1xxx:1xxx:3xxx:dxxx:cxxx:fxxx:cxxx]:1025/ Name or service not known
(bin mir nicht sicher ob ping nur auf http server ausgelegt ist)

Auf dem 2. PC mit Ubuntu kann ich den Server selbst nicht darstellen, mir wird dort keine oeffentliche ipv6 Addresse zugeteilt. Grund dafuer ist wahrscheinlich das es eine Virtuelle Maschine ist (Haupt OS auf 2. PC ist Windows 11). Aber beim pingen tritt der gleiche Error auf (von ipv6 only websiten sowie bei der Verbindung zu meinem Server). Ueber andere Betriebssysteme verfuege ich leider gerade nicht.

Habe einen Test durchgefuehrt. Der http sowie tcp server auf einer (nicht oeffentlich) lokaler statischer ip ist auf dem 2. Ubuntu PC im gleichen Internet (nicht anderes Netzwerk wie vorher) normal erreichbar.

Gibst es Wege wie ich das Gateaway genauer inzspizieren kann?. Die Firewall am Router ist auf der niedrigsten Einstellungen, bei IPV6 sind somit nicht nur Ausgaenge sowie auch alle Eingaenge erlaubt (geamess Infobox von ISP), was mir beastigt das mein Server eigentlich erreichbar sein sollte. Wie gesagt bin ich leider was Networking angeht nicht sehr gelehrt.
 
Zuletzt bearbeitet:
ping verwendet icmp und kennt somit keinen port. Deshalb auch name or service unknown.
 
Du scheinst schlicht keine v6 default Route gesetzt zu haben und kommst daher aus dem lokalen Netz nicht raus.
 
Du scheinst schlicht keine v6 default Route gesetzt zu haben und kommst daher aus dem lokalen Netz nicht raus.
Weisst du wie genau man eine v6 default route setzen koennte um aus dem lokalen Netz herauszukommen?

$ ip neigh show
192.xxx.x.x dev enp4s0 lladdr ... REACHABLE
2xxx:1xxx:1xxx:3xxx:: dev enp4s0 lladdr ... router STALE
2xxx:1xxx:1xxx:3xxx:1xxx:cxxx:fxxx:bxxx dev enp4s0 lladdr ... router REACHABLE -> oeffentliche ipv6 vom router
fxxx::1xxx:cxxx:fxxx:bxxx dev enp4s0 lladdr .... router REACHABLE

Aktueller gateaway -> bitte korrigieren falls falsche Begrifflichkeiten etc.

ip -6 route
::1 dev lo proto kernel metric 256 pref medium
2xxx:1xxx:1xxx:3xxx::/64 dev enp4s0 proto ra metric 100 pref medium
fe80::/64 dev enp4s0 proto kernel metric 1024 pref medium
 
ip -6 route
::1 dev lo proto kernel metric 256 pref medium
2xxx:1xxx:1xxx:3xxx::/64 dev enp4s0 proto ra metric 100 pref medium
fe80::/64 dev enp4s0 proto kernel metric 1024 pref medium
Wie sind im Ubuntu, die Ausgaben von:
Code:
ip -6 route get 2a02:2e0:3fe:1001:302::
nc -6 -zv 2a02:2e0:3fe:1001:302:: 443
?
 
UPDATE: Pingen scheint zu funktionieren. Ebenso sind ipv6 only webseiten im internet nun abrufbar. Problem war wie @derOliver gesagt hat dass kein default gateaway festgelegt war.

$ sudo ip -6 route add default xxxx... (ipv6 vom router)
$ ping -c 2 -6 ipv6.google.com
PING ipv6.google.com(mil41s03-in-x0e.1e100.net (2a00:1450:4002:405::200e)) 56 data bytes
64 bytes from mil41s03-in-x0e.1e100.net (2a00:1450:4002:405::200e): icmp_seq=1 ttl=59 time=9.27 ms
64 bytes from mil41s03-in-x0e.1e100.net (2a00:1450:4002:405::200e): icmp_seq=2 ttl=59 time=7.75 ms

--- ipv6.google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 7.746/8.506/9.267/0.760 ms

UPDATE: Server ist nun von aussen erreichbar!
1687127307364.png


Schaue mir morgen das ganze nochmal mit dem Server und dem 2. pc an und melde mich nochmal. Probleme waren offenbar (nun offensichtlich) die ganze Zeit Client bedingt.
 
Zuletzt bearbeitet:
Firewall von Router erlaubt bei IPV6 ausgehende und einkommende Verbindungen.
Äh, damit ist quasi dein gesamtes Netz im Internet...wenn da alles auf Durchzug steht. Normalerweise lässt man da bei Ersteinrichtung nur den tcp6-ping rein und raus, einerseits weil das Voraussetzung ist und andererseits zum Test. Mit anderen Worten: du solltest für jedes Gerät dann schon einzelne FW-Regeln haben.
 
... du solltest für jedes Gerät dann schon einzelne FW-Regeln haben.
Warum? Wenn er auf dem Gerät keine lauschenden Ports (für die Öffentlichkeit?) hat, können keine NEW-Verbindungen (eingehend) zustande kommen. Es kommen nur RELATED/ESTABLISHED-Verbindungen (ausgehend-eingehend) zustande.
 
Ich hab mich doof ausgedrückt, "jedes Gerät überprüfen" ob es auch keine offenen Ports hat, wäre besser.
Dennoch halte ich das für nachfeilenswert:
Firewall von Router erlaubt bei IPV6 ausgehende und einkommende Verbindungen. Beinhaltet auch bekannte Protokolle wie tcp etc.

Das nächste Gerät im Netz hat dann offene Ports, man denkt nicht dran und ich würde das nicht wollen. :)
 
Ich hab mich doof ausgedrückt, "jedes Gerät überprüfen" ob es auch keine offenen Ports hat, wäre besser.
Dennoch halte ich das für nachfeilenswert:


Das nächste Gerät im Netz hat dann offene Ports, man denkt nicht dran und ich würde das nicht wollen. :)
Das gute ist das man bei meinem ISP zuerst bei einem Gereat eine lokale statische IP Adresse einrichten muss. Erst dann, bekommt das Gereat eine oeffentliche IPV6 Adresse. Sonst hat jedes Gereat nur eine scope link ipv6 Adresse.
 
Wie sind im Ubuntu, die Ausgaben von:
Code:
ip -6 route get 2a02:2e0:3fe:1001:302::
nc -6 -zv 2a02:2e0:3fe:1001:302:: 443
?
Ubuntu hat nicht funktioniert weil es auf einer Virtuellen Machine lief. Nur das Haupt OS WIndows hat ipv6.

Habe nun auf einem 3. PC Ubuntu aufgesetzt und dort mal den Server aufgeschaltet. Ist nun von ueberall her erreichbar (Almalinux, Windows etc.).

Rueckblich und Fazit:
Problem war glaube ich von Anfang das Ubuntu zuerst auf einer Virtuellen Machine lief + der Pc auf dem der Server uerspruenglich gehostet wurde Almalinux war. Bei Ubuntu war alles bereits eingerichtet (Gateaway, ipv6 etc.) und der Server lief sofort ohne Probleme. Almalinux ist halt wie Arch sehr minimal. Man muss sehr viel selber installieren und konfigurieren. Also der einfachheithalber her eignet sich Ubuntu mehr als Almalinux.

Bei AlmaLinux musste man noch den Port bei der firewall freigeben:
$ sudo firewall-cmd --zone=public --add-port=1025/tcp --permanent
$ sudo firewall-cmd --reload

Danke nochmals an die Hilfe und Inputs von allen!
 
Zuletzt bearbeitet:
Ja, bei virtuellen maschinen muss man sehr genau schauen was der hypervisor netzwerktechnisch so macht.

So grob: Solange man keine direkte Bridge zu einem der Netzwerinterfaces macht, ist der default der hypervisoren standardmäßig meist irgendwas nat-mäßiges, oft komplett noch ohne ipv6, bei hyperv oder gar wsl auf jedenfall.
 
Zurück
Oben