Permanente IP-Regel unter Linux (Redhat)

12

Wie kann ich eine dauerhafte ip ruleInstallation unter Linux konfigurieren (speziell auf Redhat basierende Distributionen)? Gibt es keine eingebaute Methode? Füge ich nur /etc/rc.d/rc.localmein eigenes rc.dSkript hinzu oder erstelle ich es ?

Edit: Zur Verdeutlichung beziehe ich mich aber nicht auf iptablesdas ipTool (mit dem ich glaube nicht viele Leute vertraut sind). In jedem Fall wird die Regel, die ich beibehalten möchte, mit dem folgenden Befehl hinzugefügt:

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

Der einzige Verweis, den ich dazu gefunden habe, stammt von Novell: http://www.novell.com/support/viewContent.do?externalId=7008874&sliceId=1, in dem die Erstellung eines rc.dSkripts empfohlen wird

brent
quelle
Können Sie die IP-Regel teilen, die Sie beibehalten möchten?
Ewwhite
Regel istip rule add fwmark 1 lookup 100
brent

Antworten:

11

Wie üblich ich Stolpern auf die Antwort auf mein eigenes Problem kurz nach dem zu fragen :) Gefunden eine Antwort auf http://grokbase.com/t/centos/centos/099bmc07mq/persisting-iproute2-routes-and-rules

In Redhat 5+ verarbeitet das /etc/sysconfig/network-scripts/ifup-routesSkript rule-*Dateien. Relevanter Code unten:

# 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

Skript für RHEL 6.5 (möglicherweise älter als 6 Jahre):

# 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
quelle
6

Das obige ist ungefähr 3/4 der Antwort - das fehlende Teil ist, wie die Datei / etc / sysconf / network-scripts / rule-ethX formatiert wird. Sie müssen auch die Routingtabellen zu / etc / iproute2 / rt_tables hinzufügen:

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

Fügen Sie die Regeldatei / etc / sysconfig / network-scripts / rule-eth0 hinzu:

# 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}

Beachten Sie, dass die Tabellennamen übereinstimmen müssen und zwischen Groß- und Kleinschreibung unterscheiden.

Rubin Bennett
quelle
1

Wenn Sie in diesen Regeldateien Prioritäten für eine der Regeln verwenden, müssen Sie Prioritäten für alle Regeln verwenden. Andernfalls werden diejenigen, die keine Prioritäten haben, zur Prioritätskette 0 hinzugefügt.

Sabujp
quelle