ubuntuusers.de

Problem beim Routing mit iptables

Status: Ungelöst | Ubuntu-Version: Ubuntu 10.10 (Maverick Meerkat)
Antworten |

karabiner

Anmeldungsdatum:
10. August 2011

Beiträge: 16

Liebe Experten, ich habe ein Problem beim Verbinden zweier Netze mit Iptables. Die Situation ist die Folgende (vgl. Grafik im Anhang

Ungültiges Makro

Dieses Makro ist nicht verfügbar

): Die FritzBox ist DHCP Server für Netz 1. Der Router hat 2 Netzwerkkarten und verbindet Netz 1 und Netz 2. Für das Ip-Forewarding habe ich iptables verwendet. Die iptables-Befehle habe ich in die /etc/network/interfaces geschrieben.

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 192.168.2.22
        netmask 255.255.255.0
        gateway 192.168.2.1

auto eth1
iface eth1 inet static
        address 192.168.102.22
        netmask 255.255.255.0

up /sbin/iptables -F
 up /sbin/iptables -X
  up /sbin/iptables -t nat -F

up /sbin/iptables -A FORWARD -o eth0 -s 192.168.0.0/16 -m conntrack --ctstate NEW -j ACCEPT
 up /sbin/iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  up /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
   up /sbin/sysctl -w net.ipv4.ip_forward=1

up /etc/init.d/dnsmasq restart
root@datenserver:~# route
Kernel-IP-Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
192.168.102.0   *               255.255.255.0   U     0      0        0 eth1
192.168.2.0     *               255.255.255.0   U     0      0        0 eth0
link-local      *               255.255.0.0     U     1000   0        0 eth0
default         fritz.box       0.0.0.0         UG    100    0        0 eth0
root@datenserver:~# 
root@datenserver:~# iptables -L 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  192.168.0.0/16       anywhere            ctstate NEW 
ACCEPT     all  --  anywhere             anywhere            ctstate RELATED,ESTABLISHED 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
root@datenserver:~#

Die Internetverbindung (FritzBox befindet sich in Netz 1) funktioniert auch aus Netz 2 prima. Auch kann ich von einem Rechner aus Netz 2 auch alle Rechner in Netz 1 anpingen. Mein Problem ist nun, dass ich von Netz 2 nicht auf die Samba-Freigaben und die Drucker in Netz 1 zugreifen kann. In Netz 1 steht ein NAS, zu welchem keine Verbindung hergestellt werden kann. Das Browser-Interface des NAS kann ich aber sehrwohl aufrufen. Es geht also nur das smb-Protokoll nicht. Weiterhin kann ich aus Netz 2 nicht auf den Druckern in Netz 1 drucken. Der Druckauftrag läuft ins Leere, auch wenn ich das Browser-Interface der Drucker öffnen kann.

Hättet ihr eine Idee? Es ist echt wichtig! Danke euch schonmal für eure Hilfe!!!

Gruß Nils

Bilder

raptor2101

Anmeldungsdatum:
8. Juni 2009

Beiträge: 1249

Wohnort: Stuttgart, Deutschland

Wozu brauchst du iptables Rules wenn du deine Default-Regel auf Accept lässt? Wozu dnsmasq? Nat-es du zwischen Netz 1/2? (iptables -L -t nat fehlt). Das würde erklären warum es bei dir überhaupt klappt ohne das du die neue Route auf dem defoult-Router (Fritzbox?) bekannt gemacht hast.

Hat das NAS auch eine Firewall. Normslerweise lassen diese SMB nur aus lokalen Netz zu.

karabiner

(Themenstarter)

Anmeldungsdatum:
10. August 2011

Beiträge: 16

Sorry, ich verstehe nicht genau, was du meinst. Also ganz konkret hieße die Frage: Wie bringe ich dem Router bei, dass der alle Anfragen aus Netz 1, die Netz 2 betreffen einfach an Netz 2 übergibt. Es soll also der Zustand herrschen, als wenn Netz 1 und Netz 2 ein Netz wären. Brauche ich dafür IP-tables oder reicht auch eine statische Route? Mit IP-forwarding = yes müsste doch jede Anfrage richtig in das entsprechende Netz umgeleitet werden oder?? Das funktioniert aber nicht ☹

Den SMB könnte ich ja umstellen, dass er auch aus dem anderen Netz die Anfragen zulässt. Der Drucker sollte ja aber immer funktionieren.

