PF, QBC bzw. PRIQ ohne Wirkung

x30n

Member
Hallo,

Um unsere begrenzte DSL Leitung besser aufzuteilen versuchen wir einen OpenBSD router zu überzeugen, den Traffic ein wenig zu ordnen. Leide bisher ohne Erfolg.

Das Gerät verfügt über die beiden NICs dc0 und dc1 wobei letzterer das externe interface ist. Das Routing mittels NAT funktioniert einwandfrei. Läuft jedoch ein Download via FTP blockiert dieser mehr oder minder trotzdem den gesamten restlichen Verkehr.

Dies ist meine CBQ (bevorzugt) pf.conf:

Code:
ext_if="dc1"
ext_if_bw="100Mb"
ext_if_ip="10.0.0.42"
ext_if_net="10.0.0.0/24"
ext_if_bw_dsl="614Kb"           # DSL Speed (ATM)
ext_if_bw_local="99386Kb"       # Bandwidth of the Ethernetport - DSL

int_if="dc0"
int_if_bw="100Mb"
int_if_ip="10.0.3.229"
int_if_net="10.0.3.0/24"


# Normalize Packages
scrub in all

# Mother Queue
altq on $ext_if cbq bandwidth $ext_if_bw queue { local,dsl }

# Local Queue
queue local bandwidth $ext_if_bw_local cbq(borrow)

# DSL Motherqueue
queue dsl bandwidth $ext_if_bw_dsl { http,download }

# Split DSL Bandwidth
queue http bandwidth 400Kb priority 2 cbq(borrow,default)
queue download bandwidth 214Kb priority 1 cbq(borrow)

# Activating NAT
nat on $ext_if from !($ext_if) -> ($ext_if:0)

# Assign Traffic to queues

block in on $ext_if
block out on $ext_if

pass in proto tcp from any to any port {80,443} keep state queue http
pass out proto tcp from any to any port {80,443} keep state queue http

pass in proto udp from any to any port 53 queue general 
pass out proto udp from any to any port 53 queue general

pass in proto tcp from any to any queue download
pass out proto tcp from any to any queue download

Was mein Queue Assignment angeht, bin ich nicht wirklich sicher ob das so stimmt. Das letzte mal, dass ich eine Router gebaut habe ist Ewigkeiten her.

cu
x30n

PS: Da mich dieser smilie äußerst amüsierte bringe ich ihn zum Einsatz: :grumble:
 
Deinen "pass out/in"-Regeln fehlt das "queue"-Interface.
Die Syntax ist auch nicht fehlerfrei:

Code:
# Mother Queue
altq on $ext_if cbq bandwidth $ext_if_bw queue [B]{ local, dsl }[/B]

# Local Queue
queue local bandwidth $ext_if_bw_local cbq(borrow)

# DSL Motherqueue
queue dsl bandwidth $ext_if_bw_dsl [B]{ http, download }[/B]

# Split DSL Bandwidth
queue http bandwidth 400Kb priority 2 cbq([B]borrow default)[/B]
queue download bandwidth 214Kb priority 1 cbq(borrow)

# Activating NAT
nat on $ext_if from !($ext_if) -> ($ext_if:0)

# Assign Traffic to queues

block in on $ext_if
block out on $ext_if

pass in [B]on $ext_if[/B] proto tcp from any to any port [B]{ 80 443 } [/B]keep state queue http
pass out [B]on $ext_if[/B] proto tcp from any to any port [B]{ 80 443 }[/B] keep state queue http
 
Zuletzt bearbeitet:
hier sind zwei gute artikel:
http://www.probsd.net/pf/index.php/HFSC
cbq war bei mir zu ungenau, ich hab hfsc genommen. du musst am internen interface die queues aufsetzen, wenn du downloads begrenzen willst. queueing funktioniert nur für ausgehenden traffic eines interfaces. wenn du ftp-proxy benutzt, dann musst du dem auch noch die gewünschte queue als parameter mitgeben.
 
Ja jetzt geht mir ein Licht auf ... ich kann den Trafficfluss ja gar nicht kontrollieren, außer natürlich für eigene Dienste. Die Daten haben den Router schon erreicht wenn dieser versucht den Fluss zu begrenzen. Schlimmer Denkfehler :grumble:

Es ist also ganz egal ob ich mich auf den Kopf stelle oder sonst was mache, ich sehe keine Möglichkeit den Transfer zu regulieren :(

Irgendwelche Ideen?

cu
x30n
 
Wenn ich richtig verstehe was du möchtest, dann musst du queuing auch für das interne Interface vom Router in dein Lan einstellen, das ist ja dann der Traffic vom Internet "zu dir".
 
Es ist also ganz egal ob ich mich auf den Kopf stelle oder sonst was mache, ich sehe keine Möglichkeit den Transfer zu regulieren :(

Irgendwelche Ideen?

doch, das geht. wie gesagt am internen interface. da wirfst du das queueing mit deiner download bandbreite an z.b. 2mbit. die verteilst du dann auf verschiedene queues und markierst die zu queuenden pakete z.b. am internen interface mit

pass in on $LANINT inet proto tcp from <lanhosts> to port $PrioPortsOutTCP keep state queue int_prio
pass in on $LANINT inet proto tcp from <lanhosts> to port $LowPrioPortsOutTCP keep state queue int_lowprio

dann hält dein internes interface die pakete je nach queue setup so auf, wie du magst.
und wenn das läuft, kümmerst du dich noch um die ack pakete priorisierung am externen interface, damit dir ein upload nicht die downloads lahm macht.
 
Vielen Dank für den Tip. Musste zwar zuerst noch die hintergründe verstehen (Sehr gute Page zu dem Thema)

Leider ist diese indirekte Methode etwas ineffizient, da dadurch wunderschöne pakete vorloren gehen usw, aber es hilft die Leitung hier besser zu nutzen. Immerhin können jetzt große Downloads neben dem üblichen Kram wie Radiostreams und Webbrowsing laufen.
 
Zurück
Oben