comando ip route con un rango, no un CIDR

comando ip route con un rango, no un CIDR

Tengo una lista de IP como estas de países de i-blocklist:https://www.iblocklist.com/lists.php?category=country

Solo brindan rangos sin suscripción, como por ejemplo: 201.237.0.0-201.237.255.255

Necesito enrutar algunas de esas listas a una interfaz específica en un servidor, pero no veo una opción en ip route para especificar un rango en la notación anterior.

¿Algunas ideas?

Respuesta1

Elmáscara de red herramientaPuede ser muy útil para convertir un rango a un CIDR:

$ netmask 201.237.0.0:201.237.255.255
201.237.0.0/16
$ netmask 201.238.3.0:201.238.9.255
201.238.3.0/24
201.238.4.0/22
201.238.8.0/23

También deberías ver si usasipseto elmódulo geoip de iptables, parte decomplementos-xtablesNo sería más útil que usar directamente esos rangos.

Para geoip, mire este ejemplo de uso en esta pregunta/respuesta:Ubuntu IPTables solo permite 1 país

Respuesta2

No existe el enrutamiento de rango. Puede enrutar subredes (tan cerca del rango deseado como necesite) y complementarlas con otras IP independientes no incluidas en las subredes que necesite.

En su ejemplo, 201.237.0.0-201.237.255.255 no es un rango, es la subred 201.237.0.0 /16. Puedes enrutarlo de una sola vez.

Un rango sería algo así como 201.237.0.1-201.237.1.3, que sería imposible enrutar con este formato. En este escenario, necesitaría enrutar 201.237.0.0 /24 y por separado 201.237.1.0 /30, por lo que básicamente lo cubre con 2 rutas, pero esa es fácil. Las cosas pueden volverse mucho más complicadas.

Respuesta3

Ampliando AB Answer: puede convertir una lista completa a notación CIDR usando

for each in `cut -f2 -d":" ad  | tr "-" ":"` ; do netmask $each 2>/dev/null; done

O a la notación IP/Máscara de red con

 for each in `cut -f2 -d":" ad  | tr "-" ":"` ; do netmask -s $each 2>/dev/null; done

Entonces, para enviar todas las IP de un rango particular a través de una interfaz particular, podrías hacer algo como

Al unirlo, podría crear un comando con un script como se muestra a continuación: eliminando el "eco" y finalizando el comando iptables según corresponda a sus necesidades:

#! /bin/bash

TMPFILE="/dev/shm/$$.del"

for each in `cut -f2 -d":" ad  | tr "-" ":"`
do
        netmask -s $each 2>/dev/null;
done > $TMPFILE


while read -r each
do
        ROUTE=${each%/*}
        NETMASK=${each#*/}
        echo /sbin/route add $ROUTE netmask $NETMASK ....
done <$TMPFILE

información relacionada