Trafficshaping und bridging

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Benutzeravatar
badera
Beiträge: 643
Registriert: 20.05.2004 20:01:50
Wohnort: Schweiz

Trafficshaping und bridging

Beitrag von badera » 11.04.2005 20:14:44

Ich habe ein Debianserver mit zwei Netzwerkkarten, der mit eth1 an einem ADSL-Router hängt und mit eth0 auf einen Switch mit anderen Rechnern verbunden ist. Alles ist im selben Subnetz untegbracht, wobei ich die beiden Netzwerkkarten im Server gebridged habe. Also das Netzwerk sieht so aus:

Code: Alles auswählen



       ADSL-Router                  SERVER
     --------------      |---------------------------|
 <-> |192.168.10.1| ---  |192.168.10.2 | 192.168.10.3|                  /------ 192.168.10.* 
     |            |      |   eth1      |    eth0     |    |------------//------ 192.168.10.*
     --------------      |          bridged          |----|Switch     | ------- 192.168.10.*
                         |        192.168.10.4       |    |------------\\------ 192.168.10.*
                         |---------------------------|                  \------ 192.168.10.*
                                                                         
Die Bridge habe ich mir mit den bridge-utils eingerichtet, und zwar folgendermassen:

Code: Alles auswählen

$ brctl addbr br0
$ brctl addif br0 eth0
$ brctl addif br0 eth1

$ ifconfig eth0 0.0.0.0
$ ifconfig eth1 0.0.0.0
$ ifconfig br0 192.168.10.4
Soweit so gut. Die Bridge funktioniert bestens; ich kann mit den Clients auf Internet...

Weshalb das Bridging: Ich möchte Traffic-Shaping-Regeln einrichten; vorerst bin ich aber zu faul, mich in iptables und tc einzuarbeiten; deshalb setze ich vorerst wondershaper ein. Da aber der Server von interner Seite mit 100MBit verfügbar sein soll (SMB...), so dachte ich mir, ich baue doch eine zweite Netzwerkkarte ein, durch die dann wirklich phyikalisch nur der "Internet-Datenstrom" fliesst. So kann ich ja jetzt mit

Code: Alles auswählen

wondershaper eth1 {download}{upload}
tiptop den Internetverkehr regeln (zumindest dachte ich mir das).

JETZ DAS PROBLEM:
Irgendwie stimmen die Trafficangaben hinten und vorne nicht überein. Wenn ich den Up- und Download-Geschwindigkeit begrenze, dann passiert wohl etwas bei der Geschwindigkeit; jedoch die angegebene Grösse stimmt absolut nicht überein. Besonders die Download-Geschwindigkeit ändert nur kurz und geht dann wieder an den Maximal-Anschlag. An was könnte das bloss liegen? - Ist da etwa das Bridging schuld? Wäre echt dankbar für Rat... - Danke!
- Adrian

Benutzeravatar
Hendri
Beiträge: 586
Registriert: 23.08.2003 12:17:43
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von Hendri » 12.04.2005 00:02:14

Naja, wondershaper ist auch eigentlich für router gedacht und müsste vielleicht angepasst werden um in einer bridge zu funktionieren.
Ich habe es bis jetzt noch nicht bei einer shaping bridge gesehen, das man die Pakete mittles u32 filter wie wondershaper das macht markiert.
Iptables kann es auf jeden Fall!

Code: Alles auswählen

iptables -t mangle -A FORWARD -s 192.168.1.0/24 -m physdev --physdev-is-bridged -j MARK --set-mark 20

PS.: Den ingress policer von Wondershaper würde ich deaktivieren und statt dessen auf eth0 und eth1 den ausgehenden Traffic shapen!
Ciao, Hendri

Benutzeravatar
badera
Beiträge: 643
Registriert: 20.05.2004 20:01:50
Wohnort: Schweiz

Beitrag von badera » 12.04.2005 22:21:00

Naja, wahrscheinlich geht das mit einer Bridge ja wirklich nicht. Immerhin wird ja quasi an Stelle von eth0 und eth1 ein neuer Netzadapter erzeugt. eth0 und eth1 sollte man nicht mehr direkt ansprechen habe ich gelesen.

In meinem Fall mach ich halt zwei Subnetze und Route dann beide zusammen. Allerdings funktioniert es noch nicht ganz. Warum wohl? - Jetzt sieht es so aus:

Code: Alles auswählen




       ADSL-Router                  SERVER                Gateway: 192.168.10.1
     --------------      |---------------------------|
 <-> |192.168.1.1 | ---  |192.168.1.2  | 192.168.10.1|                  /------ 192.168.10.*
     |            |      |   eth1      |    eth0     |    |------------//------ 192.168.10.*
     --------------      |                           |----|Switch     | ------- 192.168.10.*
                         |          routing          |    |------------\\------ 192.168.10.*
                         |---------------------------|                  \------ 192.168.10.*

Dann habe ich folgendes gemacht:

Code: Alles auswählen

echo 1 > /proc/sys/net/ipv4/ip_forward
ifconfig gibt das hier aus:

Code: Alles auswählen

eth0      Link encap:Ethernet  HWaddr 00:50:DA:40:A6:A8  
          inet addr:192.168.10.1  Bcast:192.168.10.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:23229 errors:0 dropped:0 overruns:0 frame:0
          TX packets:25180 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3176323 (3.0 MiB)  TX bytes:4521230 (4.3 MiB)
          Interrupt:10 Base address:0x1080 

eth1      Link encap:Ethernet  HWaddr 00:11:6B:31:03:32  
          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:5180 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3993 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5136777 (4.8 MiB)  TX bytes:272743 (266.3 KiB)
          Interrupt:5 Base address:0x1400 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:67 errors:0 dropped:0 overruns:0 frame:0
          TX packets:67 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:6332 (6.1 KiB)  TX bytes:6332 (6.1 KiB)

und route -n sagt das:

Code: Alles auswählen

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth1
Ich komme wie gewünscht vom 10er Netz aufs 1er Netz, kann immerhin 192.168.1.2 und 192.168.1.1von einer 10er Adresse pingen. Aber vom 10er Netz komme ich nicht über den Router (Server) via ADSL-Router aufs Internet. Der Router (Server) selbst kommt aber via ADSL-Router ins INet. Irgendwas mit der Routing-Tabelle ist wohl noch faul. Aber was??

Sorry für das lange Post; alle wichtigen Aussagen sollten aber vorhanden sein, so dass mir jemand helfen könnte. VIELEN DANK!
- Adrian

Benutzeravatar
Hendri
Beiträge: 586
Registriert: 23.08.2003 12:17:43
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von Hendri » 13.04.2005 00:31:25

Kann es sein das der DSL-Router das Netzt 192.168.10.0/24 nicht kennt und blockt?
Ciao, Hendri

Benutzeravatar
badera
Beiträge: 643
Registriert: 20.05.2004 20:01:50
Wohnort: Schweiz

Beitrag von badera » 13.04.2005 07:33:21

dieser Gedanke ist mir auch schon gekommen. Das wäre natürlich völlig doof. Was könnte ich dagegen tun? Wohl nix ausser auf dem Server NAT zu machen?

Ich habe auf dem ADSL-Router mal ne statische Route zum Netz 192.168.10.0/24 eingetragen über 192.168.1.2. So kann ich vom ADSL-Router aus nun auch alle Rechner im 10er Netz pingen... das bewirkt aber natürlich nicht, dass er Anfragen aus dem 10er Netz nicht mehr blockt, wenn wirklich das das Problem ist.
- Adrian

Benutzeravatar
Hendri
Beiträge: 586
Registriert: 23.08.2003 12:17:43
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von Hendri » 13.04.2005 11:38:19

Naja, eigentlich sollte es auf dem Router die Möglichkeit geben Subnetzte einzeln frei zu geben...
Um welchen Router handelt es sich bzw. was spricht dagegen das DSL Modem direkt an den Server zu klemmen?
Ciao, Hendri

Benutzeravatar
badera
Beiträge: 643
Registriert: 20.05.2004 20:01:50
Wohnort: Schweiz

Beitrag von badera » 13.04.2005 12:05:32

Es handelt sich um den LevelOne Router FBR-1407A. Ja eben, einen billig Router...

Das direkte anhängen eines Modems hat natürlich den Nachteil, dass der Debian-Server dann sicher sein muss. Ich müsste mich dann um Security-Updates bemühen... ausserdem macht Traffic-Shapping auf dem Interface, das direkt am Internet hängt, auch nicht völlig Sinn.
- Adrian

Benutzeravatar
Hendri
Beiträge: 586
Registriert: 23.08.2003 12:17:43
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von Hendri » 13.04.2005 15:38:15

Du kannst versuchen die Subnetmask 255.255.0.0 am Router fürs LAN zu benutzen. Da währen dann beide Ranges drinnen.
Bzw. lt. Spec dieses Routers sollte er eigenlich "Multi-segment LAN support" besitzen, was IMHO dafür sein sollte...
Das mit den Updates muß du aber auch mit der Firmware für den Router machen, da immer wieder Fehler und Sicherheitslöcher gestopft werden. Traffic shape funktioniert mit und ohne Router "gut"!
Ciao, Hendri

