Fabian Transchel: Subnetz-Routing

Hallo Forum,

heute hab ich mal 'ne Frage... :-)

Und zwar geht es darum, dass ich zwei Rechner partout nicht dazu brigen kann miteinander zu reden. Die Situation ist wie folgt:

LAN-Server (Debian unstable, Kernel 2.6.1), drei Netzwerkkarten. (DSL-Anbindung und 2 Clients im lokalen Netz)
ipconfig sagt Folgendes (das ist auch so richtig IMHO):

eth0      Protokoll:Ethernet  Hardware Adresse 00:80:48:C5:8A:03
          inet Adresse:192.168.1.1  Bcast:192.168.1.255  Maske:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:19471 errors:0 dropped:0 overruns:0 frame:0
          TX packets:17973 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:4 Sendewarteschlangenlänge:1000
          RX bytes:16687960 (15.9 MiB)  TX bytes:2227873 (2.1 MiB)
          Interrupt:10 Basisadresse:0xdc00

eth1      Protokoll:Ethernet  Hardware Adresse 00:0A:CD:07:11:64
          inet Adresse:192.168.1.2  Bcast:192.168.1.255  Maske:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:15725 errors:18 dropped:0 overruns:0 frame:0
          TX packets:16533 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:1000
          RX bytes:1630096 (1.5 MiB)  TX bytes:14324054 (13.6 MiB)
          Interrupt:12

eth2      Protokoll:Ethernet  Hardware Adresse 00:30:84:40:5F:9F
          inet Adresse:192.168.1.3  Bcast:192.168.1.255  Maske:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3638 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3649 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:1000
          RX bytes:632360 (617.5 KiB)  TX bytes:2373552 (2.2 MiB)
          Interrupt:11 Basisadresse:0x2000

ppp0      Protokoll:Punkt-zu-Punkt Verbindung
          inet Adresse:217.236.40.31  P-z-P:217.5.98.101  Maske:255.255.255.255
          UP PUNKTZUPUNKT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:19203 errors:0 dropped:0 overruns:0 frame:0
          TX packets:17705 errors:0 dropped:2 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:3
          RX bytes:16242778 (15.4 MiB)  TX bytes:1821963 (1.7 MiB)

Die Routing-Table sieht so aus:
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
192.168.1.1     *               255.255.255.255 UH    0      0        0 eth0
192.168.1.5     *               255.255.255.255 UH    0      0        0 eth2
192.168.1.4     *               255.255.255.255 UH    0      0        0 eth1
217.5.98.101    *               255.255.255.255 UH    0      0        0 ppp0
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
192.168.1.0     *               255.255.255.0   U     0      0        0 eth1
192.168.1.0     *               255.255.255.0   U     0      0        0 eth2
default         217.5.98.101    0.0.0.0         UG    0      0        0 ppp0

Dazu noch "iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.1.0/255.255.255.0 -d 0/0 -j MASQUERADE" gemacht.

Ergebnis ist, dass ich vom Server aus die beiden angeschlossenen Clients 192.168.1.4 (Debian unstable, Kernel 2.6.1) und 192.168.1.5 (Win2k) pingen kann, die auch wie gewünscht in's Netz können. Das Problem ist jetzt nur, dass ich keine Verbindung von 192.168.1.4 zu 192.168.1.5 und umgekehrt kriege. traceroute bleibt beim jeweilig zugeordneten Netzwerkinterface auf dem Server hängen un gibt dann timeout.

Über Anregungen, die über man route und man iptables hinausgehen, würde ich mich freuen.

