mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-06-01 13:04:42 +00:00
complete i18n migration to /[locale]/ with EN+ES content
Full rewrite of the docs site under app/[locale]/ with next-intl in localePrefix:"always" mode. Every page now exists at both /en/<path> and /es/<path>; the root / shows a meta-refresh + JS redirect to /<defaultLocale>/ so GitHub Pages serves something on the apex URL. Highlights: - 107 doc pages migrated to file-per-page JSON namespaces under messages/en/ and messages/es/. Spanish content is fully translated (no copy-of-English placeholders). - New documentation for the Active Suppressions section in the Settings tab and the per-event Dismiss dropdown in the Health Monitor modal. - New screenshots: dismiss-duration-dropdown.png and an updated health-suppression-settings.png. - Pagefind integrated for client-side search; index is built on every CI deploy (not committed). - RSS feeds: per-locale at /<locale>/rss.xml plus root /rss.xml for backward compat. - Removed the dead app/[locale]/guides/[slug]/ route — every guide now has its own static page and no markdown source remains. - Fixed orphan link /guides/nvidia -> /guides/nvidia-manual in docs/hardware/nvidia-host. - Removed obsolete components (footer2, calendar, drawer). Verified locally with `npm ci && npm run build`: 2804 files in out/, 231 pages indexed by pagefind, root redirect intact, both locale roots and the new Active Suppressions docs render OK.
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Backup y reinicio de interfaces | ProxMenux Documentation",
|
||||
"description": "Snapshot manual, navegación y restauración de backups de /etc/network/interfaces almacenados en /var/backups/proxmenux/. Incluye un reinicio del servicio de red con confirmación y una vista rápida de la configuración en vivo.",
|
||||
"ogTitle": "Backup y reinicio de interfaces | ProxMenux Documentation",
|
||||
"ogDescription": "Snapshot y restauración de la configuración de red de Proxmox; reinicia el servicio de red con confirmación."
|
||||
},
|
||||
"header": {
|
||||
"title": "Backup y reinicio de interfaces",
|
||||
"description": "Cuatro utilidades que giran en torno a /etc/network/interfaces: hacer un snapshot manual, ver la config en vivo, restaurar un backup previo con previsualización opcional y reiniciar el servicio de red con consentimiento explícito. Mismo directorio de backups que usan los flujos de reparación guiada.",
|
||||
"section": "Red"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Qué hace",
|
||||
"body": "Gestiona el mismo directorio de backups que usan los flujos de reparación guiada (<code>/var/backups/proxmenux/</code>). Te permite hacer un snapshot extra antes de cualquier cambio manual, navegar todos los backups existentes y hacer rollback a cualquiera de ellos — siempre con un nuevo backup previo a la restauración tomado automáticamente como segunda red de seguridad."
|
||||
},
|
||||
"shared": {
|
||||
"heading": "El directorio de backups compartido",
|
||||
"intro": "Cada backup tomado en cualquier sitio del menú Red aterriza en el mismo lugar:",
|
||||
"outro": "Los nombres llevan timestamp, se ordenan por fecha y nunca se sobrescriben. El directorio se crea la primera vez que se usa."
|
||||
},
|
||||
"show": {
|
||||
"heading": "Mostrar el fichero de config de red",
|
||||
"body": "Imprime <code>/etc/network/interfaces</code> tal cual en el terminal. Solo lectura. Útil como comprobación antes de hacer un backup o después de una restauración — no hay una herramienta separada de \"diff con el backup anterior\", así que mirar el fichero en vivo es la forma más fácil de confirmar lo que tienes."
|
||||
},
|
||||
"create": {
|
||||
"heading": "Crear backup de red",
|
||||
"body": "Copia el <code>/etc/network/interfaces</code> actual al directorio de backups con un timestamp nuevo. Ya está — sin análisis, sin prompts, solo un snapshot.",
|
||||
"whenTitle": "Cuándo hacer un backup manual",
|
||||
"whenBody": "Antes de editar <code>/etc/network/interfaces</code> a mano, antes de instalar un paquete que pueda tocar la stack de red (p. ej. NetworkManager, Open vSwitch) o antes de cualquier cambio de hardware. Las reparaciones guiadas ya hacen snapshot automáticamente — esta opción es para los momentos <em>manuales</em>."
|
||||
},
|
||||
"restore": {
|
||||
"heading": "Restaurar backup de red",
|
||||
"intro": "Lista todos los backups en <code>/var/backups/proxmenux/</code> ordenados de más nuevo a más antiguo y guía una restauración protegida:",
|
||||
"steps": [
|
||||
{
|
||||
"title": "1. Elige un backup",
|
||||
"body": "Un menú lista cada backup por su timestamp. Si no hay backups, el flujo sale con un mensaje claro.",
|
||||
"tone": "blue"
|
||||
},
|
||||
{
|
||||
"title": "2. Previsualización opcional",
|
||||
"body": "Ofrece abrir el backup seleccionado en una vista con scroll antes de confirmar. Sí por defecto — no te lo saltes en un host remoto.",
|
||||
"tone": "blue"
|
||||
},
|
||||
{
|
||||
"title": "3. Backup previo a la restauración",
|
||||
"body": "Antes de sobrescribir <code>/etc/network/interfaces</code>, hace <strong>otro</strong> backup del estado actual. Restaurar un backup es en sí una acción destructiva, así que el nuevo snapshot previo te permite volver atrás si el backup elegido resulta ser el equivocado.",
|
||||
"tone": "amber"
|
||||
},
|
||||
{
|
||||
"title": "4. Aplica la restauración",
|
||||
"body": "Copia el backup elegido sobre <code>/etc/network/interfaces</code>. El cambio de fichero está en disco; el estado en vivo del kernel sigue reflejando la config anterior.",
|
||||
"tone": "amber"
|
||||
},
|
||||
{
|
||||
"title": "5. Reinicio opcional",
|
||||
"body": "Pregunta si ejecutar <code>systemctl restart networking</code> ahora. Rechaza para diferir el cambio al siguiente reinicio.",
|
||||
"tone": "emerald"
|
||||
}
|
||||
],
|
||||
"autoBackupTitle": "Una restauración hace su propio backup automáticamente",
|
||||
"autoBackupBody": "Seleccionar <em>Restaurar backup de red</em> siempre crea un snapshot fresco de la config <em>actual</em> antes de sobrescribirla. Si restauras al backup equivocado, el fichero más reciente en <code>/var/backups/proxmenux/</code> es el estado del que venías."
|
||||
},
|
||||
"restart": {
|
||||
"heading": "Reiniciar el servicio de red",
|
||||
"body": "Ejecuta <code>systemctl restart networking</code> tras una confirmación sí/no. Reporta el resultado con <code>msg_ok</code> / <code>msg_error</code>. La mayoría de flujos de este menú ofrecen su propio prompt de reinicio al final; esta opción es para reiniciar tras una edición manual o tras haber rechazado antes el reinicio dentro del flujo.",
|
||||
"warnTitle": "Desconexión breve garantizada; desconexión permanente posible",
|
||||
"warnBody": "Reiniciar <code>networking</code> baja y vuelve a aplicar cada interfaz declarada en <code>/etc/network/interfaces</code>. Las sesiones SSH alojadas en esas interfaces se caen. Si la nueva config es inválida, la red no vuelve. Ejecuta esto solo cuando:",
|
||||
"warnItems": [
|
||||
"Tienes acceso a consola / IPMI / iKVM listo, <em>o</em>",
|
||||
"Estás físicamente al lado de la máquina, <em>o</em>",
|
||||
"Acabas de hacer rollback con éxito a una config buena conocida y quieres aplicarla."
|
||||
]
|
||||
},
|
||||
"manualRollback": {
|
||||
"heading": "Rollback manual desde una consola",
|
||||
"intro": "Si no puedes llegar al menú (sin SSH, dialog que se cae, …) pero sí a una consola, el rollback son dos comandos:",
|
||||
"outro": "Es la <em>misma</em> operación que hace el menú, solo que tecleada a mano. Si <code>networking</code> sigue sin arrancar, mira <code>journalctl -u networking -b</code> para ver el error de sintaxis / driver subyacente."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Solución de problemas",
|
||||
"noneTitle": "\"No backups found\" al restaurar",
|
||||
"noneBody": "El directorio <code>/var/backups/proxmenux/</code> no existe o no contiene ficheros <code>interfaces_backup_*</code>. Ejecuta <em>Crear backup de red</em> al menos una vez, o ejecuta cualquier reparación guiada (que crea uno automáticamente). Confirma con <code>ls /var/backups/proxmenux/</code>.",
|
||||
"unreachTitle": "El reinicio de networking funciona pero el host sigue inalcanzable",
|
||||
"unreachBody": "O la nueva config está mal, o has reiniciado a una configuración que no enlaza tu IP de gestión. Haz rollback desde la consola (ver arriba). Tras el rollback, usa el <bridgeLink>análisis de bridges</bridgeLink> y el <configLink>análisis de configuración</configLink> para entender qué estaba mal antes de volver a aplicar.",
|
||||
"emptyTitle": "La previsualización de restauración muestra un fichero vacío",
|
||||
"emptyBody": "El fichero de backup está vacío (0 bytes). Esto pasa si una copia falló silenciosamente en una ejecución anterior. Elige un backup más antiguo, o vuelve a ejecutar <em>Crear backup de red</em> ahora mismo si la config en vivo está sana."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Análisis de bridges y reparación guiada",
|
||||
"href": "/docs/network/bridge-analysis",
|
||||
"tail": " — la razón más habitual por la que un backup acaba aquí."
|
||||
},
|
||||
{
|
||||
"label": "Análisis de config y limpieza guiada",
|
||||
"href": "/docs/network/config-analysis",
|
||||
"tailRich": " — también escribe en <code>/var/backups/proxmenux/</code> automáticamente."
|
||||
},
|
||||
{
|
||||
"label": "Diagnóstico",
|
||||
"href": "/docs/network/diagnostics",
|
||||
"tail": " — verifica el estado en vivo tras una restauración."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,132 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Análisis de bridges y reparación guiada | ProxMenux Documentation",
|
||||
"description": "Detecta bridges vmbrX con puertos físicos ausentes o inválidos (típico tras una re-enumeración PCI), los reporta con comandos de shell propuestos y ofrece una reparación guiada de 5 pasos con backup obligatorio.",
|
||||
"ogTitle": "Análisis de bridges y reparación guiada | ProxMenux Documentation",
|
||||
"ogDescription": "Auditar y reparar los puertos de bridge de Proxmox tras cambios de hardware, con flujo guiado y rollback seguro."
|
||||
},
|
||||
"header": {
|
||||
"title": "Análisis de bridges y reparación guiada",
|
||||
"description": "Audita cada bridge vmbrX declarado en /etc/network/interfaces, verifica que sus puertos físicos existen realmente y ofrece una reparación paso a paso cuando no es así. El análisis es de solo lectura; la reparación está protegida, previsualizada y con backup.",
|
||||
"section": "Red"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Qué hace",
|
||||
"body": "Lee cada bridge en <code>/etc/network/interfaces</code>, mira su línea <code>bridge-ports</code> y comprueba si cada puerto declarado (p. ej. <code>enp3s0</code>) existe realmente en el host. Si falta un puerto, propone un sustituto y — con consentimiento explícito — aplica el cambio con un flujo <strong>backup, previsualización, aplicar, verificar</strong>."
|
||||
},
|
||||
"when": {
|
||||
"heading": "Cuándo lo necesitas",
|
||||
"intro": "Linux asigna nombres de interfaz predecibles a partir de la topología PCI y el orden de slot. Varios eventos los barajan y dejan <code>/etc/network/interfaces</code> referenciando nombres que ya no existen:",
|
||||
"items": [
|
||||
"Añadir o quitar una tarjeta PCIe (una NIC, una GPU, un HBA, un soporte NVMe).",
|
||||
"Mover una tarjeta existente a otro slot PCIe.",
|
||||
"Actualizaciones de BIOS / UEFI que re-enumeran los dispositivos PCI.",
|
||||
"Migrar el disco de arranque a otro hardware."
|
||||
],
|
||||
"outro": "Tras el siguiente arranque, el bridge intenta engancharse a un puerto que ya no existe, no levanta y el host pierde la red. <link>Nombres persistentes de interfaz</link> evita que esto vuelva a pasar — pero si ya estás bloqueado, esta página es el camino de recuperación."
|
||||
},
|
||||
"bigPicture": {
|
||||
"heading": "Vista general",
|
||||
"diagram1": {
|
||||
"arrowLabel": "paso 1",
|
||||
"nodes": {
|
||||
"sourceLabel": "/etc/network/interfaces",
|
||||
"sourceDetail": "auto vmbr0\niface vmbr0 inet static\n bridge-ports enp3s0",
|
||||
"bridgeLabel": "Analizar (solo lectura)",
|
||||
"bridgeDetail": "ip link show enp3s0\n→ no existe",
|
||||
"targetLabel": "Informe + sugerencia",
|
||||
"targetDetail": "❌ enp3s0: NOT FOUND\nReemplazar por: eno1\n(aún sin cambios)"
|
||||
}
|
||||
},
|
||||
"diagram2": {
|
||||
"arrowLabel": "aplicar con backup",
|
||||
"nodes": {
|
||||
"sourceLabel": "Reparación guiada",
|
||||
"sourceDetail": "1. Backup\n2. Mostrar actual\n3. Previsualizar cambios\n4. Aplicar\n5. Verificar",
|
||||
"targetLabel": "/etc/network/interfaces (nuevo)",
|
||||
"targetDetail": "auto vmbr0\niface vmbr0 inet static\n bridge-ports eno1"
|
||||
}
|
||||
}
|
||||
},
|
||||
"step1": {
|
||||
"heading": "Paso 1: análisis (solo lectura)",
|
||||
"intro": "Seleccionar <strong>Analizar configuración de bridges</strong> aborta inmediatamente si el host no usa la stack clásica de Debian/Proxmox. Si no, recorre cada bridge y reporta:",
|
||||
"items": [
|
||||
"Nombre del bridge, estado actual (UP / DOWN), IP asignada.",
|
||||
"Cada puerto declarado y si existe actualmente (<code>ip link show <port></code>).",
|
||||
"Para cada puerto inválido: un reemplazo propuesto (la primera interfaz física disponible) más el comando <code>sed</code> exacto para aplicarlo a mano.",
|
||||
"Bridges sin <code>bridge-ports</code> en absoluto y entradas <code>auto</code> huérfanas (sin bloque <code>iface</code> correspondiente)."
|
||||
],
|
||||
"readonlyTitle": "Garantía de solo lectura",
|
||||
"readonlyBody": "Hasta este punto el script no ha ejecutado un solo comando modificador. Puedes dejar el análisis abierto, copiar los comandos <code>sed</code> sugeridos y aplicarlos a mano si lo prefieres — o aceptar el siguiente prompt para entrar en la reparación guiada."
|
||||
},
|
||||
"step2": {
|
||||
"heading": "Paso 2: reparación guiada (5 pasos)",
|
||||
"intro": "Solo se entra si aceptas el prompt al final del análisis. Cada paso muestra qué va a pasar y pide confirmación antes de continuar.",
|
||||
"steps": [
|
||||
{
|
||||
"title": "1. Backup de seguridad",
|
||||
"body": "Copia <code>/etc/network/interfaces</code> a <code>/var/backups/proxmenux/interfaces_backup_<TIMESTAMP></code>. La ruta exacta del backup se muestra antes de la copia y de nuevo después, con el comando de rollback.",
|
||||
"tone": "blue"
|
||||
},
|
||||
{
|
||||
"title": "2. Revisar la configuración actual",
|
||||
"body": "Abre el <code>/etc/network/interfaces</code> en vivo en un diálogo con scroll para que veas exactamente qué se va a cambiar.",
|
||||
"tone": "blue"
|
||||
},
|
||||
{
|
||||
"title": "3. Previsualizar los cambios propuestos",
|
||||
"body": "Lista exactamente qué bridges se van a tocar y qué sustituciones de puerto se van a hacer. Si el análisis decide que en realidad no hay que arreglar nada (race condition: el puerto volvió), el flujo sale limpio con <em>\"No changes needed.\"</em>",
|
||||
"tone": "blue"
|
||||
},
|
||||
{
|
||||
"title": "4. Aplicar los cambios",
|
||||
"body": "Para cada bridge afectado, ejecuta <code>sed -i \"/iface $bridge/,/bridge-ports/ s/bridge-ports.*/bridge-ports $new_ports/\"</code> contra <code>/etc/network/interfaces</code>. Si un bridge no tenía un reemplazo válido disponible, la sustitución se omite y se reporta en el paso 5.",
|
||||
"tone": "amber"
|
||||
},
|
||||
{
|
||||
"title": "5. Verificación",
|
||||
"body": "Vuelve a leer el fichero y confirma que el nuevo puerto de cada bridge existe. Imprime el comando de rollback (<code>cp <backup> /etc/network/interfaces</code>). Por último ofrece un prompt <strong>Reiniciar networking</strong> — acéptalo solo si tienes consola de fallback.",
|
||||
"tone": "emerald"
|
||||
}
|
||||
],
|
||||
"restartTitle": "Reiniciar networking ≠ un undo gratis",
|
||||
"restartBody": "La reparación se escribe en disco independientemente de si reinicias el servicio. <code>systemctl restart networking</code> aplica el cambio <em>ahora</em>, lo que puede cortar tu sesión SSH si el nuevo puerto es incorrecto. Si rechazas el reinicio, el cambio sigue surtiendo efecto en el siguiente reinicio — confirma antes la nueva config o haz rollback con el comando impreso."
|
||||
},
|
||||
"edits": {
|
||||
"heading": "Qué se edita (exactamente)",
|
||||
"body": "Solo la línea <code>bridge-ports</code> de cada bridge afectado. Las demás directivas (<code>address</code>, <code>netmask</code>, <code>gateway</code>, <code>bridge-stp</code>, …) se dejan intactas. El script nunca crea bloques <code>iface</code> nuevos y nunca elimina los existentes en este flujo — ese es el trabajo de <link>Análisis de config y limpieza</link>."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Solución de problemas",
|
||||
"unsupportedTitle": "El análisis aborta con \"Unsupported Network Stack\"",
|
||||
"unsupportedBody": "El host usa netplan, systemd-networkd o NetworkManager. La herramienta solo soporta <code>/etc/network/interfaces</code>. Cambia el host a la stack clásica primero, o edita la configuración con las herramientas nativas del gestor (p. ej. <code>netplan apply</code>).",
|
||||
"noSuggestTitle": "No se imprime sugerencia para un puerto inválido",
|
||||
"noSuggestBody": "El host no tiene ninguna interfaz física libre (todas están ya en otro bridge o no existen). El análisis cae a sugerir <code>bridge-ports none</code> para que el bridge al menos pueda levantar sin puerto. Añade una NIC o migra puertos entre bridges manualmente antes de volver a ejecutar.",
|
||||
"stillDownTitle": "La reparación termina pero el bridge sigue DOWN",
|
||||
"stillDownBody": "<code>sed</code> actualizó el fichero pero se rechazó <code>systemctl restart networking</code>. Ejecútalo manualmente cuando la nueva config esté verificada, o reinicia. Si se aceptó el reinicio y el bridge sigue DOWN, ejecuta <code>ip link show</code> para confirmar que el nuevo puerto existe, y luego mira <code>journalctl -u networking</code> para ver el error real (cable desenchufado, link no negociado, puerto ya miembro de otro bridge).",
|
||||
"lostSshTitle": "He perdido el acceso SSH justo después de reiniciar networking",
|
||||
"lostSshIntro": "Usa consola / IPMI / iKVM para llegar al host. Restaura el backup:",
|
||||
"lostSshOutro": "Después vuelve a ejecutar el análisis desde la consola para averiguar por qué no funcionó la sugerencia (típicamente: el puerto de reemplazo no está realmente enchufado)."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Nombres persistentes de interfaz",
|
||||
"href": "/docs/network/persistent-names",
|
||||
"tail": " — fija los nombres a direcciones MAC para que esto deje de pasar."
|
||||
},
|
||||
{
|
||||
"label": "Análisis de config y limpieza guiada",
|
||||
"href": "/docs/network/config-analysis",
|
||||
"tailRich": " — para bloques <code>iface</code> huérfanos (la otra mitad del mismo problema)."
|
||||
},
|
||||
{
|
||||
"label": "Backup y reinicio de interfaces",
|
||||
"href": "/docs/network/backup-restore",
|
||||
"tail": " — snapshots manuales y el navegador de restauración."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Análisis de config y limpieza guiada | ProxMenux Documentation",
|
||||
"description": "Detecta bloques iface en /etc/network/interfaces que referencian NICs físicas que ya no están en el host. Los reporta y ofrece una eliminación guiada de 5 pasos con backup obligatorio y previsualización por bloque.",
|
||||
"ogTitle": "Análisis de config y limpieza guiada | ProxMenux Documentation",
|
||||
"ogDescription": "Encuentra y elimina bloques de interfaz huérfanos dejados por cambios de hardware, con previsualización completa y rollback."
|
||||
},
|
||||
"header": {
|
||||
"title": "Análisis de config y limpieza guiada",
|
||||
"description": "Recorre cada bloque iface en /etc/network/interfaces y verifica que la NIC física subyacente sigue existiendo. Reporta los bloques huérfanos dejados por cambios de hardware y ofrece una eliminación guiada con backup, previsualización y confirmación por bloque.",
|
||||
"section": "Red"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Qué hace",
|
||||
"body": "Identifica declaraciones <code>iface</code> cuya NIC asociada ya no está en el host (típico tras reemplazar o quitar una tarjeta de red). Luego ofrece una limpieza guiada que elimina <em>solo</em> los bloques huérfanos, con un backup, una previsualización por sección y una confirmación final explícita."
|
||||
},
|
||||
"differs": {
|
||||
"heading": "En qué se diferencia del análisis de bridges",
|
||||
"headerAspect": "Aspecto",
|
||||
"headerBridge": "Análisis de bridges",
|
||||
"headerConfig": "Análisis de config",
|
||||
"rows": [
|
||||
{
|
||||
"aspect": "Mira",
|
||||
"bridge": "Bridges (<code>vmbrX</code>) y su línea <code>bridge-ports</code>",
|
||||
"config": "Cada bloque <code>iface</code> (excluidos loopback, bridges, bonds)"
|
||||
},
|
||||
{
|
||||
"aspect": "Detecta",
|
||||
"bridge": "Bridges que referencian un puerto inexistente",
|
||||
"config": "Bloques de interfaz independientes para NICs que no existen"
|
||||
},
|
||||
{
|
||||
"aspect": "Acción de reparación",
|
||||
"bridge": "Sustituye el nombre del puerto en <code>bridge-ports</code>",
|
||||
"config": "Elimina el bloque <code>iface</code> entero"
|
||||
},
|
||||
{
|
||||
"aspect": "Excluye",
|
||||
"bridge": "Nada — se analizan todos los bridges",
|
||||
"config": "Bridges (<code>vmbrX</code>) y bonds (<code>bondX</code>) se mantienen siempre, porque son virtuales y \"no existir\" sería normal durante el arranque"
|
||||
}
|
||||
],
|
||||
"outro": "En la práctica, lo habitual es ejecutar ambos, en este orden: <strong>análisis de config</strong> primero para eliminar huérfanos, y luego <link>análisis de bridges</link> para reapuntar cualquier bridge que dependiese de la interfaz ya eliminada."
|
||||
},
|
||||
"step1": {
|
||||
"heading": "Paso 1: análisis (solo lectura)",
|
||||
"intro": "Aborta inmediatamente si el host no usa la stack clásica. Si no, lista cada interfaz configurada que no sea loopback y reporta su estado:",
|
||||
"virtTitle": "Las interfaces virtuales están protegidas",
|
||||
"virtBody": "Los bridges (<code>vmbrX</code>) y los bonds (<code>bondX</code>) son construcciones virtuales. Pueden no existir legítimamente en el momento de la inspección (p. ej. un bridge aún sin puertos), por lo que el análisis nunca propone eliminarlos — solo NICs físicas."
|
||||
},
|
||||
"step2": {
|
||||
"heading": "Paso 2: limpieza guiada (5 pasos)",
|
||||
"intro": "Solo se entra si aceptas el prompt al final del análisis. Cada paso requiere confirmación; cancelar en cualquier punto sale sin escribir.",
|
||||
"steps": [
|
||||
{
|
||||
"title": "1. Backup de seguridad",
|
||||
"body": "Copia <code>/etc/network/interfaces</code> a <code>/var/backups/proxmenux/interfaces_backup_<TIMESTAMP></code>. La ruta se muestra antes y después.",
|
||||
"tone": "blue"
|
||||
},
|
||||
{
|
||||
"title": "2. Confirmar la lista a eliminar",
|
||||
"body": "Lista exactamente qué bloques de interfaz física se van a eliminar. Si, entre el análisis y la limpieza, las NICs han reaparecido (p. ej. has reasentado una tarjeta), el flujo sale con <em>\"No cleanup needed.\"</em>",
|
||||
"tone": "blue"
|
||||
},
|
||||
{
|
||||
"title": "3. Previsualizar el/los bloque(s) exacto(s)",
|
||||
"body": "Abre una vista con scroll de cada bloque <code>iface</code> que se borraría, tal cual del fichero. Es el momento de detectar p. ej. un hook <code>up</code> interesante que quieras conservar.",
|
||||
"tone": "blue"
|
||||
},
|
||||
{
|
||||
"title": "4. Aplicar la eliminación",
|
||||
"body": "Para cada interfaz huérfana, ejecuta <code>sed -i \"/^iface $iface/,/^$/d\" /etc/network/interfaces</code>. Eso borra desde la línea <code>iface</code> que coincide hasta la siguiente línea en blanco.",
|
||||
"tone": "amber"
|
||||
},
|
||||
{
|
||||
"title": "5. Verificación",
|
||||
"body": "Vuelve a leer el fichero, lista lo eliminado y rechequea las interfaces restantes. Imprime el comando de rollback. <strong>No</strong> reinicia networking automáticamente — eliminar un bloque sin uso es seguro aplicarlo al siguiente reinicio y evita tocar el estado en vivo.",
|
||||
"tone": "emerald"
|
||||
}
|
||||
],
|
||||
"noRestartTitle": "No reinicia networking automáticamente",
|
||||
"noRestartBody": "A diferencia de la reparación de bridges, el flujo de limpieza no ofrece reiniciar el servicio. Eliminar un bloque de interfaz sin uso no tiene efecto inmediato en la config en ejecución, así que un reinicio es innecesario y sería un riesgo de conectividad gratuito. El cambio tiene efecto en el siguiente <code>systemctl restart networking</code> manual o en el siguiente reinicio."
|
||||
},
|
||||
"caveats": {
|
||||
"heading": "Avisos importantes",
|
||||
"boundaryTitle": "El límite del bloque es la primera línea en blanco",
|
||||
"boundaryBody": "El patrón <code>sed</code> borra desde <code>iface <name></code> hasta la siguiente línea vacía. Si tu <code>/etc/network/interfaces</code> no tiene líneas en blanco separando bloques (raro, pero posible si está editado a mano), la eliminación puede consumir también el bloque siguiente. Por eso <strong>el paso 3 es obligatorio</strong>: revisa la previsualización antes de confirmar.",
|
||||
"tandemTitle": "Una iface huérfana usada por un bridge se detecta aquí, no en el análisis de bridges",
|
||||
"tandemBody": "Si <code>vmbr0</code> declara <code>bridge-ports enp3s0</code> y <code>enp3s0</code> tiene también su propio bloque <code>iface enp3s0 inet manual</code>, eliminar <code>enp3s0</code> aquí dejará a <code>vmbr0</code> con una referencia colgante. Tras la limpieza, ejecuta el <link>análisis de bridges</link> para reapuntar o quitar el puerto del bridge. Los dos flujos están diseñados para usarse en tándem."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Solución de problemas",
|
||||
"notFoundTitle": "El análisis muestra mi NIC nueva como \"NOT FOUND\"",
|
||||
"notFoundBody": "El kernel ve el dispositivo con un nombre distinto al que hay en el fichero. Ejecuta <code>ip link show</code> para obtener el nombre real. Este es exactamente el caso en el que <link>Nombres persistentes de interfaz</link> evitaría el problema de aquí en adelante.",
|
||||
"tooMuchTitle": "La limpieza eliminó demasiado (un bloque que quería conservar)",
|
||||
"tooMuchBody": "Restaura desde el backup impreso en el paso 5:",
|
||||
"tooMuchOutro": "Edita el fichero a mano para añadir una línea en blanco clara entre bloques antes de volver a ejecutar la limpieza, o elimina el bloque problemático manualmente.",
|
||||
"bridgeBreakTitle": "Un bridge deja de funcionar después de la limpieza",
|
||||
"bridgeBreakBody": "El bridge dependía de un puerto cuyo bloque <code>iface</code> se acaba de eliminar. Ejecuta el <link>análisis de bridges</link> y la sugerencia apuntará el bridge a una interfaz física existente."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Análisis de bridges y reparación guiada",
|
||||
"href": "/docs/network/bridge-analysis",
|
||||
"tail": " — el seguimiento natural tras una limpieza."
|
||||
},
|
||||
{
|
||||
"label": "Nombres persistentes de interfaz",
|
||||
"href": "/docs/network/persistent-names",
|
||||
"tail": " — evita que se acumulen bloques huérfanos tras cada cambio de hardware."
|
||||
},
|
||||
{
|
||||
"label": "Backup y reinicio de interfaces",
|
||||
"href": "/docs/network/backup-restore",
|
||||
"tail": " — snapshots manuales y el navegador de restauración."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Diagnóstico | ProxMenux Documentation",
|
||||
"description": "Tres comprobaciones de diagnóstico puntuales de solo lectura: Mostrar tabla de rutas, Test de conectividad y Diagnóstico avanzado. Pura inspección — nunca escribe en /etc/network/interfaces y nunca ejecuta un comando modificador (con una excepción explícita y opt-in para purgar NetworkManager cuando se detecta).",
|
||||
"ogTitle": "Diagnóstico | ProxMenux Documentation",
|
||||
"ogDescription": "Diagnóstico de red de solo lectura para el host Proxmox: rutas, alcanzabilidad, estadísticas avanzadas."
|
||||
},
|
||||
"header": {
|
||||
"title": "Diagnóstico",
|
||||
"description": "Tres comprobaciones puntuales de solo lectura que inspeccionan el estado de red en vivo: tabla de rutas, test de conectividad y estadísticas avanzadas. Ninguna escribe en /etc/network/interfaces — seguras de usar en cualquier momento, incluso por SSH. Para monitorización interactiva en vivo, ver Herramientas de monitorización en vivo.",
|
||||
"section": "Red"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Qué hace",
|
||||
"body": "Reporta sobre rutas, alcanzabilidad y estadísticas agregadas <strong>sin modificar nada</strong>. Úsalo para confirmar que la red está sana o para identificar IPs duplicadas. Para observación continua de tráfico ver <monitoringLink>Herramientas de monitorización en vivo</monitoringLink>; para ver el fichero de config en crudo ver <backupLink>Backup y reinicio de interfaces</backupLink>."
|
||||
},
|
||||
"routing": {
|
||||
"heading": "Mostrar tabla de rutas",
|
||||
"body": "Lista todas las rutas que el kernel está usando actualmente (<code>ip route show</code>) y resalta la puerta de enlace por defecto. Útil para confirmar que el tráfico hacia internet sale por la interfaz esperada y que ninguna ruta residual está tomando precedencia."
|
||||
},
|
||||
"connectivity": {
|
||||
"heading": "Test de conectividad",
|
||||
"intro": "Envía dos sondas ICMP a tres destinos en secuencia y reporta cada uno. Luego ejecuta un <code>nslookup google.com</code> para verificar la resolución DNS independientemente de ICMP.",
|
||||
"headerTest": "Test",
|
||||
"headerTarget": "Destino",
|
||||
"headerConfirms": "Qué confirma",
|
||||
"rows": [
|
||||
{
|
||||
"test": "Google DNS",
|
||||
"target": "8.8.8.8",
|
||||
"confirms": "Alcanzabilidad externa por IP anycast conocida"
|
||||
},
|
||||
{
|
||||
"test": "Cloudflare DNS",
|
||||
"target": "1.1.1.1",
|
||||
"confirms": "Segunda opinión independiente si Google bloquea ICMP"
|
||||
},
|
||||
{
|
||||
"test": "Gateway",
|
||||
"target": "(ruta por defecto)",
|
||||
"confirms": "Conectividad L2 / L3 con el router local"
|
||||
},
|
||||
{
|
||||
"test": "Resolución DNS",
|
||||
"target": "google.com",
|
||||
"confirms": "El servidor DNS es alcanzable y responde"
|
||||
}
|
||||
],
|
||||
"readingTitle": "Cómo leer el resultado",
|
||||
"readingBody": "Si el test del gateway pasa pero los destinos DNS públicos fallan, tienes conectividad local pero no internet — revisa el upstream del gateway. Si la resolución DNS falla pero los pings a <code>8.8.8.8</code> funcionan, el problema es el resolver, no la red: revisa <code>/etc/resolv.conf</code>."
|
||||
},
|
||||
"advanced": {
|
||||
"heading": "Diagnóstico avanzado",
|
||||
"intro": "Agrega estadísticas de red a nivel global y ejecuta una batería de comprobaciones de problemas comunes. Reporta el número de conexiones activas, puertos en escucha, total de interfaces y señala dos antipatrones explícitamente:",
|
||||
"items": [
|
||||
"<strong>NetworkManager corriendo en un host Proxmox.</strong> NetworkManager y el <code>ifupdown</code> de Proxmox entran en conflicto — los dos intentan gestionar interfaces, lo que provoca bridges que flapean o se niegan a levantar. Si se detecta, la herramienta ofrece un prompt interactivo para detenerlo, deshabilitarlo y purgarlo (es el <em>único</em> diagnóstico que puede modificar el sistema, y solo tras consentimiento explícito).",
|
||||
"<strong>Direcciones IP duplicadas en distintas interfaces.</strong> Dos interfaces con la misma IPv4 causan conectividad intermitente extremadamente difícil de depurar desde dentro de la VM. Se detecta vía <code>ip -4 addr show | sort | uniq -d</code>."
|
||||
],
|
||||
"nmTitle": "El prompt de NetworkManager es la única acción modificadora aquí",
|
||||
"nmBody": "El resto de comprobaciones en Diagnóstico avanzado son de solo lectura. La eliminación de NetworkManager está protegida tras un diálogo sí/no y ejecuta <code>systemctl stop / disable</code> + <code>apt-get purge -y network-manager</code>. Si rechazas, no cambia nada."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Solución de problemas",
|
||||
"gwTitle": "Test de conectividad reporta el gateway como fallido pero el host tiene internet",
|
||||
"gwBody": "Algunos routers no responden a ICMP desde su interfaz interna aunque sí reenvíen el tráfico. Prueba con <code>traceroute 8.8.8.8</code> desde una consola: si el segundo salto es tu ISP y el test de DNS público pasó, el gateway está bien a pesar del ping fallido.",
|
||||
"dupTitle": "Diagnóstico avanzado sigue señalando IPs duplicadas después de quitar una",
|
||||
"dupBody": "La comprobación mira el estado en vivo del kernel, no el fichero de config. Ejecuta <code>ip -4 addr show</code> para confirmar; si la duplicada sigue ahí, una interfaz todavía la mantiene. Usa <code>ip addr del <IP>/<mask> dev <iface></code> para quitarla del estado en vivo, y luego edita <code>/etc/network/interfaces</code> si también es persistente."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Herramientas de monitorización en vivo",
|
||||
"href": "/docs/network/monitoring",
|
||||
"tail": " — lanzadores interactivos de iftop / iptraf-ng / iperf3."
|
||||
},
|
||||
{
|
||||
"label": "Análisis de bridges y reparación guiada",
|
||||
"href": "/docs/network/bridge-analysis",
|
||||
"tail": " — cuando un vmbrX se queda sin su puerto físico."
|
||||
},
|
||||
{
|
||||
"label": "Análisis de config y limpieza guiada",
|
||||
"href": "/docs/network/config-analysis",
|
||||
"tail": " — cuando una NIC antigua sigue declarada pero ya no está."
|
||||
},
|
||||
{
|
||||
"label": "Backup y reinicio de interfaces",
|
||||
"href": "/docs/network/backup-restore",
|
||||
"tail": " — para hacer snapshot de la config antes de cualquier cambio."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Gestión de red en Proxmox — bridges, bonds, diagnóstico, reparación | ProxMenux",
|
||||
"description": "Diagnóstico de solo lectura, flujos de analizar-y-sugerir y reparaciones guiadas para la stack de red Debian / Proxmox (/etc/network/interfaces). Inspecciona bridges y bonds, ejecuta herramientas de monitorización en vivo, persiste nombres de interfaz, hace backup y reinicia la red de forma segura — con backups obligatorios y previsualizaciones paso a paso.",
|
||||
"ogTitle": "Gestión de red en Proxmox — bridges, bonds, diagnóstico, reparación",
|
||||
"ogDescription": "Diagnóstico, análisis y reparaciones guiadas para la stack de red de Proxmox con backups obligatorios y previsualizaciones paso a paso.",
|
||||
"twitterTitle": "Gestión de red en Proxmox | ProxMenux",
|
||||
"twitterDescription": "Bridges, bonds, diagnóstico y reparaciones guiadas para la stack de red de Proxmox con backups obligatorios."
|
||||
},
|
||||
"header": {
|
||||
"title": "Gestión de red",
|
||||
"description": "Diagnóstico de solo lectura, informes de analizar-y-sugerir y reparaciones guiadas para la stack clásica de red Debian/Proxmox. Cada flujo destructivo hace primero un backup y previsualiza los cambios exactos antes de aplicarlos.",
|
||||
"section": "Red"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Para qué sirve este menú",
|
||||
"body": "Inspeccionar, diagnosticar y (cuando hace falta) reparar la configuración de red del host Proxmox sin perder el acceso remoto. Las herramientas están diseñadas en torno a un principio: <strong>leer primero, proponer, y solo aplicar con consentimiento explícito y un backup de seguridad</strong>. No hay botón de \"arreglar todo automáticamente\"."
|
||||
},
|
||||
"openingMenu": {
|
||||
"heading": "Abrir el menú",
|
||||
"intro": "Desde el menú principal de ProxMenux, selecciona <strong>Red</strong>. Verás esto:",
|
||||
"imageAlt": "Menú Gestión de red con opciones de diagnóstico, monitorización, análisis, reparación, nombres persistentes y backup"
|
||||
},
|
||||
"safety": {
|
||||
"heading": "El modelo de seguridad",
|
||||
"body": "Editar la configuración de red en un host Proxmox remoto es una de las formas más fáciles de bloquearte el acceso. ProxMenux trata cada acción en consecuencia. Las herramientas se dividen en tres niveles de comportamiento — elige la tarjeta que coincida con tu intención:"
|
||||
},
|
||||
"tiers": {
|
||||
"readOnly": {
|
||||
"title": "Solo lectura",
|
||||
"body": "Pura inspección. No puede modificar el sistema bajo ninguna circunstancia.",
|
||||
"items": [
|
||||
"Tabla de rutas, pruebas de conectividad, estadísticas avanzadas",
|
||||
"Monitorización de tráfico en vivo (iftop, iptraf-ng)",
|
||||
"Test de ancho de banda (iperf3)"
|
||||
]
|
||||
},
|
||||
"analyze": {
|
||||
"title": "Analizar y luego sugerir",
|
||||
"body": "Detecta problemas, imprime un informe con los comandos de shell propuestos y se detiene. Tú decides si entras después en la reparación guiada.",
|
||||
"items": [
|
||||
"Análisis de configuración de bridges",
|
||||
"Análisis de configuración de red"
|
||||
]
|
||||
},
|
||||
"apply": {
|
||||
"title": "Aplicar con backup",
|
||||
"body": "Modifica el sistema. Hace siempre un backup con timestamp del fichero afectado primero y muestra una previsualización antes de escribir.",
|
||||
"items": [
|
||||
"Nombres persistentes de interfaz (ficheros .link)",
|
||||
"Backup manual, restauración y reinicio del servicio"
|
||||
]
|
||||
}
|
||||
},
|
||||
"classicTitle": "Solo stack clásica",
|
||||
"classicBody": "Cada función de análisis y reparación comprueba el gestor de red activo antes de tocar nada. Si el host usa <strong>netplan</strong>, <strong>systemd-networkd</strong> o <strong>NetworkManager</strong>, la herramienta aborta inmediatamente con un mensaje claro — el menú solo soporta la stack clásica de Debian/Proxmox en <code>/etc/network/interfaces</code>. Es intencional: editar un fichero de netplan con reglas escritas para <code>ifupdown</code> corrompería silenciosamente la configuración.",
|
||||
"backups": {
|
||||
"heading": "Dónde van los backups",
|
||||
"intro": "Cada reparación guiada, restauración o backup manual escribe una copia con timestamp de <code>/etc/network/interfaces</code> en <code>/var/backups/proxmenux/</code>:",
|
||||
"rollbackIntro": "Para hacer rollback manualmente desde una consola:"
|
||||
},
|
||||
"readOnlySection": {
|
||||
"heading": "Inspección de solo lectura",
|
||||
"body": "El punto de partida cuando algo huele raro. Pura inspección — nunca escribe en <code>/etc/network/interfaces</code> y nunca ejecuta un comando modificador (con una única excepción explícita y opt-in para purgar NetworkManager cuando se detecta). Seguro de usar por SSH en cualquier momento.",
|
||||
"options": [
|
||||
{
|
||||
"title": "Diagnóstico",
|
||||
"description": "Tres comprobaciones puntuales de solo lectura: Mostrar tabla de rutas, Test de conectividad y Diagnóstico avanzado. Pura inspección — nunca escribe en el sistema."
|
||||
},
|
||||
{
|
||||
"title": "Herramientas de monitorización en vivo",
|
||||
"description": "Tres lanzadores interactivos: iftop (ancho de banda en tiempo real por par de hosts), iptraf-ng (monitor de tráfico multimodo) e iperf3 (test de ancho de banda, modo servidor / cliente)."
|
||||
}
|
||||
]
|
||||
},
|
||||
"analyzeSection": {
|
||||
"heading": "Analizar y luego sugerir",
|
||||
"body": "Se usa cuando una inspección (o una caída real) apunta a un problema de configuración. Cada herramienta recorre la parte relevante de <code>/etc/network/interfaces</code>, imprime un informe detallado con el comando de shell exacto que arreglaría cada hallazgo y <strong>se detiene</strong>. Si aceptas después la reparación guiada opcional, cada cambio se respalda con backup y se previsualiza antes de escribirse.",
|
||||
"options": [
|
||||
{
|
||||
"title": "Análisis de bridges y reparación guiada",
|
||||
"description": "Detecta bridges vmbrX con puertos ausentes o inválidos (típico tras una re-enumeración PCI). Muestra primero un informe; solo repara cuando aceptas el flujo guiado de 5 pasos."
|
||||
},
|
||||
{
|
||||
"title": "Análisis de config y limpieza guiada",
|
||||
"description": "Encuentra interfaces físicas declaradas en /etc/network/interfaces que ya no existen (configs huérfanas que dejan cambios de hardware). Las reporta y ofrece una eliminación guiada."
|
||||
}
|
||||
]
|
||||
},
|
||||
"applySection": {
|
||||
"heading": "Aplicar con backup",
|
||||
"body": "Herramientas que escriben en disco por diseño. Cada una hace un backup con timestamp del fichero afectado antes de escribir, y las opciones destructivas (restauración, reinicio) requieren una confirmación explícita sí/no. <em>Nombres persistentes de interfaz</em> tiene efecto en el siguiente reinicio, no inmediatamente, así que es seguro programarlo incluso en un host remoto.",
|
||||
"options": [
|
||||
{
|
||||
"title": "Nombres persistentes de interfaz",
|
||||
"description": "Fija nombres de interfaz (eno1, enp3s0, …) a direcciones MAC mediante ficheros .link de systemd. Los nombres sobreviven a cambios de slot PCI, actualizaciones de kernel y al añadir / quitar otras NICs."
|
||||
},
|
||||
{
|
||||
"title": "Backup y reinicio de interfaces",
|
||||
"description": "Snapshot manual de /etc/network/interfaces, navegar y restaurar backups previos, ver la config en vivo y reiniciar el servicio de red cuando haga falta."
|
||||
}
|
||||
]
|
||||
},
|
||||
"consoleTitle": "Ten acceso a consola listo",
|
||||
"consoleSubTitle": "Antes de cualquier reparación en un host remoto",
|
||||
"consoleBody": "Si estás conectado por SSH y solo tienes un camino al host, ten un fallback antes de aplicar cambios de red: consola física / IPMI / iKVM, u otra máquina en la misma LAN. Las reparaciones guiadas son seguras y siempre ofrecen un comando de rollback, pero un bridge mal configurado o un enlace caído pueden dejarte bloqueado hasta que llegues a la consola."
|
||||
}
|
||||
@@ -0,0 +1,136 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Herramientas de monitorización en vivo | ProxMenux Documentation",
|
||||
"description": "Tres lanzadores interactivos de monitorización de red: iftop (ancho de banda en tiempo real por par de hosts), iptraf-ng (monitor de tráfico multimodo) e iperf3 (test de ancho de banda, modo servidor / cliente). Cada uno se instala la primera vez que se usa.",
|
||||
"ogTitle": "Herramientas de monitorización en vivo | ProxMenux Documentation",
|
||||
"ogDescription": "Monitorización interactiva de red y test de ancho de banda para el host Proxmox: iftop, iptraf-ng, iperf3."
|
||||
},
|
||||
"header": {
|
||||
"title": "Herramientas de monitorización en vivo",
|
||||
"description": "Tres lanzadores interactivos para observación de red en tiempo real y medición de ancho de banda: iftop, iptraf-ng e iperf3. Cada herramienta se autoinstala desde apt la primera vez que se usa, corre en primer plano y se sale con la tecla documentada. De solo lectura sobre la configuración del host — solo observan el tráfico.",
|
||||
"section": "Red"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Qué hace",
|
||||
"body": "Tres herramientas de monitorización interactivas, cada una con su entrada de menú. La primera vez que lanzas una, el paquete se instala silenciosamente vía <code>apt-get</code>. Los siguientes lanzamientos arrancan al instante. Ninguna de estas herramientas modifica la configuración de red del host."
|
||||
},
|
||||
"when": {
|
||||
"heading": "Cuándo usar cuál",
|
||||
"headerQuestion": "Pregunta",
|
||||
"headerUse": "Usa",
|
||||
"rows": [
|
||||
{
|
||||
"question": "¿Quién está saturando el enlace <em>ahora mismo</em>?",
|
||||
"use": "iftop"
|
||||
},
|
||||
{
|
||||
"question": "¿Qué desglose por protocolo / tamaños de paquete / flujos TCP hay?",
|
||||
"use": "iptraf-ng"
|
||||
},
|
||||
{
|
||||
"question": "¿Cuánto ancho de banda hay realmente disponible entre dos hosts?",
|
||||
"use": "iperf3"
|
||||
}
|
||||
]
|
||||
},
|
||||
"iftop": {
|
||||
"heading": "Uso de red en tiempo real (iftop)",
|
||||
"body": "Ancho de banda en vivo por par de hosts (origen ↔ destino) — como <code>top</code> para tráfico. Muestra los flujos más pesados arriba, con medias móviles de 2/10/40 segundos. La mejor herramienta para la pregunta <em>\"¿por qué está saturado mi uplink?\"</em>.",
|
||||
"exit": "<strong>Salir:</strong> pulsa <kbd>q</kbd>. ProxMenux muestra un diálogo recordatorio antes de lanzarlo.",
|
||||
"keysTitle": "Teclas útiles dentro de iftop",
|
||||
"keysBody": "<kbd>n</kbd> alterna la resolución DNS, <kbd>p</kbd> muestra números de puerto, <kbd>P</kbd> pausa la pantalla, <kbd>t</kbd> alterna la dirección de la línea (enviado / recibido / ambos), <kbd>1</kbd>/<kbd>2</kbd>/<kbd>3</kbd> ordena por media de 2s / 10s / 40s. <code>man iftop</code> para el set completo."
|
||||
},
|
||||
"iptraf": {
|
||||
"heading": "Herramienta de monitorización de red (iptraf-ng)",
|
||||
"intro": "Monitor de tráfico multimodo basado en menús. Donde iftop responde a <em>\"quién\"</em>, iptraf-ng responde a <em>\"qué\"</em>: conteos de bytes/paquetes por protocolo, seguimiento del estado de conexiones TCP, histogramas de tamaño de paquete y actividad LAN por estación.",
|
||||
"menuIntro": "Al arrancar obtienes un menú de cinco opciones:",
|
||||
"headerMode": "Modo",
|
||||
"headerUseFor": "Úsalo para",
|
||||
"rows": [
|
||||
{
|
||||
"mode": "IP traffic monitor",
|
||||
"useFor": "Lista en vivo de flujos TCP / UDP / ICMP / otro-IP con contadores de bytes y estado de conexión"
|
||||
},
|
||||
{
|
||||
"mode": "General interface stats",
|
||||
"useFor": "Conteos agregados de paquetes IPv4 / IPv6 / TCP / UDP / ICMP / no-IP por NIC"
|
||||
},
|
||||
{
|
||||
"mode": "Detailed interface stats",
|
||||
"useFor": "Igual que arriba pero para una interfaz, con detalle de tamaño y tasa de paquetes"
|
||||
},
|
||||
{
|
||||
"mode": "Statistical breakdowns",
|
||||
"useFor": "Histograma de distribución de tamaño de paquete, por puerto TCP / UDP"
|
||||
},
|
||||
{
|
||||
"mode": "LAN station monitor",
|
||||
"useFor": "Estadísticas de tráfico por MAC del dominio de broadcast local"
|
||||
}
|
||||
],
|
||||
"exit": "<strong>Salir:</strong> pulsa <kbd>x</kbd> desde cualquier vista (o <kbd>Q</kbd> desde el menú principal). ProxMenux muestra un diálogo recordatorio antes de lanzarlo.",
|
||||
"logTitle": "El logging captura a fichero",
|
||||
"logBody": "Cada modo ofrece registrar las estadísticas capturadas en <code>/var/log/iptraf-ng/</code>. Útil si necesitas un registro de un pico de tráfico — déjalo corriendo, vuelca al fichero, revisa el fichero después en lugar de intentar leer la pantalla en vivo."
|
||||
},
|
||||
"iperf3": {
|
||||
"heading": "Test de ancho de banda (iperf3)",
|
||||
"intro1": "Mide el throughput TCP real entre dos hosts. A diferencia de iftop / iptraf-ng (que observan tráfico existente), iperf3 genera tráfico sintético para estresar el enlace. Indispensable para responder a preguntas como <em>\"¿está mi 10 GbE haciendo realmente 10 GbE?\"</em> o <em>\"¿el cuello de botella es la NIC, el switch o el almacenamiento?\"</em>.",
|
||||
"intro2": "iperf3 es una <strong>herramienta de dos hosts</strong>: un lado corre como servidor (escucha en TCP 5201), el otro corre como cliente (se conecta, envía datos, imprime la tasa). El lanzador de ProxMenux pregunta qué modo quieres:",
|
||||
"headerMode": "Modo",
|
||||
"headerBehaviour": "Comportamiento",
|
||||
"headerCli": "CLI equivalente",
|
||||
"rows": [
|
||||
{
|
||||
"mode": "Server",
|
||||
"behaviour": "Escucha en TCP 5201 e imprime resultados de cada test entrante. Se detiene con Ctrl+C.",
|
||||
"cli": "iperf3 -s"
|
||||
},
|
||||
{
|
||||
"mode": "Client",
|
||||
"behaviour": "Pide la IP / hostname del servidor, conecta, ejecuta un test por defecto de 10 segundos e imprime el informe.",
|
||||
"cli": "iperf3 -c <target>"
|
||||
}
|
||||
],
|
||||
"workflowIntro": "Flujo típico para probar un enlace 10 GbE entre dos hosts Proxmox:",
|
||||
"workflow": [
|
||||
"En el host A, abre el menú Red → <em>Test de ancho de banda (iperf3)</em> → elige <strong>Server</strong>.",
|
||||
"En el host B, abre la misma entrada de menú → elige <strong>Client</strong> → introduce la IP del host A.",
|
||||
"Espera 10 segundos. Compara la tasa reportada con el máximo teórico del enlace."
|
||||
],
|
||||
"sample": "Salida de ejemplo del cliente:",
|
||||
"flagsTitle": "Flags útiles a mano (desde una shell)",
|
||||
"flagsBody": "<code>-t 60</code> test más largo (60s en lugar de los 10s por defecto), <code>-P 4</code> 4 streams en paralelo (satura más rápido), <code>-R</code> dirección inversa (servidor → cliente), <code>-u -b 100M</code> test UDP a 100 Mbit/s (para mediciones de jitter / pérdida de paquetes), <code>-p 5202</code> usa un puerto distinto (varios tests en paralelo). <code>man iperf3</code> para el set completo.",
|
||||
"firewallTitle": "Abre el puerto del firewall en el servidor",
|
||||
"firewallBody": "El servidor escucha en TCP <strong>5201</strong> por defecto. Si corres el servidor dentro de un host Proxmox con un firewall estricto (a nivel de datacenter o de host), permite entrada TCP 5201 desde la IP del cliente durante el test y luego ciérralo. Lo mismo aplica a <code>nftables</code> / <code>iptables</code> en hosts bare metal."
|
||||
},
|
||||
"install": {
|
||||
"heading": "El primer lanzamiento instala el paquete",
|
||||
"body": "Los tres lanzadores comprueban si el binario está y ejecutan <code>apt-get update -qq && apt-get install -y <pkg></code> si falta. La instalación es silenciosa: el menú puede parecer congelado durante 10–30 segundos la primera vez. Los siguientes lanzamientos arrancan al instante."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Solución de problemas",
|
||||
"hangTitle": "La instalación se cuelga eternamente en el primer lanzamiento",
|
||||
"hangBody": "El host no tiene internet o los repos de apt son inalcanzables. Cancela con <kbd>Ctrl</kbd>+<kbd>C</kbd>, ejecuta <code>apt-get update</code> a mano para ver el error real (DNS, firma del repo, proxy …) y luego vuelve al menú.",
|
||||
"refusedTitle": "Cliente iperf3: \"unable to connect to server: Connection refused\"",
|
||||
"refusedBody": "O el servidor no está corriendo, o su firewall bloquea TCP 5201. Confirma en el servidor: <code>ss -tlnp | grep 5201</code> — debería mostrar iperf3 escuchando. Si está escuchando pero el cliente sigue fallando, revisa el camino del firewall entre los dos hosts.",
|
||||
"slowTitle": "iperf3 reporta mucho menos que la velocidad esperada del enlace",
|
||||
"slowBody": "Causas habituales, por orden de probabilidad: (1) uno de los hosts tiene cuello de botella en CPU — prueba <code>iperf3 -c <target> -P 4</code> para usar varios cores; (2) el camino pasa por un enlace más lento (switch gigabit en medio de dos NICs 10 GbE); (3) mismatch de MTU — comprueba <code>ip link show</code> en ambos extremos; (4) offloading de la NIC deshabilitado — ver el script de la comunidad <em>Disable NIC Offloading</em> si tienes una tarjeta Intel e1000e.",
|
||||
"noTrafficTitle": "iftop / iptraf-ng no muestran tráfico en un host con carga",
|
||||
"noTrafficBody": "La captura por defecto va sobre la primera interfaz detectada. Especifica la correcta explícitamente desde la shell: <code>iftop -i vmbr0</code> o <code>iptraf-ng -i vmbr0</code>. El lanzador del menú usa la interfaz por defecto; para interfaces no por defecto, ejecuta desde una consola."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Diagnóstico",
|
||||
"href": "/docs/network/diagnostics",
|
||||
"tail": " — las comprobaciones puntuales de solo lectura (rutas, conectividad, estadísticas avanzadas)."
|
||||
},
|
||||
{
|
||||
"label": "Análisis de bridges y reparación guiada",
|
||||
"href": "/docs/network/bridge-analysis",
|
||||
"tail": " — cuando la monitorización revela que una interfaz o un bridge no hace lo que debería."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Nombres persistentes de interfaz | ProxMenux Documentation",
|
||||
"description": "Fija los nombres de interfaz de Proxmox (eno1, enp3s0, …) a direcciones MAC mediante ficheros .link de systemd para que los nombres sobrevivan a la re-enumeración PCI, actualizaciones de kernel y al añadir / quitar otras NICs.",
|
||||
"ogTitle": "Nombres persistentes de interfaz | ProxMenux Documentation",
|
||||
"ogDescription": "Evita que los nombres de interfaz de Proxmox cambien al modificar el hardware. Usa ficheros .link de systemd basados en la dirección MAC."
|
||||
},
|
||||
"header": {
|
||||
"title": "Nombres persistentes de interfaz",
|
||||
"description": "Genera un fichero .link de systemd por cada NIC física que fija el nombre asignado por el kernel a la MAC de la tarjeta. Una vez aplicado (tras el siguiente reinicio), los nombres de interfaz dejan de moverse cuando añades, quitas o mueves tarjetas PCIe.",
|
||||
"section": "Red"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Qué hace",
|
||||
"body": "Para cada NIC física del host, escribe un pequeño fichero en <code>/etc/systemd/network/10-<iface>.link</code> que dice: <em>\"el dispositivo con esta MAC debe llamarse siempre así\"</em>. systemd-udevd aplica la regla en cada arranque, antes de que <code>ifupdown</code> lea <code>/etc/network/interfaces</code>."
|
||||
},
|
||||
"problem": {
|
||||
"heading": "El problema que resuelve",
|
||||
"intro": "Linux deriva los nombres de interfaz por defecto a partir de la topología PCI — <code>eno1</code> = onboard, <code>enp3s0</code> = la tarjeta en el bus PCI 3, slot 0, etc. El esquema de naming es determinista <em>dado el mismo layout de hardware</em>. Cambia el layout y los nombres se mueven:",
|
||||
"items": [
|
||||
"Añade una GPU delante de una NIC existente → el número de bus de la NIC puede cambiar → el nombre cambia.",
|
||||
"Mueve una tarjeta a otro slot PCIe → el nombre cambia.",
|
||||
"Actualización de BIOS / UEFI que re-enumera los dispositivos → los nombres pueden cambiar.",
|
||||
"Reemplaza una tarjeta defectuosa por el mismo modelo en otro slot → el nombre cambia."
|
||||
],
|
||||
"outro": "Tras un cambio así, <code>/etc/network/interfaces</code> sigue referenciando el nombre <em>antiguo</em>; el bridge no levanta; el host pierde la red. Configurar nombres persistentes evita que este escenario vuelva a pasar."
|
||||
},
|
||||
"howWorks": {
|
||||
"heading": "Cómo funciona",
|
||||
"arrowLabel": "por NIC",
|
||||
"nodes": {
|
||||
"detectLabel": "Detectar NICs físicas",
|
||||
"detectDetail": "ls /sys/class/net/\nfiltrar vmbr / bond /\ndocker / veth / wireguard …",
|
||||
"readLabel": "Leer cada MAC",
|
||||
"readDetail": "cat /sys/class/net/\n '<'iface'>'/address",
|
||||
"writeLabel": "Escribir fichero .link",
|
||||
"writeDetail": "/etc/systemd/network/\n 10-'<'iface'>'.link"
|
||||
},
|
||||
"minimalIntro": "Cada fichero generado es intencionalmente mínimo:",
|
||||
"minimalOutro": "En el arranque, systemd-udevd hace match del dispositivo por MAC y asigna el nombre pedido <em>antes</em> de que ningún otro componente (ifupdown, naming por defecto del kernel) llegue a él. El prefijo <code>10-</code> del fichero asegura que estas reglas se carguen pronto, antes del <code>99-default.link</code> por defecto."
|
||||
},
|
||||
"scope": {
|
||||
"heading": "Qué se escribe y qué se omite",
|
||||
"headerType": "Tipo",
|
||||
"headerBehaviour": "Comportamiento",
|
||||
"headerWhy": "Por qué",
|
||||
"rows": [
|
||||
{
|
||||
"type": "NIC onboard / PCIe",
|
||||
"behaviour": "Se escribe fichero <code>.link</code>",
|
||||
"why": "Respaldada por un dispositivo PCI real — el caso para el que está la herramienta"
|
||||
},
|
||||
{
|
||||
"type": "Wi-Fi (phy80211)",
|
||||
"behaviour": "Se escribe fichero <code>.link</code>",
|
||||
"why": "Tiene una MAC real y se beneficia de la estabilidad de nombre"
|
||||
},
|
||||
{
|
||||
"type": "Bridges (vmbrX)",
|
||||
"behaviour": "Se omite",
|
||||
"why": "Virtual; el nombre viene de <code>/etc/network/interfaces</code>"
|
||||
},
|
||||
{
|
||||
"type": "Bonds (bondX)",
|
||||
"behaviour": "Se omite",
|
||||
"why": "Virtual; el nombre del bond lo fija ifupdown"
|
||||
},
|
||||
{
|
||||
"type": "veth / docker0 / br-XXXX",
|
||||
"behaviour": "Se omite",
|
||||
"why": "Creadas bajo demanda por Docker / LXC — no son hardware persistente"
|
||||
},
|
||||
{
|
||||
"type": "tap / fwpr / fwln",
|
||||
"behaviour": "Se omite",
|
||||
"why": "Creadas bajo demanda por Proxmox por VM/CT"
|
||||
},
|
||||
{
|
||||
"type": "WireGuard / Cilium / Tailscale",
|
||||
"behaviour": "Se omite",
|
||||
"why": "Interfaces software gestionadas por sus propios daemons"
|
||||
}
|
||||
]
|
||||
},
|
||||
"safety": {
|
||||
"heading": "Red de seguridad: se respaldan los .link anteriores",
|
||||
"intro": "Si <code>/etc/systemd/network/</code> ya contiene ficheros <code>.link</code> (de una ejecución anterior u otra herramienta), se copian a un directorio de backup con timestamp antes de generar los nuevos:",
|
||||
"outro": "Para hacer rollback: copia los ficheros desde el directorio de backup y reinicia.",
|
||||
"rebootTitle": "Tiene efecto en el siguiente reinicio, no inmediatamente",
|
||||
"rebootBody": "Los cambios en ficheros <code>.link</code> solo se aplican en el arranque, cuando udev re-enumera los dispositivos. La herramienta reporta <em>\"Changes will apply after reboot\"</em> por este motivo. Renombrar una interfaz en vivo es arriesgado y no se intenta: un <code>vmbr0</code> activo con miembros tendría que reconfigurarse atómicamente, por eso la operación se difiere al siguiente arranque limpio."
|
||||
},
|
||||
"afterReboot": {
|
||||
"heading": "Tras el reinicio",
|
||||
"intro": "Una vez fijados los nombres, el flujo para futuros cambios de hardware es simple:",
|
||||
"items": [
|
||||
"Apaga, cambia hardware (añadir tarjeta, mover slot, …), arranca.",
|
||||
"Cada NIC mantiene su nombre anterior porque su MAC coincide con un fichero <code>.link</code>.",
|
||||
"Si una NIC se reemplaza (MAC distinta), obtiene un nombre del kernel por defecto (<code>enp<bus>s<slot></code>); vuelve a ejecutar este menú para añadir una entrada <code>.link</code> con la MAC de la tarjeta nueva."
|
||||
]
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Solución de problemas",
|
||||
"emptyTitle": "\"No physical interfaces found\" tras ejecutar la herramienta",
|
||||
"emptyBody": "El host no tiene interfaces respaldadas por PCI / phy80211 visibles para el kernel. Confirma con <code>ls -l /sys/class/net/</code> — cada entrada debería tener un symlink <code>device</code> (PCI) o una entrada <code>phy80211</code> (Wi-Fi). Si faltan ambos para lo que debería ser una NIC real, el driver no está cargado.",
|
||||
"noChangeTitle": "Tras el reinicio, los nombres no han cambiado como esperaba",
|
||||
"noChangeBody": "Comprueba que el fichero está presente y bien formado: <code>cat /etc/systemd/network/10-<iface>.link</code>. Después mira los logs de udev: <code>journalctl -u systemd-udevd -b | grep -i link</code>. Una causa habitual es un parámetro de kernel <code>net.ifnames=0</code> residual que deshabilita el naming predictivo por completo — quítalo de <code>/etc/default/grub</code>, ejecuta <code>update-grub</code> y reinicia.",
|
||||
"undoTitle": "Quiero deshacer el naming persistente",
|
||||
"undoBody": "O bien borra los ficheros <code>.link</code> (<code>rm /etc/systemd/network/10-*.link</code>) o restaura desde el directorio de backup generado en la ejecución anterior. Reinicia para aplicar."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Análisis de bridges y reparación guiada",
|
||||
"href": "/docs/network/bridge-analysis",
|
||||
"tailRich": " — el camino de recuperación cuando los nombres <em>ya</em> se han movido."
|
||||
},
|
||||
{
|
||||
"label": "Análisis de config y limpieza guiada",
|
||||
"href": "/docs/network/config-analysis",
|
||||
"tail": " — para eliminar bloques huérfanos dejados por los cambios de nombre."
|
||||
},
|
||||
{
|
||||
"label": "Diagnóstico",
|
||||
"href": "/docs/network/diagnostics",
|
||||
"tailRich": " — confirma los nuevos nombres con <em>Mostrar tabla de rutas</em> tras el reinicio."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user