• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Routen zweier Netze (private & public)

Hallo,

ich habe ein aktuelles und dringendes Problem, an dem ich nun schon eine Weile hänge und nicht so wirklich vorankomme. Über das Routen von Netzen steht zwar schon einiges im Netz, aber das passt alles nicht so auf mein Problem. Ich bin auch nicht so der Linux-Experte, kenne mich aber schon ein wenig aus. Was ich brauche ist einfach ein Skript, welches mir einen SuSE10.2-Rechner mit 2 Netzwerkkarten als Router konfiguriert.

Wir haben in der Firma ein öffentliches Netzwerk mit 1024 Adressen, 200.200.200.0/22 und ein privates Netz 192.168.0.0/16. Der Router soll nun diese beiden Netze verbinden. Das aktuelle Default-Gateway für das Internet hat die IP 200.200.200.254. Die IP für den Router im privaten Netz soll die 192.168.0.254, die im öffentlichen Netz die 200.200.201.254 sein.

Ich bräuchte nun ein Konfigskript, welches
1. das Netz 192.168.x.x nach 200.200.200.x routet.
2. das Netz 200.200.200.x nach 192.168.x.x routet.
3. alles was aus dem 192.169-Netz kommt und nicht 200.200. ist per NAT ins Internet weiterleitet.
4. DHCP (Port 67&68 ) beim Routen herausfiltert.

Wäre toll wenn mir hier jemand weiterhelfen könnte. Besten Dank schon mal.

Gruß, Homer
 
Das ist mit der Konfiguration des Linuxrouters nicht allein getan. Die Router im 200.200.200.0/22 Netz müssen auch wissen hinter welche IP sich das 192.irgendwas Netz befindet. Ist das schon gemacht? Wenn ja brauchst Du auf dem Linuxrechner nur noch folgendes ausführen:

Code:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t NAT -A POSTROUTING -o outside_interface  --destination ! 200.200.200.0/22 -j MASQUERADE
ip route add 0.0.0.0/0 via 200.200.200.254

Aber vorsicht ich hab das nicht getestet. outside_interface musst Du übrigens durch den Namen das Interfaces ersetzen der mit 200.200.200.0/22 verbunden ist.
 
Danke für die schnelle Antwort :D
Der neue Router ist bisher noch nicht in den anderen Routern eingetragen. Das wollte ich veranlassen, wenn dieser funktioniert. Ist das ein Problem?

Wenn ich den Befehl "iptables -t NAT ..." eingebe, erhalte ich folgende Fehlermeldung:
iptables v1.3.6: can't initialize iptables table `NAT': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

Beim Befehl "ip route ..." erhalte ich den Fehler:
RTNETLINK answers: File exists

So einfach scheint es dann doch nicht zu sein. Habe auch schon ein paar Sachen versucht, vielleicht muss ich die erst mal wieder rückgängig machen? Wenn ich nur wüßte wie :?

Den DHCP filtere ich übrigend mit folgenden Zeilen heraus:
iptables -A FORWARD -p udp --dport 67 --sport 68 -j DROP
iptables -A FORWARD -p udp --dport 68 --sport 67 -j DROP
Bei meiner aktuellen Bridge funktioniert das sehr gut, sie kann nur nicht routen.
 
abyss schrieb:
und fuer das zweite Problem das Kommando

route add default gw 200.200.200.254 empfehlen

Das macht das gleiche wie "ip route add". Die Fehlermeldung "File exists" bedeutet, dass die Defaultroute schon gesetzt ist. Den dritten Befehl kannst Du dir als sparen.
 
Danke für den Hinweis, jetzt hat er alle Befehle akzeptiert. Leider funktioniert das Routen dennoch nicht :cry:

Auf einem Windows-PC im 200er Netz habe ich als Gateway jetzt meinen Router mit 200.200.201.254 eingetragen anstelle des ursprünglichen 200.200.200.254. Dann habe ich versucht einen Rechner im 192er-Netz anzupingen. Das endete leider erfolglos mit einem Timeout. Auch der Versuch aus dem 192er-Netz den Rechner im 200er-Netz anzupingen war erfolglos. Ein tracert endet beidseitig auf dem Router. Vom Router aus, können jedoch die Rechner in beiden Netzen erreicht werden. Auch ein Login per SSH auf den Router ist problemlos möglich. Fehlt da noch etwas?

