// DevOps
BGP en Keenetic: cómo configurar el enrutamiento dinámico mediante Entware y FRR
Publicado el 30.05.2026
BGP normalmente se asocia con el equipo de los operadores y servidores Linux, pero en redes distribuidas pequeñas es útil también en el router de oficina: las sedes vecinas se enteran automáticamente de nuevas subredes y, al caer un túnel, las rutas se reconfiguran sin ediciones manuales.
En la lista oficial de componentes de KeeneticOS 5.x no hay ni BGP ni OSPF. El protocolo en Keenetic se ejecuta como un demonio externo en el entorno OPKG/Entware. En el repositorio de Entware hay paquetes listos para BIRD y Quagga; FRR no se distribuye como paquete listo y hay que compilarlo uno mismo. En el artículo — las tres variantes y una alternativa con una máquina separada junto al router.
BGP funciona sobre TCP, puerto 179. No se debe abrir en la interfaz externa sin filtrado: es un camino directo a ataques contra la parte de gestión del router. Soporte de Keenetic permite la instalación de paquetes de Entware, pero no ofrece asistencia para configurarlos — todo se hace por cuenta propia.
Esquema
┌──────────────────────┐
│ Upstream / VPS / DC │
│ AS 65001 │
│ 10.255.0.1 │
└──────────┬───────────┘
│
WireGuard / GRE / IPIP
│
┌──────────▼───────────┐
│ Keenetic │
│ KeeneticOS + Entware │
│ BIRD / Quagga / FRR │
│ AS 65010 │
│ 10.255.0.2 │
└──────────┬───────────┘
│
LAN 192.168.10.0/24Keenetic aquí es un pequeño router perimetral de la sede. Recibe del nodo central la ruta por defecto o un conjunto limitado de prefijos, anuncia su red local y reconfigura rutas entre túneles de respaldo. No va a poder soportar la tabla completa de Internet (más de un millón de prefijos): es un dispositivo embebido con CPU y memoria limitadas.
Cuándo está justificado
- Conexión de sedes mediante VPN. Varias oficinas conectadas por túneles WireGuard o GRE; BGP informa a los vecinos sobre nuevas y modificadas subredes.
- Túneles de respaldo. Canal principal y de reserva: BGP cambia rutas cuando cae la sesión, sin scripts caseros.
- Banco de pruebas. Aprendizaje de BGP junto a VyOS, MikroTik o Cisco en un router económico.
Mala idea: aceptar la tabla completa del proveedor, construir en Keenetic el núcleo de la red, usarlo como route reflector para muchos clientes o publicar BGP al exterior sin filtros.
Opciones
| Opción | Qué instalar | Ventajas | Inconvenientes |
|---|---|---|---|
| A. Máquina Linux separada | FRR desde paquetes de la distro | fiable, actualizaciones estándar, el router no se carga | hace falta otra máquina |
| B. BIRD en Keenetic | bird2 desde Entware | paquete listo, demonio ligero | sintaxis de configuración propia |
| C. Quagga en Keenetic | quagga-* desde Entware | paquetes listos, sintaxis vtysh parecida a Cisco | proyecto sin desarrollo desde 2018 |
| D. FRR en Keenetic | compilación propia | stack moderno, vtysh | compilar y adaptar la receta, todo el mantenimiento corre por su cuenta |
Recomendamos la Opción A para redes de producción: FRR en un mini-PC, en un contenedor LXC o en una máquina virtual junto al router, y en el Keenetic solo una ruta estática hacia ese equipo.
Keenetic ── LAN ── Linux con FRR ── VPN/BGP ── UpstreamA continuación — las opciones B, C y D en el propio router.
Preparación de Keenetic
Paso 1. Instalar Entware
En la interfaz web: Gestión → Ajustes generales → Cambiar conjunto de componentes, componente «Soporte de paquetes abiertos (OPKG)». El almacenamiento puede ser un dispositivo USB con EXT4 o, en modelos con KeeneticOS 3.7 y posteriores, la memoria interna. El archivo del instalador se elige según la arquitectura del procesador del router (mipsel, mips o aarch64); para la memoria interna la instalación se realiza con un comando del tipo:
(config)> opkg disk storage:/ https://bin.entware.net/aarch64-k3.10/installer/aarch64-installer.tar.gzPaso 2. Entrar en el entorno Entware y actualizar paquetes
(config)> exec shopkg update
opkg upgradeCompruebe qué está disponible para su arquitectura:
opkg list | grep -E '^(bird|quagga|frr)'En septiembre de 2026 en la salida estarán bird2, bird3 y paquetes quagga-*, y frr no estará — no hay FRR en el repositorio binario de Entware.
Datos de ejemplo para todos los ejemplos:
- AS de Keenetic —
65010, AS del nodo central —65001; - dirección del túnel de Keenetic —
10.255.0.2, del nodo central —10.255.0.1; - red local de Keenetic —
192.168.10.0/24.
Opción B. BIRD
opkg install bird2 bird2cEl paquete instala el demonio /opt/sbin/bird, la consola /opt/sbin/birdc, la configuración /opt/etc/bird.conf (ejemplo del paquete BIRD) y el script de arranque /opt/etc/init.d/S70bird.
Reemplace el contenido de /opt/etc/bird.conf:
router id 10.255.0.2;
protocol device { }
# Redes de la interfaz LAN — para tener algo que anunciar.
# Compruebe el nombre de la interfaz con el comando ip -4 addr.
protocol direct {
ipv4;
interface "br0";
}
# En el kernel del router — solo rutas recibidas por BGP.
protocol kernel {
ipv4 {
export where source = RTS_BGP;
};
}
filter lan_out {
if net ~ [ 192.168.10.0/24 ] then accept;
reject;
}
filter from_upstream {
if net ~ [ 0.0.0.0/0, 10.0.0.0/8{8,24}, 172.16.0.0/12{12,24} ] then accept;
reject;
}
protocol bgp upstream {
local 10.255.0.2 as 65010;
neighbor 10.255.0.1 as 65001;
ipv4 {
import filter from_upstream;
export filter lan_out;
};
}Arranque y verificación:
/opt/etc/init.d/S70bird start
birdc show protocols
birdc show route protocol upstreamLa sesión debe estar en estado Established. El script S70bird se inicia automáticamente junto con otros servicios de Entware.
Opción C. Quagga
opkg install quagga-zebra quagga-bgpd quagga-vtyshLa configuración está en /opt/etc/quagga/, el script de arranque es /opt/etc/init.d/S50quagga. El script inicia los demonios para los que exista el archivo <daemon>.conf, por eso se necesitan zebra.conf y bgpd.conf. Por defecto los demonios se ejecutan como el usuario network: si no existe en el sistema Entware, el arranque fallará — cree el usuario o modifique el script.
/opt/etc/quagga/zebra.conf:
hostname keenetic-zebra
log file /opt/var/log/zebra.log/opt/etc/quagga/bgpd.conf:
hostname keenetic-bgpd
log file /opt/var/log/bgpd.log
!
ip prefix-list PL-LAN seq 10 permit 192.168.10.0/24
ip prefix-list PL-IN seq 10 permit 0.0.0.0/0
ip prefix-list PL-IN seq 20 permit 10.0.0.0/8 le 24
!
router bgp 65010
bgp router-id 10.255.0.2
network 192.168.10.0/24
neighbor 10.255.0.1 remote-as 65001
neighbor 10.255.0.1 prefix-list PL-IN in
neighbor 10.255.0.1 prefix-list PL-LAN out/opt/etc/init.d/S50quagga start
vtysh -c 'show ip bgp summary'Quagga es la precursora de FRR; los últimos cambios en su repositorio datan de febrero de 2018. Para laboratorios y esquemas simples es suficiente, pero ya no recibe correcciones de seguridad.
Opción D. Compilación propia de FRR
Por qué no hay paquete listo
La receta de compilación de FRR 10.4.1 en las fuentes de Entware existe (repositorio entware-packages, directorio net/frr), pero se trasladó desde OpenWrt sin adaptar: la configuración se instala en /etc/frr, los binarios en /usr/sbin y /usr/bin, y el script de arranque está pensado para la init de OpenWrt. En Keenetic el software externo vive en /opt, así que la receta debe mejorarse antes de compilar. En OpenWrt la versión actual del paquete ya es 10.6.1.
Compilación
La compilación se realiza en una máquina Linux con las dependencias de build de OpenWrt y al menos 7 GB libres (según la wiki de Entware):
git clone https://github.com/Entware/Entware.git && cd Entware
make package/symlinks
cp -iv configs/mipsel-3.4.config .config # или aarch64-3.10, mips-3.4 — según la arquitectura del router
make -j$(nproc) tools/install
make -j$(nproc) toolchain/install
make -j$(nproc) target/compileAntes de compilar el paquete modifique la receta feeds/packages/net/frr/Makefile (la ruta dentro del árbol de compilación puede diferir — busque el directorio net/frr):
- en los parámetros
--sysconfdiry--localstatedirreemplace/etc/frry/var/run/frrpor/opt/etc/frry/opt/var/run/frr; - en las secciones de instalación reemplace
/usr/sbin,/usr/bin,/usr/liby/etc/frrpor los directorios correspondientes bajo/opt; - no use el script de arranque de OpenWrt — más abajo se muestra uno propio.
Después elija en make menuconfig los paquetes frr, frr-zebra, frr-bgpd, frr-vtysh, frr-watchfrr y compile:
make package/frr/compileEn la receta del subpaquete frr-bgpd está indicada la opción del kernel CONFIG_TCP_MD5SIG (necesaria para contraseñas BGP). Si no se selecciona en menuconfig es por esa dependencia. Si los MD5 funcionan en el router lo decide el propio kernel de Keenetic, no la compilación.
Los .ipk resultantes aparecerán en el directorio bin/ del árbol de compilación. Junto con FRR se compilará la biblioteca libyang — en el repositorio binario de Entware no está, su paquete también deberá copiarse al router. Las demás dependencias (libjson-c, libprotobuf-c, libreadline, libcap y otras) se instalan desde el repositorio de Entware.
Instalación en el router
opkg install ./libyang_*.ipk ./frr_*.ipk ./frr-zebra_*.ipk ./frr-bgpd_*.ipk ./frr-vtysh_*.ipkFRR se compila con el usuario y grupo network (--enable-user=network): si no existen en el sistema Entware, los demonios no arrancarán — cree los usuarios o compile con root.
Configuración de FRR
/opt/etc/frr/frr.conf:
frr defaults traditional
hostname keenetic-bgp
log file /opt/var/log/frr/frr.log informational
service integrated-vtysh-config
!
ip prefix-list PL-LAN seq 10 permit 192.168.10.0/24
ip prefix-list PL-LAN seq 999 deny 0.0.0.0/0 le 32
!
ip prefix-list PL-IN seq 10 permit 0.0.0.0/0
ip prefix-list PL-IN seq 20 permit 10.0.0.0/8 le 24
ip prefix-list PL-IN seq 30 permit 172.16.0.0/12 le 24
ip prefix-list PL-IN seq 999 deny 0.0.0.0/0 le 32
!
route-map RM-IN permit 10
match ip address prefix-list PL-IN
!
route-map RM-OUT permit 10
match ip address prefix-list PL-LAN
!
router bgp 65010
bgp router-id 10.255.0.2
neighbor 10.255.0.1 remote-as 65001
neighbor 10.255.0.1 description upstream-vps
neighbor 10.255.0.1 timers 10 30
!
address-family ipv4 unicast
network 192.168.10.0/24
neighbor 10.255.0.1 route-map RM-IN in
neighbor 10.255.0.1 route-map RM-OUT out
exit-address-family
!
line vtyEn el modo frr defaults traditional FRR no exige política para un vecino eBGP, pero aun así defina filtros explícitos: protegen la red de errores en la otra parte. Es mejor indicar manualmente bgp router-id — no conviene fiarse de la selección automática basada en las direcciones de las interfaces del router.
BGP anuncia la red indicada en network solo si dicho prefijo existe en la tabla de enrutamiento del kernel:
ip route show 192.168.10.0/24Autostart
/opt/etc/init.d/S80frr:
#!/bin/sh
PATH=/opt/sbin:/opt/bin:/sbin:/bin:/usr/sbin:/usr/bin
RUN_DIR=/opt/var/run/frr
start() {
mkdir -p "$RUN_DIR" /opt/var/log/frr
for d in mgmtd zebra bgpd; do
pidof "$d" >/dev/null || "$d" -d -A 127.0.0.1
done
sleep 2
vtysh -b # cargar /opt/etc/frr/frr.conf en todos los demonios
}
stop() {
for d in bgpd zebra mgmtd; do
pid=$(pidof "$d") && kill "$pid"
done
}
case "$1" in
start) start ;;
stop) stop ;;
restart) stop; sleep 2; start ;;
*) echo "Usage: $0 {start|stop|restart}"; exit 1 ;;
esacchmod +x /opt/etc/init.d/S80frr
/opt/etc/init.d/S80frr startmgmtd en FRR 10 es el servicio de gestión de configuración; se inicia junto con zebra.
Configuración de la contraparte (Linux con FRR)
frr defaults traditional
hostname upstream-vps
log syslog informational
service integrated-vtysh-config
!
ip prefix-list FROM-KEENETIC seq 10 permit 192.168.10.0/24
ip prefix-list FROM-KEENETIC seq 999 deny 0.0.0.0/0 le 32
!
ip prefix-list TO-KEENETIC seq 10 permit 0.0.0.0/0
ip prefix-list TO-KEENETIC seq 999 deny 0.0.0.0/0 le 32
!
router bgp 65001
bgp router-id 10.255.0.1
neighbor 10.255.0.2 remote-as 65010
neighbor 10.255.0.2 description keenetic-router
!
address-family ipv4 unicast
neighbor 10.255.0.2 prefix-list FROM-KEENETIC in
neighbor 10.255.0.2 prefix-list TO-KEENETIC out
neighbor 10.255.0.2 default-originate
exit-address-familydefault-originate le ofrece al vecino la ruta por defecto, incluso si no está en la tabla BGP del propio servidor. Active el reenvío de paquetes:
sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.d/99-forwarding.confVerificación
| Qué comprobar | BIRD | Quagga / FRR |
|---|---|---|
| Estado de la sesión | birdc show protocols | vtysh -c 'show bgp summary' |
| Rutas recibidas | birdc show route protocol upstream | vtysh -c 'show ip bgp' |
| Rutas en el kernel | ip route | ip route show proto bgp (FRR) |
El estado requerido de la sesión es Established.
Errores habituales
opkg install frr— «Unknown package». FRR listo no existe en Entware: use BIRD o Quagga, o compile FRR usted mismo.- La sesión queda en
ActiveoConnect. Compruebe la accesibilidad del vecino por TCP 179 (nc -vz 10.255.0.1 179) y el cortafuegos de KeeneticOS en la interfaz del túnel. - Sesión
Established, pero no hay rutas. Error en filtros o prefix-list en una de las partes. - Tras reiniciar no funciona nada. Los demonios se inician sólo después de montar el almacenamiento de Entware; verifique que el dispositivo está montado y que los scripts en
/opt/etc/init.dse han ejecutado. - El demonio no arranca por el usuario. Quagga y FRR por defecto funcionan como
network— ese usuario debe existir.
Limitaciones
- Rutas fuera del control de KeeneticOS. El demonio externo escribe las rutas directamente en la tabla del kernel de Linux. KeeneticOS gestiona sus propias tablas, políticas de conexión y Multi-WAN y esas rutas no se muestran en la interfaz web. La documentación de Keenetic no describe esta combinación, por lo que tras cambios en la configuración del router verifique que las rutas siguen en su sitio y que el tráfico sale por la interfaz correcta.
- Dependencia del almacenamiento. Si la unidad flash con Entware falla o se desmonta, el demonio de enrutamiento deja de funcionar junto con ella.
- Recursos. Cambios frecuentes de rutas por parte del vecino (flapping) cargan el procesador limitado del router y pueden afectar a sus otras funciones.
Conclusión
BGP en Keenetic a través de Entware es una herramienta válida para redes distribuidas pequeñas y laboratorios. Lo más fácil para empezar es BIRD: el paquete está listo y es ligero. Quagga sirve a quien está acostumbrado a la sintaxis de Cisco, pero el proyecto está abandonado. FRR en el propio router es posible sólo con compilación propia y queda como opción para entusiastas. Para redes de producción es más fiable sacar FRR a una máquina Linux separada junto al router y dejar en Keenetic solo la conexión a Internet.
// Contact
¿Necesitas ayuda?
Escríbeme y te ayudaré a resolver el problema
Respondo en un día laborable (03:00-13:00 GMT)
Или оставьте заявку здесь:
// Related