Grüße aus Barsinghausen,
Fabian

  1. Hallo Fabian,

    LAN-Server (Debian unstable, Kernel 2.6.1), drei Netzwerkkarten. (DSL-Anbindung und 2 Clients im lokalen Netz)
    ipconfig sagt Folgendes (das ist auch so richtig IMHO):

    Da bin ich anderer Meinung :-)

    eth0      Protokoll:Ethernet  Hardware Adresse 00:80:48:C5:8A:03
              inet Adresse:192.168.1.1  Bcast:192.168.1.255  Maske:255.255.255.0

    Netzwerk 192.168.1
    sollte gar nicht konfiguriert sein, weil darauf die pppoe-Verbindung aufsetzt

    eth1      Protokoll:Ethernet  Hardware Adresse 00:0A:CD:07:11:64
              inet Adresse:192.168.1.2  Bcast:192.168.1.255  Maske:255.255.255.0

    Netzwerk 192.168.1

    eth2      Protokoll:Ethernet  Hardware Adresse 00:30:84:40:5F:9F
              inet Adresse:192.168.1.3  Bcast:192.168.1.255  Maske:255.255.255.0

    Netzwerk 192.168.1

    eth1 und eth2 hängen in zwei verschiedenen physischen Netzwerken, Du verwendest aber das gleiche IP-Netzwerk.

    Zwei mögliche Abhilfen:

    Variante A (besser)
    Verwende für eth2 das Netzwerk 192.168.2, d.h. eine IP-Adresse aus diesem Bereich

    Variante B (aufwendiger)
    Mache Subnetting, d.h. verwende eine Subnetmask wie z.B. 255.255.255.248 oder ähnlich

    Die Rechner, die am gleichen physischen Netz hängen, müssen sich auch im gleichen IP-Netzwerk befinden.

    Der Rechner mit der IP 192.168.1.5/24 geht zurecht davon aus, dass er _kein_ Routing benötigt, um den Rechner mit der IP 192.168.1.4/24 anzupingen. Und der Router hat keinen Grund anzunehmen, dass er etwas innerhalb des gleichen Netzwerkes zu routen hätte. Geroutet wird von _einem_ Netzwerk in ein _anderes_. Du hast nur _ein_ IP-Netzwerk.

    Freundliche Grüsse,

    Vinzenz

    1. Hallo,

      eth1 und eth2 hängen in zwei verschiedenen physischen Netzwerken, Du verwendest aber das gleiche IP-Netzwerk.

      Und das geht um's Verrecken nicht?

      Zwei mögliche Abhilfen:

      Variante A (besser)
      Verwende für eth2 das Netzwerk 192.168.2, d.h. eine IP-Adresse aus diesem Bereich

      Daran hatte ich noch nicht gedacht, ja.

      Variante B (aufwendiger)
      Mache Subnetting, d.h. verwende eine Subnetmask wie z.B. 255.255.255.248 oder ähnlich

      Könntest du das ein wenig näher ausführen? Den Teil dazu auf selflinux.org habe ich nicht recht verstanden.

      Der Rechner mit der IP 192.168.1.5/24 geht zurecht davon aus, dass er _kein_ Routing benötigt, um den Rechner mit der IP 192.168.1.4/24 anzupingen. Und der Router hat keinen Grund anzunehmen, dass er etwas innerhalb des gleichen Netzwerkes zu routen hätte. Geroutet wird von _einem_ Netzwerk in ein _anderes_. Du hast nur _ein_ IP-Netzwerk.

      Und ich habe keine Möglichkeit ohne Hub die Rechner alle in's selbe Netz zu bekommen?

      Grüße aus Barsinghausen,
      Fabian

      1. Hallo,

        Und ich habe keine Möglichkeit ohne Hub die Rechner alle in's selbe Netz zu bekommen?

        Doch, die Möglichkeit gibt es. Das DSL Lass ich mal außen vor, ich rede jetzt nur von den beiden Netzwerkkarten, an denen die anderen Rechner hängen.
        Wenn du alle drei rechner in _einem_ Netz haben willst, dann brauchst du erst mal pro Netzwerkkarte+Rechner Kombi ein eigenes Subnetz. Von diesen einzelnen Subnetzen aus können dann beide Clients deinen Server erreichen.
        Auf diesem musst du nun einen VPN Server einrichten, für dein VPN ein weiteres Netz hernehmen und deine Clients dazu bringen, dass sie über ihr Netz zum Server eine Verbindung zum VPN herstellen. Dann hast du _ein_ Netz.

        Wie du siehst, das wäre ziemlich stupide und unnötig. Also sorge einfach für _zwei_ Netze und lasse deinen Server zwischen diesen routen.

        Viele Grüße,

        Stefan

      2. Moin!

        Hallo,

        eth1 und eth2 hängen in zwei verschiedenen physischen Netzwerken, Du verwendest aber das gleiche IP-Netzwerk.

        Und das geht um's Verrecken nicht?

        Es geht, wenn du auf allen Rechnern allen verbundenen Interfaces die Netzmaske 255.255.255.255 gibst.

        Aber das ist nicht schön. Warum hast du überhaupt zwei Rechner an zwei Netzwerkkarten hängen? Macht das Sinn? Üblich wäre doch, zwei Rechner über einen Switch an _einer_ Netzwerkkarte am Router zu haben.

        Zwei mögliche Abhilfen:

        Variante A (besser)
        Verwende für eth2 das Netzwerk 192.168.2, d.h. eine IP-Adresse aus diesem Bereich

        Daran hatte ich noch nicht gedacht, ja.

        Ist definitiv die eingängigere Methode. Man rechnet einfach nicht damit, dass ein privates 192.168er-Netz plötzlich eine /32-Netzmaske hat.

        Variante B (aufwendiger)
        Mache Subnetting, d.h. verwende eine Subnetmask wie z.B. 255.255.255.248 oder ähnlich

        Das klappt nicht, wenn er 192.168.1.4 und .1.5 hat.

        Und es ist im Grunde genommen dasselbe, als wenn du .1.4 und .2.5 verwendest.

        Könntest du das ein wenig näher ausführen? Den Teil dazu auf selflinux.org habe ich nicht recht verstanden.

        Eine IP-Adresse und eine Netzmaske zusammen ergeben zwei Informationen:
        1. In welchem Netzwerk bin ich. Dazu IP und Netzmaske AND-verknüpfen. Das Ergebnis ist die Netzwerkadresse.
        2. Wer ist noch in meinem Netzwerk? Dazu die Ziel-IP mit der Netzwerkmaske AND-verknüpfen. Wenn dasselbe Ergebnis rauskommt, wie bei der eigenen IP, dann ist der Rechner direkt erreichbar.

        Da du sowohl deine Router-Netzwerkkarten, als auch (vermutlich) die Netzwerkkarten der anderen beiden Rechner mit 192.168.1.x und Netzmaske 255.255.255.0 ausgestattet hast, geht folgendes ab:

        Rechner 192.168.1.4 will zu Rechner 192.168.1.5 senden. Der Check besagt, dass 192.168.1.0 == 192.168.1.0, also beide Rechner sind im gleichen Netzwerk. Also forscht der eine Rechner, welche Ethernet-Adresse denn zu der anderen IP gehört. Und da sich kein Rechner meldet, ist der wohl gerade offline, ausgeschaltet oder kaputt.

        Der Rechner mit der IP 192.168.1.5/24 geht zurecht davon aus, dass er _kein_ Routing benötigt, um den Rechner mit der IP 192.168.1.4/24 anzupingen. Und der Router hat keinen Grund anzunehmen, dass er etwas innerhalb des gleichen Netzwerkes zu routen hätte. Geroutet wird von _einem_ Netzwerk in ein _anderes_. Du hast nur _ein_ IP-Netzwerk.

        Und ich habe keine Möglichkeit ohne Hub die Rechner alle in's selbe Netz zu bekommen?

        Nein. Ein Netzwerk ist dadurch gekennzeichnet, dass jeder angeschlossene Rechner jeden anderen angeschlossenen Rechner ohne Router direkt erreichen kann.

        Also hast du bei deiner Konstruktion _zwei_ Netzwerke.

        Die man natürlich routen kann, wenn man will. Und muß, wenn Daten zwischen beiden Rechnern ausgetauscht werden sollen. :)

        - Sven Rautenberg

        --
        "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
        1. Hallo Sven,

          eth1 und eth2 hängen in zwei verschiedenen physischen Netzwerken, Du verwendest aber das gleiche IP-Netzwerk.

          Und das geht um's Verrecken nicht?

          Es geht, wenn du auf allen Rechnern allen verbundenen Interfaces die Netzmaske 255.255.255.255 gibst.

          Aber das ist nicht schön. Warum hast du überhaupt zwei Rechner an zwei Netzwerkkarten hängen? Macht das Sinn? Üblich wäre doch, zwei Rechner über einen Switch an _einer_ Netzwerkkarte am Router zu haben.

          Ein Switch ist nunmal aber nicht da, die Netzwerkkarten aber schon. Warum also ist die Konstruktion an sich ein Problem?

          Ich denke, dass ich das ganze in zwei Netzwerke aufteile, und gut ist. Danke für die Antworten an alle.

          Könntest du das ein wenig näher ausführen? Den Teil dazu auf selflinux.org habe ich nicht recht verstanden.

          Eine IP-Adresse und eine Netzmaske zusammen ergeben zwei Informationen:

          1. In welchem Netzwerk bin ich. Dazu IP und Netzmaske AND-verknüpfen. Das Ergebnis ist die Netzwerkadresse.
          2. Wer ist noch in meinem Netzwerk? Dazu die Ziel-IP mit der Netzwerkmaske AND-verknüpfen. Wenn dasselbe Ergebnis rauskommt, wie bei der eigenen IP, dann ist der Rechner direkt erreichbar.

          Da du sowohl deine Router-Netzwerkkarten, als auch (vermutlich) die Netzwerkkarten der anderen beiden Rechner mit 192.168.1.x und Netzmaske 255.255.255.0 ausgestattet hast, geht folgendes ab:

          Rechner 192.168.1.4 will zu Rechner 192.168.1.5 senden. Der Check besagt, dass 192.168.1.0 == 192.168.1.0, also beide Rechner sind im gleichen Netzwerk. Also forscht der eine Rechner, welche Ethernet-Adresse denn zu der anderen IP gehört. Und da sich kein Rechner meldet, ist der wohl gerade offline, ausgeschaltet oder kaputt.

          Der Rechner mit der IP 192.168.1.5/24 geht zurecht davon aus, dass er _kein_ Routing benötigt, um den Rechner mit der IP 192.168.1.4/24 anzupingen. Und der Router hat keinen Grund anzunehmen, dass er etwas innerhalb des gleichen Netzwerkes zu routen hätte. Geroutet wird von _einem_ Netzwerk in ein _anderes_. Du hast nur _ein_ IP-Netzwerk.

          Ah gut. Da lag also mein Trugschluss darin, dass ich dachte der Router könnte als Switch arbeiten :)

          Grüße aus Barsinghausen,
          Fabian

          1. Hallo,

            Ah gut. Da lag also mein Trugschluss darin, dass ich dachte der Router könnte als Switch arbeiten :)

            Müsste er aber denke ich auch können. Natürlich nicht ohne weiteres, aber wenn mans entsprechend einrichtet, dann sollte es gehen. Dazu müssten die Netzwerkkarten beide im promiscuous mode laufen, damit sie alle Pakete verarbeiten und nicht nur die an sie adressierten.

            Auf der Softwareseite muss dann dafür gesorgt werden, dass alle Pakete die auf der einen Netzwerkkarte eingehen auf der anderen wieder ausgegeben werden und umgekehrt. Möglich, dass sich so etwas über iptables realisieren liese, kann aber auch sein, dass man dafür tiefer ansetzen müsste.

            Das alles wäre dann aber doch nur als Beweis, dass es machbar ist, sinnvoll, für deinen Fall bist du mit deinen zwei Netzen wirklich besser bedient.

            Viele Grüße,

            Stefan

      3. Hallo Fabian

        eth1 und eth2 hängen in zwei verschiedenen physischen Netzwerken, Du verwendest aber das gleiche IP-Netzwerk.
        Und das geht um's Verrecken nicht?

        Nein, deswegen teilt sich doch eine IP-Adresse in den Netzwerk- und Hostanteil auf :-)
        Die Rechner befinden sich in zwei verschiedenen Netzwerken, siehe meine ASCII-Kunst

        Netzwerk 217.5.101 (Subnetmask 255.255.255.0 vorausgesetzt, Standard für Klasse C-Netz)
        |------------------------------------------------------------|
                                      |
                                      | 217.5.98.101 (Subnetmask unbekannt)
                                      | physisch eth0, logisch ppp0
                                ------------
                                |          |
                                |  Router  |
                                |          |
                                ------------
                                  |      |
                 192.168.1.1      |      | 192.168.2.1
                                  |      |
        |-------------------------- |   |---------------------------------|
        Netzwerk 192.168.1  |              192.168.2             |
                            |                                    |
                            | 192.168.1.2                        | 192.168.2.2
                         --------                             --------
                         |      |                             |      |
                         |  R3  |                             |  R4  |
                         |      |                             |      |
                         --------                             --------

        Zwei mögliche Abhilfen:

        Variante A (besser)
        Verwende für eth2 das Netzwerk 192.168.2, d.h. eine IP-Adresse aus diesem Bereich

        so wie hier dargestellt

        Variante B (aufwendiger)
        Mache Subnetting, d.h. verwende eine Subnetmask wie z.B. 255.255.255.248 oder ähnlich
        Könntest du das ein wenig näher ausführen? Den Teil dazu auf selflinux.org habe ich nicht recht verstanden.

        Die IP-Adresse teilt sich auf in den Netz-Anteil und den Host-Anteil:
        Wieviel von der IP-Adresse Netz- und wieviel Hostanteil ist regelt die Subnetmask

        Beispiel: IP-Adresse 192.168.1.1
                  IP-Adresse 192.168.1.10
                  Subnetmask 255.255.255.0

        gehören beide zum Klasse C-Netz 192.168.1
        Die Host-ID ist 1 bzw. 10

        Jedes Bit in der Subnetmask, das gesetzt ist, zeigt an: Dieses Bit in der IP-Adresse gehört zum Netzwerk.

        Binär geschrieben hätten wir
        11000000.10101000.00000001.00000001  (IP)
        11000000.10101000.00000001.00001010  (IP)
        11111111.11111111.11111111.00000000  (Subnetmask)

        Daher
        11000000.10101000.00000001           Netzwerkanteil von 192.168.1.1
                                   00000001  Host innerhalb des Netzwerkes
        11000000.10101000.00000001           Netzwerkanteil von 192.168.1.10
                                   00001010  Hostanteil von 192.168.1.10

        Wenn Du ein Klasse-C-Netz unterteilen willst, machst Du Subnetting. D.h. Deine Subnetmask hat mehr Einsen als die Standardmaske eines Klasse C-Netzes:

        11000000.10101000.00000001.00000001  (IP)          immer noch 192.168.1.1
        11000000.10101000.00000001.00001010  (IP)          immer noch 192.168.1.10
        11111111.11111111.11111111.11111000  (Subnetmask)

        11000000.10101000.00000001.00000     Netzwerkanteil bei 192.168.1.1
                                        001  Host innerhalb des Netzwerkes
        11000000.10101000.00000001.00001     Netzwerkanteil bei 192.168.1.10
                                        010  Host innerhalb des Netzwerkes

        Es ist klar, dass die Subnetmask aus genau einer Folge von 1en besteht, die von genau einer Folge von 0en gefolgt wird.

        Du siehst, dass nun die beiden IP-Adressen einen unterschiedlichen Netzwerkanteil haben, d.h. in verschiedenen Netzwerken liegen. So kannst Du den knappen Adressraum erweitern, wenn Deine Netzwerke nicht voll sind.

        Im übrigen sind innerhalb eines IP-Netzwerkes die kleinste und die größte Hostadresse reserviert:
        Die kleinste kennzeichnet das Netzwerk, die größte ist die Broadcastadresse.

        Deswegen darfst Du übrigens 192.168.1.0 nicht als IP-Adresse verwenden.
        (Außer Du machst Supernetting, d.h. die Subnetmask hat weniger Einsen als die standardmäßige und Du fasst mehrere kleine Netze zu einem größeren zusammen)

        Und ich habe keine Möglichkeit ohne Hub die Rechner alle in's selbe Netz zu bekommen?

        Doch, mit einem Switch *g*

        Freundliche Grüsse,

        Vinzenz

        1. Hallo,

          [...]

          Danke für die ausführliche Erklärung.

          Im übrigen sind innerhalb eines IP-Netzwerkes die kleinste und die größte Hostadresse reserviert:
          Die kleinste kennzeichnet das Netzwerk, die größte ist die Broadcastadresse.

          Das weiß ich.

          Und ich habe keine Möglichkeit ohne Hub die Rechner alle in's selbe Netz zu bekommen?
          Doch, mit einem Switch *g*

          *meop*

          Grüße aus Barsinghausen,
          Fabian

      4. Hallo Fabian,

        eth1 und eth2 hängen in zwei verschiedenen physischen Netzwerken, Du verwendest aber das
        gleiche IP-Netzwerk.

        Und das geht um's Verrecken nicht?

        Prinzipiell schon. Dazu müsstest du nur jedem Rechner eine Routing-Tabelle geben, heisst,
        du müsstest bei jedem Rechner statische Routen zu jedem anderen Rechner ausser dem Server
        angeben. Ich weiss allerdings nicht, ob Windows Routing auf diesem Level unterstützt. Es ist
        wirklich einfacher (und IMHO sinnvoller), zwei Subnetze zu machen.

        Grüße,
         CK

        --
        Q: God, root, what's the difference?
        A: God is merciful.