Der Eintrag meines Routers in unser zentrales Gateway ist beauftragt aber noch nicht vorgenommen. Wie kann ich die Funktion des Routers derzeit testen?
 
Homer71 schrieb:
Auch ein Login per SSH auf den Router ist problemlos möglich. Fehlt da noch etwas?

Was ergibt denn:

Code:
cat /proc/sys/net/ipv4/ip_forward

Sowie

Code:
iptables -L -v

Ach nebenbei: Die machten Einträge von oben sind flüchtig. D.h. nach einem Reboot sind die nicht mehr da. Man kann das aber mit einem Shellscript bzw. der geeigneten Veränderung der Konfigurationsdateien dauerhaft machen. Nur im Moment ist halt ein Reboot schlecht, weil dann die Konfig weg ist.

Der Eintrag meines Routers in unser zentrales Gateway ist beauftragt aber noch nicht vorgenommen. Wie kann ich die Funktion des Routers derzeit testen?

Prinzipiell reicht es schon was Du mit dem Win-Rechner gemacht hast. Alternativ kannst Du dem Rechner statt einem neuen Default Gateway auch einfach eine zusätzliche Route konfigurieren. Unter Windows geht das irgendwie über "route add -net" oder so ähnlich. Hab gerade kein Windows da um das zu testen.
 
Code:
cat /proc/sys/net/ipv4/ip_forward
ergibt 1.
Code:
iptables -L -v
kann ich derzeit leider nicht mehr ausführen, da ich nicht mehr in der Firma bin. Werde das morgen nachholen und an dieser Stelle ergänzen.

Danke für den Hinweis, die Anweisungen starte ich bereits aus einem Skript, welches derzeit so aussieht:
Code:
#!/bin/bash

ifconfig eth0 192.168.0.254 netmask 255.255.0.0
ifconfig eth1 200.200.201.254  netmask 255.255.252.0
 
echo 1 > /proc/sys/net/ipv4/ip_forward
 
iptables -F
iptables -A FORWARD -p udp --dport 67 --sport 68 -j DROP
iptables -A FORWARD -p udp --dport 68 --sport 67 -j DROP
iptables -A INPUT   -j ACCEPT
iptables -A OUTPUT  -j ACCEPT
iptables -A FORWARD -j ACCEPT
# iptables -L
 
iptables -t nat -A POSTROUTING -o /dev/eth1 --destination ! 200.200.200.0/22 -j MASQUERADE
 
route add default gw 200.200.200.254
Vielleicht entdeckst Du ja noch etwas fehlendes oder falsches?
 
Homer71 schrieb:
ifconfig eth0 192.168.0.254 netmask 255.255.0.0
ifconfig eth1 200.200.201.254 netmask 255.255.252.0
Broadcast fehlt, wenn auch nicht zwingend notwendig. Und weil wir modern leben:
Code:
ip a a 192.168.0.254/16 dev eth0
ip a a 200.200.201.254/22 dev eth1
iptables -A FORWARD -p udp --dport 67 --sport 68 -j DROP
iptables -A FORWARD -p udp --dport 68 --sport 67 -j DROP
Diese Regeln bringen nichts, da DHCP normalerweise auf ein Subnetz beschränkt ist, und somit generell nicht in FORWARD auftauchen wird.
iptables -t nat -A POSTROUTING -o /dev/eth1 --destination ! 200.200.200.0/22 -j MASQUERADE
ohne Worte ...
 
//Edit: jengelh hat es schon gesagt. Nur eth1 nicht /dev/eth1 - die Datei sollte es gar nicht geben.
 
Ok, ich geb zu, das war ein ziemlich dummer Flüchtigkeitsfehler. Asche auf mein Haupt :oops:

Jetzt da diese Zeile korrigiert ist, habe ich jedoch aus dem privaten Netz heraus keinen SSH-Zugriff mehr auf meinen Router. Komme nur noch über das öffentliche Netz drauf. Kann es sein, dass aufgrund der Regel jetzt auch die private IP des Routers direkt ans Gateway weitergeleitet wird?

Ein Ping von einem Netz ins andere ist bisher auch noch nicht möglich. Das sollte meiner Meinung nach aber nichts mit dieser Regel zu tun haben.

