Steffen: telnet zum localhost

Hallo,

ich habe ein Verständnisproblem und weiß nicht genau, wie ich hier weiter recherchieren soll.

Ich habe eine virtuelle Maschine mit einem Ubuntu. In der öffne ich ein normales Terminal. Die Maschine hat den Hostname "steffen-VirtualBox1".

Installiert habe ich hier einen WebServer/JBoss/Tomcat/Irgendwas (bin mir nicht sicher); jedenfalls lauscht das Ding auf Port 80.

Wenn ich jetzt ein telnet auf steffen-virtualbox1 Port 80 öffne, dann funktioniert das. Wenn ich das telnet auf localhost Port 80 öffne, dann geht das nicht.

Das gleiche Ergebnis im Browser.
http://localhost -> Unable to connect
http://steffen-virtualbox1 -> redirect nach http://steffen-virtualbox1/admin/

Das Terminal bzw. den Browser öffne ich direkt in der virtuellen Maschine.

Mein bisheriges Verständnis war, dass
(1) "telnet localhost 80" und
(2) "telnet steffen-virtualbox1 80" und
(3) "telnet 127.0.0.1 80" das gleiche tun und ein TCP/IP-Verbindung zum 127.0.0.1 auf Port 80 öffnen würden.

Bei 1. und 3. ist der Output
8<--
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
8<--

Bei 2. ist der Output
8<--
Trying 127.0.1.1...
Connected to steffen-VirtualBox1.
Escape character is '^]'.
8<--
Danach kann ich dann auf die Verbindung schreiben.

Wieso funktioniert die Verbindung bei 1. und 3. nicht? Bin für Tipps und weiterführende Links dankbar.

Hier noch ein paar Infos:

steffen@steffen-VirtualBox1:~$ ping steffen-virtualbox1
PING steffen-VirtualBox1 (127.0.1.1) 56(84) bytes of data.
64 bytes from steffen-VirtualBox1 (127.0.1.1): icmp_req=1 ttl=64 time=0.064 ms

steffen@steffen-VirtualBox1:~$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_req=1 ttl=64 time=0.139 ms

steffen@steffen-VirtualBox1:~$ ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_req=1 ttl=64 time=0.073 ms

steffen@steffen-VirtualBox1:~$ tracepath steffen-virtualbox1
 1:  steffen-VirtualBox1                                   0.069ms pmtu 16436
 1:  steffen-VirtualBox1                                   0.029ms reached
 1:  steffen-VirtualBox1                                   0.014ms reached
     Resume: pmtu 16436 hops 1 back 64

steffen@steffen-VirtualBox1:~$ tracepath 127.0.0.1
 1:  localhost                                             0.112ms pmtu 16436
 1:  localhost                                             0.081ms reached
 1:  localhost                                             0.063ms reached
     Resume: pmtu 16436 hops 1 back 64

steffen@steffen-VirtualBox1:~$ tracepath localhost
 1:  localhost                                             0.108ms pmtu 16436
 1:  localhost                                             0.020ms reached
 1:  localhost                                             0.016ms reached
     Resume: pmtu 16436 hops 1 back 64

steffen@steffen-VirtualBox1:~$ hostname
steffen-VirtualBox1

Danke

  • Steffen
  1. Hallo nochmal,

    die Welt ist wieder in Ordnung.

    Ich habe nur ein wesentliches Detail übersehen, was mir jetzt erst beim Lesen meines Postings aufgefallen ist.

    steffen-VirtualBox1 -> 127.0.1.1
    localhost           -> 127.0.0.1

    Man beachte das ".1.1" und das ".0.1".
    Ich bin davon ausgegangen, dass die Requests beide auf 127.0.0.1 gehen.

    Danke für die Aufmerksamkein und ein gute Nacht.

    • Steffen
    1. moin,

      die Welt ist wieder in Ordnung.

      Sehr schön ;-)

      Ich habe nur ein wesentliches Detail übersehen, was mir jetzt erst beim Lesen meines Postings aufgefallen ist.

      steffen-VirtualBox1 -> 127.0.1.1
      localhost           -> 127.0.0.1

      Man beachte das ".1.1" und das ".0.1".

      Yes. Auf IP-Ebene gibt es für den 'localhost' den Adressbereich
        127.0.0.0 (Netzadresse)
          bis
        127.255.255.255 (Broadcastadresse)

      D.h., die 127.0.1.1 zeigt ebenfalls auf 'localhost', das kannst Du mit ping testen; das hat jeder IP-Stack so implementiert.

      Ich bin davon ausgegangen, dass die Requests beide auf 127.0.0.1 gehen.

      Tja, ein (HTTP)Request ist eben nicht nur IP, sondern auch TCP und HTTP. Wenn ein HTTP-Request auf einen bestimmten Hostnamen funktionieren soll, muss der Server den Namen kennen (in ServerKonfig).

      Schönes Wochenende,
      Hotti

      1. Hi!

        Yes. Auf IP-Ebene gibt es für den 'localhost' den Adressbereich
          127.0.0.0 (Netzadresse)
            bis
          127.255.255.255 (Broadcastadresse)

        Nein, localhost ist üblicherweise nur dem Loopback-Interface mit der Adresse 127.0.0.1 zugewiesen. Der Bereich 127.0.0.0/8 (oder 172.0.0.0/255.0.0.0) wird lediglich auf 127.0.0.1 (das Loopback-Interface) geroutet (siehe: netstat -rn).

        D.h., die 127.0.1.1 zeigt ebenfalls auf 'localhost', das kannst Du mit ping testen; das hat jeder IP-Stack so implementiert.

        Du solltest die Begrifflichkeiten besser unterscheidbar wählen. Du meinst mit "localhost" das Loopback-Interface und alle darauf zeigenden Routing-Einträge. Wenn localhost aber 127.0.0.0/8 umfassen würde, müsste ein auf 127.0.1.1 lauschender Server auch mit "localhost" angesprochen werden können. Das ist aber nicht der Fall. Für das vorliegende Problem war ausschlaggebend, dass localhost nur der Hostname für 127.0.0.1 ist.

        Ich bin davon ausgegangen, dass die Requests beide auf 127.0.0.1 gehen.
        Tja, ein (HTTP)Request ist eben nicht nur IP, sondern auch TCP und HTTP. Wenn ein HTTP-Request auf einen bestimmten Hostnamen funktionieren soll, muss der Server den Namen kennen (in ServerKonfig).

        HTTP spielte bei dem Versuch noch keine Rolle. Und diese Antwort hat auch nichts mit seiner Annahme zu tun. Mit Telnet kamen erst einmal nur IP und TCP zum Einsatz. Schon das hätte zum Erfolg führen müssen. Der Hostname wird erst nach dem Verbindungsaufbau übergeben. Dass der Erfolg nicht eintrat lag wohl eher daran, dass der Apache nicht so konfiguriert war, dass er auf der Adresse 127.0.1.1:80 lauschte. Es war wohl nur Listen 127.0.0.1:80 konfiguriert.

        Ein Hostname kommt erst später bei der VirtualHost-Konfiguration zum Einsatz. Unabhängig davon muss erstmal der Verbindungsversuch auf die unter Listen angegebenen Adressen/Ports funktionieren. Der HTTP-Header Hostname legt nur fest, was am Ende ausgeliefert wird (zum Beispiel Dokument X oder Y mit StatusCode 200 oder Fehlermeldungsdocument mit Statuscode 4xx/5xx) und nicht, ob der Verbindungsaufbau klappt oder scheitert.

        Lo!