Ubuntu 22 SSHD per sshd_config IPv6 explizit freigeben

killakuh

Cadet 3rd Year
Registriert
Nov. 2019
Beiträge
37
Gudn Abend und schönes WE schon mal,

ich versuche sshd auf einer bestimmten IPv6 IP lauschen zu lassen. OS ist Ubuntu 22.

Habe statt

AddressFamily inet6
ListenAddress ::

folgendes eingegeben:

AddressFamily inet6
ListenAddress [XXXX:XXXX:XXXX:008d:0000:0000:0193:7e23]

und mit

service sshd restart

die ssh daemon neu gestartet.

das funktioniert auch - bis zum nächsten reboot des servers.

sudo netstat -nplW | grep sshd

gibt jedenfalls keinen offenen port mehr aus.

Das witzige ist: nach einem erneuten neustart der ssh daemon wird mit:

tcp6 0 0 XXXX:XXXX:XXXX:8d::193:7e23:22 :::* LISTEN

wieder ein offener port angezeigt.

Folgendes habe ich bereits probiert per crontab einzutragen (mit root Rechten):

@reboot /sbin/service restart sshd

Es hilft leider nicht.

Hat jemand eine erklärung / workaround hierfür, plz?
 
Hallo,

danke für die schnelle antwort.

ich möchte lediglich bestimmen, auf welcher IPv6 mit sshd gelauscht wird. irgendwie scheine ich jedoch in einen bug zu laufen.

edith: da eine zweite IPv6 definiert ist, kann es nicht daran liegen, dass es nur eine IP ist oder soetwas...
 
Zuletzt bearbeitet:
Ich nutze Ubuntu 22.04 und mache es genau so:

Code:
ListenAddress <IPv4>:<Port>
ListenAddress 127.0.0.1:<Port>
ListenAddress [<IPv6>]:<Port>
ListenAddress [::1]:<Port>

ich hab allerdings keinen Eintrag "AddressFamily".
 
du hast in der config
Code:
ListenAddress [XXXX:XXXX:XXXX:008d:0000:0000:0193:7e23]
und netstat zeigt
Code:
tcp6 0 0 XXXX:XXXX:XXXX:8d::193:7e23:22 :::* LISTEN
?

das ist doch soweit richtig - oder habe ich dich irgendwie falsch verstanden?

edit: habs nochmal gelesen - das problem ist, das nach einem reboot sshd nicht auf der ipv6 adresse lauscht, die bei ListenAddress konfiguriert wurde. wie sieht denn deine netzwerk-config aus? ich vermute mal ipv6 wird per slaac gemacht werden, damit ist beim startup der netzwerkdienst mit v4 durch und sshd wird gestartet, aber v6 ist noch nicht konfiguriert und sshd bindet nicht auf das interface.
 
Zuletzt bearbeitet:
riversource schrieb:
Ich nutze Ubuntu 22.04 und mache es genau so:

Code:
ListenAddress <IPv4>:<Port>
ListenAddress 127.0.0.1:<Port>
ListenAddress [<IPv6>]:<Port>
ListenAddress [::1]:<Port>

ich hab allerdings keinen Eintrag "AddressFamily".
Ich habe den Eintrag gelöscht und nach dem reboot habe ich erneut keine direkte verbindung per ssh:(
auch habe ich den port angefügt - wieder nix :( :(

bei IPv4 keine Probleme
 
ok, kannst du kurz sagen, was mit deiner netzwerk-konfig gemeint ist?

ich verstehe das so, dass evtl wegen der falschen reihenfolge der services ipv6 noch nicht ready ist, aber ich habe auf die schnelle keine ahnung wie ich das kontrollieren soll.

kann ich einen kurzen hint bekommen?
 
Zuletzt bearbeitet:
ich konnte dein problem bei mir nachvollziehen. helfen würde eine manuelle ipv6-konfiguration:

Code:
$ cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
  ethernets:
    ens18:
      dhcp4: true
      addresses:
        - xx::82ff:fe32:42ea/64
  version: 2


$ grep ListenAddress /etc/ssh/sshd_config
ListenAddress 0.0.0.0
ListenAddress [xx::82ff:fe32:42ea]

damit lauscht sshd auch beim booten auf der ipv6 adresse. ein dhcp6: true hat hier nichts gebracht. allerdings ist eine statische ipv6 config zumindest bei einem privaten internetanschluss eher kontraproduktiv, da sich das prefix immer mal ändern kann. wenn du als ipv6 adresse eine link-lokale oder globale statische ipv6 adresse verwendest sieht das natürlich besser aus.
 
Sollte systemd nicht dafür sorgen, die Dienste erst zu starten, wenn das Netzwerk komplett da ist?
 
Zuletzt bearbeitet:
anscheinend ist die bedingung schon erfüllt, wenn ipv4 verfügbar ist. https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/ sagt, dass network.target nicht wirklich viel zu bedeuten hat. der te könnte mal probieren, im sshd.service "After=network.target" durch "After=network-online.target" und "Wants=network-online.target" zu ersetzen. allerdings macht die doku da auch keine explizite aussage zu ipv6...

vielleicht ist es einfacher, sshd auf :: lauschen zu lassen und per firewall nur das eine interface zuzulassen...
 
  • Gefällt mir
Reaktionen: killakuh
Definiere einen Hostnamen für die IP-Adresse und setze dann die ListenAdress auf den Hostname:

ListenAdress mein.sshserver.example.net

Falls sich das IPv6-Präfix ändert, sorge dafür, daß der Hostname z. B. via DynDNS aktualisiert wird.

Einem Server weist du am besten sein eigenes /64-Subnetz zu, z. B. 2001:0db8:1234:5678::/64 und dann dem SSH-Server seine eigene IPv6-Adresse daraus, z. B. ::22. Dann ist er unter 2001:0db8:1234:5678::22 erreichbar. Das ist auch übersichtlicher, als ::0193:7e23. Es vereinfacht die Firewall-Regeln, wenn jeder Server-Dienst seine eigene IP-Adresse hat.

Achte darauf, daß du keine link-local, ULA (fe80::/16), SLAAC (fc00::/7) oder temporary IPv6 (privacy extensions) benutzt. Link-local Adressen sind nur aus direkt aus dem ans Interface angeschlossene Subnet erreichbar, SLAAC, ULA und temporary-IPv6-Adressen sind nicht für Serverdienste gedacht, da sie nicht statisch bleiben.
 
  • Gefällt mir
Reaktionen: killakuh
Zurück
Oben