@jengelh: Die Zeilen zum Filtern stammen noch von meinem Bridge-Betrieb, als ich noch öffentliche Adressen verwendet habe. Das möchte ich ja nun umstellen. Und um beim Rumkonfigurieren nicht doch noch irgendwie dhcp durchzulassen, habe ich die Regeln erst mal drin gelassen. Sollte ja nichts schaden.

@nbkr: Die Eingabe von iptables -L -v ergibt
Code:
Chain INPUT (policy DROP 978 packets, 115K bytes)
 pkts bytes target     prot opt in     out     source               destination         
 2270  287K ACCEPT     0    --  any    any     anywhere             anywhere            
 
Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       udp  --  any    any     anywhere             anywhere            udp spt:bootpc dpt:bootps 
    0     0 DROP       udp  --  any    any     anywhere             anywhere            udp spt:bootps dpt:bootpc 
    1    60 ACCEPT     0    --  any    any     anywhere             anywhere            
 
Chain OUTPUT (policy ACCEPT 4 packets, 336 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  162 16271 ACCEPT     0    --  any    any     anywhere             anywhere            
 
Chain reject_func (0 references)
 pkts bytes target     prot opt in     out     source               destination

Ich bin echt ratlos :(
 
Was sagt denn route -n und was ist die IP Adresse des Rechners von dem Du den SSH Versuch startest?

Was sagt ein traceroute von einem Rechner des öffentlichen Netzes zu einem des privaten Netzes und umgekehrt?
 
Guten Morgen miteinander!

route -n ergibt folgendes:
Code:
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
200.200.200.0   0.0.0.0         255.255.252.0   U     0      0        0 eth1
192.168.0.0     0.0.0.0         255.255.0.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         200.200.200.254 0.0.0.0         UG    0      0        0 eth1
Woher die 169.254.0.0 kommen weiß ich nicht. Wie bekomm ich die denn weg?

Der Rechner von dem ich die SSH-Verbindung aufzubauen versucht habe hat die IP 192.168.1.1. Nachdem ich den Server aber neu gestartet habe bekomme ich nun wieder eine SSH-Verbindung.

Ein tracert aus dem öffentlichen Netz ins private :
Code:
C:\>tracert 192.168.0.254
 
Routenverfolgung zu 192.168.0.254 über maximal 30 Abschnitte

  1    <1 ms    <1 ms    <1 ms  192.168.0.254

Ablaufverfolgung beendet.
 
C:\>tracert 192.168.1.1

Routenverfolgung zu 192.168.1.1 über maximal 30 Abschnitte

  1    <1 ms    <1 ms    <1 ms  200.200.201.254
  2    <1 ms    <1 ms    <1 ms  192.168.1.1

Ablaufverfolgung beendet.

C:\>tracert -d 192.168.0.51
 
Routenverfolgung zu 192.168.0.51 über maximal 30 Abschnitte
 
  1    <1 ms    <1 ms    <1 ms  200.200.201.254
  2     *        *        *     Zeitüberschreitung der Anforderung.
  3     *        *        *     Zeitüberschreitung der Anforderung.
  ...

Aus dem privaten Netz ins öffentliche Netz sieht es folgendermaßen aus:

Code:
C:\>tracert -d 200.200.201.254

Routenverfolgung zu 200.200.201.254 über maximal 30 Abschnitte

  1    <1 ms    <1 ms    <1 ms  200.200.201.254

Ablaufverfolgung beendet.

C:\>tracert -d 200.200.200.78

Routenverfolgung zu 200.200.200.78 über maximal 30 Abschnitte

  1    <1 ms    <1 ms    <1 ms  192.168.0.254
  2     8 ms    <1 ms    <1 ms  200.200.200.78

Ablaufverfolgung beendet.

C:\>tracert -d 200.200.200.254

Routenverfolgung zu 200.200.200.254 über maximal 30 Abschnitte

  1    <1 ms    <1 ms    <1 ms  192.168.0.254
  2     *        *        *     Zeitüberschreitung der Anforderung.
  3     *        *        *     Zeitüberschreitung der Anforderung.
  ...

Der Traceroute auf den Router funktioniert, ebenso ein traceroute auf einen Rechner, der zuvor den Router angepingt hat. Andere Rechner aus dem Netz sind leider nicht zu erreichen, sie sind aber vorhanden und auch deren Netz zu erreichen.

:idea: Ich muss bei denen natürlich auch noch das neue Gateway einstellen. Mein Problem dürfte sich somit erledigt haben. Mache mich gleich an die Arbeit :!:
 
Oben