Quality of Service

From Bondix Wiki
Revision as of 13:41, 17 August 2023 by Red (talk | contribs) (First draft, describe how to set up QoS on tlt)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Quality of Service allows you to differentiate between different types of traffic, and apply different rules to them that affect how they are transported through the bonding tunnel.

This feature is currently in development, information presented here is subject to change.

Configuration on Teltonika

Currently it is only possible to configure QoS on Teltonika devices.

Navigate to Network > Bondix Bonding > Quality of Service. Currently, you will have to create all classes yourself, we will introduce presets soon.

Traffic Classes

First, create traffic classes. These are rules that specify how traffic should be treated. At a glance:

QoSClasses.png
Max Channel maximum amount of channels that should be used, 0 = unlimited
Duplication specifies how many copies of the packet should be sent out.
Bonding Latency sets the latency threshold when selecting channels. The latency of the lowest channel PLUS this value is the upper limit for all other channels.
Distribute Whether packets should be distributed evenly accross all channels. If you use packet duplication, this might have only little effect.
Max Bandwidth A limit in MBit for all traffic in that group.
Bonding Proxy Whether traffic should use Bonding Proxy. When disabled and there is matching TCP traffic, it will still end up in the proxy, but in a default QoS class. The goal is to not send matching traffic into the proxy, but this is currently not implemented.
Channel Selection Specifies how suitable channels are picked for the class. This only has an effect when distribute is disabled, or when only a subset of channels are to be used.
  • Default: The default mechanism, using a combination of latency and packetloss.
  • Latency: Prioritize latency
  • Bandwidth: Prioritize Bandwidth
Score Will be renamed to priority. Classes with higher priority can write packets first, and also <score> amount of packets at once. In theory, setting this high enough should allow for a high priority class to starve any other value. However, see remarks down below.

Important: Currently, you must reload the page after saving changes made in the Traffic Classes list, otherwise editing QoS rules will likely fail. This is a known bug that we are working on.

QoS Rules

After having created a set of traffic classes, you can create sorting rules, which specify what type of traffic should be assigned to which traffic classes.

QoSSorting.png
Protocol Which protocol to match to. Currently available options are Any, TCP, UDP, TCP+UDP, ICMP, Other,
Source What source IP's to match on. Value must be entered in CIDR notation. To be able to match to source IPs, masquerading must be disabled on the client, and an appropiate route must be configured on the tunnel.
Source Ports What source port(s) to use. You can either specify a single port (e.g. 12345) or a range of ports (e.g. 12340-12350). A value of "0" means any port.
Destination What destination IPs to match on. Again, value must be entered in CIDR notation.
Dest Ports What destination ports to use. Accepts single port or port range, or "0" for any port.
Traffic Class What traffic class to use. If a traffic class does not appear here, you must refresh the page in your browser, known bug.

Traffic rules are sorted by specificity. If multiple rules would match to certain traffic, the rule that is the most specific will be applied.

Traffic that does not match any traffic will be matched to an internal default QoS class, that uses the default bonding settings. We do not intend to make these settings accessible. Instead, you should create a broad rule that matches to all traffic (Any Protocol, 0.0.0.0/0:0 for both source & destination). targetting a traffic class of your choice.

Compatibility

Client and server are generally backwards compatible. When a legacy client connects to a QoS endpoint, the client can still apply its original Tunnel Preset. When a QoS client connects to a legacy client, it will apply the default "Bonding" tunnel preset, it's still possible on the legacy server to override these presets.

Quality of Service will replace the generic "Tunnel Preset" setting. While this setting is currently still available in beta builds, it will eventually disappear.