Danke und Gruß Nils

raptor2101

Anmeldungsdatum:
8. Juni 2009

Beiträge: 1249

Wohnort: Stuttgart, Deutschland

Das ist nicht so einfach wie du denkst.

Erstmal das forwarding/routing: das funktiiniert so wie du beschrieben hast. Packete von Netz2 werden in Netz1 geroutet. Das ist aber nur die halbe Miete. Der Empfänger muss wissen wie er antworten soll. Nun hängt es davon ab wie dein Router eingestellt ist. Du machst da "irgendwie" mit dnsmasq rum. Dieses tool beinhaltet normalerweise auch das Verhalten, dass der Router den Paketabsender auf seine eigene Adresse umbiegt (Masquariding und NAT). Wenn du das so eingestelt hast musst du im Netz1 nichts machen. Die Clients bekommen davon nichts mit. Du solltest dann mittels "iptables -t hat -L" rules finden welches interface maskiert wird. Eine Protokolle vertrahen es aber nicht über so eine Nat-Krücke gezogen zu werden. Ob SMB das ab kann weiß ich allerdings nicht. Die neuen Windows Clients nutzen nur noch TCP, da sollte NAT kein Problem sein, bei den älteren kommt noch ein UDP/TCP misch zum Einsatz. Da könnte das schiefgehen...

Machst du "echtes" routing kommt bei den Netz1 Clients (NAS, Printer) die echte Netz Adresse als Absenderadresse an. Dann muss dieses Gerät aber auch wissen wie es dieses Netz erreicht. Entweder hinterlegst du eine Rute an allen Geräten oder stellst an allen Geräten deine Fritzbox als default-Gateway ein und hinterlegst dort die Route zum Netz2 über deinen Zusatzrouter

karabiner

(Themenstarter)

Anmeldungsdatum:
10. August 2011

Beiträge: 16

Hi Raptor, danke dir erstmal für deine Antwort.

Machst du "echtes" routing kommt bei den Netz1 Clients (NAS, Printer) die echte Netz Adresse als Absenderadresse an. Dann muss dieses Gerät aber auch wissen wie es dieses Netz erreicht. Entweder hinterlegst du eine Rute an allen Geräten oder stellst an allen Geräten deine Fritzbox als default-Gateway ein und hinterlegst dort die Route zum Netz2 über deinen Zusatzrouter

Es ist ja auch so, dass auf allen Rechnern in Netz 2 der Router als Gateway angegeben ist. In Netz 1 haben alle Rechner die Fritzbox als Gateway. Damit sollten doch alle Anfragen von den Netz 2-Rechnern zum Router gehen. Dieser soll jetzt die Anfrage in Netz 1 durchschleifen. Das scheint er aber ohne iptables nicht zu tun. Was heißt denn echtes Routing? Also ohne iptables und nur über die Routingtabelle? Wie muss die aber konkret aussehen, damit Anfragen von Netz 1 nach Netz 2 und umgekehrt durchgeschleift werden? Ip-forewarding ist auf 1 gesetzt. Da der Router in beiden Netzen hängt sollte er doch auch wissen, auf welches Interface er die Weiterleitung schickt.

Geht es also ohne Ip-tables? Also ohne NAT? Danke und Gruß Nils

raptor2101

Anmeldungsdatum:
8. Juni 2009

Beiträge: 1249

Wohnort: Stuttgart, Deutschland

Also nochmals zur Klarstellung: iptables/nertfilter ist ein ein Paketfilter und Manipulator. Böse Zungen würden es Firewall nennen. Damit möchte man Routing eher einschränken.

Nun zu deiner Frage: Als Clients aus Netz2 wissen das es den Router gibt. Als Clients aus Netz1 wissen das es die FritzBox gibt. Aber die Fritzbox und der Router wissen nichts von einander. Standardmäßig gibt es keine AutoDiscovery-Protokolle. Bei deinem kleinen Netzwerk reicht es, wenn du der fritzbox eine zusätzliche Route parametrierst, dass sie Netz2 über deinen router erreichen kann.

encbladexp Team-Icon

Ehemaliger
Avatar von encbladexp

Anmeldungsdatum:
16. Februar 2007

Beiträge: 17521

Noch dazu spielt man weder mit sysctl noch mit iptables in der /etc/network/interfaces rum ▶ Ist megahässlich 😉

mfg Betz Stefan

Antworten |