Règle ip persistante sur Linux (Redhat)

12

Comment puis-je configurer une persistante ip rulesur Linux (en particulier les distributions basées sur Redhat)? N'y a-t-il pas de méthode intégrée? Ma seule option est-elle d'ajouter /etc/rc.d/rc.localou de créer mon propre rc.dscript?

Edit: Pour plus de clarté, je ne fais pas référence à iptablesmais à l' ipoutil (que je ne pense pas que beaucoup de gens connaissent). Dans tous les cas, la règle que j'essaie de persister est ajoutée avec la commande suivante:

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

La seule référence que j'ai trouvée pour ce faire est de Novell: http://www.novell.com/support/viewContent.do?externalId=7008874&sliceId=1 qui recommande de créer un rc.dscript

brent
la source
Pouvez-vous partager la règle IP que vous souhaitez conserver?
ewwhite
La règle estip rule add fwmark 1 lookup 100
brent

Réponses:

11

Comme d'habitude, je tombe sur la réponse à mon propre problème peu de temps après avoir demandé :) J'ai trouvé une réponse sur http://grokbase.com/t/centos/centos/099bmc07mq/persisting-iproute2-routes-and-rules

Sur Redhat 5+, le /etc/sysconfig/network-scripts/ifup-routesscript gère les rule-*fichiers. Code pertinent ci-dessous:

# 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 pour RHEL 6.5 (peut-être plus ancien 6+):

# 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
la source
6

Ce qui précède est environ 3/4 de la réponse - la pièce manquante est de savoir comment formater le fichier / etc / sysconf / network-scripts / rule-ethX. Vous devez également ajouter les tables de routage à / etc / iproute2 / rt_tables:

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

Et ajoutez le fichier de règles / 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}

Notez que les noms de table doivent correspondre et sont sensibles à la casse.

Rubin Bennett
la source
1

notez que si vous utilisez des priorités dans ces fichiers de règles pour l'une des règles, vous devez utiliser des priorités pour toutes les règles. Sinon, ceux qui n'ont pas de priorité sont tous ajoutés à la chaîne de priorité 0.

sabujp
la source