Regla de IP persistente en Linux (Redhat)

12

¿Cómo puedo configurar un persistente ip ruleen Linux (específicamente distribuciones basadas en Redhat)? ¿No hay un método incorporado? ¿Mi única opción es agregar /etc/rc.d/rc.localo crear mi propio rc.dscript?

Editar: para aclarar, no me refiero a iptablesla ipherramienta (que no creo que mucha gente conozca). En cualquier caso, la regla que intento persistir se agrega con el siguiente comando:

# ip rule add fwmark 1 lookup 100
# ip rule
...
32765: from all fwmark 0x1 lookup 100
...

La única referencia que he encontrado para hacer esto es de Novell: http://www.novell.com/support/viewContent.do?externalId=7008874&sliceId=1 que recomienda crear un rc.dscript

brent
fuente
¿Puedes compartir la regla de IP que te gustaría persistir?
ewwhite
La regla esip rule add fwmark 1 lookup 100
brent

Respuestas:

11

Como es habitual, me encuentro con la respuesta a mi propio problema poco después de preguntar :) Encontré una respuesta en http://grokbase.com/t/centos/centos/099bmc07mq/persisting-iproute2-routes-and-rules

En Redhat 5+, el /etc/sysconfig/network-scripts/ifup-routesscript maneja los rule-*archivos. Código relevante a continuación:

# Routing rules
FILES="/etc/sysconfig/network-scripts/rule-$1"
if [ -n "$2" -a "$2" != "$1" ]; then
    FILES="$FILES /etc/sysconfig/network-scripts/rule-$2"
fi

for file in $FILES; do
   if [ -f "$file" ]; then
       { cat "$file" ; echo ; } | while read line; do
           if [[ ! "$line" =~ $MATCH ]]; then
           /sbin/ip rule add $line
       fi
       done
   fi
done

Script para RHEL 6.5 (posiblemente mayores de 6 años):

# Routing rules
FILES="/etc/sysconfig/network-scripts/rule-$1 /etc/sysconfig/network-scripts/rule6-$1"
if [ -n "$2" -a "$2" != "$1" ]; then
FILES="$FILES /etc/sysconfig/network-scripts/rule-$2 /etc/sysconfig/network-scripts/rule6-$2"
fi

for file in $FILES; do
   if [ -f "$file" ]; then
       handle_ip_file $file
   fi
done

handle_ip_file() {
    local f t type= file=$1 proto="-4"
    f=${file##*/}
    t=${f%%-*}
    type=${t%%6}
    if [ "$type" != "$t" ]; then
        proto="-6"
    fi
    { cat "$file" ; echo ; } | while read line; do
        if [[ ! "$line" =~ $MATCH ]]; then
            /sbin/ip $proto $type add $line
        fi
    done
}
brent
fuente
6

Lo anterior es aproximadamente 3/4 de la respuesta: la pieza que falta es cómo formatear el archivo / etc / sysconf / network-scripts / rule-ethX. También debe agregar las tablas de enrutamiento a / etc / iproute2 / rt_tables:

# add a line with a table identifier and name:
100    ISPname

Y agregue el archivo de regla / etc / sysconfig / network-scripts / rule-eth0:

# rule-eth0
from 1.2.3.4/24 table {table name from /etc/iproute2/rt_tables}
to 1.2.3.4/24 table {table name from /etc/iproute2/rt_tables}

Tenga en cuenta que los nombres de las tablas deben coincidir y son sensibles a mayúsculas y minúsculas.

Rubin Bennett
fuente
1

tenga en cuenta que si usa prioridades en estos archivos de reglas para cualquiera de las reglas, debe usar prioridades para todas las reglas. De lo contrario, los que no tienen ninguna prioridad se agregan a la cadena de prioridad 0.

sabujp
fuente