Christoph Schnauß: Routing mit Gentoo einrichten

Beitrag lesen

hallo Henryk,

Es gibt einen onboard-Chip fürs LAN (192.168.0.1, bei allen Clients als Gateway eingetragen) und eine Karte (DHCP), an der das DSL-Modem hängt.
Den Teil nach dem 'und' verstehe ich nicht.

Jetzt verstehe ich nicht, was du nicht verstehst. Die RealTek-Karte, die ich in einen Slot gesteckt habe, hat ein Kabel, das zum DSL-Modem führt. Sie ist bei meiner augenblicklichen Gerätekonstellation eth1. dmesg zeigt mir für diese Karte:
  eth1: RealTek RTL8139 at 0xd400, 00:50:bf:91:2a:24, IRQ 177
  eth1:  Identified 8139 chip type 'RTL-8139C'
Darüberhinaus gibts auf dem Mainoard einen Chip, der laut dmesg so gefunden wird:
  eth0: 3Com Gigabit LOM (3C940)
        PrefPort:A  RlmtMode:Check Link State
Am entsprechenden Ausgang steckt ein Kabel fürs LAN. Auf die Ausgabe von ifconfig darf ich sicher verzichten. eth1 hat die 192.168.0.1 zugewiesen bekommen, eth0 bekommt seine aktuelle IP vom ISP (t-online) zugewiesen. Der Rechner geht online (ich schreibe gerade von ihm aus), im LAN funktioniert alles wie gewünscht. Nur die Sache mit dem Routing klappt eben (noch immer) nicht.

Liefere idealerweise noch die Ausgabe von route -n auf dem Router und den Clients, sowie iptables -nvL und iptables -t nat -nvL dazu.

Gut. Das gibt aber nen bissel viel Zeugs ab. Zuerst der Netzwerkclient. Da läuft im Moment eine SuSE 9.2. die aktuelle Routingtabelle sieht so aus:
  pc2:~ # route -n
  Kernel IP routing table
  Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
  192.168.0.0     192.168.0.1     255.255.255.0   UG    0      0        0 eth0
  192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
  169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 eth0
  127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
  0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
  pc2:~ #
Das ist völlig korrekt. Die Anzeige würde auch nicht anders aussehen, wenn der Router/Host korrekt arbeiten würde. Auf einem Windows-Client gibts nun leider keinen Konsolenbefehl "route -n", da muß dafür "route print" getippt werden. Und das ergibt bei einem solchen Client:
   Aktive Routen:
  Netzwerkadresse      Subnet Mask  Gateway-Adresse    Schnittstelle  Anzahl
          0.0.0.0          0.0.0.0      192.168.0.1      192.168.0.3       1
        127.0.0.0        255.0.0.0        127.0.0.1        127.0.0.1       1
      192.168.0.0    255.255.255.0      192.168.0.3      192.168.0.3       1
      192.168.0.3  255.255.255.255        127.0.0.1        127.0.0.1       1
    192.168.0.255  255.255.255.255      192.168.0.3      192.168.0.3       1
        224.0.0.0        224.0.0.0      192.168.0.3      192.168.0.3       1
  255.255.255.255  255.255.255.255      192.168.0.3      192.168.0.3       1
Du siehst, auch das ist korrekt. Das heißt, sofern der hier als Gateway eingetragene Rechner routen kann, bekommt der Client auch das, was er haben möchte. Auf Windows gibt es iptables sowieso nicht, so daß sich dein Wunsch nach "iptables -t nat -nvL" erübrigt, und auf der SuSE-Kiste hab ich es nicht installiert (brauche ich ja für einen Client auch nicht), so daß es da ebenfalls keine Aussage geben kann.

So, und jetzt zum Router/Host mit seinen beiden Schnittstellen. Statt "route -n" nehme ich gewohnheitsmäßig lieber netstat. Das liefert folgendes bei bestehender online-Verbindung:
  bash-2.05b# netstat -nr
  Kernel IP routing table
  Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
  217.5.98.87     0.0.0.0         255.255.255.255 UH        0 0          0 ppp0
  192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
  127.0.0.0       127.0.0.1       255.0.0.0       UG        0 0          0 lo
  0.0.0.0         217.5.98.87     0.0.0.0         UG        0 0          0 ppp0
  bash-2.05b#
"eth1" taucht hier nicht auf, das ist aber richtig, weil ppp0 von der Karte realisiert wird. "eth1" wird nur offline als vorhanden gelistet, wenn keine Verbindung zum Internet besteht, wenn ich online bin, steht an dessen Stelle ppp0. Auch an dieser Tabelle kann ich keine Fehler sehen, und selbstverständlich habe ich schon mehrfach probiert, ob ich eventuell noch irgendeine per "Route add" dazuschreiben sollte. Ein Gateway-Eintrag in /etc/conf.d/net wird für diesen Rechner nicht benötigt, es genügen in diesem Script die Zeilen:
  iface_eth0="192.168.0.1 broadcast 192.168.0.255 netmask 255.255.255.0"
  iface_eth1="dhcp"
  dhcpcd_eth1="..."
  iface_eth1="up"

Damit die Geschichte mit dem "Forwarding" klappt, wird überall ein Konsolenbefehl
  echo "1" > /proc/sys/net/ipv4/ip_forward
genannt. Nach der Installation von iptables-1.2.11 war mir allerdings gesagt worden, ich solle
  echo "1" > /proc/sys/net/ipv4/conf/all/forwarding
machen. Um möglichen Konflikten zu entgehen, habe ich ganz einfach in /etc/sysctl.conf eine Zeile
  net.ipv4.ip_forward = 1
eingetragen, die denselben Zweck erfüllt, und zwar gleich für beide Pfade. Ich kann das mit einem simplen "cat" für beide Pfade ja unmittelbar nach Systemstart prüfen. Da erhalte ich:
  bash-2.05b# cat /proc/sys/net/ipv4/ip_forward
  1
  bash-2.05b# cat /proc/sys/net/ipv4/conf/all/forwarding
  1
  bash-2.05b#
Einige Quellen, die man online nachlesen kann, behaupten, damit sollte bereits grundsätzlich ein "Routing" möglich sein.

Gut, du siehst, die Hardware arbeitet korrekt und kann angesprochen werden. Ping geht problemlos, auf eine Ausgabe verzichte ich jetzt. "Private" IP-Adressen sind also korrekt verteilt, schließlich kann der lokale Apache, der auf dem "Host-Rechner" läuft, von allen Clients angerufen werden.

(Moment, es geht gleich weiter, ich habe das Limit, wie groß ein posting erreichen darf, überschritten)