Add files via upload

This commit is contained in:
Robert Chacón authored and GitHub committed 2025-08-19 11:33:41 -06:00
1 parent 8d23741f69
commit 84f91b0fa0
71 files changed
+3163

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

+5
View File
@@ -0,0 +1,5 @@
# Resumen de cambios en LibreQoS v1.4 a v1.5
## Configuración Unificada
Toda la configuración se ha trasladado a `/etc/lqos.conf`.
+434
View File
@@ -0,0 +1,434 @@
# LibreQoS v1.3.1
## LibreQoS v1.3.1 Installation & Usage Guide - Physical Server and Ubuntu 22.04
## Notes for upgrading from v1.2 or prior
### Custom CRM Integrations
If you use a custom CRM integration, please ensure your integration uses a unique circuit identifier for the 'Circuit ID' field in ShapedDevices.csv. This is now required in v1.3 in order to make partial reloading possible. A good choice for this ID would be internet service plan unique ID, or the subscriber site ID your CRM provides for customer service locations. Multiple devices within the same circuit would use the same 'Circuit ID', but aside from that, all Circuit IDs should be distinct. The built-in Splynx and UISP integrations for v1.3 handle this automatically.
## Network Design Assumptions
Officially supported configuration:
- Edge and Core routers with MTU 1500 on links between them
- If you use MPLS, you would terminate MPLS traffic at the core router.
LibreQoS cannot decapsulate MPLS on its own.
- OSPF primary link (low cost) through the server running LibreQoS
- OSPF backup link
![](https://raw.githubusercontent.com/rchac/LibreQoS/main/docs/design.png)
Is it possible to use LibreQoS in-line without a core router, but that setup requires depending on STP instead of OSPF, which can cause issues. Such configurations are not officially supported.
## Network Interface Card
LibreQoS requires a NIC with 2 or more RX/TX queues and XDP support. While many cards theoretically meet these requirements, less commonly used cards tend to have unreported driver bugs which impede XDP functionality and make them unusable for our purposes. At this time we can only recommend Intel x520, Intel x710, and Nvidia (ConnectX-5 or newer) NICs.
## Server Setup
Disable hyperthreading on the BIOS/UEFI of your host system. Hyperthreaading is also known as Simultaneous Multi Threading (SMT) on AMD systems. Disabling this is very important for optimal performance of the XDP cpumap filtering and, in turn, throughput and latency.
- Boot, pressing the appropriate key to enter the BIOS settings
- For AMD systems, you will have to navigate the settings to find the "SMT Control" setting. Usually it is under something like ```Advanced -> AMD CBS -> CPU Common Options -> Thread Enablement -> SMT Control``` Once you find it, switch to "Disabled" or "Off"
- For Intel systems, you will also have to navigate the settings to find the "hyperthrading" toggle option. On HP servers it's under ```System Configuration > BIOS/Platform Configuration (RBSU) > Processor Options > Intel (R) Hyperthreading Options.```
- Save changes and reboot
## Install Ubuntu
Download Ubuntu Server 22.04 from <a href="https://ubuntu.com/download/server">https://ubuntu.com/download/server</a>.
1. Boot Ubuntu Server from USB.
2. Follow the steps to install Ubuntu Server.
3. If you use a Mellanox network card, the Ubuntu Server installer will ask you whether to install the mellanox/intel NIC drivers. Check the box to confirm. This extra driver is important.
4. On the Networking settings step, it is recommended to assign a static IP address to the management NIC.
5. Ensure SSH server is enabled so you can more easily log into the server later.
6. You can use scp or sftp to access files from your LibreQoS server for easier file editing. Here's how to access via scp or sftp using an [Ubuntu](https://www.addictivetips.com/ubuntu-linux-tips/sftp-server-ubuntu/) or [Windows](https://winscp.net/eng/index.php) machine.
## Use Installer Script (For Sponsors - Skip If Not Applicable)
Sponsors can use the LibreQoS-Installer script. This script does the following:
- Disables IRQbalance
- Disables required offloading types using service
- Creates a bridge between two interfaces - applied by the above service at each boot
- Installs LibreQoS and cpumap-pping
Once complete - skip to [this section](https://github.com/LibreQoE/LibreQoS/wiki/LibreQoS-v1.3-Installation-&-Usage-Guide-Physical-Server-and-Ubuntu-22.04#install-influxdb-for-graphing) of the guide.
## Setup
### Disable IRQbalance
```shell
sudo systemctl stop irqbalance
sudo systemctl disable irqbalance
```
### Disable Offloading
We need to disable certain hardware offloading features, as they break XDP, used by XDP-CPUMAP-TC to send traffic to appropriate CPUs.
You can create a bash script to disabled these offload features upon boot.
```shell
sudo nano /usr/local/sbin/offloadOff.sh
```
Enter the following
```shell
#!/bin/sh
ethtool --offload eth1 gso off tso off lro off sg off gro off
ethtool --offload eth2 gso off tso off lro off sg off gro off
```
Replace eth1 and eth2 with your two shaper interfaces (order doesn't matter).
Then create
```shell
sudo nano /etc/systemd/system/offloadOff.service
```
With the following
```text
[Unit]
After=network.service
[Service]
ExecStart=/usr/local/sbin/offloadOff.sh
[Install]
WantedBy=default.target
```
Then change permissions and enable the service with
```shell
sudo chmod 664 /etc/systemd/system/offloadOff.service
sudo chmod 744 /usr/local/sbin/offloadOff.sh
sudo systemctl daemon-reload
sudo systemctl enable offloadOff.service
sudo reboot
```
### Add a bridge between edge/core interfaces
From the Ubuntu VM, create a linux interface bridge - br0 - with the two shaping interfaces.
Find your existing .yaml file in /etc/netplan/ with
```shell
cd /etc/netplan/
ls
```
Then edit the .yaml file there with
```shell
sudo nano XX-cloud-init.yaml
```
with XX corresponding to the name of the existing file.
Editing the .yaml file, we need to define the shaping interfaces (here, ens19 and ens20) and add the bridge with those two interfaces. Assuming your interfaces are ens18, ens19, and ens20, here is what your file might look like:
```yaml
# This is the network config written by 'subiquity'
network:
ethernets:
ens18:
addresses:
- 10.0.0.12/24
routes:
- to: default
via: 10.0.0.1
nameservers:
addresses:
- 1.1.1.1
- 8.8.8.8
search: []
ens19:
dhcp4: no
ens20:
dhcp4: no
version: 2
bridges:
br0:
interfaces:
- ens19
- ens20
```
Make sure to replace 10.0.0.12/24 with your LibreQoS VM's address and subnet, and to replace the default gateway 10.0.0.1 with whatever your default gateway is.
Then run
```shell
sudo netplan apply
```
### Install LibreQoS and dependencies
Cd to your preferred directory and download the latest release
```shell
cd home/$USER/
sudo apt update
sudo apt install python3-pip clang gcc gcc-multilib llvm libelf-dev git nano graphviz
python3 -m pip install -r requirements.txt
sudo python3 -m pip install -r requirements.txt
git clone https://github.com/rchac/LibreQoS.git
git checkout v1.3.1
```
### Install and compile cpumap-pping
```shell
cd home/$USER/LibreQoS/src
git submodule update --init
cd cpumap-pping/
git submodule update --init
cd src/
make
```
### Install InfluxDB for Graphing
To install InfluxDB 2.x., follow the steps at [https://portal.influxdata.com/downloads/](https://portal.influxdata.com/downloads/).
For high throughput networks (5+ Gbps) you will likely want to install InfluxDB to a separate machine or VM from that of the LibreQoS server to avoid CPU load.
Restart your system that is running InfluxDB
```shell
sudo reboot
```
Check to ensure InfluxDB is running properly. This command should show "Active: active" with green dot.
```shell
sudo service influxdb status
```
Check that Web UI is running:<br>
```shell
http://SERVER_IP_ADDRESS:8086
```
Create Bucket
- Data > Buckets > Create Bucket
Call the bucket "libreqos" (all lowercase, without quotes).<br>
Have it store as many days of data as you prefer. 7 days is standard.<>
Import Dashboard
- Boards > Create Dashboard > Import Dashboard
Then upload the file [influxDBdashboardTemplate.json](https://github.com/rchac/LibreQoS/blob/main/src/influxDBdashboardTemplate.json) to InfluxDB.
[Generate an InfluxDB Token](https://docs.influxdata.com/influxdb/cloud/security/tokens/create-token/). It will be added to ispConfig.py in the following steps.
### Modify ispConfig.py
Copy ispConfig.example.py to ispConfig.py and edit as needed
```shell
cd /home/$USER/LibreQoS/src/
cp ispConfig.example.py ispConfig.py
nano ispConfig.py
```
- Set upstreamBandwidthCapacityDownloadMbps and upstreamBandwidthCapacityUploadMbps to match the bandwidth in Mbps of your network's upstream / WAN internet connection. The same can be done for generatedPNDownloadMbps and generatedPNUploadMbps.
- Set interfaceA to the interface facing your core router (or bridged internal network if your network is bridged)
- Set interfaceB to the interface facing your edge router
- Set ```enableActualShellCommands = True``` to allow the program to actually run the commands.
### Integrations
Integrations now share a common framework thanks to [this pull](https://github.com/rchac/LibreQoS/pull/145). This also allows for graphing the network topology with graphviz.
#### UISP Integration
To run the UISP Integration, use
```shell
python3 integrationUISP.py
```
On the first successful run, it will create a network.json and ShapedDevices.csv file.
If a network.json file exists, it will not be overwritten.
You can modify the network.json file to more accurately reflect bandwidth limits.
ShapedDevices.csv will be overwritten every time the UISP integration is run.
You have the option to run integrationUISP.py automatically on boot and every 30 minutes, which is recommended. This can be enabled by setting ```automaticImportUISP = True``` in ispConfig.py
### Network.json
Network.json allows ISP operators to define a Hierarchical Network Topology, or Flat Network Topology.
For networks with no Parent Nodes (no strictly defined Access Points or Sites) edit the network.json to use a Flat Network Topology with
```nano network.json```
setting the following file content:
```json
{}
```
If you plan to use the built-in UISP or Splynx integrations, you do not need to create a network.json file quite yet.
If you plan to use the built-in UISP integration, it will create this automatically on its first run (assuming network.json is not already present). You can then modify the network.json to more accurately reflect your topology.
If you will not be using an integration, you can manually define the network.json following the template file - network.example.json
```text
+-----------------------------------------------------------------------+
| Entire Network |
+-----------------------+-----------------------+-----------------------+
| Parent Node A | Parent Node B | Parent Node C |
+-----------------------+-------+-------+-------+-----------------------+
| Parent Node D | Sub 3 | Sub 4 | Sub 5 | Sub 6 | Sub 7 | Parent Node F |
+-------+-------+-------+-------+-------+-------+-------+-------+-------+
| Sub 1 | Sub 2 | | | | Sub 8 | Sub 9 |
+-------+-------+-------+-----------------------+-------+-------+-------+
```
#### Manual Editing
- Modify the network.json file using your preferred JSON editor (Geany for example)
- Parent node name must match that used for clients in ShapedDevices.csv
### ShapedDevices.csv
If you are using an integration, this file will be automatically generated. If you are not using an integration, you can manually edit the file.
- Modify the ShapedDevices.csv file using your preferred spreadsheet editor (LibreOffice Calc, Excel, etc), following the template file - ShapedDevices.example.csv
- An IPv4 address or IPv6 address is required for each entry.
- The Access Point or Site name should be set in the Parent Node field. Parent Node can be left blank for flat networks.
- The ShapedDevices.csv file allows you to set minimum guaranteed, and maximum allowed bandwidth per subscriber.
- The minimum allowed plan rates for Circuits are 2Mbit. Bandwidth min and max should both be above that threshold.
- Recommendation: set the min bandwidth to something like 25/10 and max to 1.15X advertised plan rate by using bandwidthOverheadFactor = 1.15
- This way, when an AP hits its ceiling, users have any remaining AP capacity fairly distributed between them.
- Ensure a reasonable minimum bandwidth minimum for every subscriber, allowing them to utilize up to the maximum provided when AP utilization is below 100%.
Note regarding SLAs: For customers with SLA contracts that guarantee them a minimum bandwidth, set their plan rate as the minimum bandwidth. That way when an AP approaches its ceiling, SLA customers will always get that amount.
![image](https://user-images.githubusercontent.com/22501920/200134960-28709d0f-48fe-4129-b4fd-70b204cade2c.png)
## How to run LibreQoS
### One-Time / Debug Runs
One-time runs show the response from the terminal for each filter rule applied, and can be very helpful for debugging and to make sure it is correctly configured.
- Modify setting parameters in ispConfig.py to suit your environment
- For one-time runs, use
```shell
sudo ./LibreQoS.py
```
- To use the debug mode with more verbose output, use:
```shell
sudo ./LibreQoS.py --debug
```
### Running as a service
To run as a service, we create a systemd service to run scheduler.py.
scheduler.py does the following:
- On start: Run a full setup of queues
- Every 30 minutes: Update queues, pulling new configuration from CRM integration if enabled
On Linux distributions that use systemd, such as Ubuntu, we create
```shell
sudo nano /etc/systemd/system/LibreQoS.service
```
Then paste the text below, replacing "/home/YOUR_USERNAME/LibreQoS" with wherever you downloaded LibreQoS to. Be sure to replace YOUR_USERNAME with your actual username, because otherwise when the root user executes it, it will look in the wrong directory.
```text
[Unit]
After=network.service
[Service]
WorkingDirectory=/home/YOUR_USERNAME/LibreQoS/src
ExecStart=/usr/bin/python3 /home/YOUR_USERNAME/LibreQoS/src/scheduler.py
ExecStopPost=/bin/bash -c '/usr/bin/python3 /home/YOUR_USERNAME/LibreQoS/src/LibreQoS.py --clearrules'
ExecStop=/bin/bash -c '/usr/bin/python3 /home/YOUR_USERNAME/LibreQoS/src/LibreQoS.py --clearrules'
Restart=always
[Install]
WantedBy=default.target
```
Then run
```shell
sudo chmod 664 /etc/systemd/system/LibreQoS.service
sudo systemctl daemon-reload
sudo systemctl enable LibreQoS.service
```
You can start the service using
```shell
sudo systemctl start LibreQoS.service
```
You can check the status of the service using
```shell
sudo systemctl status LibreQoS.service
```
You can restart the service to refresh any changes you've made to the ShapedDevices.csv file by doing
```shell
sudo systemctl restart LibreQoS.service
```
You can also stop the service to remove all queues and IP rules by doing
```shell
sudo systemctl stop LibreQoS.service
```
### Crontab
- At 4AM: Runs a full reload of all queues to make sure they perfectly match queueStructure.py and that any changes to network.json can be applied.
First, check to make sure the cron job does not already exist.
```shell
sudo crontab -l | grep -q 'LibreQoS' && echo 'entry exists' || echo 'entry does not exist'
```
The above should output "entry does not exist". If so, proceed to add it with:
```shell
(sudo crontab -l 2>/dev/null; echo "0 4 * * * /bin/systemctl try-restart LibreQoS") | sudo crontab -
sudo /etc/init.d/cron start
```
## Common Issues
### Program Running, But Traffic Not Shaping
In ispConfig.py, make sure the edge and core interfaces correspond to correctly to the edge and core. Try swapping the interfaces to see if shaping starts to work.
### RTNETLINK answers: Invalid argument
This tends to show up when the MQ qdisc cannot be added correctly to the NIC interface. This would suggest the NIC has insufficient RX/TX queues. Please make sure you are using the [recommended NICs](#network-interface-card).
## Performance Tuning
### OSPF
It is recommended to set the OSPF timers of both OSPF neighbors (core and edge router) to minimize downtime upon a reboot of the LibreQoS server.
- hello interval
- dead
+103
View File
@@ -0,0 +1,103 @@
# Configure LibreQoS
## Configuración de lqos.conf
Copie la configuración archivo del demonio lqosd en `/etc`:
```shell
cd /opt/libreqos/src
sudo cp lqos.example /etc/lqos.conf
```
Ahora edite el archivo para igualar su configuración con
```shell
sudo nano /etc/lqos.conf
```
Cambie `enp1s0f1` y `enp1s0f2` para coincidir con sus interfaces de red. No importa cuál sea cuál. Tenga en cuenta que está emparejando las interfaces, por lo que cuando ingresa por primera vez enps0f<ins>**1**</ins> en la primera línea, el parámetro es enp1s0f<ins>**2**</ins> (reemplace con los nombres de interfaz reales).
- Primera Línea: `name = "enp1s0f1", redirect_to = "enp1s0f2"`
- Segunda Línea: `name = "enp1s0f2", redirect_to = "enp1s0f1"`
Luego, si estará usando Bifrost/XDP, configure `use_xdp_bridge = true` bajo la misma sección `[bridge]`.
## Configuración de ispConfig.py
Copie ispConfig.example.py a ispConfig.py y edite según necesidad
```shell
cd /opt/libreqos/src/
cp ispConfig.example.py ispConfig.py
nano ispConfig.py
```
- Configure upstreamBandwidthCapacityDownloadMbps y upstreamBandwidthCapacityUploadMbps para que coincidan con el ancho de banda de subida de su red/WAN o conexión a Internet. Lo mismo puede hacerse para generatedPNDownloadMbps y generatedPNUploadMbps.
- Estableza la interfaceA en la interfaz orientada a su router principal (o red interna en puente si su red está en esa modalidad)
- Estableza la interfaceB en la interfaz orientada hacia su enrutador de borde.
- Establezca ```enableActualShellCommands = True``` para permitir que el programa ejecute los comandos propiamente tal.
## Network.json
Network.json permite a los operadores de ISP definir una Topología de Red Jerárquica, o una Topología de Red Plana.
Para redes sin Nodos Principales (sin Puntos de Acceso ni Sitios definidos estrictamentens) edite el archivo network.json para usar una Topología de Red Plana con
```nano network.json```
configurando el siguiente contenido de archivo:
```json
{}
```
Si planea usar las integraciones UISP o Splynx incorporadas, todavía no es necesario crear un archivo network.json.
Si planea usar las integraciones UISP incorporadas, este se creará automáticamente en su primera ejecución (asumiendo que network.json no esté ya presente). Después puede modificar network.json para que refleje más ajustadamente su topología.
Si no usará una integración, puede definirlo manualmente en network.json siguiendo el archiv plantilla - network.example.json
```text
+-----------------------------------------------------------------------+
| Entire Network |
+-----------------------+-----------------------+-----------------------+
| Parent Node A | Parent Node B | Parent Node C |
+-----------------------+-------+-------+-------+-----------------------+
| Parent Node D | Sub 3 | Sub 4 | Sub 5 | Sub 6 | Sub 7 | Parent Node F |
+-------+-------+-------+-------+-------+-------+-------+-------+-------+
| Sub 1 | Sub 2 | | | | Sub 8 | Sub 9 |
+-------+-------+-------+-----------------------+-------+-------+-------+
```
## Configuración Manual
Usted puede usar
```shell
python3 csvToNetworkJSON.py
```
Para convertir manualNetwork.csv como un archivo network.json.
manualNetwork.csv puede ser copiado desde un archivo plantilla, manualNetwork.template.csv
Nota: El nombre del nodo principal debe coincidir con el utilizado para los clientes en ShapedDevices.csv
## ShapedDevices.csv
Si está realizando una integración, este archivo será generado automáticamente. Si no está haciendo una integración, puede editar manualmente el archivo.
### Edición Manual
- Modifique el archivo ShapedDevices.csv su editor de planillas electrónicas preferido (LibreOffice Calc, Excel, etc), siguiendo el archivo de plantilla - ShapedDevices.example.csv
- Se requiere ID Circuit. Este debe ser una cadena de algún tipo (un entero es suficiente, se analiza como cadena). NO debe incluir símbolos numéricos (#). Cada circuito necesita un CircuitID único, el que no se puede reutilizar. Aquí, un circuito significa básicamente la ubicación del cliente. Si un cliente tiene múltiples ubicaciones en diferentes partes de la red, utilice un ID de circuito único para cada una de ellas.
- Al menos una dirección IPv4 o IPv6 se requiere para cada entrada.
- El nombre del Punto de Acceso o Sitio debe configurarse en el campo de "Nodo Principal". Este campo puede quedar en blanco para redes planas.
- El archivo ShapedDevices.csv permite establecer un ancho de banda mínimo garantizado y un máximo permitido por suscriptor.
- La velocidad mínima permitida para los circuitos es de 2 Mbit. El ancho de banda mínimo de ser superior a ese umbral.
- Recomendación: establezca el ancho de banda mínimo en algo así como 25/10 y un máximo de 1.15X en base a la tarifa del plan publicitado utilizando bandwidthOverheadFactor = 1.15
- De esta manera, cuando un AP alcanza su límite, los usuarios tienen toda la capacidad de AP restante distribuida equitativamente entre ellos.
- Garantice un ancho de banda mínimo para cada suscriptor, permitiéndoles utilizar el máximo proporcionado cuando la utilización del AP sea inferior al 100%.
Nota acerca de los SLAs: Para los clientes que tienen contratos de SLA que les garanticen un ancho de banda mínimo, establezcan la tarifa de su plan como el ancho de banda mínimo. De esta manera, cuando un punto de acceso se acerque a su límite, los clientes con SLA siempre recibirán esa cantidad.
![image](https://user-images.githubusercontent.com/22501920/200134960-28709d0f-48fe-4129-b4fd-70b204cade2c.png)
Una vez completada la configuración, estará listo para ejecutar la aplicación e iniciar [Deamons](./services-and-run.md)
@@ -0,0 +1,46 @@
# Supuestos de Diseño de Red
## Configuraciones oficialmente soportadas
- LibreQoS se ubica dentro de una red, generalmente entre un enrutador de borde (NAT, firewall) y un enrutador central (distribución a sitios a través de la red).
- Si usa NAT/CG-NAT, coloque LibreQoS en lpínea al sur de donde se aplica NAT, debido a que LibreQoS necesita dar formar a direcciones internas (100.64.0.0/12), no a IP públicas posteriores a NAT.
- - Los enrutadores de borde y de núcleo deben tener 1500 MTU en los enlaces entre ellos
- Si usa MPLS, debería terminar el tráfico MPLS en el enrutador principal. LibreQoS no puede desencapsular MPLS por sí solo.
- Enlace principal OSPF (bajo costo) a través del servidor que ejecuta LibreQoS
- Enlace de respaldo OSPF (alto costo, quizás 200 por ejemplo)
![Configuración oficial](https://raw.githubusercontent.com/LibreQoE/LibreQoS/main/docs/design.png)
## Configuración del banco de pruebas
Cuando pruebe LibreQoS por primera vez, recomendamos implementar un banco de pruebas a pequeña escala para verlo en acción.
![image](https://github.com/user-attachments/assets/6174bd29-112d-4b00-bea8-41314983d37a)
### Tarjeta de Interfaz de Red
```{note}
Debe tener algouno de estos:
- Una sola NIC con dos interfaces,
- dos NIC con una sola interfaz,
- Interfaz 2x VLANs interface (utilizando una o dos NIC).
```
LibreQoS requiere que las tarjetas de red (NIC) tengan dos o más colas RX/TX y compatibilidad con XDP. Si bien muchas tarjetas cumplen teóricamente estos requisitos, las tarjetas menos utilizadas suelen presentar errores de controlador no reportados que impiden la funcionalidad XDP y las inutilizan para nuestros propósitos. Actualmente, recomendamos las tarjetas de red (NIC) Intel x520, Intel x710 y Nvidia (ConnectX-5 o posterior). No podemos garantizar la compatibilidad con otras tarjetas.
## Configuración alternativa (no compatible oficialmente)
Esta configuración alternativa utiliza el Protocolo de árbol de expansión (STP) para modificar la ruta de datos en caso de que el dispositivo LibreQoS esté fuera de línea por mantenimiento u otro problema.
```{note}
La mayoría de estas consideraciones se aplican a la configuración alternativa y a la configuración admitida oficialmente.```
- LibreQoS se coloca en línea en la red, generalmente entre un enrutador de borde (NAT, firewall) y un enrutador central (distribución a sitios a través de la red).
- Si usa NAT/CG-NAT, coloque LibreQoS en línea al sur de donde se aplica NAT, ya que LibreQoS necesita dar forma a direcciones internas (100.64.0.0/12), no a IP públicas posteriores a NAT.
- El enrutador de borde y el conmutador central deben tener 1500 MTU en los enlaces entre ellos
- Si usa MPLS, debería terminar el tráfico MPLS en algún lugar al sur del conmutador central/distribuidor. LibreQoS no puede desencapsular MPLS por sí solo.
- Enlace principal de Spanning Tree (bajo costo) a través del servidor que ejecuta LibreQoS
- Enlace de respaldo de Spanning Tree (alto costo, quizás 80 por ejemplo)
Tenga en cuenta que si utiliza enlaces con diferentes anchos de banda, por ejemplo, 10 Gbps a través de LibreQoS y 1 Gbps entre el conmutador central y el enrutador de borde, es posible que deba ser más intencional con los costos de STP.
![Configuración Alternativa](../stp-diagram.png)
@@ -0,0 +1,37 @@
# Instalar LibreQoS 1.4
## Actualización desde la versión v1.3
### Eliminar offloadOff.service
```shell
sudo systemctl disable offloadOff.service
sudo rm /usr/local/sbin/offloadOff.sh /etc/systemd/system/offloadOff.service
```
### Eliminar las tareas cron de la versión v1.3
Ejecute ```sudo crontab -e``` y elimine cualquier entrada relacionada con LibreQoS desde v1.3.
## Instalación sencilla desde el paquete .Deb (recomendada)
Utilice el paquete .deb de la [última versión v1.4 ](https://github.com/LibreQoE/LibreQoS/releases/).
```shell
sudo echo "deb http://stats.libreqos.io/ubuntu jammy main" | sudo tee -a /etc/apt/sources.list.d/libreqos.list
sudo wget -O - -q http://stats.libreqos.io/repo.asc | sudo apt-key add -
apt-get update
apt-get install libreqos
```
Se le realizarán algunas preguntas sobre su configuración, y el demonio de administración y el servidor web se iniciarán automáticamente. Vaya a http://<your_ip>:9123/ para finalizar la instalación.
## Instalación compleja (no recomendada)
```{note}
Use esta instalación si quiere implementar constantemente desde la rama principal en Github. ¡Solo para usuarios experimentados!
```
[Instalación Compleja](../TechnicalDocs/complex-install.md)
Ahora está listo para [Configurar](./configuration.md) LibreQoS!
+87
View File
@@ -0,0 +1,87 @@
# Configuración del servidor - Requisitos previos
Desactive el hyperthreading en la BIOS/UEFI de su sistema host. El hyperthreading también se conoce como multihilo simultáneo (SMT) en sistemas AMD. Desactivarlo es fundamental para optimizar el filtrado de CPUmap de XDP y, por consiguiente, el rendimiento y la latencia.
- Arranque, presionando la tecla apropiada para ingresar a la configuración del BIOS
- En sistemas AMD, deberá navegar por la configuración para encontrar la opción "Control SMT". Normalmente se encuentra en ```Advanced -> AMD CBS -> CPU Common Options -> Thread Enablement -> SMT Control``` Una vez que lo encuentres, cambia a "Disabled" o "Off"
- Para los sistemas Intel, también deberá navegar por la configuración para encontrar la opción de "hyperthreading". En los servidores HP, se encuentra en ```System Configuration > BIOS/Platform Configuration (RBSU) > Processor Options > Intel (R) Hyperthreading Options.```
- Guardar cambios y reiniciar
## Instalar en servidor Ubuntu
Recomendamos Ubuntu Server porque su versión de kernel suele coincidir estrechamente con las versiones principales de Linux. Nuestra documentación actual asume Ubuntu Server. Para ejecutar LibreQoS v1.4, se requiere el kernel de Linux 5.11 o superior, ya que incluye algunos parches importantes para XDP. Ubuntu Server 22.04 usa el kernel 5.13, que cumple con este requisito.
Puede descargar Ubuntu Server 22.04 desde <a href="https://ubuntu.com/download/server">https://ubuntu.com/download/server</a>.
1. Arrancar el servidor Ubuntu desde USB.
2. Siga los pasos para instalar Ubuntu Server.
3. Si usa una tarjeta de red Mellanox, el instalador de Ubuntu Server le preguntará si desea instalar los controladores de NIC Mellanox/Intel. Marque la casilla para confirmar. Este controlador adicional es importante.
4. En el paso de configuración de red, se recomienda asignar una dirección IP estática a la NIC de administración.
5. Asegúrese de que el servidor SSH esté habilitado para que pueda iniciar sesión en el servidor más fácilmente más tarde.
6. Puedes usar SCP o SFTP para acceder a archivos desde tu servidor LibreQoS y facilitar su edición. Aquí te explicamos cómo acceder mediante SCP o SFTP usando una máquina[Ubuntu](https://www.addictivetips.com/ubuntu-linux-tips/sftp-server-ubuntu/) o [Windows](https://winscp.net/eng/index.php).
### Elija el tipo de puente
Hay dos opciones para que el puente pase datos a través de sus dos interfaces:
- Puente acelerado Bifrost XDP
- Puente Linux regular
Se recomienda el puente Bifrost para NIC Intel con soporte XDP, como X520 y X710.Se recomienda el puente Linux normal para las NIC Nvidia/Mellanox como la serie ConnectX-5 (que tienen un rendimiento de puente superior) y configuraciones de VM que usan NIC virtualizadas.
Para utilizar el puente Bifrost, omita la sección del puente de Linux normal a continuación y asegúrese de habilitar Bifrost/XDP en lqos.conf algunas secciones a continuación.
### Agregar un puente Linux normal (si no se utiliza el puente Bifrost XDP)
Desde la máquina virtual Ubuntu, cree un puente de interfaz Linux (br0) con las dos interfaces de modelado.
Busque su archivo .yaml existente en /etc/netplan/ con
```shell
cd /etc/netplan/
ls
```
Luego edite el archivo .yaml allí con
```shell
sudo nano XX-cloud-init.yaml
```
Con XX correspondiente al nombre del archivo existente.
229 / 5.000
Al editar el archivo .yaml, necesitamos definir las interfaces de modelado (en este caso, ens19 y ens20) y agregar el puente con estas dos interfaces. Suponiendo que las interfaces sean ens18, ens19 y ens20, el archivo podría verse así:
```yaml
# This is the network config written by 'subiquity'
network:
ethernets:
ens18:
addresses:
- 10.0.0.12/24
routes:
- to: default
via: 10.0.0.1
nameservers:
addresses:
- 1.1.1.1
- 8.8.8.8
search: []
ens19:
dhcp4: no
ens20:
dhcp4: no
version: 2
bridges:
br0:
interfaces:
- ens19
- ens20
```
Asegúrese de reemplazar 10.0.0.12/24 con la dirección y subred de su VM LibreQoS, y de reemplazar la puerta de enlace predeterminada 10.0.0.1 con la que sea su puerta de enlace predeterminada.
Entonces ejecute
```shell
sudo netplan apply
```
+71
View File
@@ -0,0 +1,71 @@
# Demonios de LibreQoS
lqosd
- Gestiona el código XDP. Construido en Rust.
lqos_node_manager
- Ejecuta la GUI disponible en http://a.b.c.d:9123
lqos_scheduler
- lqos_scheduler maneja estadísticas y realiza actualizaciones continuas de los modeladores de LibreQoS, incluida la extracción de cualquier integración de CRM habilitada (UISP, Splynx).
- Al iniciar: ejecuta una configuración completa de colas
- Cada 10 segundos: Grafica estadísticas de ancho de banda y latencia
- Cada 30 segundos: Actualiza colas, extrayendo nueva configuración de la integración de CRM si está habilitada
## Ejecutar daemons con systemd
Puede configurar `lqosd`, `lqos_node_manager`, y `lqos_scheduler` como servicios systemd.
```shell
sudo cp /opt/libreqos/src/bin/lqos_node_manager.service.example /etc/systemd/system/lqos_node_manager.service
sudo cp /opt/libreqos/src/bin/lqosd.service.example /etc/systemd/system/lqosd.service
sudo cp /opt/libreqos/src/bin/lqos_scheduler.service.example /etc/systemd/system/lqos_scheduler.service
```
Finalmente, correr
```shell
sudo systemctl daemon-reload
sudo systemctl enable lqosd lqos_node_manager lqos_scheduler
```
Ahora puede apuntar un navegador web a `http://a.b.c.d:9123` (reemplazar `a.b.c.d` con la dirección IP de administración de su servidor de modelado) y disfrute de una vista en tiempo real de su red.
## Depuración lqos_scheduler
En el fondo, lqos_scheduler corre scheduler.py, que a su vez corre LibreQoS.py
Las ejecuciones únicas de estos componentes individuales pueden ser muy útiles para la depuración y para asegurarse de que todo esté configurado correctamente.
Primero, detener lqos_scheduler
```shell
sudo systemctl stop lqos_scheduler
```
Para ejecuciones iniciales de of LibreQoS.py, utilice
```shell
sudo ./LibreQoS.py
```
- Para utilizar el modo de depuración con una salida más detallada, utilice:
```shell
sudo ./LibreQoS.py --debug
```
Para confirmar que lqos_scheduler (scheduler.py) puede funcionar correctamente, ejecute:
```shell
sudo python3 scheduler.py
```
Una vez que haya eliminado todos los errores, reinicie lqos_scheduler con
```shell
sudo systemctl start lqos_scheduler
```
+32
View File
@@ -0,0 +1,32 @@
# Comparte tu antes y después
Le pedimos que comparta una captura de pantalla anónima de su implementación de LibreQoS antes (modo de solo monitor) y después (cola habilitada) en el [Chat LibreQoS ](https://chat.libreqos.io/join/fvu3cerayyaumo377xwvpev6/). T
Esto nos ayuda a evaluar el impacto de nuestro software. Y también nos alegra.
1. Habilitar el modo de solo monitor
2. Modo Klingon (Redactar información del cliente)
3. Captura de pantalla
4. Reanudar las colas regulares
5. Captura de pantalla
## Habilitar el modo de solo monitor
```shell
sudo systemctl stop lqos_scheduler
sudo systemctl restart lqosd
sudo systemctl restart lqos_node_manager
```
## Modo Klingon
Vaya a la interfaz web y haga clic en Configuración. Active la opción "Redactar información del cliente" (modo de captura de pantalla) y luego "Aplicar cambios".
## Reanudar la cola normal
```shell
sudo systemctl start lqos_scheduler
```
## Captura de pantalla
Para generar una captura de pantalla, acceda a la interfaz web y haga clic en Configuración. Active "Ocultar información del cliente" (modo de captura de pantalla), "Aplicar cambios" y, a continuación, vuelva al panel de control para realizar una captura de pantalla.
+90
View File
@@ -0,0 +1,90 @@
## Requerimientos de Sistema
### Servidor físico
* LibreQoS requiere un servidor físico x86_64 de manera dedicada.
* Aunque es técnicamente posible correr en una VM, no está oficialmente soportado, y conlleva una pérdida de rendimiento significativa del 30 % (incluso al usar la transferencia de NIC). En las máquinas virtuales, la transferencia de NIC es necesaria para un rendimiento superior a 1 Gbps (XDP frente a XDP genérico).
### CPU
* 2 o más cores de CPU
* Una CPU con un rendimiento sólido [single-thread performance](https://www.cpubenchmark.net/singleThread.html#server-thread) que se ajuste a su presupuesto. El encolado consume muchos recursos de la CPU y requiere un alto rendimiento de un solo hilo.
El rendimiento de la CPU de un solo subproceso determinará la capacidad máxima de un solo HTB (núcleo de CPU) y, a su vez, la capacidad máxima de cualquier nodo de nivel superior en la jerarquía de la red (por ejemplo, los sitios de nivel superior de su red). Esto también afecta el plan de velocidad máxima que puede ofrecer a sus clientes dentro de márgenes seguros.
| Máx nodos nivel | Puntuación de un hilo |
| --------------------| ------------------------ |
| 1 Gbps | 1000 |
| 2 Gbps | 1500 |
| 3 Gbps | 2000 |
| 5 Gbps | 4000 |
| Plan máximo cliente | Puntuación de un hilo |
| --------------------| ------------------------ |
| 100 Mbps | 1000 |
| 250 Mbps | 1250 |
| 500 Mbps | 1500 |
| 1 Gbps | 1750 |
| 2.5 Gbps | 2000 |
| 5 Gbps | 4000 |
A continuación se muestra una tabla de capacidad agregada aproximada, suponiendo una CPU con una [hilo único](https://www.cpubenchmark.net/singleThread.html#server-thread) desempeño de 1000 / 2000 / 4000:
| Núcleos CPU | Puntuación de un solo hilo = 1000 | Puntuación de un solo hilo = 2000 | Puntuación de un solo hilo = 4000 |
|-----------|----------------------------|----------------------------|----------------------------|
| 2 | 1 Gbps | 3 Gbps | 7 Gbps |
| 4 | 3 Gbps | 5 Gbps | 13 Gbps |
| 6 | 4 Gbps | 8 Gbps | 20 Gbps |
| 8 | 5 Gbps | 10 Gbps | 27 Gbps |
| 16 | 10 Gbps | 21 Gbps | 54 Gbps |
| 32 | 21 Gbps | 42 Gbps | 108 Gbps |
| 64 | 42 Gbps | 83 Gbps | 216 Gbps |
### Memoria
* RAM Recomendada:
| RAM (usando CAKE)| Máx Suscriptores|
| ---------------- | --------------- |
| 8 GB | 1,000 |
| 16 GB | 2,000 |
| 32 GB | 5,000 |
| 64 GB | 10,000 |
| 128 GB | 20,000 |
| 256 GB | 40,000 |
### Recomendaciones de servidor
Aquí hay algunas opciones de servidor listas para usar y convenientes para considerar:
| **Rendimiento** | 2.5 Gbps | 10 Gbps | 10 Gbps | 10 Gbps | 25 Gbps |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| **Por Nodo / Por núcleo CPU** | 1 Gbps | 3 Gbps | 5 Gbps | 5 Gbps | 3 Gbps |
| **Modelo** | [Supermicro SYS-E102-13R-E](https://store.supermicro.com/us_en/compact-embedded-iot-i5-1350pe-sys-e102-13r-e.html) | [Supermicro AS-1115S-FWTRT](https://store.supermicro.com/us_en/1u-amd-epyc-8004-compact-server-as-1115s-fwtrt.html) | [Supermicro SYS-511R-M](https://store.supermicro.com/us_en/mainstream-1u-sys-511r-m.html) | [Dell PowerEdge R260](https://www.dell.com/en-us/shop/dell-poweredge-servers/new-poweredge-r260-rack-server/spd/poweredge-r260/pe_r260_tm_vi_vp_sb?configurationid=2cd33e43-57a3-4f82-aa72-9d5f45c9e24c) | [Supermicro AS-1115S-FWTRT](https://store.supermicro.com/us_en/1u-amd-epyc-8004-compact-server-as-1115s-fwtrt.html) |
| **Opción CPU** | Default | 8124P | E-2488 | E-2456 | 8534P |
| **Opción RAM** | 2x8GB | 2x16GB | 2x32GB | 2x32GB | 4x16GB |
| **Opción NIC** | Incorporado | Mellanox (2 x SFP28) | 10-Gigabit X710-BM2 (2 x SFP+) | Intel X710-T2L (2 x 10G RJ45) | Mellanox (2 x SFP28) |
| **Extras** | [USB-C RJ45](https://www.amazon.com/Anker-Ethernet-PowerExpand-Aluminum-Portable/dp/B08CK9X9Z8/) | | | | |
| **Rango de Temperatura** | 0°C ~ 40°C | 0°C ~ 40°C | 0°C ~ 40°C | 5–40°C | 0°C ~ 40°C |
| **Rango de Temperatura** | (32°F ~ 104°F) | (32°F ~ 104°F) | (32°F ~ 104°F) | (41–104°F) | (32°F ~ 104°F) |
### Requisitos de la interfaz de red
* Una interfaz de red de administración completamente independiente de las interfaces de modelado de tráfico. Normalmente, esta sería la interfaz Ethernet integrada en la placa base.
* Una tarjeta de interfaz de red dedicada para dos interfaces de modelado
A continuación se enumeran las tarjetas de interfaz de red compatibles oficialmente para las dos interfaces de modelado.:
| Controlador NIC | Velocidad Puerto | Modelos Sugeridos | Problemas conocidos |
|------------------------|------------------|-----------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|
| Intel X520 | 10 Gbps | | Compatibilidad de módulos* |
| Intel X710 | 10 Gbps | [X710-BM2 10G]( https://www.fs.com/products/75600.html?now_cid=4253) | Compatibilidad de módulos* |
| Intel XXV710 | 10 / 25 Gbps | [XXV710 25G](https://www.fs.com/products/75604.html?attribute=67774&id=1709896) | Módulo de compatibilidad* |
| Intel XL710 | 10 / 40 Gbps | [XL710-BM2 40G](https://www.fs.com/products/75604.html?attribute=67774&id=1709896 ) | Compatibilidad de módulos* |
| Mellanox ConnectX-4 Lx | 10/25/40/50 Gbps | | No hay problemas conocidos. |
| Mellanox ConnectX-5 | 100 Gbps | [MCX516A-CCAT 100G](https://www.fs.com/products/119647.html?attribute=67743&id=3746410) | Calor extremo con carga alta (más de 50 Gbps). Utilice el kit de refrigeración líquida para CPU en el chip para evitar el sobrecalentamiento. |
| Mellanox ConnectX-6 | 10/25 Gbps | [MCX631102AN-ADAT](https://www.fs.com/products/212177.html?now_cid=4014) | No hay problemas conocidos. |
| Mellanox ConnectX-6 | 100 Gbps | [MCX623106AN-CDAT 100G](https://www.fs.com/products/119646.html?now_cid=4014) | No hay problemas conocidos. |
| Mellanox ConnectX-7 | 200 Gbps | [MCX755106AS-HEAT 200G](https://www.fs.com/products/242589.html?now_cid=4014) | No hay problemas conocidos. |
(*) Intel suele restringir la compatibilidad de los módulos SFP+. Verifique la compatibilidad del módulo antes de comprarlo. Mellanox no presenta este problema.
**SÓLO brindaremos soporte para sistemas que utilicen una NIC mencionada anteriormente**. Algunas otras tarjetas de red *podrían* funcionar, pero no serán compatibles oficialmente con LibreQoS. Si desea *probar* la compatibilidad de otra tarjeta, tenga en cuenta estos requisitos fundamentales de la tarjeta de red:
* La NIC debe tener varias colas de transmisión TX/RX, mayores o iguales que la cantidad de núcleos de CPU. [Aquí se explica cómo comprobarlo desde la línea de comandos](https://serverfault.com/questions/772380/how-to-tell-if-nic-has-multiqueue-enabled).
* NIC debe tener [compatibilidad controlador XDP](https://github.com/xdp-project/xdp-project/blob/master/areas/drivers/README.org) para alto rendimiento (10 Gbps+).
Si usted descubre que una tarjeta que no está listada en la tabla de arriba es compatible, por favor, háganoslo saber enviando un correo electrónico a support [at] libreqos.io.
+56
View File
@@ -0,0 +1,56 @@
# Instalación compleja (no recomendada)
## Clonar el repositorio
La ubicación de instalación recomendada es `/opt/libreqos`
Vaya a la ubicación de instalación y clone el repositorio.:
```shell
cd /opt/
git clone https://github.com/LibreQoE/LibreQoS.git libreqos
sudo chown -R YOUR_USER /opt/libreqos
```
Al especificar `libreqos` al final, git se asegurará que el nombre de la carpeta esté en minúsculas.
## Instalar dependencias desde apt y pip
Necesitas tener algunos paquetes de `apt` instalados:
```shell
sudo apt-get install -y python3-pip clang gcc gcc-multilib llvm libelf-dev git nano graphviz curl screen llvm pkg-config linux-tools-common linux-tools-`uname -r` libbpf-dev libssl-dev
```
Luego necesitas instalar algunas dependencias de Python:
```shell
cd /opt/libreqos
python3 -m pip install -r requirements.txt
sudo python3 -m pip install -r requirements.txt
```
## Instalar el sistema de desarrollo Rust
Ve a [RustUp](https://rustup.rs) y sigue las instrucciones. Básicamente, ejecuta lo siguiente:
```shell
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
Cuando Rust termine de instalarse, te pedirá que ejecutes un comando para instalar las herramientas de compilación de Rust en tu ruta. Debes ejecutar este comando o cerrar sesión y volver a iniciarla.
Una vez hecho esto, por favor, ejecute:
```shell
cd /opt/libreqos/src/
./build_rust.sh
```
La primera vez, esto llevará un tiempo, pero pondrá todo en el lugar correcto.
Ahora, para construir cajas de rust, corre:
```shell
cd rust
cargo build --all
```
+12
View File
@@ -0,0 +1,12 @@
# Extras
## Flamegraph
```shell
git clone https://github.com/brendangregg/FlameGraph.git
cd FlameGraph
sudo perf record -F 99 -a -g -- sleep 60
perf script > out.perf
./stackcollapse-perf.pl out.perf > out.folded
./flamegraph.pl --title LibreQoS --width 7200 out.folded > libreqos.svg
```
+65
View File
@@ -0,0 +1,65 @@
# Integraciones
## Integración UISP
Primero, configure los parámetros relevantes para UISP (uispAuthToken, UISPbaseURL, etc.) en `/etc/lqos.conf`.
Para probar la integración de UISP, utilice
```shell
python3 integrationUISP.py
```
En la primera ejecución exitosa, se crearán los archivos network.json y ShapedDevices.csv.
Si existe un archivo network.json, no se sobrescribirá.
Puede modificar el archivo network.json para que refleje con mayor precisión los límites de ancho de banda.
ShapedDevices.csv se sobrescribirá cada vez que se ejecute la integración UISP.
Puede ejecutar IntegrationUISP.py automáticamente al arrancar y cada 10 minutos, lo cual es recomendable. Esto se puede habilitar configurando ```enable_uisp = true``` en `/etc/lqos.conf`
## Integración con Powercode
Primero, configure los parámetros relevantes para Powercode (powercode_api_key, powercode_api_url, etc.) en`/etc/lqos.conf`.
Para probar la integración de Powercode, utilice
```shell
python3 integrationPowercode.py
```
En la primera ejecución exitosa, se creará un archivo ShapedDevices.csv.
Puede modificar manualmente el archivo network.json para reflejar los límites de ancho de banda del sitio/AP.
ShapedDevices.csv se sobrescribirá cada vez que se ejecute la integración de Powercode.
Tiene la opción de ejecutar IntegrationPowercode.py automáticamente al arrancar y cada 10 minutos, lo cual es recomendable. Esto se puede habilitar configurando ```enable_powercode = true``` en `/etc/lqos.conf`
## Integración con Sonar
En primer lugar, configure los parámetros relevantes para Sonar (sonar_api_key, sonar_api_url, etc.) en `/etc/lqos.conf`.
Para probar la integración del sonar, utilice
```shell
python3 integrationSonar.py
```
En la primera ejecución exitosa, se creará un archivo ShapedDevices.csv.
Si existe un archivo network.json, no se sobrescribirá.
Puede modificar el archivo network.json para que refleje con mayor precisión los límites de ancho de banda.
ShapedDevices.csv se sobrescribirá cada vez que se ejecute la integración de Sonar.
Puede ejecutar IntegrationSonar.py automáticamente al arrancar y cada 10 minutos, lo cual es recomendable. Esto se puede habilitar configurando ```enable_sonar = true``` en `/etc/lqos.conf`
## Integración con Splynx
Primero, configure los parámetros relevantes para Splynx (splynx_api_key, splynx_api_secret, etc.) en`/etc/lqos.conf`.
La integración de Splynx utiliza autenticación básica. Para usar este tipo de autenticación, asegúrese de habilitar [Acceso no seguro](https://splynx.docs.apiary.io/#introduction/authentication) en la configuración de su clave API de Splynx. Además, la clave API de Splynx debe tener acceso a los permisos necesarios.
Para probar la integración de Splynx, utilice
```shell
python3 integrationSplynx.py
```
En la primera ejecución exitosa, se creará un archivo ShapedDevices.csv.
Puedes crear manualmente el archivo network.json para reflejar con mayor precisión los límites de ancho de banda.
ShapedDevices.csv se sobrescribirá cada vez que se ejecute la integración de Splynx.
Tiene la opción de ejecutar IntegrationSplynx.py automáticamente al arrancar y cada 10 minutos, lo cual es recomendable. Esto se puede habilitar configurando ```enable_spylnx = true``` en `/etc/lqos.conf`.
+42
View File
@@ -0,0 +1,42 @@
# Solución de Problemas
## Problemas Comunes
### LibreQoS se está ejecutando, pero no está regulando el tráfico
En ispConfig.py, asegúrese de que las interfaces edge y core correspondan correctamente a la interfaz de borde (edge) y núcleo (core). Pruebe intercambiando las interfaces para ver si el tráfico empieza a regularse correctamente.
Asegúrese de que sus servicios se estén ejecutando correctamente:
- `lqosd.service`
- `lqos_node_manager`
- `lqos_scheduler`
Node manager y scheduler dependen de que el servicio `lqos.service` esté en buen estado y en ejecución.
Por ejemplo, para verificar el estado de lqosd, ejecute:
```sudo systemctl status lqosd```
### lqosd no se está ejecutando o falló al iniciar
En la terminal, ejecute ```sudo RUST_LOG=info /opt/libreqos/src/bin/lqosd```. Esto proporcionará detalles sobre por qué falló al iniciar.
### RTNETLINK answers: Invalid argument
Este error suele aparecer cuando el "MQ qdisc" no puede agregarse correctamente a la interfaz NIC. Esto sugiere que la NIC tiene un número insuficiente de filas RX/TX. Por favor asegúrese de estar utilizando las [NICs recomendadas](../SystemRequirements/Networking.md).
### InfluxDB "Failed to update bandwidth graphs"
El scheduler (scheduler.py) ejecuta la integración con InfluxDB dentro de una instrucción try/except.
Si falla al actualizar InfluxDB, mostrará "Failed to update bandwidth graphs".
Para encontrar la causa exacta del error, ejecute: ```python3 graphInfluxDB.py``` lo cual mostrará errores más específicos.
### Todas las IPs de clientes aparecen bajo Unknown IPs en lugar de Shaped Devices en la Interfaz Gráfica
```
cd /opt/libreqos/src
sudo systemctl stop lqos_scheduler
sudo python3 LibreQoS.py
```
La salida de consola al ejecutar LibreQoS.py directamente proporciona errores más específicos relacionados con ShapedDevices.csv y network.json. Una vez que haya identificado y corregido el error en ShapedDevices.csv y/o network.json, ejecute:
```sudo systemctl start lqos_scheduler```
+24
View File
@@ -0,0 +1,24 @@
# Actualizar 1.4 a la última versión
```{advertencia}
Si utiliza el puente XDP, el tráfico dejará de pasar a través del puente durante la actualización (el puente XDP solo funciona mientras lqosd se esta ejecutando).
```
## Si instalaste con Git
1. Cambie a su directorio LibreQoS (ejemplo: cd /opt/LibreQoS)
2. Actualize desde Git: `git pull`
3. Recompile: `./build-rust.sh`
4. `sudo rust/remove_pinned_maps.sh`
Ejecute los siguientes comandos para reiniciar los servicios de LibreQoS:
```shell
sudo systemctl restart lqosd
sudo systemctl restart lqos_node_manager
sudo systemctl restart lqos_scheduler
```
## Si instalaste mediante el repositorio APT
En este caso, lo único que necesita hacer es ejecutar `sudo apt update && sudo apt upgrade` y LibreQoS debería instalar el nuevo paquete.
Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 KiB

+1
View File
@@ -0,0 +1 @@
<mxfile host="app.diagrams.net" modified="2021-07-04T19:08:43.707Z" agent="5.0 (X11)" etag="C_TBZKg4Kqat4AuzUHtX" version="14.8.4" type="device"><diagram name="Page-1" id="e3a06f82-3646-2815-327d-82caf3d4e204">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 truncated
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

+154
View File
@@ -0,0 +1,154 @@
<mxfile host="Electron" modified="2023-05-19T18:39:47.237Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.2.8 Chrome/112.0.5615.165 Electron/24.2.0 Safari/537.36" version="21.2.8" etag="mZ87q6mpnr2g6ddWqqdp" type="device">
<diagram name="Page-1" id="e3a06f82-3646-2815-327d-82caf3d4e204">
<mxGraphModel dx="1314" dy="2186" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1.5" pageWidth="1169" pageHeight="826" background="none" math="0" shadow="0">
<root>
<mxCell id="0" style=";html=1;" />
<mxCell id="1" style=";html=1;" parent="0" />
<mxCell id="MVYNIM761YJ6fPb6oug0-1" value="Edge Router (NAT)" style="shape=image;verticalLabelPosition=middle;labelBackgroundColor=#ffffff;verticalAlign=middle;aspect=fixed;imageAspect=0;image=data:image/png,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 truncated
<mxGeometry x="210" y="135" width="249.25" height="50" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-3" value="Core / Distribution Switch" style="shape=image;verticalLabelPosition=middle;labelBackgroundColor=#ffffff;verticalAlign=middle;aspect=fixed;imageAspect=0;image=data:image/png,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 truncated
<mxGeometry x="210" y="322" width="249.25" height="50" as="geometry" />
</mxCell>
<mxCell id="QcPyRtQWHIRnRJVXSFQS-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;endFill=0;strokeColor=#EA6B66;strokeWidth=7;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="257" y="322" />
</Array>
<mxPoint x="257" y="167" as="sourcePoint" />
<mxPoint x="257" y="340" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="QcPyRtQWHIRnRJVXSFQS-14" value="&lt;div&gt;STP&lt;/div&gt;&lt;div&gt;High&lt;/div&gt;&lt;div&gt;Cost&lt;/div&gt;&lt;div&gt;Backup&lt;/div&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBorderColor=#FF6666;" parent="QcPyRtQWHIRnRJVXSFQS-6" vertex="1" connectable="0">
<mxGeometry x="0.0613" y="-2" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="QcPyRtQWHIRnRJVXSFQS-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.16;entryY=0.55;entryDx=0;entryDy=0;entryPerimeter=0;endArrow=none;endFill=0;strokeWidth=7;strokeColor=#3399FF;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="235" y="154" as="sourcePoint" />
<mxPoint x="253.4000000000001" y="60.5" as="targetPoint" />
<Array as="points">
<mxPoint x="235" y="109" />
<mxPoint x="253" y="109" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-5" value="LibreQoS" style="shape=image;verticalLabelPosition=middle;labelBackgroundColor=#ffffff;verticalAlign=middle;aspect=fixed;imageAspect=0;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAAJwAAABDCAYAAABp0Gy3AAAABHNCSVQICAgIfAhkiAAADlpJREFUeF7tnMluFD0Qxz1bEkJYxI44cgU+AUKKOAFPgXLkwTjyEAiBuCHlEJEXYJPYxA7ZZ6a/+rmnZjyml2kmznQrbSmZ9lZll/+uctvlbuzu7kbtdts0Gg1D6Ha7Zm9vz8YXFhZsWilDZMyONHm+lI073I3a3t42URSZTqdjwBaBONhqyANhCDj/ubyi6wvgWqZsUwL5hQqqFNLoh+SdxjMpXdvpY4n0Zq/XG4JNkShazyKyzCES7dYrcwMPcdvAjo8hwAbWYn03EM7Hjx/NixcvzNramvn06ZNpNpulFVu32TebzUVzbG+rVG3M00LTNDZPCYTkXaTd/X7fnD9/3ly/ft0sLy+bCxcuDKu3sasgb25uzjx9+tSsrq5a21uWxqd3tG3mW03TjsbmTHrxA8pBlqGCrofS6IfkncYzKR3sbG1tmefPn5vNzU2zsrIy1Hjt+fl42Q0q19fXzcbGhnnw4IG5du2aOXLkSBK9UqTtoqKlJQvS7jKFkBO1KhoOsIGlhw8f2t/79+9bhUYYqgfeTH/+/GkWFxfNf//9Z8GW18FZDrQa+7KZ/ZAyy+trSN5FxloxxC+YAluq2No7Ozs20mq17B9bIczS379/m2PHjhXhc6Bl2cThtQbNXKaQB4pp2prX15C8i7Qb7LAsA0ss2cAVAay1ySCQ+OfPH6vVKIgKzOtgkUbsd1neUpuNZulebELKLA9QIXkXGb+jR4/acQF4LNEUcHZfTjuBVmNRqmqZ9LKo6KTOtgRw3aSMGaeFXMPldW2WvN22aTvAj3uoAKbsGo6dYbTa8ePH7dsEMwVVqAu9vI7OKr+MO4WzHPRZ8nYxAIYAGgADUy7G7NpbVR6Lu1+/flUCbA3TN/Fh3KzgXvNNkwCKCoUFlsCUi7ExwKECeVEou2bTjpZ3WzptKA5POhgCS7osU6VW6TGrNVz1AFxpwMUv29UT+mFucaUBZ6Jy7cEdZiBN2vcacJNKqi63LxKoNuDsWUMdqiSBcrlaFJVcs2XfgtzNapfEtBvX/r6W7uST7ubBxy9btCuTlPf5+PFJaMy6TLUBJ9LzB98V6H6DIO1oCT4MvnUwHLhUhxhYvz8uXyZDFbazgprUNA3DIW5anjtQqlHYufZ9vcjzaRBPSp9m8NNoks6mpraBwS8KNjZH/aCnPH66xtP4FgHbv/BNa0/R9KAajo6hFRQwHJ+xAaiuKj5g/MarRnGFyYBoej/iUsa4eUvTQj7tSeOqQWmrtlef1fEBWqTRXwU8EwT3nKygR4paB7lknWFruYPmm9WHonlBAaeC8R05GRj+8m6FudpDO6aAGgErXUmrhiwqFJ8Xcdecuc9uG10gTMJzaWkpsZjuyvuZ7mQ6SL5+O6aJBwUcsxyzgwDVE4XBQnCAIQ8QlAOY1Fc6o2foxJoF4buDgclGe5w4cWIa2VjnQSaFamSI0WbVevTP14C0E42M12vehNK61MEKUE+1p8tTO0EedZL4Uoa8EHynEqJXOSjgGJzXr1+bb9++WeAgDLQAM5s8QJEVGDDq4F9F/XPnzpnLly9bwVrTI07mpDMQanYp/+HDB/Plyxd7eDxNwNPhzJkz5uLFi0N3e/jBnwnkaqLv37+b9+/fW77kqfd0Fn+Apk6KgIg+aN84h8TN3w3wTuP79etX254QfLP6UDQvKOAAF4OOIx6gQSDMZJzyEF5eoAzaCnAxkAQAFy/OOWXAS3nc3DGIP378sIN/8uTJPBaZ+dCAF6DTZQF9Uk2jAIAIQKGtOLGeOnXKlldPiTQmquHs5JFJQ1DtDB0fcMiPOkl8mWhMkBB809r/L+lBAcesRYshiJs3b0712s71RR1oBhJziotS1G+ZZqdtNSYDBy9mO+b0zp07/yKTYZ1nz55ZWjdu3LBpykMLuGYcvoDk9OnT5sqVK1aTJ5lFt0FKDznRN8CNpnz37p2dpH4AbIQkvqRdvXo1CF+/HdPEgwJONRozUrc1+FVTlLeGI19nNVoRoEErXpyLhuvJAKDiShR0LYZ5zOufAkfBRjcAKVpONXqRrsFzFnyLtDEo4BAk4ABkqHoFEL+6VslqrJocBamCz9bBBMmdhrIFwKKLf1cTpbVTwabajq0UlgTqKZtWLyl9VnyT2pKWFhRwaUz3NR2Pkaglyk7eaIWwbP2a3RaAtpE4NLidL2ZL1nwCfdNFOYJX+cM0t+WvZbbERHPTVTRmFN/HRYFCa8d6FzeFplzaoZ5MGB4aUfkAv6+yDUCs2oAbAioGVxyVBbgAg1tdsQ86LxcxMACNNcCSByAt4LDKNknBw+IwrgMNaFEf2pAc+rUrb9LqMLEEqg04gNEHFaP+2kf5/EMf0MmjBclQE8lbnkQtwGxGDEWAZ82zlhuQhAa0hnSoQEQTBsCMKdX/J5FAtQFHD+2gj784YDpjFUcB8kEQZaS78tiQOi3SdQ0I0ORt1wJJPpIT14kBKAdaEBkPlucAsX5eHc+UQHUBp5rG7l+NzGbc29ikDqEIoFR7seZrcZOIP0AD2FizYTolWO0lpyA8WjU4SI9z5b/kDDBYQ24olIkfqgs428W/tY/qp5EEBmDToqBEDv1NY1ceAJOIYIzMOMBkd8+Cb6RDLRQH5GvIjeQ82dMMAafQ4FcHefAcxZ+fsGbRGVPZGpWhZm0mx0tNAQ1m0NrI2BJSnJSWaDG8SIbQsSBTgUiqpaldH/DwMERd+Tyo0LIGOtaFlLE7zvIg2o+o0zxlUP9mSGB8OmcU/JcsNmr5YzOTvTT2pdi45ZctiP7eVyH7x/S3v8vvhtnefC+/gx12xhSm8mvfFi3QFqyZ65pNsxtJOdZbduNXtisEBMAUGHWkxBymVv4i+7oqz/Q0RpFE5dNRkXys1f7Js31dHeRLWVtH6kIDWjFNKWLfLqQgPC3wRnqPPrEHR185ZmIPkT22rD8hZgPlCbpBzp4lG8h+0JMG/SX/IPj67ZgmHlTDsRGpLjt6Vqjni1F/z3Tm+EKvGK0Oa6iGmZtn1OVA3n5lZ95syjh0BA89s2u6PQZA/MsGConfWMOM5gzQGmo49s70VXRMDREZaFCVnJevUY7O0JYKK/jFIeYZSR790g1e+gpY1EvEBcawqvdAGfWDgw708k4LFMQHzTetD0XSgwKOhjDr9WSB+Mg3TsxjLzahO9t9s7AoWqrFxmvDtARsZFn/RRn9doNzyY5oS7QMQGNdNdA2Cb2dZKATqiUmZdFSgOgpAVoJ0HF+zG+eBzDloUF9QKaOqtRP0nDawFnxTRRQwcTggGPAEKgeT+nnmzBWzbbsi4myaItm2xOARY0l07FmUvSeLNE2Nvpm8agMSGNPPt35x67ZsJQNMWXtnO+XZwFlUhlNQoMyaBz66J4Zu65LafwAmRs0DlihlRVmxTerTZPkBQccs9E1rbgpEboCnF3BFpoMjAG8vgDq1+aOWRJtNi9jcbzDOkkKN9pibuVMdpeLKgJQPis2MKgMtg8M4gr0SYSQVkbp+PnKE1BQRsGlHiKqxQFhVlDQQEfPQZmYaDdd17n1Z8U3qw9F84ICDgEBDtZtCgA1IS0ZqEU+8uaFpc7oHgCgol6vxxnmnKz15FZUQ7xNRDtGsq9mB2xQPwl4usbxefxrPImHT4slBD6A9DvvTgP0CACTZ8BGPZwv87yFy8LXb0dePCjgAMTZs2fNq1evzOPHj+0AMCAIloWyCjytkQBG10TMeDx+Wd+oB3C7Hbtkw8cNqpmePHmSRnqidNro06aithtwKFiUJ1/tfvPmjfVn4zkr6KWi2L9PlhUyMQHb27dvbR/9MCu+fjumiQcFHG42DAjCY3B0gPhlMHFYzArU5Q/g4ZbOH3UJAHG45ZFCRMumZO9Lsm7zqEZjQjA5Pn/+nOtxTFlMKRMQOsSZlIDu0qVLme2bFd/MRk2QGRRwuHjzpzNTzQbaYBIwuCZH9/G0HgJvt+QOAPthElzzeffu3Qm6XryI8nB5uQv/27dvFydaoMas+BZoYm7RoIDDRAAQAKamR+OAaRKTSg9YlPtvfS3MqeT9vQrM7XNdYIYSCAo43fSlf/4CXtc8WX1nDQRQAalqEjQb4GuWzLU8qx913kgCQQHnvn0pcAAPmg3t5+9D+QPjv+WpRsS82nNT+ZhNHaolgaCAU63mm0O0Wx7YEKPuxKtIoaf1RsdM1RL4YW9tUMChiVSz6faCnqXGb5nZsKGM1oOOu0Wxs4NTgHcmethHswL9Dwq4pMW+u65zAZQnK38NuDAn2yJ5ler80klg5GpRuqblN6h+Q82XUdlKVBpw1nO3DpWSQLUBVxvVSoGNxlYccPW2SNUQV3HAVbz5VUPLPrS3HrF9EGJNYnIJVBdw1tW8DlWTQJPjIt3jwv1bvTHyDtbL0FE+NlOHakmgrSADaOoQSBfwzcr7oN4suxpxO15cz+tQLQm09UvaeOISOELCgRC//DJruZ6ArYwmNaTM8k5mQvIuAmvaCYY4VQJXel8XGkMVQSafKeUD0C9fvrTflx1d6SvC7mDKcj2FS4VMkDKFPFBM09a8vobkXaTduJWtr69bF3u+dzx2nCmmUy6zx94bjx49Mqurq7YAPvll6UBSZ7viOdLrLJjFbqyZk8rMIg2HhVDB97rx+YTk7fPKiqNpcZPHUePWrVtmZWXFev6QLku30eff7927Z33q19bW7M2jMgNOLhqaHbljOJdzfzNLMCHyQspskruqIfpUlCbAwjricr+8Line truncated
<mxGeometry x="276" y="229" width="116.42" height="50" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-12" value="" style="endArrow=none;html=1;strokeColor=#82b366;strokeWidth=7;fillColor=#d5e8d4;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="301" y="247" as="sourcePoint" />
<mxPoint x="301" y="166" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-45" value="&lt;div&gt;STP&lt;/div&gt;&lt;div&gt;Low&lt;/div&gt;&lt;div&gt;Cost&lt;br&gt;&lt;/div&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBorderColor=#82B366;" parent="MVYNIM761YJ6fPb6oug0-12" vertex="1" connectable="0">
<mxGeometry x="0.284" y="-1" relative="1" as="geometry">
<mxPoint y="10" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-13" value="&lt;div&gt;STP&lt;/div&gt;&lt;div&gt;Low&lt;/div&gt;&lt;div&gt;Cost&lt;br&gt;&lt;/div&gt;" style="endArrow=none;html=1;strokeColor=#82b366;strokeWidth=7;fillColor=#d5e8d4;labelBorderColor=#82B366;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="323" y="340" as="sourcePoint" />
<mxPoint x="323" y="260" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-40" style="edgeStyle=orthogonalEdgeStyle;curved=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.31;exitY=0.8;exitDx=0;exitDy=0;exitPerimeter=0;startArrow=none;startFill=0;endArrow=none;endFill=0;strokeColor=#9673a6;strokeWidth=2;fillColor=#e1d5e7;" parent="1" source="MVYNIM761YJ6fPb6oug0-14" target="MVYNIM761YJ6fPb6oug0-15" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-41" style="edgeStyle=orthogonalEdgeStyle;curved=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.55;exitY=0.95;exitDx=0;exitDy=0;exitPerimeter=0;startArrow=none;startFill=0;endArrow=none;endFill=0;strokeColor=#9673a6;strokeWidth=2;fillColor=#e1d5e7;" parent="1" source="MVYNIM761YJ6fPb6oug0-14" target="MVYNIM761YJ6fPb6oug0-24" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-42" style="edgeStyle=orthogonalEdgeStyle;curved=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.8;exitY=0.8;exitDx=0;exitDy=0;exitPerimeter=0;startArrow=none;startFill=0;endArrow=none;endFill=0;strokeColor=#9673a6;strokeWidth=2;fillColor=#e1d5e7;" parent="1" source="MVYNIM761YJ6fPb6oug0-14" target="MVYNIM761YJ6fPb6oug0-31" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-43" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;startArrow=none;startFill=0;endArrow=none;endFill=0;strokeColor=#3399FF;strokeWidth=7;rounded=0;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="235" y="354" as="targetPoint" />
<mxPoint x="265" y="420" as="sourcePoint" />
<Array as="points">
<mxPoint x="265" y="382" />
<mxPoint x="235" y="382" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-14" value="Distribution Network" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="200" y="390" width="240" height="130" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-15" value="&lt;div&gt;Access Point A&lt;/div&gt;" style="points=[];aspect=fixed;html=1;align=center;shadow=0;dashed=0;image;image=img/lib/allied_telesis/wireless/Access_Point_Outdoor.svg;labelPosition=center;verticalLabelPosition=top;verticalAlign=bottom;" parent="1" vertex="1">
<mxGeometry x="113.16" y="550" width="33.67" height="130" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-21" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=-0.034;entryY=0.508;entryDx=0;entryDy=0;entryPerimeter=0;strokeColor=#9673a6;strokeWidth=2;curved=1;startArrow=none;startFill=0;endArrow=none;endFill=0;fillColor=#e1d5e7;" parent="1" source="MVYNIM761YJ6fPb6oug0-17" target="MVYNIM761YJ6fPb6oug0-15" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-17" value="&lt;div&gt;Client&lt;/div&gt;" style="shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image=https://cdn2.iconfinder.com/data/icons/multimedia-26/24/multimedia-30-128.png" parent="1" vertex="1">
<mxGeometry x="45" y="700" width="50" height="50" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-22" style="edgeStyle=orthogonalEdgeStyle;curved=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;startArrow=none;startFill=0;endArrow=none;endFill=0;strokeColor=#9673a6;strokeWidth=2;fillColor=#e1d5e7;" parent="1" source="MVYNIM761YJ6fPb6oug0-19" target="MVYNIM761YJ6fPb6oug0-15" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-19" value="&lt;div&gt;Client&lt;/div&gt;" style="shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image=https://cdn2.iconfinder.com/data/icons/multimedia-26/24/multimedia-30-128.png" parent="1" vertex="1">
<mxGeometry x="105" y="700" width="50" height="50" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-23" style="edgeStyle=orthogonalEdgeStyle;curved=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=1.094;entryY=0.523;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=none;startFill=0;endArrow=none;endFill=0;strokeColor=#9673a6;strokeWidth=2;fillColor=#e1d5e7;" parent="1" source="MVYNIM761YJ6fPb6oug0-20" target="MVYNIM761YJ6fPb6oug0-15" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-20" value="&lt;div&gt;Client&lt;/div&gt;" style="shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image=https://cdn2.iconfinder.com/data/icons/multimedia-26/24/multimedia-30-128.png" parent="1" vertex="1">
<mxGeometry x="165" y="700" width="50" height="50" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-24" value="&lt;div&gt;Access Point B&lt;/div&gt;" style="points=[];aspect=fixed;html=1;align=center;shadow=0;dashed=0;image;image=img/lib/allied_telesis/wireless/Access_Point_Outdoor.svg;labelPosition=center;verticalLabelPosition=top;verticalAlign=bottom;" parent="1" vertex="1">
<mxGeometry x="303.16" y="550" width="33.67" height="130" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-25" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=-0.034;entryY=0.508;entryDx=0;entryDy=0;entryPerimeter=0;strokeColor=#9673a6;strokeWidth=2;curved=1;startArrow=none;startFill=0;endArrow=none;endFill=0;fillColor=#e1d5e7;" parent="1" source="MVYNIM761YJ6fPb6oug0-26" target="MVYNIM761YJ6fPb6oug0-24" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-26" value="&lt;div&gt;Client&lt;/div&gt;" style="shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image=https://cdn2.iconfinder.com/data/icons/multimedia-26/24/multimedia-30-128.png" parent="1" vertex="1">
<mxGeometry x="235" y="700" width="50" height="50" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-27" style="edgeStyle=orthogonalEdgeStyle;curved=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;startArrow=none;startFill=0;endArrow=none;endFill=0;strokeColor=#9673a6;strokeWidth=2;fillColor=#e1d5e7;" parent="1" source="MVYNIM761YJ6fPb6oug0-28" target="MVYNIM761YJ6fPb6oug0-24" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-28" value="&lt;div&gt;Client&lt;/div&gt;" style="shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image=https://cdn2.iconfinder.com/data/icons/multimedia-26/24/multimedia-30-128.png" parent="1" vertex="1">
<mxGeometry x="295" y="700" width="50" height="50" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-29" style="edgeStyle=orthogonalEdgeStyle;curved=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=1.094;entryY=0.523;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=none;startFill=0;endArrow=none;endFill=0;strokeColor=#9673a6;strokeWidth=2;fillColor=#e1d5e7;" parent="1" source="MVYNIM761YJ6fPb6oug0-30" target="MVYNIM761YJ6fPb6oug0-24" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-30" value="&lt;div&gt;Client&lt;/div&gt;" style="shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image=https://cdn2.iconfinder.com/data/icons/multimedia-26/24/multimedia-30-128.png" parent="1" vertex="1">
<mxGeometry x="355" y="700" width="50" height="50" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-31" value="&lt;div&gt;Access Point C&lt;br&gt;&lt;/div&gt;" style="points=[];aspect=fixed;html=1;align=center;shadow=0;dashed=0;image;image=img/lib/allied_telesis/wireless/Access_Point_Outdoor.svg;labelPosition=center;verticalLabelPosition=top;verticalAlign=bottom;" parent="1" vertex="1">
<mxGeometry x="493.15999999999997" y="550" width="33.67" height="130" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-32" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=-0.034;entryY=0.508;entryDx=0;entryDy=0;entryPerimeter=0;strokeColor=#9673a6;strokeWidth=2;curved=1;startArrow=none;startFill=0;endArrow=none;endFill=0;fillColor=#e1d5e7;" parent="1" source="MVYNIM761YJ6fPb6oug0-33" target="MVYNIM761YJ6fPb6oug0-31" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-33" value="&lt;div&gt;Client&lt;/div&gt;" style="shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image=https://cdn2.iconfinder.com/data/icons/multimedia-26/24/multimedia-30-128.png" parent="1" vertex="1">
<mxGeometry x="425" y="700" width="50" height="50" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-34" style="edgeStyle=orthogonalEdgeStyle;curved=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;startArrow=none;startFill=0;endArrow=none;endFill=0;strokeColor=#9673a6;strokeWidth=2;fillColor=#e1d5e7;" parent="1" source="MVYNIM761YJ6fPb6oug0-35" target="MVYNIM761YJ6fPb6oug0-31" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-35" value="&lt;div&gt;Client&lt;/div&gt;" style="shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image=https://cdn2.iconfinder.com/data/icons/multimedia-26/24/multimedia-30-128.png" parent="1" vertex="1">
<mxGeometry x="485" y="700" width="50" height="50" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-36" style="edgeStyle=orthogonalEdgeStyle;curved=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=1.094;entryY=0.523;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=none;startFill=0;endArrow=none;endFill=0;strokeColor=#9673a6;strokeWidth=2;fillColor=#e1d5e7;" parent="1" source="MVYNIM761YJ6fPb6oug0-37" target="MVYNIM761YJ6fPb6oug0-31" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-37" value="&lt;div&gt;Client&lt;/div&gt;" style="shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image=https://cdn2.iconfinder.com/data/icons/multimedia-26/24/multimedia-30-128.png" parent="1" vertex="1">
<mxGeometry x="545" y="700" width="50" height="50" as="geometry" />
</mxCell>
<mxCell id="QcPyRtQWHIRnRJVXSFQS-1" value="Upstream Provider" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="210" y="-40" width="240" height="130" as="geometry" />
</mxCell>
<mxCell id="MVYNIM761YJ6fPb6oug0-44" value="&lt;div&gt;Server&lt;/div&gt;&lt;div&gt;Management&lt;/div&gt;" style="endArrow=none;html=1;strokeColor=#d79b00;strokeWidth=7;fillColor=#ffe6cc;labelBorderColor=#D79B00;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="367" y="248" as="sourcePoint" />
<mxPoint x="370" y="160" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

+113
View File
@@ -0,0 +1,113 @@
# Configurar LibreQoS
## Archivo de configuración principal
### /etc/lqos.conf
La configuración de LibreQoS para cada shaper box se almacena en el archivo `/etc/lqos.conf`.
Edite el archivo para que coincida con su configuración
```shell
sudo nano /etc/lqos.conf
```
En la sección ```[bridge]``` , cambie `to_internet` y `to_network` para que coincida con sus interfaces de red.
- `to_internet = "enp1s0f1"`
- `to_network = "enp1s0f2"`
Luego, si usa Bifrost/XDP, configure `use_xdp_bridge = true` en la misma sección `[bridge]`. Si no está seguro de que lo necesite, le recomendamos dejarlo como `false`.
- Configure downlink_bandwidth_mbps y uplink_bandwidth_mbps para que coincidan con el ancho de banda en Mbps de la conexión a internet de subida/WAN de su red. Puede hacer lo mismo con generated_pn_download_mbps y generated_pn_upload_mbps.
- to_internet sería la interfaz que da a su enrutador de borde y a la red de Internet en generla
- to_network sería la interfaz que da a su enrutador central (o red interna puenteada si su red está puenteada)
Nota: Si observa que el tráfico no se está modelando cuando debería, asegúrese de intercambiar el orden de las interfaces y reinicie lqosd, así como lqos_scheduler con ```sudo systemctl restart lqosd lqos_scheduler```.
Después de cambiar cualquier parte de `/etc/lqos.conf`, se recomienda encarecidamente reiniciar siempre lqosd, utilizando `sudo systemctl restart lqosd`. Esto vuelve a analizar cualquier nuevo valor en lqos.conf, haciendo que esos nuevos valores sean accesibles tanto para el lado Rust como para el lado Python del código.
### Integraciones
Más información sobre cómo [configurar integraciones aquí](../TechnicalDocs/integrations.md).
## Jerarquía de red
### Network.json
Network.json permite a los operadores de ISP definir una topología de red jerárquica o una topología de red plana.
Si planea utilizar las integraciones UISP o Splynx integradas, no es necesario que cree un archivo network.json todavía.
Si planea utilizar la integración UISP integrada, esta se creará automáticamente la primera vez que se ejecute (suponiendo que network.json aún no exista).
Si no va a utilizar una integración, puede definir manualmente el archivo network.json siguiendo el archivo de plantilla: network.example.json
```text
+-----------------------------------------------------------------------+
| Entire Network |
+-----------------------+-----------------------+-----------------------+
| Parent Node A | Parent Node B | Parent Node C |
+-----------------------+-------+-------+-------+-----------------------+
| Parent Node D | Sub 3 | Sub 4 | Sub 5 | Sub 6 | Sub 7 | Parent Node F |
+-------+-------+-------+-------+-------+-------+-------+-------+-------+
| Sub 1 | Sub 2 | | | | Sub 8 | Sub 9 |
+-------+-------+-------+-----------------------+-------+-------+-------+
```
Para redes sin nodos principales (sin puntos de acceso o sitios estrictamente definidos), edite el archivo network.json para utilizar una topología de red plana con
```nano network.json```
estableciendo el siguiente contenido del archivo:
```json
{}
```
#### Ayuda para la conversión de CSV a JSON
Puede utilizar
```shell
python3 csvToNetworkJSON.py
```
para convertir manualNetwork.csv en un archivo network.json.
manualNetwork.csv se puede copiar desde el archivo de plantilla, manualNetwork.template.csv.
Nota: El nombre del nodo principal debe coincidir con el utilizado para los clientes en ShapedDevices.csv.
## Circuitos
LibreQoS configura los dispositivos individuales según sus direcciones IP, que se agrupan en «circuitos».
Un circuito representa el servicio de Internet de un suscriptor de ISP, que puede tener una sola IP asociada (por ejemplo, al enrutador del suscriptor se le puede asignar una sola IPv4 /32) o puede tener varias IP asociadas (tal vez su enrutador tenga asignada una /29 o varias /32)..
LibreQoS sabe cómo configurar estos dispositivos y en qué nodo (AP, sitio, etc.) se encuentran, gracias al archivo ShapedDevices.csv.
### ShapedDevices.csv
El archivo ShapedDevices.csv correlaciona las direcciones IP de los dispositivos con los circuitos (el servicio exclusivo de cada suscriptor de Internet).
A continuación se muestra un ejemplo de una entrada en el archivo ShapedDevices.csv:
| Circuit ID | Circuit Name | Device ID | Device Name | Parent Node | MAC | IPv4 | IPv6 | Download Min Mbps | Upload Min Mbps | Download Max Mbps | Upload Max Mbps | Comment |
|------------|--------------|-----------|-------------|-------------|-----|---------------------------|----------------------|-------------------|-----------------|-------------------|-----------------|---------|
| 10001 | Person Name | 10001 | Device 1 | AP_A | | 100.64.0.2, 100.64.0.8/29 | fdd7:b724:0:100::/56 | 25 | 5 | 155 | 20 | |
Si utiliza una de nuestras integraciones CRM, este archivo se generará automáticamente. Si no utiliza una integración, puede editar el archivo manualmente utilizando la interfaz de usuario web o editando directamente el archivo ShapedDevices.csv a través de la CLI.
#### Edición manual mediante WebUI
Navegue hasta el WebUI LibreQoS (http://a.b.c.d:9123) y seleccione Configuration > Shaped Devices.
#### Edición manual mediante CLI
- Modifique el archivo ShapedDevices.csv utilizando su editor de hojas de cálculo preferido (LibreOffice Calc, Excel, etc.), siguiendo la plantilla del archivo - ShapedDevices.example.csv
- Se requiere el ID del circuito. Debe ser una cadena de algún tipo (int está bien, se analiza como cadena). NO debe incluir ningún símbolo numérico (#). Cada circuito necesita un CircuitID único, no se pueden reutilizar. Aquí, circuito significa esencialmente la ubicación del cliente. Si un cliente tiene varias ubicaciones en diferentes partes de su red, utilice un CircuitID único para cada una de esas ubicaciones.
- Se requiere al menos una dirección IPv4 o IPv6 para cada entrada.
- El nombre del punto de acceso o del sitio debe configurarse en el campo Nodo principal. El campo Nodo principal puede dejarse en blanco para redes planas.
- El archivo ShapedDevices.csv le permite establecer el ancho de banda mínimo garantizado y máximo permitido por suscriptor.
- Las tarifas mínimas permitidas para los Circuitos son de 2 Mbit. El ancho de banda mínimo y máximo deben estar por encima de ese umbral.
- Recomendación: establezca el ancho de banda mínimo en algo así como 25/10 y el máximo en 1,15 veces la velocidad anunciada en el plan utilizando bandwidthOverheadFactor = 1,15
- De esta manera, cuando un punto de acceso alcanza su límite máximo, los usuarios disponen de la capacidad restante del punto de acceso distribuida de forma equitativa entre ellos.
- Garantizar un ancho de banda mínimo razonable para cada suscriptor, permitiéndoles utilizar hasta el máximo proporcionado cuando la utilización del punto de acceso sea inferior al 100 %.
Nota sobre los SLA: para los clientes con contratos SLA que les garantizan un ancho de banda mínimo, establezca la tarifa de su plan como el ancho de banda mínimo. De esta forma, cuando un punto de acceso se acerque a su límite máximo, los clientes con SLA siempre obtendrán esa cantidad.
![image](https://user-images.githubusercontent.com/22501920/200134960-28709d0f-48fe-4129-b4fd-70b204cade2c.png)
Una vez completada la configuración, ya está listo para ejecutar la aplicación e iniciar los [Deamons](./services-and-run.md)
@@ -0,0 +1,29 @@
# Install LibreQoS 1.5/2.0
## Step 1 - Validate Network Design Assumptions and Hardware Selection
- [Network Design Assumptions](../../Quickstart/networkdesignassumptions.md)
- [System Requirements](../../SystemRequirements/Compute.md)
## Step 2 - Complete The Installation Prerequisites
[LibreQoS Installation Prerequisites](quickstart-prereq.md)
## Step 3 - Install LibreQoS
### Download .DEB Package (Recommended Method)
Donwload the latest .deb from [https://libreqos.io/download/](https://libreqos.io/download/).
Unzip the .zip file and transfer the .deb to your LibreQoS box, installing with:
```
sudo apt install ./deb_file_name.deb
```
### Git Install (For Developers Only - Not Recommended)
[Complex Installation](../TechnicalDocs/git-install.md)
## Step 4 - Configure LibreQoS
You are now ready to [Configure](./configuration.md) LibreQoS!
@@ -0,0 +1,109 @@
# Server Setup - Pre-requisites
Disable hyperthreading on the BIOS/UEFI of your host system. Hyperthreaading is also known as Simultaneous Multi Threading (SMT) on AMD systems. Disabling this is very important for optimal performance of the XDP cpumap filtering and, in turn, throughput and latency.
- Boot, pressing the appropriate key to enter the BIOS settings
- For AMD systems, you will have to navigate the settings to find the "SMT Control" setting. Usually it is under something like ```Advanced -> AMD CBS -> CPU Common Options -> Thread Enablement -> SMT Control``` Once you find it, switch to "Disabled" or "Off"
- For Intel systems, you will also have to navigate the settings to find the "hyperthrading" toggle option. On HP servers it's under ```System Configuration > BIOS/Platform Configuration (RBSU) > Processor Options > Intel (R) Hyperthreading Options.```
- Save changes and reboot
## Install Ubuntu Server
You can download Ubuntu Server 22.04 from <a href="https://releases.ubuntu.com/22.04/?_ga=2.149898549.2084151835.1707729318-1126754318.1683186906">here</a>.
1. Boot Ubuntu Server from USB.
2. Follow the steps to install Ubuntu Server.
3. If you use a Mellanox network card, the Ubuntu Server installer will ask you whether to install the mellanox/intel NIC drivers. Check the box to confirm. This extra driver is important.
4. On the Networking settings step, it is recommended to assign a static IP address to the management network interface.
5. Ensure SSH server is enabled so you can more easily log into the server later.
6. You can use scp or sftp to access files from your LibreQoS server for easier file editing. Here's how to access via scp or sftp using an [Ubuntu](https://www.addictivetips.com/ubuntu-linux-tips/sftp-server-ubuntu/) or [Windows](https://winscp.net/eng/index.php) machine.
### Choose Bridge Type
There are two options for the bridge to pass data through your two interfaces:
- Option A: Regular Linux Bridge
- Option B: Bifrost XDP-Accelerated Bridge
The regular Linux bridge is recommended for Nvidia/Mellanox NICs such as the ConnectX-5 series (which have superior bridge performance), and VM setups using virtualized NICs. The Bifrost Bridge is recommended for Intel NICs with XDP support, such as the X520 and X710.
To use the Bifrost bridge, be sure to enable Bifrost/XDP in lqos.conf in the [Configuration](configuration.md) section.
Below are the instructions to configure Netplan, whether using the Linux Bridge or Bifrost XDP bridge:
## Netplan config
### Option A: Netplan config for a regular Linux bridge
Ubuntu Server uses NetPlan, which uses .yaml files in /etc/netplan to determine interface settings.
Here, we will add a .yaml specifically for LibreQoS - that way it is not overwritten when changes are made to the default .yaml file.
```shell
sudo nano /etc/netplan/libreqos.yaml
```
Assuming your interfaces are ens19 and ens20, here is what your file would look like:
```yaml
network:
ethernets:
ens19:
dhcp4: no
dhcp6: no
ens20:
dhcp4: no
dhcp6: no
bridges:
br0:
interfaces:
- ens19
- ens20
version: 2
```
```{note}
Please be sure to replace ens19 and ens20 in the example above with the correct shaping interfaces. The order of the interfaces does not matter for this section.
```
By setting `dhcp4: no` and `dhcp6: no`, the interfaces will be brought up as part of the normal boot cycle, despite not having IP addresses assigned.
Then run
```shell
sudo chmod 600 /etc/netplan/libreqos.yaml
sudo netplan apply
```
### Option B: Netplan config for the Bifrost XDP bridge
Ubuntu Server uses NetPlan, which uses .yaml files in /etc/netplan to determine interface settings.
Here, we will add a .yaml specifically for LibreQoS - that way it is not overwritten when changes are made to the default .yaml file.
```shell
sudo nano /etc/netplan/libreqos.yaml
```
Assuming your interfaces are ens19 and ens20, here is what your file would look like:
```yaml
network:
ethernets:
ens19:
dhcp4: no
dhcp6: no
ens20:
dhcp4: no
dhcp6: no
version: 2
```
```{note}
Please be sure to replace ens19 and ens20 in the example above with the correct shaping interfaces. The order of the interfaces does not matter for this section.
```
By setting `dhcp4: no` and `dhcp6: no`, the interfaces will be brought up as part of the normal boot cycle, despite not having IP addresses assigned.
Then run
```shell
sudo chmod 600 /etc/netplan/libreqos.yaml
sudo netplan apply
```
@@ -0,0 +1,70 @@
# LibreQoS systemd services
## What each service does
### lqosd
- Manages actual XDP code.
- Coded in Rust.
- Runs the GUI available at http://a.b.c.d:9123
### lqos_scheduler
- lqos_scheduler performs continuous refreshes of LibreQoS' shapers, including pulling from any enabled CRM Integrations (UISP, Splynx).
- Actions:
- On start: Run a full setup of queues
- Every X minutes: Update queues, pulling new configuration from CRM integration, if enabled.
- The default minute interval is 30, so the refresh occurs every 30 minutes by default.
- The minute interval is adjustable with the setting `queue_refresh_interval_mins` in `/etc/lqos.conf`.
## Checking service status
```
sudo systemctl status lqosd lqos_scheduler
```
If the status of one of the two services shows 'failed', examine why using journalctl, which shows the full status of the service. For example, if lqosd failed, you would run:
```
sudo journalctl -u lqosd -b
```
Press the End key on the keyboard to take you to the bottom of the log to see the latest updates to that log.
Lqosd will provide specific reasons it failed, such as an interface not being up, an interface lacking multi-queue, or other cocnerns.
## Debugging lqos_scheduler
In the background, lqos_scheduler runs the Python script scheduler.py, which in turn runs the Python script LibreQoS.py
- scheduler.py: performs continuous refreshes of LibreQoS' shapers, including pulling from any enabled CRM Integrations (UISP, Splynx).
- LibreQoS.py: creates and updates queues / shaping of devices
One-time runs of these individual components can be very helpful for debugging and to make sure everything is correctly configured.
First, stop lqos_scheduler
```shell
sudo systemctl stop lqos_scheduler
```
For one-time runs of LibreQoS.py, use
```shell
sudo ./LibreQoS.py
```
- To use the debug mode with more verbose output, use:
```shell
sudo ./LibreQoS.py --debug
```
To confirm that lqos_scheduler (scheduler.py) is able to work correctly, run:
```shell
sudo python3 scheduler.py
```
Once you have any errors eliminated, restart lqos_scheduler with
```shell
sudo systemctl start lqos_scheduler
```
+35
View File
@@ -0,0 +1,35 @@
# Share your before and after
We ask that you please share an anonymized screenshot of your LibreQoS deployment before (monitor only mode) and after (queuing enabled) to the [LibreQoS Chat](https://chat.libreqos.io/join/fvu3cerayyaumo377xwvpev6/). This helps us gauge the impact of our software. It also makes us smile.
1. Enable monitor only mode
2. Run for 1 week
3. Disable monitor only mode
4. Toggle "Redact" to hide customer info in the LTS WebUI
5. Screenshot
## Enable monitor only mode
```shell
sudo nano /etc/lqos.conf
```
In the `[queues]` section, set `monitor_only = true` to switch to monitor only mode.
The restart lqosd and lqos_scheduler:
```shell
sudo systemctl restart lqosd lqos_scheduler
```
## Disable monitor only mode
```shell
sudo nano /etc/lqos.conf
```
In the `[queues]` section, set `monitor_only = false` to switch off monitor only mode.
The restart lqosd and lqos_scheduler:
```shell
sudo systemctl restart lqosd lqos_scheduler
```
+12
View File
@@ -0,0 +1,12 @@
# Extras
## Flamegraph
```shell
git clone https://github.com/brendangregg/FlameGraph.git
cd FlameGraph
sudo perf record -F 99 -a -g -- sleep 60
perf script > out.perf
./stackcollapse-perf.pl out.perf > out.folded
./flamegraph.pl --title LibreQoS --width 7200 out.folded > libreqos.svg
```
+95
View File
@@ -0,0 +1,95 @@
# Git Install (For Developers - Not Recommended)
## Clone the repo
The recommended install location is `/opt/libreqos`
Go to the install location, and clone the repo:
```shell
cd /opt/
sudo git clone https://github.com/LibreQoE/LibreQoS.git libreqos
sudo chown -R $USER /opt/libreqos
cd /opt/libreqos/
git switch develop
git pull
```
By specifying `libreqos` at the end, git will ensure the folder name is lowercase.
## Install Dependencies from apt and pip
You need to have a few packages from `apt` installed:
```shell
sudo apt-get install -y python3-pip clang gcc gcc-multilib llvm libelf-dev git nano graphviz curl screen llvm pkg-config linux-tools-common linux-tools-`uname -r` libbpf-dev libssl-dev
```
Then you need to install some Python dependencies:
```shell
cd /opt/libreqos
PIP_BREAK_SYSTEM_PACKAGES=1 pip install -r requirements.txt
sudo PIP_BREAK_SYSTEM_PACKAGES=1 pip install -r requirements.txt
```
## Install the Rust development system
Run the following:
```shell
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
When Rust finishes installing, it will tell you to execute a command to place the Rust build tools into your path. You need to either execute this command or logout and back in again.
Once that's done, please run:
```shell
cd /opt/libreqos/src/
./build_rust.sh
```
This will take a while the first time, but it puts everything in the right place.
Now, to build rust crates, run:
```shell
cd rust
cargo build --all
```
## Lqos.conf
Copy the lqos.conf configuration file to `/etc`. This is not neccesarry if you installed using the .deb:
```shell
cd /opt/libreqos/src
sudo cp lqos.example /etc/lqos.conf
```
## Configuration
Proceed to configure settings [following this guide](../Quickstart/configuration.md).
## Daemon setup
## Run daemons with systemd
Note: If you used the .deb installer, you can skip this section. The .deb installer automatically sets these up.
You can now set up `lqosd`, and `lqos_scheduler` as systemd services.
```shell
sudo cp /opt/libreqos/src/bin/lqosd.service.example /etc/systemd/system/lqosd.service
sudo cp /opt/libreqos/src/bin/lqos_scheduler.service.example /etc/systemd/system/lqos_scheduler.service
```
Finally, run
```shell
sudo systemctl daemon-reload
sudo systemctl enable lqosd lqos_scheduler
sudo systemctl start lqosd lqos_scheduler
```
You can now point a web browser at `http://a.b.c.d:9123` (replace `a.b.c.d` with the management IP address of your shaping server) and enjoy a real-time view of your network.
+195
View File
@@ -0,0 +1,195 @@
# Integrations
## Splynx Integration
First, set the relevant parameters for Splynx (splynx_api_key, splynx_api_secret, etc.) in `/etc/lqos.conf`.
### Splynx API Access
The Splynx Integration uses Basic authentication. For using this type of authentication, please make sure you enable [Unsecure access](https://splynx.docs.apiary.io/#introduction/authentication) in your Splynx API key settings. Also the Splynx API key should be granted access to the necessary permissions.
* Tariff Plans -> Internet -> view
* Tariff Plans -> Bundle -> view
* Tariff Plans -> One time -> view
* Tariff Plans -> Recurring -> view
* FUP -> Counter -> view
* FUP -> Compiler -> view
* FUP -> Policies -> view
* FUP -> Capped Data -> view
* FUP -> CAP Tariff -> view
* FUP -> FUP Limits -> view
* FUP -> Traffic Usage -> view
* Customers -> customer -> view
* Customers -> customer information -> view
* Customers -> Customers online -> view
* Customers -> customer bundle services -> view
* Customers -> customer internet services -> view
* Customers -> traffic counter -> view
* Customers -> customer recurring services -> view
* Customers -> bonus traffic counter -> view
* Customers -> CAP history -> view
* Networking -> routers -> view
* Networking -> network sites >view
* Networking -> router contention -> view
* Networking -> IPv4 networks -> view
* Networking -> IPv4 networks IP -> view
To test the Splynx Integration, use
```shell
python3 integrationSplynx.py
```
On the first successful run, it will create a ShapedDevices.csv file and network.json.
ShapedDevices.csv will be overwritten every time the Splynx integration is run.
To ensure the network.json is always overwritten with the newest version pulled in by the integration, please edit `/etc/lqos.conf` with the command `sudo nano /etc/lqos.conf`.
Edit the file to set the value of `always_overwrite_network_json` to `true`.
Then, run `sudo systemctl restart lqosd`.
You have the option to run integrationSplynx.py automatically on boot and every X minutes (set by the parameter `queue_refresh_interval_mins`), which is highly recommended. This can be enabled by setting ```enable_spylnx = true``` in `/etc/lqos.conf`.
Once set, run `sudo systemctl restart lqos_scheduler`.
### Splynx Overrides
You can also modify the the file `integrationSplynxBandwidths.csv` to override the default bandwidths for each Node (Site, AP).
A template is available in the `/opt/libreqos/src` folder. To utilize the template, copy the file `integrationSplynxBandwidths.template.csv` (removing the `.template` part of the filename) and set the appropriate information inside each file. For example, if you want to change the set bandwidth for a site, you would do:
```
sudo cp /opt/libreqos/src/integrationSplynxBandwidths.template.csv /opt/libreqos/src/integrationSplynxBandwidths.csv
```
And edit the CSV using LibreOffice or your preferred CSV editor.
## UISP Integration
First, set the relevant parameters for UISP (token, url, automatic_import_uisp, etc.) in `/etc/lqos.conf`.
```
# Whether to run the UISP integration automatically in the lqos_scheduler service
enable_uisp = true
# Your UISP API Access Token
token = ""
# Your UISP URL (include https://, but omit anything past .com, .net, etc)
url = "https://uisp.your_domain.com"
# The site here refers to the Root site you want UISP to base its topology "perspective" from.
# Default value is a blank string.
site = "Site_name"
# Strategy type. "full" is recommended. "flat" can be used if only client shaping is desired.
strategy = "full"
# Suspension strategy:
# * "none" - do not handle suspensions
# * "ignore" - do not add suspended customers to the network map
# * "slow" - limit suspended customers to 1mbps
suspended_strategy = "none"
# UISP's reported AP capacities for AirMax can be a bit optimistic. For AirMax APs, we limit
# to 65% of what UISP claims an AP's capacity is, by default. This is adjustable.
airmax_capacity = 0.65
# UISP's reported AP capacities for LTU are more accurate, but to be safe we adjust to 95%
# of those capacities. This is adjustable.
ltu_capacity = 0.95
# If you want to exclude sites in UISP from appearing in your LibreQoS network.json, simply
# include them here. For example, exclude_sites = ["Site_1", "Site_2"]
exclude_sites = []
# If you use DHCPv6, and want to pull in IPv6 CIDRs corresponding to each customer's IPv4
# address, you can do so with this. If enabled, be sure to fill out mikrotikDHCPRouterList.csv
# and run `python3 mikrotikFindIPv6.py` to test its functionality.
ipv6_with_mikrotik = false
# If you want customers to recieve a bit more of less than their allocated speed plan, set
# it here. For example, 1.15 is 15% above their alloted speed plan.
bandwidth_overhead_factor = 1.15
# By default, the customer "minimum" is set to 98% of the maximuum (CIR).
commit_bandwidth_multiplier = 0.98
exception_cpes = []
# If you have some sites branched off PtMP Access Points, set `true`
use_ptmp_as_parent = true
uisp_use_burst = true
```
To test the UISP Integration, use
```shell
cd /opt/libreqos/src
sudo /opt/libreqos/src/bin/uisp_integration
```
On the first successful run, it will create a network.json and ShapedDevices.csv file.
If a network.json file exists, it will not be overwritten, unless you set ```always_overwrite_network_json = true```.
ShapedDevices.csv will be overwritten every time the UISP integration is run.
To ensure the network.json is always overwritten with the newest version pulled in by the integration, please edit `/etc/lqos.conf` with the command `sudo nano /etc/lqos.conf`.
Edit the file to set the value of `always_overwrite_network_json` to `true`.
Then, run `sudo systemctl restart lqosd`.
You have the option to run integrationUISP.py automatically on boot and every X minutes (set by the parameter `queue_refresh_interval_mins`), which is highly recommended. This can be enabled by setting ```enable_uisp = true``` in `/etc/lqos.conf`. Once set, run `sudo systemctl restart lqos_scheduler`.
### UISP Overrides
You can also modify the the following files to more accurately reflect your network:
- integrationUISPbandwidths.csv
- integrationUISProutes.csv
Each of the files above have templates available in the `/opt/libreqos/src` folder. If you don't find them there, you can navigate [here](https://github.com/LibreQoE/LibreQoS/tree/develop/src). To utilize the template, copy the file (removing the `.template` part of the filename) and set the appropriate information inside each file.
For example, if you want to change the set bandwidth for a site, you would do:
```
sudo cp /opt/libreqos/src/integrationUISPbandwidths.template.csv /opt/libreqos/src/integrationUISPbandwidths.csv
```
And edit the CSV using LibreOffice or your preferred CSV editor.
#### UISP Route Overrides
The default cost between nodes is 10.
Say you have Site 1, Site 2, and Site 3.
A backup path exists between Site 1 and Site 3, but is not the preferred path.
Your preference is Site 1 > Site 2 > Site 3, but the integration by default connects Site 1 > Site 3 directly.
To fix this, add a cost above the default for the path between Site 1 and Site 3.
```
Site 1, Site 3, 100
```
With this, data will flow Site 1 > Site 2 > Site 3.
To make the change, perform a reload of the integration with ```sudo systemctl restart lqos_scheduler```.
## Powercode Integration
First, set the relevant parameters for Powercode (powercode_api_key, powercode_api_url, etc.) in `/etc/lqos.conf`.
To test the Powercode Integration, use
```shell
python3 integrationPowercode.py
```
On the first successful run, it will create a ShapedDevices.csv file.
You can modify the network.json file manually to reflect Site/AP bandwidth limits.
ShapedDevices.csv will be overwritten every time the Powercode integration is run.
You have the option to run integrationPowercode.py automatically on boot and every X minutes (set by the parameter `queue_refresh_interval_mins`), which is highly recommended. This can be enabled by setting ```enable_powercode = true``` in `/etc/lqos.conf`.
## Sonar Integration
First, set the relevant parameters for Sonar (sonar_api_key, sonar_api_url, etc.) in `/etc/lqos.conf`.
To test the Sonar Integration, use
```shell
python3 integrationSonar.py
```
On the first successful run, it will create a ShapedDevices.csv file.
If a network.json file exists, it will not be overwritten, unless you set ```always_overwrite_network_json = true```.
You can modify the network.json file to more accurately reflect bandwidth limits.
ShapedDevices.csv will be overwritten every time the Sonar integration is run.
You have the option to run integrationSonar.py automatically on boot and every X minutes (set by the parameter `queue_refresh_interval_mins`), which is highly recommended. This can be enabled by setting ```enable_sonar = true``` in `/etc/lqos.conf`.
@@ -0,0 +1,28 @@
# Performance Tuning
## Ubuntu Starts Slowly (~2 minutes)
### List all services which requires network
```shell
systemctl show -p WantedBy network-online.target
```
### For Ubuntu 22.04 this command can help
```shell
systemctl disable cloud-config iscsid cloud-final
```
### Set proper governor for CPU (baremetal/hypervisior host)
```shell
cpupower frequency-set --governor performance
```
### OSPF
It is recommended to set the OSPF timers of both OSPF neighbors (core and edge router) to minimize downtime upon a reboot of the LibreQoS server.
* hello interval
* dead
@@ -0,0 +1,82 @@
# Troubleshooting
## Common Issues
### No WebUI at x.x.x.x:9123
The WebUI is controlled by the lqosd service. Usually, when the WebUI doesn't start, it is related to lqosd being in a failed state.
Check to see if the lqosd service is running:
```
sudo systemctl status lqosd
```
If the status is 'failed', examine why using journalctl, which shows the full status of the service:
```
journalctl -u lqosd --since "10 minutes ago"
```
Press the End key on the keyboard to take you to the bottom of the log to see the latest updates to that log.
Lqosd will provide specific reasons it failed, such as an interface not being up, an interface lacking multi-queue, or other cocnerns.
### LibreQoS Is Running, But Traffic Not Shaping
In /etc/lqos.conf, ensure that `to_internet` and `to_network` are set correctly. If not, simply swap the interfaces between those and restart lqosd and the scheduler.
```
sudo systemctl restart lqosd lqos_scheduler
```
Make sure your services are running properly
```
sudo systemctl status lqosd lqos_scheduler
```
The service lqos_scheduler is dependent on the lqosd service being in a healthy, running state.
### Service lqosd is not running or failed to start
Check to see the state of the lqosd service:
```
sudo systemctl status lqosd
```
If the status is 'failed', examine why using journalctl, which shows the full status of the service:
```
journalctl -u lqosd --since "10 minutes ago"
```
Press the End key on the keyboard to take you to the bottom of the log to see the latest updates to that log.
Lqosd will provide specific reasons it failed, such as an interface not being up, an interface lacking multi-queue, or other cocnerns.
### Advanced lqosd debug
At the command-line, run ```sudo RUST_LOG=info /opt/libreqos/src/bin/lqosd``` which runs lqosd manually, and will provide specifics regarding why it failed to start.
### RTNETLINK answers: Invalid argument
This tends to show up when the MQ qdisc cannot be added correctly to the NIC interface. This would suggest the NIC has insufficient RX/TX queues. Please make sure you are using the [recommended NICs](../../SystemRequirements/Compute.md#network-interface-requirements).
### Python ModuleNotFoundError in Ubuntu 24.04
```
pip uninstall binpacking --break-system-packages --yes
sudo pip uninstall binpacking --break-system-packages --yes
sudo pip install binpacking --break-system-packages
pip uninstall apscheduler --break-system-packages --yes
sudo pip uninstall apscheduler --break-system-packages --yes
sudo pip install apscheduler --break-system-packages
pip uninstall deepdiff --break-system-packages --yes
sudo pip uninstall deepdiff --break-system-packages --yes
sudo pip install deepdiff --break-system-packages
```
### All customer IPs are listed under Unknown IPs, rather than Shaped Devices in GUI
```
cd /opt/libreqos/src
sudo systemctl stop lqos_scheduler
sudo python3 LibreQoS.py
```
The console output from running LibreQoS.py directly provides more specific errors regarding issues with ShapedDevices.csv and network.json
Once you have identified the error and fixed ShapedDevices.csv and/or Network.json, please then run
```sudo systemctl start lqos_scheduler```
+34
View File
@@ -0,0 +1,34 @@
# Actualización a la última versión
```{warning}
Si usa el puente XDP, el tráfico dejará de pasar brevemente a través del puente cuando se reinicie lqosd (el puente XDP solo funciona mientras se ejecuta lqosd).
```
## Si instaló el .deb
Descargue el último .deb desde [libreqos.io/#download](https://libreqos.io/#download).
Descomprima el archivo .zip y transfiera el .deb a su caja LibreQoS, instalándolo con:
```
sudo apt install ./[deb file name]
```
Ahora reinicie el servidor LibreQoS con:
```
sudo reboot
```
Esto eliminará los mapas eBPF antiguos y cargará la última versión de LibreQoS..
## Si lo instalaste con Git
1. Cambie a su directorio `LibreQoS`(e.g. `cd /opt/LibreQoS`)
2.Actualización desde Git: `git pull`
3. ```git switch develop```
5. Recompile: `./build-rust.sh`
6. `sudo rust/remove_pinned_maps.sh`
Ejecute los siguientes comandos para recargar los servicios de LibreQoS.
```shell
sudo systemctl restart lqosd lqos_scheduler
```
+89
View File
@@ -0,0 +1,89 @@
# Configurar el Puente de Regulación
## Elegir el Tipo de Puente
Hay dos opciones para que el puente pase datos entre las dos interfaces:
- Opción A: Puente Regular de Linux (Recomendado)
- Opción B: Puente Bifrost Acelerado con XDP
El puente regular de Linux es recomendado para la mayoría de las instalaciones. El puente de Linux continúa transfiriendo datos incluso si el servicio lqosd entra en un estado fallido, lo que lo hace una opción generalmente más segura para escenarios donde no hay una ruta de respaldo disponible. Funciona mejor con tarjetas de red Nvidia/Mellanox como las de la serie ConnectX-5 (que ofrecen un rendimiento superior en puentes) y configuraciones de máquinas virtuales con NICs virtualizadas. El puente Bifrost con XDP está recomendado para tarjetas de red Intel de 40G–100G que soportan XDP.
A continuación, se encuentran las instrucciones para configurar Netplan, ya sea usando el puente de Linux o el puente Bifrost con XDP:
## Opción A: Configuración de Netplan para un puente regular de Linux (Recomendado)
Ubuntu Server utiliza Netplan, el cual se basa en archivos .yaml ubicados en /etc/netplan para determinar la configuración de interfaces.
Aquí agregaremos un archivo .yaml específicamente para LibreQoS, de modo que no se sobrescriba cuando se hagan cambios al archivo .yaml por defecto.
```shell
sudo nano /etc/netplan/libreqos.yaml
```
Asumiendo que sus interfaces de regulación son ens19 y ens20, su archivo se vería así:
```yaml
network:
ethernets:
ens19:
dhcp4: no
dhcp6: no
ens20:
dhcp4: no
dhcp6: no
bridges:
br0:
interfaces:
- ens19
- ens20
version: 2
```
```{note}
Asegurese de reemplazar `ens19` y `ens20` en el ejemplo anterior con las interfaces reales que utilizará para regular el tráfico. El orden de las interfaces no importa en esta sección.
```
Al establecer `dhcp4: no` y `dhcp6: no`, las interfaces de regulación se activarán como parte del ciclo normal de arranque, aunque no tengan direcciones IP asignadas.
Después ejecute:
```shell
sudo chmod 600 /etc/netplan/libreqos.yaml
sudo netplan apply
```
## Opción B: Configuración de Netplan para el puente Bifrost con XDP
Ubuntu Server utiliza Netplan, el cual se basa en archivos .yaml ubicados en /etc/netplan para determinar la configuración de interfaces.
Aquí agregaremos un archivo .yaml específicamente para LibreQoS, de modo que no se sobrescriba cuando se hagan cambios al archivo .yaml por defecto.
```shell
sudo nano /etc/netplan/libreqos.yaml
```
Asumiendo que sus interfaces de regulación son ens19 y ens20, su archivo se vería así:
```yaml
network:
ethernets:
ens19:
dhcp4: no
dhcp6: no
ens20:
dhcp4: no
dhcp6: no
version: 2
```
```{note}
Asegurese de reemplazar `ens19` y `ens20` en el ejemplo anterior con las interfaces reales que utilizará para regular el tráfico. El orden de las interfaces no importa en esta sección.
```
Al establecer `dhcp4: no` y `dhcp6: no`, las interfaces de regulación se activarán como parte del ciclo normal de arranque, aunque no tengan direcciones IP asignadas.
Después ejecute:
```shell
sudo chmod 600 /etc/netplan/libreqos.yaml
sudo netplan apply
```
Para usar el puente XDP, asegurese de establecer `use_xdp_bridge` como `true` en el archivo lqos.conf dentro de la sección [Configuración](configuration-es.md).
+54
View File
@@ -0,0 +1,54 @@
# CAKE
Por defecto, LibreQoS utiliza CAKE (Common Applications Kept Enhanced) con el parámetro diffserv4.
## DSCP
[https://www.iana.org/assignments/dscp-registry/dscp-registry.xhtml](https://www.iana.org/assignments/dscp-registry/dscp-registry.xhtml)
### Clases de tráfico y etiquetas DSCP para Diffserv4
* Tráfico Sensible a la Latencia (CS7, CS6, EF, VA, CS5, CS4)
* Medios de Streaming (AF4x, AF3x, CS3, AF2x, TOS4, CS2, TOS1)
* Mejor Esfuerzo (CS0, AF1x, TOS2, y los no especificados)
* Tráfico en Segundo Plano (CS1)
### Lista de puntos de código Diffserv conocidos:
* Esfuerzo Mínimo (CS1)
* Mejor Esfuerzo (CS0)
* Máxima Confiabilidad y LLT “Lo” (TOS1)
* Máximo Rendimiento (TOS2)
* Mínima Demora (TOS4)
* LLT "La" (TOS5)
* Reenvío Asegurado 1 (AF1x) - x3
* Reenvío Asegurado 2 (AF2x) - x3
* Reenvío Asegurado 3 (AF3x) - x3
* Reenvío Asegurado 4 (AF4x) - x3
* Clase de Precedencia 2 (CS2)
* Clase de Precedencia 3 (CS3)
* Clase de Precedencia 4 (CS4)
* Clase de Precedencia 5 (CS5)
* Clase de Precedencia 6 (CS6)
* Clase de Precedencia 7 (CS7)
* Admisión de Voz (VA)
* Reenvío Expedido (EF)
### Lista de clases de tráfico según el RFC 4594:
(ordenadas aproximadamente de mayor a menor prioridad en caso de congestión)
(ordenadas aproximadamente de menor a mayor rendimiento en ausencia de congestión)
* Control de Red (CS6,CS7) - tráfico de enrutamiento
* Telefonía (EF,VA) - también conocido como VoIP
* Señalización (CS5) - configuración de llamadas VoIP
* Conferencias Multimedia (AF4x) - por ejemplo, videollamadas
* Interactividad en Tiempo Real (CS4) - por ejemplo, videojuegos
* Streaming Multimedia (AF3x) - por ejemplo, YouTube, Netflix, Twitch
* Difusión de Video (CS3)
* Datos de Baja Latencia (AF2x,TOS4) - por ejemplo, base de datos
* Operación, Administración y Gestión (CS2,TOS1) - por ejemplo, SSH
* Servicio Estándar (CS0 & puntos de código no reconocidos)
* Datos de Alto Rendimiento (AF1x,TOS2) - por ejemplo, navegación web
* Datos de Baja Prioridad (CS1) - por ejemplo, BitTorrent
+70
View File
@@ -0,0 +1,70 @@
# Componentes de Software de LibreQoS
## Servicios de Systemd
### lqosd
- Administra el código XDP actual.
- Desarrollado en Rust.
- Ejecuta la interfaz gráfica (GUI) disponible en http://a.b.c.d:9123
### lqos_scheduler
- lqos_scheduler realiza actualizaciones continuas de los reguladores de tráfico (shapers) de LibreQoS, incluyendo la obtención de datos desde cualquier integración CRM habilitada (UISP, Splynx).
- Acciones realizadas:
- Al iniciar: Realiza una configuración completa de las filas.
- Cada X minutos: Actualiza las colas, obteniendo nueva configuración desde la integración CRM, si está habilitada.
- The default minute interval is 30, so the refresh occurs every 30 minutes by default.
- El intervalo de minutos por defecto es de 30, por lo tanto, la actualización se realiza cada 30 minutos.
- El intervalo de minutos puede ajustarse mediante el parámetro `queue_refresh_interval_mins` ubicado en `/etc/lqos.conf`.
### Verificar el estado de los servicios
```
sudo systemctl status lqosd lqos_scheduler
```
Si el estado de alguno de los dos servicios aparece como 'failed', debe examinarse la causa utilizando journalctl, el cual muestra el historial completo del servicio. Por ejemplo, si lqosd ha fallado, ejecute:
```
sudo journalctl -u lqosd -b
```
Presione la tecla End en su teclado para ir al final del registro y ver las actualizaciones más recientes.
Lqosd indicará las razones específicas por las cuales falló, como una interfaz que no está activa, falta de soporte para múltiples filas en la interfaz, entre otros problemas.
### Depuración de lqos_scheduler
En segundo plano, lqos_scheduler ejecuta el script de Python scheduler.py, el cual a su vez ejecuta el script de Python LibreQoS.py
- scheduler.py: realiza actualizaciones continuas de los reguladores de tráfico (shapers) de LibreQoS, incluyendo la obtención de datos desde cualquier integración CRM habilitada (UISP, Splynx).
- LibreQoS.py: se encarga de crear y actualizar las filas y el regulamiento de tráfico de los dispositivos.
Ejecuciones puntuales de estos componentes individuales pueden ser de gran ayuda para depurar y asegurar que todo esté correctamente configurado.
Primero, detenga el servicio lqos_scheduler:
```shell
sudo systemctl stop lqos_scheduler
```
Para realizar una ejecución única de LibreQoS.py, utilice:
```shell
sudo ./LibreQoS.py
```
- Para ejecutar en modo depuración con respuestas mas detalladas, use:
```shell
sudo ./LibreQoS.py --debug
```
Para confirmar que lqos_scheduler (scheduler.py) funciona correctamente, ejecute:
```shell
sudo python3 scheduler.py
```
Una vez que se hayan corregido los errores, reinicie el servicio lqos_scheduler con:
```shell
sudo systemctl start lqos_scheduler
```
+129
View File
@@ -0,0 +1,129 @@
# Configurar LibreQoS
## Archivo de Configuración Principal
### /etc/lqos.conf
La configuración para cada caja reguladora de LibreQoS se almacena en el archivo `/etc/lqos.conf`.
Edite el archivo para que coincida con su configuración usando:
```shell
sudo nano /etc/lqos.conf
```
En la sección ```[bridge]```, cambie `to_internet` y `to_network` para que coincidan con sus interfaces de red.
- `to_internet = "enp1s0f1"`
- `to_network = "enp1s0f2"`
En la sección `[bridge]` del archivo lqos.conf, puede habilitar o deshabilitar el puente XDP con la opción `use_xdp_bridge`. El valor predeterminado es `false` - ya que la configuración por defecto asume un [Puente Linux](prereq-es.md). Si eligió usar el puente XDP durante la configuración de requisitos previos, establezca `use_xdp_bridge = true`.
- Configure downlink_bandwidth_mbps y uplink_bandwidth_mbps para que coincidan con el ancho de banda en Mbps de la conexión WAN/Upstream de su red. Lo mismo puede hacerse para generated_pn_download_mbps y generated_pn_upload_mbps.
- to_internet es la interfaz que apunta hacia su router de borde (edge router) y el internet.
- to_network es la interfaz que apunta hacia su router interno (core router) (o la red interna puenteada, si su red está configurada de esa manera).
Nota: Si observa que el tráfico no se está regulando cuando debería, asegúrese de invertir el orden de las interfaces y reiniciar lqosd y lqos_scheduler con: ```sudo systemctl restart lqosd lqos_scheduler```.
Después de cambiar cualquier parte de `/etc/lqos.conf`, se recomienda reiniciar siempre lqosd usando: `sudo systemctl restart lqosd`. Esto integra los nuevos valores en lqos.conf, haciéndolos accesibles tanto para el código en Rust como en Python.
### Netflow (optional)
Para habilitar Netflow, agregue la siguiente sección `[flows]` al archivo de configuración `/etc/lqos.conf`, configurando el `netflow_ip` adecuado:
```
[flows]
flow_timeout_seconds = 30
netflow_enabled = true
netflow_port = 2055
netflow_ip = "100.100.100.100"
netflow_version = 5
do_not_track_subnets = ["192.168.0.0/16"]
```
### Integraciones con CRM/NMS
Más información sobre [configuración de integraciones aquí.](integrations-es.md).
## Jerarquía de Red
### Network.json
Network.json permite a los operadores de internet (ISP) definir una topología de red jerárquica o plana.
Si planea usar las integraciones ya incluidas en LibreQoS de UISP o Splynx, no necesita todavía crear un archivo network.json.
Si planea usar la integración ya incluida de UISP, el archivo network.json se creará en automático durante la primera ejecución (siempre y cuando network.json no exista previamente).
Si no planea usar una integración, puede definir manualmente el archivo network.json siguiendo el archivo de plantilla - [network.example.json](https://github.com/LibreQoE/LibreQoS/blob/develop/src/network.example.json). A continuación se muestra una ilustración en tabla del network.example.json.
<table><thead><tr><th colspan="5">Entire Network</th></tr></thead><tbody><tr><td colspan="3">Site_1</td><td colspan="2">Site_2</td></tr><tr><td>AP_A</td><td colspan="2">Site_3</td><td>Pop_1</td><td>AP_1</td></tr><tr><td></td><td colspan="2">PoP_5</td><td>AP_7</td><td></td></tr><tr><td></td><td>AP_9</td><td>PoP_6</td><td></td><td></td></tr><tr><td></td><td></td><td>AP_11</td><td></td><td></td></tr></tbody></table>
Para redes sin nodos padre (sin puntos de acceso o sitios estrictamente definidos), edite el network.json para usar una topología de red plana con:
```
echo "{}" > network.json
```
#### Ayudante para convertir CSV a JSON
Puede usar:
```shell
python3 csvToNetworkJSON.py
```
para convertir manualNetwork.csv en un archivo network.json.
manualNetwork.csv puede copiarse desde el archivo de plantilla manualNetwork.template.csv.
Nota: El nombre del nodo padre debe coincidir con el nombre usado para los clientes en ShapedDevices.csv.
## Circuitos
LibreQoS regula dispositivos individuales por sus direcciones IP, las cuales son agrupadas en "circuitos".
Un circuito representa el servicio de internet de un suscriptor de la operadora de internet, el cual puede tener solo una IP asociada (por ejemplo, el router del suscriptor puede tener asignada una sola IPv4 /32) o puede tener asignado varias IPs (quizás su router tenga asignado un /29, o varias /32).
El archivo ShapedDevices.csv correlaciona direcciones IP de dispositivos con circuitos (el servicio único de cada suscriptor de internet).
### ShapedDevices.csv
The ShapedDevices.csv file correlates device IP addresses to Circuits (each internet subscriber's unique service).
A continuación un ejemplo de entrada en ShapedDevices.csv:
| Circuit ID | Circuit Name | Device ID | Device Name | Parent Node | MAC | IPv4 | IPv6 | Download Min Mbps | Upload Min Mbps | Download Max Mbps | Upload Max Mbps | Comment |
|------------|-----------------------------------------------------|-----------|-------------|-------------|-----|-------------------------|----------------------|-------------------|-----------------|-------------------|-----------------|---------|
| 1 | 968 Circle St., Gurnee, IL 60031 | 1 | Device 1 | AP_A | | 100.64.0.1, 100.64.0.14 | fdd7:b724:0:100::/56 | 1 | 1 | 155 | 20 | |
| 2 | 31 Marconi Street, Lake In The Hills, IL 60156 | 2 | Device 2 | AP_A | | 100.64.0.2 | fdd7:b724:0:200::/56 | 1 | 1 | 105 | 18 | |
| 3 | 255 NW. Newport Ave., Jamestown, NY 14701 | 3 | Device 3 | AP_9 | | 100.64.0.3 | fdd7:b724:0:300::/56 | 1 | 1 | 105 | 18 | |
| 4 | 8493 Campfire Street, Peabody, MA 01960 | 4 | Device 4 | AP_9 | | 100.64.0.4 | fdd7:b724:0:400::/56 | 1 | 1 | 105 | 18 | |
| 2794 | 6 Littleton Drive, Ringgold, GA 30736 | 5 | Device 5 | AP_11 | | 100.64.0.5 | fdd7:b724:0:500::/56 | 1 | 1 | 105 | 18 | |
| 2794 | 6 Littleton Drive, Ringgold, GA 30736 | 6 | Device 6 | AP_11 | | 100.64.0.6 | fdd7:b724:0:600::/56 | 1 | 1 | 105 | 18 | |
| 5 | 93 Oklahoma Ave., Parsippany, NJ 07054 | 7 | Device 7 | AP_1 | | 100.64.0.7 | fdd7:b724:0:700::/56 | 1 | 1 | 155 | 20 | |
| 6 | 74 Bishop Ave., Bakersfield, CA 93306 | 8 | Device 8 | AP_1 | | 100.64.0.8 | fdd7:b724:0:800::/56 | 1 | 1 | 105 | 18 | |
| 7 | 9598 Peg Shop Drive, Lutherville Timonium, MD 21093 | 9 | Device 9 | AP_7 | | 100.64.0.9 | fdd7:b724:0:900::/56 | 1 | 1 | 105 | 18 | |
| 8 | 115 Gartner Rd., Gettysburg, PA 17325 | 10 | Device 10 | AP_7 | | 100.64.0.10 | fdd7:b724:0:a00::/56 | 1 | 1 | 105 | 18 | |
| 9 | 525 Birchpond St., Romulus, MI 48174 | 11 | Device 11 | Site_1 | | 100.64.0.11 | fdd7:b724:0:b00::/56 | 1 | 1 | 105 | 18 | |
Si está utilizando una de nuestras integraciones con CRM, este archivo se generará automáticamente. Si no está utilizando una integración, puede editar el archivo manualmente usando la interfaz WebUI o editando directamente el archivo ShapedDevices.csv a través de la CLI.
#### Múltiples IPs por Circuito
Si necesita listar múltiples IPv4 en el campo IPv4, o múltiples IPv6 en el campo IPv6, agregue una coma entre ellas. Si está editando con un editor CSV (LibreOffice Calc, Excel), el editor CSV automáticamente colocará comillas alrededor de los elementos separados por coma. Si usted está editando el archivo manualmente con un editor de texto como notepad o nano, por favor agregue comillas alrededor de las entradas separadas por coma.
```
2794,"6 Littleton Drive, Ringgold, GA 30736",5,Device 5,AP_11,,100.64.0.5,"fdd7:b724:0:500::/56,fdd7:b724:0:600::/56",1,1,105,18,""
```
#### Edición Manual mediante WebUI
Navegue a la interfaz Web de LibreQoS (http://a.b.c.d:9123) y seleccione Configuration > Shaped Devices.
#### Edición Manual mediante CLI
- Modifique el archivo ShapedDevices.csv usando su editor de hojas de cálculo preferido (LibreOffice Calc, Excel, etc.), siguiendo el archivo de plantilla - ShapedDevices.example.csv.
- El Circuit ID es obligatorio. El Circuit ID puede ser un número o texto. Este campo NO debe incluir símbolos de hashtag (#). Cada circuito requiere un Circuit ID único – no pueden reutilizarse. Aquí, "circuito" se refiere esencialmente al servicio de un cliente. Si un cliente tiene múltiples ubicaciones en diferentes partes de su red, use un Circuit ID único para cada una.
- Se requiere al menos una dirección IPv4 o IPv6 para cada entrada.
- El nombre del Punto de Acceso o Sitio debe establecerse en el campo Parent Node. Puede dejarse en blanco para redes planas.
- El archivo ShapedDevices.csv le permite establecer el ancho de banda mínimo (garantizado) y el máximo permitido por suscriptor.
- Los valores Download Min y Upload Min de cada circuito deben ser 1 Mbps o mayores. Generalmente, deberían configurarse en 1 Mbps por defecto.
- Los valores Download Max y Upload Max de cada circuito deben ser 2 Mbps o mayores. Generalmente, corresponden al plan de velocidad contratado por el cliente.
- Recomendación: configure el ancho de banda mínimo en 1/1 y el máximo en 1.15X la velocidad anunciada del plan:
- De esta manera, cuando un AP alcance su límite, los usuarios tendrán la capacidad restante del AP distribuida equitativamente.
- Al establecer el máximo en 1.15X la velocidad contratada, se incrementa la probabilidad de que el suscriptor vea un resultado satisfactorio en un test de velocidad, incluso si hay tráfico ligero en segundo plano en su circuito (como un video HD, actualizaciones de software, etc.).
- Esto permite a los suscriptores usar hasta el limite máximo de su plan cuando el AP tiene capacidad disponible.
Nota sobre SLAs: Para clientes con contratos SLA, donde garantizan un ancho de banda mínimo, puede configurar el plan contratado como el ancho de banda mínimo. De esta manera, cuando un AP se acerque a su límite, los clientes con SLA siempre tendrán esa velocidad disponible. Asegúrese de que la suma de los anchos de banda mínimos de los circuitos conectados a un nodo padre no supere la capacidad total de ese nodo padre. Si esto ocurre, LibreQoS tiene un mecanismo de seguridad que [reduce los mínimos a 1/1](https://github.com/LibreQoE/LibreQoS/pull/643) para todos los circuitos afectados.
Una vez que su configuración esté completa, estará listo para ejecutar la aplicación e iniciar los servicios systemd.
+59
View File
@@ -0,0 +1,59 @@
# Suposiciones de Diseño de Red
## Configuración oficialmente soportada
- LibreQoS se coloca en línea en el borde de su red, normalmente entre el router de borde (edge router) de la red (NAT, firewall) y el router/switch de distribución central (core router/switch).
![Offical Configuration](https://github.com/LuisDanielEA/LibreQoS/blob/develop/docs-es/v2.0/design-images/Normal.png)
### Rutas Primaria y de Respaldo
Recomendamos usar protocolos de enrutamiento dinámico como OSPF para crear una ruta de bajo costo y otra de alto costo entre el router de borde y el router/switch de distribución central. The low cost path should pass "through" the LibreQoS shaper bridge interfaces to allow LibreQoS to observe and shape traffic.
La ruta de bajo costo debe pasar a través de las interfaces del puente regulador de LibreQoS para permitir que LibreQoS observe y regule el tráfico.
Por ejemplo, una ruta OSPF de bajo costo puede establecerse con un valor de 1. El enlace de alto costo (respaldo) pasaría completamente por fuera de LibreQoS, configurándose con un costo mayor (quizás 100 en OSPF) para asegurar que el tráfico solo tome ese camino cuando el puente regulador de LibreQoS no esté funcionando.
### NAT/CG-NAT
Si utiliza NAT/CG-NAT, coloque LibreQoS en línea antes de donde se aplica el NAT, ya que LibreQoS necesita regular las direcciones pre-NAT (100.64.0.0/12), no las IPs públicas post-NAT.
### MPLS/VPLS
LibreQoS puede trabajar con tráfico MPLS, sin embargo, el tráfico debe seguir el patrón estándar:
```
(mpls tags)(optional vlan tags)(ip header)
```
Si utiliza MPLS con un patrón de etiquetas diferente, lo ideal es terminar el tráfico MPLS en el router/switch de distribución central (core router) antes de que llegue a LibreQoS.
## Configuración de laboratorio de pruebas
Cuando pruebe LibreQoS por primera vez, recomendamos desplegar un laboratorio de pruebas a pequeña escala para verlo en acción.
![image](https://github.com/LuisDanielEA/LibreQoS/blob/develop/docs-es/v2.0/design-images/Testbed.png)
### Network Interface Card
```{note}
Debe contar con una de estas opciones:
- Una sola NIC con dos interfaces,
- Dos NICs con una sola interfaz cada una,
- 2x interfaces VLAN (usando una o dos NICs).
```
LibreQoS requiere que las NICs tengan 2 o más filas RX/TX y soporte para XDP.
Aunque muchas tarjetas cumplen teóricamente con estos requisitos, las tarjetas menos comunes tienden a tener errores de controlador no reportados que afectan la funcionalidad de XDP y las hacen inutilizables para nuestros fines.
En este momento recomendamos las NICs Intel x520, Intel x710 y Nvidia (ConnectX-5 o más reciente). No podemos garantizar compatibilidad con otras tarjetas.
## Configuración Alternativa
Esta configuración alternativa utiliza Spanning Tree Protocol (STP) para modificar la ruta de datos en caso de que el dispositivo LibreQoS esté fuera de línea por mantenimiento u otro problema.
```{note}
La mayoría de las consideraciones aplican tanto para la configuración alternativa como para la oficialmente soportada.
```
- LibreQoS se coloca en línea en el borde de su red, normalmente entre el router de borde (edge router) de la red (NAT, firewall) y el router/switch de distribución central (core router/switch).
- Si utiliza NAT/CG-NAT, coloque LibreQoS en línea antes de donde se aplica el NAT, ya que LibreQoS necesita regular las direcciones pre-NAT (100.64.0.0/12), no las IPs públicas post-NAT.
- Para redes que usan MPLS: LibreQoS puede trabajar con tráfico MPLS, pero este debe seguir el patrón estándar (mpls tags)(optional vlan tags)(ip header). Si utiliza un patrón diferente, lo ideal es terminar el tráfico MPLS en el router/switch de distribución central (core router/switch) antes de que llegue a LibreQoS.
- Enlace primario de Spanning Tree (bajo costo) a través del servidor que ejecuta LibreQoS.
- Enlace de respaldo de Spanning Tree (alto costo, por ejemplo 80).
Keep in mind that if you use different bandwidth links, for example, 10 Gbps through LibreQoS, and 1 Gbps between core switch and edge router, you may need to be more intentional with your STP costs.
Tenga en cuenta que si utiliza enlaces de diferente capacidad, por ejemplo, 10 Gbps a través de LibreQoS y 1 Gbps entre el switch central (core switch) y el router de borde (edge router), puede que necesite ser más enfático con los costos de STP.
![image](https://github.com/LuisDanielEA/LibreQoS/blob/develop/docs-es/v2.0/design-images/Alternate.png)
Binary file not shown.

After

Width:  |  Height:  |  Size: 321 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

+95
View File
@@ -0,0 +1,95 @@
# Instalación vía Git (Para desarrolladores – No recomendado)
## Clonar el repositorio
La ubicación recomendada para la instalación es `/opt/libreqos`
Diríjase a dicha ubicación e inicie la clonación del repositorio:
```shell
cd /opt/
sudo git clone https://github.com/LibreQoE/LibreQoS.git libreqos
sudo chown -R $USER /opt/libreqos
cd /opt/libreqos/
git switch develop
git pull
```
Al especificar `libreqos` al final, Git asegurará que el nombre del directorio esté en minúsculas.
## Instalar dependencias con apt y pip
Es necesario instalar ciertos paquetes mediante `apt`:
```shell
sudo apt-get install -y python3-pip clang mold esbuild gcc gcc-multilib llvm libelf-dev git nano graphviz curl screen llvm pkg-config linux-tools-common linux-tools-`uname -r` libbpf-dev libssl-dev
```
Posteriormente, debe instalar algunas dependencias de Python:
```shell
cd /opt/libreqos
PIP_BREAK_SYSTEM_PACKAGES=1 pip install -r requirements.txt
sudo PIP_BREAK_SYSTEM_PACKAGES=1 pip install -r requirements.txt
```
## Instalar el entorno de desarrollo de Rust
Ejecute el siguiente comando:
```shell
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
Una vez finalizada la instalación de Rust, se le indicará que ejecute un comando para añadir las herramientas de construcción de Rust a su variable de entorno PATH. Deberá ejecutar dicho comando o bien cerrar sesión y volver a iniciarla.
Después, ejecute lo siguiente:
```shell
cd /opt/libreqos/src/
./build_rust.sh
```
Este proceso tomará algo de tiempo la primera vez, pero colocará todos los componentes en las ubicaciones correspondientes.
Ahora, para compilar los crates de Rust, ejecute:
```shell
cd rust
cargo build --all
```
## Lqos.conf
Copie el archivo de configuración lqos.conf al directorio `/etc`. Este paso no es necesario si realizó la instalación utilizando el archivo .deb:
```shell
cd /opt/libreqos/src
sudo cp lqos.example /etc/lqos.conf
```
## Configuración
Proceda a configurar los parámetros [siguiendo esta guía](configuration-es.md).
## Configuración de servicios (Daemons)
## Ejecutar los servicios con systemd
Nota: Si utilizó el instalador .deb, puede omitir esta sección. Dicho instalador configura los servicios automáticamente.
Ahora puede configurar los servicios `lqosd` y `lqos_scheduler` para que se ejecuten como servicios gestionados por systemd.
```shell
sudo cp /opt/libreqos/src/bin/lqosd.service.example /etc/systemd/system/lqosd.service
sudo cp /opt/libreqos/src/bin/lqos_scheduler.service.example /etc/systemd/system/lqos_scheduler.service
```
Finalmente, ejecute:
```shell
sudo systemctl daemon-reload
sudo systemctl enable lqosd lqos_scheduler
sudo systemctl start lqosd lqos_scheduler
```
Ahora puede abrir un navegador web en `http://a.b.c.d:9123` (reemplace `a.b.c.d` con la dirección IP de administración de su servidor de shaping) y disfrutar de una vista en tiempo real de su red.
+245
View File
@@ -0,0 +1,245 @@
# Integraciones CRM/NMS
* [Integración con Splynx](#integración-con-splynx)
+ [Acceso API de Splynx](#acceso-api-de-splynx)
+ [Sobrescrituras de Splynx](#sobrescrituras-de-splynx)
* [Integración con UISP](#integración-con-uisp)
+ [Sobrescrituras de UISP](#sobrescrituras-de-uisp)
- [Sobrescrituras de Rutas UISP](#sobrescrituras-de-rutas-uisp)
* [Integración con WISPGate](#integración-con-wispgate)
* [Integración con Powercode](#integración-con-powercode)
* [Integración con Sonar](#integración-con-sonar)
## Integración con Splynx
Primero, configure los parámetros relevantes de Splynx (splynx_api_key, splynx_api_secret, etc.) en `/etc/lqos.conf`.
### Acceso API de Splynx
La integración con Splynx utiliza autenticación Básica. Para usar este tipo de autenticación, asegúrese de habilitar el [Acceso No Seguro](https://splynx.docs.apiary.io/#introduction/authentication) en la configuración de su clave API de Splynx. Además, la clave API de Splynx debe tener los permisos adecuados.
| Categoría | Nombre | Permiso |
|----------------|------------------------------|------------|
| Tariff Plans | Internet | View |
| FUP | Compiler | View |
| FUP | Policies | View |
| FUP | Capped Data | View |
| FUP | CAP Tariff | View |
| FUP | FUP Limits | View |
| Customers | Customer | View |
| Customers | Customers Online | View |
| Customers | Customer Internet services | View |
| Networking | Routers | View |
| Networking | Router contention | View |
| Networking | MikroTik | View |
| Networking | Monitoring | View |
| Networking | Network Sites | View |
| Networking | IPv4 Networks | View |
| Networking | IPv4 Networks IP | View |
| Networking | CPE | View |
| Networking | CPE AP | View |
| Networking | IPv6 Networks | View |
| Networking | IPv6 Networks IP (Addresses) | View |
| Administration | Locations | View |
Para probar la integración con Splynx, use:
```shell
python3 integrationSplynx.py
```
En la primera ejecución exitosa, se crearán los archivos ShapedDevices.csv y network.json.
ShapedDevices.csv será sobrescrito cada vez que se ejecute la integración con Splynx.
Para asegurarse de que network.json siempre se sobrescriba con la versión más reciente obtenida por la integración, edite `/etc/lqos.conf` con el comando `sudo nano /etc/lqos.conf` y configure el valor `always_overwrite_network_json` a `true`.
Luego ejecute `sudo systemctl restart lqosd`.
Tiene la opción de ejecutar integrationSplynx.py automáticamente al iniciar el equipo y cada X minutos (configurado con el parámetro `queue_refresh_interval_mins`), lo cual es altamente recomendado. Esto se habilita estableciendo ```enable_spylnx = true``` en `/etc/lqos.conf`.
Una vez configurado, ejecute `sudo systemctl restart lqos_scheduler`.
### Sobrescrituras de Splynx
También puede modificar el archivo `integrationSplynxBandwidths.csv` para sobrescribir los anchos de banda predeterminados de cada Nodo (Sitio, AP).
Hay una plantilla disponible en la carpeta `/opt/libreqos/src`. Para usarla, copie el archivo `integrationSplynxBandwidths.template.csv` (eliminando la parte `.template` del nombre) y edítelo con la información correspondiente. Por ejemplo, si desea cambiar el bando de ancha de un sitio, ejecutaría:
```
sudo cp /opt/libreqos/src/integrationSplynxBandwidths.template.csv /opt/libreqos/src/integrationSplynxBandwidths.csv
```
Y luego editaría el CSV con LibreOffice o el editor de CSV de su preferencia.
## Integración con UISP
Primero, configure los parámetros relevantes de UISP (token, url, automatic_import_uisp, etc.) en `/etc/lqos.conf`.
```
# Ejecutar integración con UISP automáticamente en el servicio lqos_scheduler
enable_uisp = true
# Token de acceso API de UISP
token = ""
# URL de su UISP (incluir https://, pero omitir lo que sigue después de .com, .net, etc.)
url = "https://uisp.your_domain.com"
# El sitio aquí se refiere al "Root site" desde el cual UISP generará su topología de red.
# El valor predeterminado es un "string" en blanco.
site = "Site_name"
# Tipo de Estrategia. "full" es recomendada. "flat" puede ser utilizada si solo desea regular clientes.
strategy = "full"
# Estrategia de suspensión:
# * "none" - no manejar suspensiones
# * "ignore" - no agregar clientes suspendidos al mapa de red
# * "slow" - limitar clientes suspendidos a 1 Mbps
suspended_strategy = "none"
# Las capacidades de los AP reportadas por UISP para AirMax pueden ser un poco optimistas. Para los AP AirMax, limitamos al 65% de lo que UISP afirma que es la capacidad de un AP, de forma predeterminada. Esto es ajustable.
airmax_capacity = 0.65
# Las capacidades de los AP reportadas por UISP para LTU son más precisas, pero para mayor seguridad las ajustamos al 95% de dichas capacidades. Esto es ajustable.
ltu_capacity = 0.95
# Si desea excluir sitios en UISP para que no aparezcan en su network.json de LibreQoS, simplemente
# inclúyalos aquí. Por ejemplo, exclude_sites = ["Site_1", "Site_2"]
exclude_sites = []
# Si usa DHCPv6 y desea importar los CIDR de IPv6 correspondientes a cada dirección IPv4
# de los clientes, puede hacerlo con esta opción. Si está habilitada, asegúrese de completar
# el archivo mikrotikDHCPRouterList.csv y ejecutar `python3 mikrotikFindIPv6.py` para probar su funcionalidad.
ipv6_with_mikrotik = false
# Si desea que los clientes reciban un poco más o menos de su plan de velocidad asignado, configúrelo aquí.
# Por ejemplo, 1.15 equivale a un 15% por encima de su plan asignado.
bandwidth_overhead_factor = 1.15
# De forma predeterminada, el "mínimo" de los clientes se establece al 98% del máximo (CIR).
commit_bandwidth_multiplier = 0.98
exception_cpes = []
# Si tiene algunos sitios conectados a través de APs PtMP, configure `true`
use_ptmp_as_parent = true
uisp_use_burst = true
```
Para probar la integración con UISP, ejecute:
```shell
cd /opt/libreqos/src
sudo /opt/libreqos/src/bin/uisp_integration
```
En la primera ejecución exitosa, se crearán los archivos network.json y ShapedDevices.csv.
Si ya existe un archivo network.json, no será sobrescrito a menos que configure ```always_overwrite_network_json = true```.
ShapedDevices.csv será sobrescrito cada vez que se ejecute la integración de UISP.
Para asegurarse de que network.json siempre sea sobrescrito con la versión más reciente obtenida por la integración, edite el archivo `/etc/lqos.conf` con el comando `sudo nano /etc/lqos.conf` y configure el valor `always_overwrite_network_json` a `true`.
Luego ejecute: `sudo systemctl restart lqosd`.
Tiene la opción de ejecutar integrationUISP.py automáticamente al iniciar el equipo y cada X minutos (configurado con el parámetro `queue_refresh_interval_mins`), lo cual es altamente recomendado. Esto se habilita estableciendo ```enable_uisp = true``` en `/etc/lqos.conf`. Una vez configurado, ejecute `sudo systemctl restart lqos_scheduler`.
### Sobrescrituras de UISP
También puede modificar los siguientes archivos para reflejar su red con mayor precisión:
- integrationUISPbandwidths.csv
- integrationUISProutes.csv
Cada uno de los archivos mencionados arriba tienen plantillas, las cuales están disponibles en la carpeta `/opt/libreqos/src`. Si no los encuentra, puede obtenerlos [aquí](https://github.com/LibreQoE/LibreQoS/tree/develop/src). Para utilizarlos, copie el archivo (eliminando la parte `.template` del nombre) y edítelo con la información correspondiente.
Por ejemplo, si desea cambiar el bando de ancha de un sitio, ejecutaría:
```
sudo cp /opt/libreqos/src/integrationUISPbandwidths.template.csv /opt/libreqos/src/integrationUISPbandwidths.csv
```
Y luego editaría el CSV con LibreOffice o el editor de CSV de su preferencia.
#### Sobrescrituras de Rutas UISP
El costo predeterminado entre nodos suele ser 10. La integración genera un archivo de gráfico en formato dot: `/opt/libreqos/src/graph.dot` el cuál puede visualizarse con [Graphviz](https://dreampuf.github.io/GraphvizOnline/). Esto genera un mapa con los costos de todos los enlaces.
![image](https://github.com/user-attachments/assets/4edba4b5-c377-4659-8798-dfc40d50c859)
Ejemplo:
Tiene Sitio 1, Sitio 2 y Sitio 3.
Existe un camino de respaldo entre Sitio 1 y Sitio 3, pero no es el preferido.
El camino preferido debería ser: Sitio 1 > Sitio 2 > Sitio 3, pero la integración conecta directamente Sitio 1 > Sitio 3 por predeterminado.
Para solucionar esto, agregue un costo mayor al predeterminado entre Sitio 1 y Sitio 3:
```
Site 1, Site 3, 100
Site 3, Site 1, 100
```
De esta forma, el tráfico seguirá el camino: Sitio 1 > Sitio 2 > Sitio 3.
Para aplicar el cambio, reinicie la integración ejecutando: ```sudo systemctl restart lqos_scheduler```.
## Integración con WISPGate
Primero, configure los parámetros relevantes de WISPGate en `/etc/lqos.conf`.
Debería haber una sección como la siguiente:
```
[wispgate_integration]
enable_wispgate = false
wispgate_api_token = "token"
wispgate_api_url = "https://your_wispgate_url.com"
```
Si la sección no existe, agréguela copiando el bloque anterior.
Después, configure los valores apropiados para wispgate_api_token y wispgate_api_url, luego guarde el archivo.
Para probar la integración con WISPGate, ejecute:
```shell
python3 integrationWISPGate.py
```
En la primera ejecución exitosa, se crearán los archivos network.json y ShapedDevices.csv.
ShapedDevices.csv será sobrescrito cada vez que se ejecute la integración de WISPGate.
Para asegurarse de que network.json siempre sea sobrescrito con la versión más reciente obtenida por la integración, edite el archivo `/etc/lqos.conf` con el comando `sudo nano /etc/lqos.conf` y configure el valor `always_overwrite_network_json` a `true`.
Luego ejecute: `sudo systemctl restart lqosd`.
Tiene la opción de ejecutar integrationWISPGate.py automáticamente al iniciar el equipo y cada X minutos (configurado con el parámetro `queue_refresh_interval_mins`), lo cual es altamente recomendado. Esto se habilita estableciendo ```enable_wispgate = true``` en `/etc/lqos.conf`. Una vez configurado, ejecute `sudo systemctl restart lqos_scheduler`.
## Integración con Powercode
Primero, configure los parámetros relevantes de Powercode (powercode_api_key, powercode_api_url, etc.) en `/etc/lqos.conf`.
Para probar la integración con Powercode, ejecute:
```shell
python3 integrationPowercode.py
```
En la primera ejecución exitosa, se creará el archivo ShapedDevices.csv.
Puede modificar el archivo network.json manualmente para reflejar los límites de ancho de banda de los Sitios/AP.
El archivo ShapedDevices.csv se sobrescribirá cada vez que se ejecute la integración de Powercode.
Tiene la opción de ejecutar integrationPowercode.py automáticamente al iniciar el equipo y cada X minutos (configurado con el parámetro `queue_refresh_interval_mins`), lo cual es altamente recomendado. Esto se habilita estableciendo ```enable_powercode = true``` en `/etc/lqos.conf`.
## Integración con Sonar
Primero, configure los parámetros relevantes de Sonar (sonar_api_key, sonar_api_url, etc.) en `/etc/lqos.conf`.
Para probar la integración con Sonar, ejecute:
```shell
python3 integrationSonar.py
```
En la primera ejecución exitosa, se crearán los archivos network.json y ShapedDevices.csv.
Si ya existe un archivo network.json, no será sobrescrito a menos que configure ```always_overwrite_network_json = true```.
Puede modificar el archivo network.json para reflejar con mayor precisión los límites de ancho de banda.
El archivo ShapedDevices.csv se sobrescribirá cada vez que se ejecute la integración de Sonar.
Tiene la opción de ejecutar integrationSonar.py automáticamente al iniciar el equipo y cada X minutos (configurado con el parámetro `queue_refresh_interval_mins`), lo cual es altamente recomendado. Esto se habilita estableciendo ```enable_sonar = true``` en `/etc/lqos.conf`.
## Herramientas de Terceros
### Jesync UI Tool Dashboard
Jesync UI Tool Dashboard es un panel de control moderno, basado en la web, diseñado para facilitar, agilizar y hacer más amigable la gestión de LibreQoS y de sus archivos de integración.
[https://github.com/jesienazareth/jesync_dashboard](https://github.com/jesienazareth/jesync_dashboard)
### Integración MikroTik PPPoE
Este script automatiza la sincronización de los secretos PPP de MikroTik (por ejemplo, usuarios PPPoE) y los usuarios activos de hotspot con un archivo CSV compatible con LibreQoS (ShapedDevices.csv). Supervisa continuamente el router MikroTik para detectar cambios en los secretos PPP y en los usuarios activos de hotspot, como adiciones, actualizaciones o eliminaciones, y actualiza el archivo CSV en consecuencia.
El script también calcula los límites de velocidad (descarga/carga) según el perfil PPP asignado y garantiza que el archivo CSV siempre esté actualizado.
El script está diseñado para ejecutarse como un servicio en segundo plano utilizando systemd, asegurando que se inicie automáticamente al arrancar el sistema y se reinicie en caso de algún fallo.
[https://github.com/Kintoyyy/MikroTik-LibreQos-Integration](https://github.com/Kintoyyy/MikroTik-LibreQos-Integration)
+38
View File
@@ -0,0 +1,38 @@
# LibreQoS Long-Term Stats (LTS)
## Acerca de LTS
Obtén más información sobre LTS en nuestro sitio web, [aquí](https://libreqos.io/lts/).
## Registro
Encuentre su ID de Nodo LibreQoS iniciando sesión en su equipo donde se encuentre LibreQoS por SSH y ejecutando:
```
sed -n 's/node_id = //p' /etc/lqos.conf | sed -e 's/^"//' -e 's/"$//'`
```
El resultado será un número largo: el identificador único de su caja LibreQoS.
Ahora visite:
```
https://stats.libreqos.io/trial1/YOUR_NODE_ID
```
Donde YOUR_NODE_ID es el ID de Nodo que encontró en el paso anterior.
Si es la primera vez que usa LTS, seleccione "Sign Up - Regular Long-Term Stats".
Complete el registro para la prueba gratuita de 30 días ingresando su información de pago.
El proceso de registro le proporcionará una Clave de Licencia LTS.
Regrese a la caja de LibreQoS y edite el archivo `/etc/lqos.conf` para modificar la sección [long_term_stats] de la siguiente manera:
```
[long_term_stats]
gather_stats = true
collation_period_seconds = 60
license_key = "YOUR_LICENSE_KEY"
uisp_reporting_interval_seconds = 300
```
Donde YOUR_LICENSE_KEY es su clave única de licencia LTS obtenida en el paso anterior. Asegúrese de incluir las comillas.
Ahora guarde el archivo y ejecute: `sudo systemctl restart lqosd lqos_scheduler`. Esto reiniciará el proceso lqosd, permitiéndole comenzar a enviar datos a LTS.
## Acceso a LTS
Para acceder a LTS, visite [https://stats.libreqos.io/](https://stats.libreqos.io/) - e ingrese su clave LTS, usuario (correo electrónico) y contraseña.
+9
View File
@@ -0,0 +1,9 @@
# Requisitos previos para la configuración del servidor
## Desactivar Hyper-Threading
Desactiva el Hyper-Threading en la BIOS/UEFI de tu sistema host. El Hyper-Threading también se conoce como Simultaneous Multi Threading (SMT) en sistemas AMD. Desactivarlo es muy importante para obtener un rendimiento óptimo del filtrado cpumap con XDP y, por ende, mejorar el rendimiento y la latencia.
- Inicia el sistema y presiona la tecla correspondiente para entrar a la configuración de la BIOS.
- En sistemas AMD, deberás navegar por las opciones hasta encontrar la opción llamada "SMT Control". Normalmente se encuentra en: ```Advanced -> AMD CBS -> CPU Common Options -> Thread Enablement -> SMT Control``` Una vez localizada, cambia la opción a "Disabled" o "Off".
- En sistemas Intel, también deberás buscar la opción para desactivar el Hyper-Threading en ajustes. En servidores HP, por ejemplo, está ubicada en: ```System Configuration > BIOS/Platform Configuration (RBSU) > Processor Options > Intel (R) Hyperthreading Options```
- Guarda los cambios y reinicia el sistema.
+34
View File
@@ -0,0 +1,34 @@
# Instalar LibreQoS
## Paso 1 - Validar Suposiciones de Diseño de Red y Selección de Hardware
- [Suposiciones de Diseño de Red](design-es.md)
- [Requisitos del Sistema](requirements-es.md)
## Paso 2 - Completar los Prerrequisitos de Instalación
- [Configuración del Servidor - Prerrequisitos](prereq-es.md)
- [Instalar Ubuntu Server 24.04](ubuntu-server-es.md)
- [Configurar Puente de Regulación](bridge-es.md)
## Paso 3 - Instalar LibreQoS v1.5 / Actualizar a LibreQoS v1.5
### Usar Paquete .DEB (Método Recomendado)
```
cd ~
sudo apt-get update
sudo apt-get upgrade
wget https://libreqos.io/wp-content/uploads/2025/08/libreqos_1.5-RC1-1_amd64.zip
sudo apt-get install unzip
unzip libreqos_1.5-RC1-1_amd64.zip
sudo apt install ./libreqos_1.5-RC1-1_amd64.deb
```
### Instalación con Git (Solo para Desarrolladores - No Recomendado)
[Instalación Compleja](git-install-es.md)
## Paso 4 - Configurar LibreQoS
¡Ahora estás listo para [Configurar](configuration-es.md) LibreQoS!
+123
View File
@@ -0,0 +1,123 @@
# Requisitos del Sistema
LibreQoS puede ejecutarse en un servidor físico dedicado (bare metal) o como una máquina virtual (VM). El sistema operativo soportado es Ubuntu Server 24.04.
## Servidor Físico (Bare Metal)
### CPU
* Se requieren 2 o más núcleos de CPU.
* Eliga una CPU con alto [rendimiento de un solo hilo](https://www.cpubenchmark.net/singleThread.html#server-thread) dentro de su presupuesto. El regulamiento es intensivo en CPU y requiere alto rendimiento en un solo hilo.
El rendimiento de un solo hilo determina la capacidad máxima de un único HTB (núcleo de CPU). Esto, a su vez, afecta la capacidad máxima de cualquier nodo de nivel superior en la jerarquía de red (por ejemplo, sitios principales en su red). También impacta la velocidad máxima de plan que puede ofrecer a sus clientes dentro de márgenes seguros.
| Puntaje Single-Thread | Nodo Superior Máx. | Plan de Cliente Máx |
|:-------------------:|:------------------:|:-----------------:|
| 1000 | 1 Gbps | 100 Mbps |
| 1500 | 2 Gbps | 500 Mbps |
| 2000 | 3 Gbps | 1 Gbps |
| 3000 | 4 Gbps | 2 Gbps |
| 4000 | 5 Gbps | 3 Gbps |
A continuación se muestra una tabla de la capacidad agregada aproximada, suponiendo que una CPU tenga una puntuación de rendimiento de un [solo hilo](https://www.cpubenchmark.net/singleThread.html#server-thread) de 1000, 2000, 3000 o 4000:
| Núcleos CPU | Puntaje de un solo hilo: 1000 | Puntaje de un solo hilo: 2000 | Puntaje de un solo hilo: 3000 | Puntaje de un solo hilo: 4000 |
|:---------:|:-------------------------:|:-------------------------:|:-------------------------:|:-------------------------:|
| 2 | 1 Gbps | 3 Gbps | 5 Gbps | 7 Gbps |
| 4 | 3 Gbps | 5 Gbps | 9 Gbps | 13 Gbps |
| 6 | 4 Gbps | 8 Gbps | 14 Gbps | 20 Gbps |
| 8 | 5 Gbps | 10 Gbps | 18 Gbps | 27 Gbps |
| 16 | 10 Gbps | 21 Gbps | 36 Gbps | 54 Gbps |
| 32 | 21 Gbps | 42 Gbps | 72 Gbps | 108 Gbps |
| 64 | 42 Gbps | 84 Gbps | 144 Gbps | 216 Gbps |
| 128 | 84 Gbps | 168 Gbps | 288 Gbps | |
### Hyper-threading
Se recomienda desactivar Hyper-Threading (Simultaneous Multi-Threading) en la configuración del BIOS/UEFI, ya que puede interferir con el procesamiento de XDP.
### Memory
* RAM Recomendada:
| RAM (usando CAKE) | Máx. Suscriptores |
| ---------------- | --------------- |
| 8 GB | 1,000 |
| 16 GB | 2,500 |
| 32 GB | 5,000 |
| 64 GB | 10,000 |
| 128 GB | 20,000 |
### Espacio en Disco
Se recomienda disponer de 50 GB o más de espacio en disco, tanto para servidores físicos como para implementaciones en máquinas virtuales.
### Recomendaciones de Dispositivos
#### Dispositivo de Espacio Pequeño (1G a 10G)
| Rendimiento | 10 Gbps |
|:-----------------------:|:--------------------------------------------------------------------------------------:|
| Por Nodo / Por Núcleo | 5 Gbps |
| Fabricante | Minisforum |
| Modelo | [MS-01](https://store.minisforum.com/products/minisforum-ms-01?variant=46174128898293) |
| Opción de CPU | i9-12900H |
| Opción de RAM | 1x32GB |
| Opción de NIC | Built-in |
| Rango de Temperatura | 0°C ~ 40°C |
| Rango de Temperatura | (32°F ~ 104°F) |
| ECC | No |
| Energía | 19V DC |
#### Servidores Rackmount (10G to 100G)
| Rendimiento | 10 Gbps | 10 Gbps | 25 Gbps | 50 Gbps | 100 Gbps |
|:-----------------------:|:------------------------------------------------------------------------------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------------------------:|:---------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------:|
| Por Nodo / Por Núcleo | 5 Gbps | 5 Gbps | 3 Gbps | 3 Gbps | 4 Gbps |
| Fabricante | Supermicro | Dell | Supermicro | Supermicro | Supermicro |
| Modelo | [SYS-511R-M](https://store.supermicro.com/us_en/mainstream-1u-sys-511r-m.html) | [PowerEdge R260](https://www.dell.com/en-us/shop/dell-poweredge-servers/new-poweredge-r260-rack-server/spd/poweredge-r260/pe_r260_tm_vi_vp_sb?configurationid=2cd33e43-57a3-4f82-aa72-9d5f45c9e24c) | [AS-1115S-FWTRT](https://store.supermicro.com/us_en/1u-amd-epyc-8004-compact-server-as-1115s-fwtrt.html) | [AS-1015SV-WTNRT](https://store.supermicro.com/us_en/1u-amd-wio-as-1015sv-wtnrt.html) | [AS -2015CS-TNR](https://store.supermicro.com/us_en/clouddc-amd-as-2015cs-tnr.html) |
| Opción de CPU | E-2488 | E-2456 | 8534P | 8534P | 9745 |
| Opción de RAM | 1x32GB | 1x32GB | 4x16GB | 2x64GB | 4x64GB |
| Opción de NIC | 10-Gigabit X710-BM2 (2 x SFP+) | Intel X710-T2L (2 x 10G RJ45) | Mellanox (2 x SFP28) | Mellanox 100-Gigabit (2 x QSFP56) | MCX653106A-HDAT |
| Rango de Temperatura | 0°C ~ 40°C | 5–40°C | 0°C ~ 40°C | 0°C ~ 40°C | 0°C ~ 40°C |
| Rango de Temperatura | (32°F ~ 104°F) | (41–104°F) | (32°F ~ 104°F) | (32°F ~ 104°F) | (32°F ~ 104°F) |
| ECC | Sí | Sí | Sí | Sí | Sí |
| Energía | AC | AC | AC | AC | AC |
Otra solución rentable es adquirir un servidor usado de un proveedor de confianza, como [TheServerStore](https://www.theserverstore.com/).
Estos proveedores suelen ofrecer servidores capaces de manejar un rendimiento de 10 Gbps, por alrededor de 500 USD.
### Requisitos de Interfaces de Red
* Una interfaz de red de administración completamente separada de las interfaces de regulamiento de tráfico. Usualmente esta sería la interfaz Ethernet integrada en la placa base.
* Una Tarjeta de Red Dedicada para Dos Interfaces de Regulamiento
Las Tarjetas de Red oficialmente soportadas para las dos interfaces de regulamiento se enumeran a continuación:
| Controlador NIC | Velocidad de Puerto | Modelos Sugeridos | Problemas Conocidos |
|------------------------|------------------|-----------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|
| Intel X520 | 10 Gbps | | Compatibilidad de módulos* |
| Intel X710 | 10 Gbps | [X710-BM2 10G]( https://www.fs.com/products/75600.html?now_cid=4253) | Compatibilidad de módulos* |
| Intel XXV710 | 10 / 25 Gbps | [XXV710 25G](https://www.fs.com/products/75604.html?attribute=67774&id=1709896) | Compatibilidad de módulos* |
| Intel XL710 | 10 / 40 Gbps | [XL710-BM2 40G](https://www.fs.com/products/75604.html?attribute=67774&id=1709896 ) | Compatibilidad de módulos* |
| Mellanox ConnectX-4 Lx | 10/25/40/50 Gbps | | No se conocen problemas. |
| Mellanox ConnectX-6 | 10/25 Gbps | [MCX631102AN-ADAT](https://www.fs.com/products/212177.html?now_cid=4014) | No se conocen problemas. |
| Mellanox ConnectX-6 | 100 Gbps | [MCX623106AN-CDAT 100G](https://www.fs.com/products/119646.html?now_cid=4014) | No se conocen problemas. |
| Mellanox ConnectX-7 | 200 Gbps | [MCX755106AS-HEAT 200G](https://www.fs.com/products/242589.html?now_cid=4014) | No se conocen problemas. |
(*) Intel suele bloquear por fabricante la compatibilidad de módulos SFP+. Verifique la compatibilidad del módulo antes de comprar. Mellanox no presenta este problema.
**ÚNICAMENTE brindaremos soporte para sistemas que utilicen una NIC de la lista anterior**.
Algunas otras NICs *podrían* funcionar, pero no estarán oficialmente soportadas por LibreQoS.
Si deseas *probar* la compatibilidad de otra tarjeta, ten en cuenta estos requisitos fundamentales de NIC:
* La NIC debe tener múltiples filas de transmisión/recepción (TX/RX), mayores o iguales al número de núcleos de CPU. [Aquí se explica cómo verificarlo desde la terminal](https://serverfault.com/questions/772380/how-to-tell-if-nic-has-multiqueue-enabled).
* La NIC debe tener [soporte de controlador XDP](https://github.com/xdp-project/xdp-project/blob/master/areas/drivers/README.org) para alto rendimiento (10 Gbps o más).
Si descubres que una tarjeta no listada en la tabla anterior es compatible, por favor háznoslo saber enviando un correo a support@libreqos.io.
## Máquina Virtual
LibreQoS puede ejecutarse como una máquina virtual (VM), aunque esto implica una penalización de rendimiento del 30%. Para VMs, se requiere "atravesamiento de NIC" para alcanzar un rendimiento superior a 10 Gbps (XDP vs XDP genérico).
LibreQoS requiere 2 o más filas RX/TX, por lo que al usar una plataforma de virtualización como Proxmox, asegúrese de habilitar [Multiqueue](https://forum.proxmox.com/threads/where-is-multiqueue.146783/) para las interfaces de regulamiento asignadas a la VM. El valor de "Multiqueue" debe ser igual al número de núcleos vCPU asignados a la VM.
| Rendimiento | vCPU* | RAM | Disco |
|:-------:|:-----:|:-----:|:-----:|
| 1 Gbps | 2 | 8 GB | 50 GB |
| 10 Gbps | 8 | 32 GB | 50 GB |
* Se asume un rendimiento de vCPU igual al de un único núcleo del Intel Xeon E-2456 con "hyper-threading" deshabilitado.
+117
View File
@@ -0,0 +1,117 @@
# Solución de Problemas
## Problemas Comunes
### No hay WebUI en x.x.x.x:9123
La interfaz web (WebUI) está controlada por el servicio lqosd. Generalmente, cuando la WebUI no se inicia, se debe a que lqosd está en un estado fallido. Verifica si el servicio lqosd está corriendo con el siguiente comando:
```
sudo systemctl status lqosd
```
Si el estado es 'failed', examina la causa usando journalctl, que muestra el estado completo del servicio:
```
journalctl -u lqosd --since "10 minutes ago"
```
Presiona la tecla End en el teclado para ir al final del registro y ver las últimas actualizaciones.
Lqosd proporcionará razones específicas del fallo, como por ejemplo que una interfaz no está activa, o que le falta soporte para múltiples filas (multi-queue), u otros problemas.
### LibreQoS está en ejecución, pero no se está aplicando el shaping al tráfico
En el archivo /etc/lqos.conf, asegúrese de que los parámetros `to_internet` y `to_network` estén configurados correctamente.
Si no lo están, simplemente intercambie las interfaces y reinicie lqosd y el scheduler.
```
sudo systemctl restart lqosd lqos_scheduler
```
Asegurese de que los servicios estén funcionando correctamente
```
sudo systemctl status lqosd lqos_scheduler
```
El servicio lqos_scheduler depende de que el servicio lqosd esté en buen estado y en ejecución.
### El servicio lqosd no se está ejecutando o falló al iniciar
Verifica el estado del servicio lqosd:
```
sudo systemctl status lqosd
```
Si el estado es 'failed', examine la causa con journalctl, que muestra el estado completo del servicio:
```
journalctl -u lqosd --since "10 minutes ago"
```
Presiona la tecla End en el teclado para ir al final del registro y ver las últimas actualizaciones.
Lqosd le mostrará razones específicas del fallo, como por ejemplo que una interfaz no está activa, que le falta soporte multi-queue, u otros problemas.
### Depuración avanzada de lqosd
Desde la línea de comandos, ejecuta:
```
sudo RUST_LOG=info /opt/libreqos/src/bin/lqosd
```
Esto ejecutará lqosd en modo debug y te proporcionará detalles sobre por qué falló al iniciar.
### RTNETLINK answers: Invalid argument
Este error suele aparecer cuando el qdisc tipo MQ no puede ser añadido correctamente a la interfaz de red (NIC).
Esto sugiere que la tarjeta de red no tiene suficientes filas RX/TX. Asegurese de estar utilizando las [NICs recomendadas](requirements-es.md).
### Error de Python ModuleNotFoundError en Ubuntu 24.04
```
pip uninstall binpacking --break-system-packages --yes
sudo pip uninstall binpacking --break-system-packages --yes
sudo pip install binpacking --break-system-packages
pip uninstall apscheduler --break-system-packages --yes
sudo pip uninstall apscheduler --break-system-packages --yes
sudo pip install apscheduler --break-system-packages
pip uninstall deepdiff --break-system-packages --yes
sudo pip uninstall deepdiff --break-system-packages --yes
sudo pip install deepdiff --break-system-packages
```
### Todas las IPs de clientes aparecen como "Unknown IPs" en lugar de "Shaped Devices" en la interfaz gráfica
```
cd /opt/libreqos/src
sudo systemctl stop lqos_scheduler
sudo python3 LibreQoS.py
```
El texto que se genera en la terminal al ejecutar LibreQoS.py proporciona más detalles sobre errores más específicos relacionados con problemas en los archivos ShapedDevices.csv y network.json.
Una vez que haya identificado el error y corregido ShapedDevices.csv y/o network.json, ejecute:
```sudo systemctl start lqos_scheduler```
### Error de segmentación (segfault) en systemd
Si experimenta un segfault en systemd, este es un problema conocido en systemd [1](https://github.com/systemd/systemd/issues/36031) [2](https://github.com/systemd/systemd/issues/33643).
Como solución temporal, puede compilar systemd desde cero:
### Instalar dependencias de compilación
```
sudo apt update
sudo apt install build-essential git meson libcap-dev libmount-dev libseccomp-dev \
libblkid-dev libacl1-dev libattr1-dev libcryptsetup-dev libaudit-dev \
libpam0g-dev libselinux1-dev libzstd-dev libcurl4-openssl-dev
```
#### Clonar el repositorio de systemd desde github
```
git clone https://github.com/systemd/systemd.git
cd systemd
git checkout v257.5
meson setup build
meson compile -C build
sudo meson install -C build
```
Después, reinicia el sistema y confirma la versión de systemd con `systemctl --version`
```
libreqos@libreqos:~$ systemctl --version
systemd 257 (257.5)
```
+40
View File
@@ -0,0 +1,40 @@
# Instalar Servidor de Ubuntu
Puedes descargar Ubuntu Server 24.04 LTS desde <a href="https://ubuntu.com/download/server">aquí</a>.
Por el momento, solo se admite Ubuntu Server 24.04. Asegúrate de no utilizar otras versiones.
1. Arranca Ubuntu Server desde una USB.
2. Sigue los pasos a continuación para instalar Ubuntu Server.
<img width="1287" alt="01 select-language" src="https://github.com/user-attachments/assets/af33c525-129c-4ecc-9e35-0ca4fd69b192" />
<img width="1295" alt="02 keyboard" src="https://github.com/user-attachments/assets/08d3cd73-5144-414a-817b-d2a93ce40e01" />
<img width="1292" alt="03 version" src="https://github.com/user-attachments/assets/4917e389-5aa7-4636-a0f3-ba826b107d0b" />
Para las interfaces de red, desactiva completamente las interfaces utilizadas. Después, asigna una dirección IP estática a la interfaz de administración (100.99.0.4 es solo un ejemplo).
<img width="1293" alt="04 net int" src="https://github.com/user-attachments/assets/6d9b10a6-ea4e-45cf-a993-b21342c86772" />
<img width="1351" alt="05 no proxy" src="https://github.com/user-attachments/assets/f86ace56-d1b2-4cd0-88b4-5af1267153ea" />
<img width="1290" alt="06 download" src="https://github.com/user-attachments/assets/1a6b441d-548f-490c-89ae-3f1e9b8188ac" />
<img width="1286" alt="07 continue without updating" src="https://github.com/user-attachments/assets/29d385ad-928d-44f2-9fbe-4a14c72e4110" />
<img width="543" alt="08 use entire disk" src="https://github.com/user-attachments/assets/93c2cd00-229e-4206-9e51-a5c66b77ad5f" />
<img width="1288" alt="09 summary" src="https://github.com/user-attachments/assets/115297d5-5758-47b7-8ae4-6875027c68fd" />
<img width="1301" alt="10 user info" src="https://github.com/user-attachments/assets/03b521f2-cd8c-4178-bc0e-c6259a114059" />
<img width="1293" alt="11 skip ubuntu pro" src="https://github.com/user-attachments/assets/6e9d6bd1-45e2-4933-bf38-bfb454d019ac" />
Asegúrese de que el servidor SSH esté habilitado para que pueda iniciar sesión en el servidor más fácilmente después.
<img width="1291" alt="12 openssh" src="https://github.com/user-attachments/assets/983fa8c5-037c-435a-9e39-01d177615001" />
<img width="1291" alt="13 skip these" src="https://github.com/user-attachments/assets/e263bb76-678f-4bcf-b382-942fc48279ab" />
<img width="1290" alt="14 reboot" src="https://github.com/user-attachments/assets/5dd24b80-3586-43b9-ac27-75fd2095728e" />
Puedes utilizar scp o sftp para acceder a los archivos de tu servidor LibreQoS y facilitar la modifición de archivos. Aquí se explica cómo acceder mediante scp o sftp usando una máquina [Ubuntu](https://www.addictivetips.com/ubuntu-linux-tips/sftp-server-ubuntu/) o [Windows](https://winscp.net/eng/index.php).