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

[gelöst] rateest bei iptables

HltmaN

Newbie
Hallo,

irgendwie komm ich mit dem rateest nicht ganz klar, kann mir jemand sagen wie die Berechnung erfolgt mit den 2 Werten.
Hier mal die Manpage:
rateest
The rate estimator can match on estimated rates as collected by the RATEEST target. It supports matching on absolute bps/pps values, comparing two rate estimators and matching on the difference between two rate estimators.

--rateest1 name
Name of the first rate estimator.
--rateest2 name
Name of the second rate estimator (if difference is to be calculated).
--rateest-delta
Compare difference(s) to given rate(s)
--rateest1-bps value
--rateest2-bps value
Compare bytes per second.
--rateest1-pps value
--rateest2-pps value
Compare packets per second.
[!] --rateest-lt
Match if rate is less than given rate/estimator.
[!] --rateest-gt
Match if rate is greater than given rate/estimator.
[!] --rateest-eq
Match if rate is equal to given rate/estimator.

Kann mir das jemand anhand dieser Beispiele erklären:
Code:
 # Mark based on available bandwidth

iptables -t mangle -A balance -m conntrack --ctstate NEW -m helper --helper ftp -m rateest --rateest-delta --rateest1 eth0 --rateest-bps1 2.5mbit --rateest-gt --rateest2 ppp0 --rateest-bps2 2mbit -j CONNMARK --set-mark 1

iptables -t mangle -A balance -m conntrack --ctstate NEW -m helper --helper ftp -m rateest --rateest-delta --rateest1 ppp0 --rateest-bps1 2mbit --rateest-gt --rateest2 eth0 --rateest-bps2 2.5mbit -j CONNMARK --set-mark 2

Danke.

Grüße
 
OP
H

HltmaN

Newbie
Danke spoensche, auf dich ist einfach verlass ;)

Code:
# route based on available bandwidth
iptables -t mangle -A BALANCE -m helper --helper ftp \
-m connmark --mark 0x0 \
-m rateest --rateest-delta \
--rateest1 eth0 \
--rateest-bps1 2.5mbit \
--rateest-gt \
--rateest2 ppp0 \
--rateest-bps2 2mbit \
-j CONNMARK --set-mark 0x1


iptables -t mangle -A BALANCE -m helper --helper ftp \
-m connmark --mark 0x0 \
-m rateest --rateest-delta \
--rateest1 ppp0 \
--rateest-bps1 2mbit \
--rateest-gt \
--rateest2 eth0 \
--rateest-bps2 2.5mbit \
-j CONNMARK --set-mark 0x2

Hab ich das richtig verstanden, sagen wir die aktuellen Bandbreiten sind folgende:
eth0 = 500 kbit
pp0 = 500 kbit

eth0: 2.5mbit - 500 kbit = 2mbit verfügbare Bandbreite
pp0 = 2mbit - 500kbit = 1,5 mbit verfügbare Bandbreite

2mbit > 1,5mbit = true also MARK 0x1

pp0: 2mbit - 500 kbit = 1,5mbit verfügbare Bandbreite
eth0: 2,5mbit - 500 kbit = 2mbit verfügbare Bandbreite

1,5mbit > 2mbit = false also keine Markierung


Ist das richtig? ;)

Grüße
 

spoensche

Moderator
Teammitglied
Ist leider nicht ganz richtig. Die 2.5 Mbit bzw. 2Mbit ist die verfügbare max. Bandbreite, nicht die 500 KB.

Bandbreite von eth0 > Bandbreite von ppp0:
Die erste Regel trifft zu, wenn die Differenz der Bandbreite von eth0 (ratest-bps1) größer als von ppp0 (ratest-bps2) ist.

Bandbreite von ppp0 > Bandbreite von eth0
Die zweite Regel trifft zu, wenn die Differenz der Bandbreite von ppp0 größer als von eth0 ist.
 
OP
H

HltmaN

Newbie
Ist leider nicht ganz richtig. Die 2.5 Mbit bzw. 2Mbit ist die verfügbare max. Bandbreite, nicht die 500 KB.
Wo hab ich geschrieben, dass 500KB die verfügbare max. Bandbreite ist?

Bandbreite von eth0 > Bandbreite von ppp0:
Die erste Regel trifft zu, wenn die Differenz der Bandbreite von eth0 (ratest-bps1) größer als von ppp0 (ratest-bps2) ist.

Bandbreite von ppp0 > Bandbreite von eth0
Die zweite Regel trifft zu, wenn die Differenz der Bandbreite von ppp0 größer als von eth0 ist.

Meinst du mit der "Differenz der Bandbreite von eth0": 2,5 MBit - 500 kb, also 2Mbit.
Sorry ich blick nicht was du meinst oder wo der Unterschied zu meiner Rechnung ist. ;)
 

