Un rango no es una ruta: convierte 200-255 en tres prefijos
Una línea de ruta toma una red y una máscara, nunca una dirección de inicio y fin. Suma el rango en prefijos alineados antes de que OpenVPN lo instale.
Las reglas del cortafuegos aceptan una primera y una última dirección, como 192.168.0.200 hasta 192.168.0.255, mientras que las rutas no. Una entrada de ruta solo tiene sitio para una red y una máscara, lo que significa que un rango contiguo debe convertirse en uno o más prefijos alineados antes de que OpenVPN lo instale. Un perfil que combina route-nopull con un intervalo no alineado es donde suele esconderse el fallo, porque el archivo se analiza y ninguna ruta coincide. Acierta con los bloques y el fallo se vuelve visible con un solo comando.
El mito: un rango es una ruta
Las tablas de enrutamiento guardan pares de red y máscara y eligen la coincidencia más larga, así que un intervalo con inicio y fin no tiene dónde vivir. Un prefijo que abarca 256 direcciones cubre .0 hasta .255, la mitad de ese tamaño cubre .0 hasta .127, y solo un rango alineado con esos bordes se mapea en un paso. Todo lo demás debe cortarse en bloques. Una ruta más pequeña sigue significando el intervalo original.
Un rango que no está alineado con el prefijo no es una ruta comprimida. Es otro tipo de objeto, y tratarlo como una ruta es donde empieza el fallo silencioso.
La alineación es aritmética, no estilo
Los tamaños de bloque los fija la longitud del prefijo. Un /29 solo puede empezar en una dirección divisible por 8, un /28 en una divisible por 16, un /27 en una divisible por 32. Mueve un bloque fuera de su frontera y la máscara cubrirá un conjunto de direcciones distinto del que pretendías.
Suma desde el extremo bajo. En cada paso toma el bloque alineado más grande que no rebase el final del rango y continúa en la primera dirección después de él. Los bloques no pueden solaparse, porque cada uno empieza donde se detuvo el anterior.
Dos personas haciéndolo a mano deberían llegar al mismo resultado. Un desacuerdo significa que alguien permitió un inicio que no estaba alineado.
Trabaja de 200 a 255
| Step | Start | Block that fits | Line for the profile |
|---|---|---|---|
| 1 | .200, multiple of 8 | /29, 8 addresses | 192.168.0.200 255.255.255.248 |
| 2 | .208, multiple of 16 | /28, 16 addresses | 192.168.0.208 255.255.255.240 |
| 3 | .224, multiple of 32 | /27, 32 addresses | 192.168.0.224 255.255.255.224 |
El rango empieza en .200, que es múltiplo de 8, así que el primer bloque es un /29 de .200 a .207. Después de esas ocho direcciones el primer valor libre es .208, que se divide por 16, así que un /28 toma .208 hasta .223. Lo que queda es .224 a .255, treinta y dos direcciones que empiezan en un múltiplo de 32, es decir un /27. Esas tres filas son toda la descomposición.
Escríbelas como líneas de ruta en lugar de como prosa. Un perfil que solo tiene la primera línea cubre ocho direcciones y deja el resto fuera del túnel.
route-nopull
route 192.168.0.200 255.255.255.248
route 192.168.0.208 255.255.255.240
route 192.168.0.224 255.255.255.224
El último bloque necesita una comprobación de frontera. Dentro de 192.168.0.224/27, .224 es la dirección de red y .255 es la dirección de difusión, así que un host que debe responder en .255 queda cubierto por el prefijo y sigue siendo inalcanzable. Mueve ese host o divide el rango de otra forma en vez de enrutar el bloque y esperar.
Qué hace route-nopull a la imagen
Añade route-nopull solo cuando las rutas empujadas por el servidor no se quieran. Sin la directiva, las rutas empujadas y estas líneas conviven, y gana el prefijo más específico. Con ella, las opciones DNS y DHCP empujadas también desaparecen, así que la resolución de nombres interna necesita su propia configuración. Ese efecto secundario sorprende a quienes añadieron la directiva para arreglar un problema de ruta.
Añádela por la razón correcta, no como un reflejo automático. Quitar las rutas empujadas es una decisión de política con una consecuencia para el DNS. Si el servidor puede empujar los mismos tres prefijos, déjalo, y borra las copias del lado cliente para que un solo propietario controle la lista.
Comprobaciones que atrapan los errores habituales
Comprueba que cada máscara sea una tirada contigua de unos. El valor 255.255.255.248 pasa y 255.255.255.200 falla, y una máscara que no es contigua se rechaza o se lee mal. Después confirma la ruta para una dirección de cada bloque.
ip route get 192.168.0.205
ip route get 192.168.0.220
ip route get 192.168.0.240
Cada respuesta debería nombrar la interfaz del túnel. Un resultado que nombra el adaptador físico significa que la línea nunca se instaló, lo que suele ocurrir cuando un gestor de red de escritorio reescribe la tabla después de que el perfil se conecta.
Elige un solo propietario para la lista. Cuando el servidor pueda empujar los mismos prefijos, empújalos y elimina las ediciones del lado cliente. Un solo propietario significa que una errata tiene un lugar donde vivir, y el cliente y el servidor no pueden discrepar sobre qué direcciones están dentro del túnel.