Benutzeravatar
badera
Beiträge: 643
Registriert: 20.05.2004 20:01:50
Wohnort: Schweiz

Beitrag von badera » 13.04.2005 16:24:08

Danke für Deine Hilfe!
Du kannst versuchen die Subnetmask 255.255.0.0 am Router fürs LAN zu benutzen
Wo sollte ich denn das einstellen?? Ich kann die Routing-Tabelle verändern. Aber hat das damit etwas zu tun resp. kann ich das so beeinflussen? - Ich meine wenn einfach grundsätzlich Traffic aus anderen Subnetzen geblockt wird kann ich ja so sicher nix erreichen.
Bzw. lt. Spec dieses Routers sollte er eigenlich "Multi-segment LAN support" besitzen, was IMHO dafür sein sollte...
Ja, eigentlich.

Danke!
- Adrian

Benutzeravatar
Hendri
Beiträge: 586
Registriert: 23.08.2003 12:17:43
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von Hendri » 13.04.2005 19:44:04

badera hat geschrieben: Wo sollte ich denn das einstellen?? Ich kann die Routing-Tabelle verändern. Aber hat das damit etwas zu tun resp. kann ich das so beeinflussen? - Ich meine wenn einfach grundsätzlich Traffic aus anderen Subnetzen geblockt wird kann ich ja so sicher nix erreichen.
Vermutlich dort wo man die IP des LAN Port's angibt kann man die Netmask eingeben?!?
Wollen wir uns mal nicht versteifen auf das der Router das Subnet blockt, aber versuche einmal NAT am Router zu aktivieren mit

Code: Alles auswählen

iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.1.2
um zu sehen ob sich der Verdacht erhärtet...
Ciao, Hendri

Benutzeravatar
badera
Beiträge: 643
Registriert: 20.05.2004 20:01:50
Wohnort: Schweiz

Beitrag von badera » 13.04.2005 19:55:42

Vermutlich dort wo man die IP des LAN Port's angibt kann man die Netmask eingeben?!?
Nein, leider nicht. Hatte ich auch schon geprüft.
Wollen wir uns mal nicht versteifen auf das der Router das Subnet blockt, aber versuche einmal NAT am Router zu aktivieren mit
Jawohl, NAT habe ich auch schon aktiviert; zwar mit

Code: Alles auswählen

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Und so funktionierts bestens. Also es ist eindeutig der Router, der nichts weiterschickt, das aus einem fremden Subnetz kommt.
(Ich werde für mich noch untersuchen, was der Unterschied zwischen Deinem NAT-Vorschlag und meinem ist. SNAT habe ich noch nie gesehen. Aber das werde ich mal studieren.)

Also, soweit so gut. Mit NAT funktionierts. Eigentlich ist es ja auch egal so. Wahrscheinlich hat es für mich sowieso gar keine Nachteile. Der einzige Nachteil wäre wohl, dass jetzt der (ADSL)-Router kein Portforwarding direkt hinter meinen Server machen könnte?! Stimmt das? Oder hat das ganze sonst noch Nachteile?

Ich werde mal noch versuchen, den Support von LevelOne zu erreichen; vielleicht gibts ja da schon FAQs dazu.

Dir ein GROSSES DANKE FÜR DEINE GEDULDIGE & FREUNDLICHE HILFE!!!
- Adrian

Benutzeravatar
Hendri
Beiträge: 586
Registriert: 23.08.2003 12:17:43
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von Hendri » 13.04.2005 20:20:02

MASQUERADE ist eine Sonderform von SNAT wo die Interface Adresse nicht bekannt sein muss (DHCP). Was aber mehr Aufwand im Kernel bedeutet immer zu überprüfen ob und welche ip das interface hat.
Näheres hier...
Ja, es mühsamer... Du mußt Port-forwarding vom DSL Router zu deinem Debian Router und von dort nochmals weiterleiten mit

Code: Alles auswählen

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.x:80
an den betreffenden Rechner. Aber klappen sollte das! :-D
Ciao, Hendri

Benutzeravatar
badera
Beiträge: 643
Registriert: 20.05.2004 20:01:50
Wohnort: Schweiz

Beitrag von badera » 13.04.2005 20:22:25

Danke Dir!

Wenn ich noch was rauskrieg wegem ADSL-Router, werde ich das hier posten!
- Adrian

Antworten