spoensche

Moderator
Teammitglied
HltmaN schrieb:
Ist leider nicht ganz richtig. Die 2.5 Mbit bzw. 2Mbit ist die verfügbare max. Bandbreite, nicht die 500 KB.
Wo hab ich geschrieben, dass 500KB die verfügbare max. Bandbreite ist?

Sorry mein Fehler. Habe mich zu unklar ausgedrückt.

HltmaN schrieb:
Bandbreite von ppp0 > Bandbreite von eth0
Die zweite Regel trifft zu, wenn die Differenz der Bandbreite von ppp0 größer als von eth0 ist.

Meinst du mit der "Differenz der Bandbreite von eth0": 2,5 MBit - 500 kb, also 2Mbit.
Sorry ich blick nicht was du meinst oder wo der Unterschied zu meiner Rechnung ist. ;)

2.5 - 500 ist falsch,weil in der Regel ppp0 > eth0, also (2Mbit-500kbit) > (2.5Mbit-500kbit) als Bedingung angegeben ist.
 
OP
H

HltmaN

Newbie
achso okay, ja logisch ;) mir ging es bei der Rechnung auch um die Logik, hab auf die Werte garnicht geachtet.

Nochmal Danke ;)
 
OP
H

HltmaN

Newbie
Hallo,

ich habe das folgende Skipt nun in vmware ausprobiert, aber der gesamte Traffic wird immer mit 0x1 markiert. Habe ich ein fehler im Skript oder liegt das an der Trägheit der Funktion von rateest?
Oder liegt des an CONNMARK, weil ich über den Traffic Generator immer auf die 2 gleichen "externen" IPs den Traffic leite? :???:

Code:
#!/bin/bash

iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.16.1.1
iptables -t nat -A POSTROUTING -o eth2 -j SNAT --to-source 172.16.0.1
ip route del default


iptables -t mangle -N MARK-T1
iptables -t mangle -A MARK-T1 -j MARK --set-mark 1
iptables -t mangle -A MARK-T1 -j CONNMARK --save-mark

iptables -t mangle -N MARK-T2
iptables -t mangle -A MARK-T2 -j MARK --set-mark 2
iptables -t mangle -A MARK-T2 -j CONNMARK --save-mark


iptables -t mangle -A POSTROUTING -o eth1 -j RATEEST --rateest-name eth1 --rateest-interval 250ms --rateest-ewma 0.5s
iptables -t mangle -A POSTROUTING -o eth2 -j RATEEST --rateest-name eth2 --rateest-interval 250ms --rateest-ewma 0.5s


iptables -t mangle -N BALANCE
iptables -t mangle -A PREROUTING -i eth0 -j BALANCE

# route based on available bandwidth
iptables -t mangle -A BALANCE -m conntrack --ctstate NEW -m rateest --rateest-delta --rateest1 eth1 --rateest-bps1 2.1mbit --rateest-gt --rateest2 eth2 --rateest-bps2 2mbit -j MARK-T1


iptables -t mangle -A BALANCE -m conntrack --ctstate NEW -m rateest --rateest-delta --rateest1 eth2 --rateest-bps1 2mbit --rateest-gt --rateest2 eth1 --rateest-bps2 2.1mbit -j MARK-T1
iptables -t mangle -A BALANCE -j LOG --log-prefix "BALANCE:" --log-level 7


iptables -t mangle -A BALANCE -j CONNMARK --restore-mark

ip route add table T1 default dev eth1 via 172.16.1.2
ip route add table T1 172.16.1.0/24 dev eth1
ip route add table T1 192.168.3.0/24 dev eth0                           

ip route add table T2 default dev eth2 via 172.16.0.2
ip route add table T2 172.16.0.0/24 dev eth2
ip route add table T2 192.168.3.0/24 dev eth0   

ip rule add fwmark 1 table T1
ip rule add fwmark 2 table T2
ip route flush cache

sysctl -w net.ipv4.ip_forward=1

Grüße HltmaN
 
OP
H

HltmaN

Newbie
Danke, habs gerade auch bemerkt, werde es nochmal versuchen... langsam dreh ich komplett am Rad mit dem Zeug xDD :irre:
 

spoensche

Moderator
Teammitglied
In welche Richtung drehst du das Rad denn?;) Zwischendurch Pausen einlegen, damit sich das ganze mal setzen kann hilft.
 
OP
H

HltmaN

Newbie
Ja hast wohl recht ;)

weißt du zufällig in welchen Einheiten man die "--rateest-bps1 2.1mbit" angeben kann.
bit, kbit, mbit, gbit müsste gehen oder?

Grüße
 
Oben