Trwała reguła ip w systemie Linux (Redhat)

12

Jak mogę skonfigurować trwały ip rulesystem Linux (w szczególności dystrybucje oparte na Redhat)? Czy nie ma wbudowanej metody? Czy moja jedyna opcja polega na dodawaniu /etc/rc.d/rc.locallub tworzeniu własnego rc.dskryptu?

Edycja: Dla wyjaśnienia nie mówię o tym, iptablesale o ipnarzędziu (które nie wydaje się być znane wielu osobom). W każdym razie reguła, którą próbuję zachować, jest dodawana za pomocą następującego polecenia:

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

Jedyne odniesienie, które znalazłem, aby to zrobić, pochodzi z Novell: http://www.novell.com/support/viewContent.do?externalId=7008874&sliceId=1, który zaleca utworzenie rc.dskryptu

brent
źródło
Czy możesz udostępnić regułę IP, którą chcesz zachować?
ewwhite
Zasadą jestip rule add fwmark 1 lookup 100
Brent

Odpowiedzi:

11

Jak zwykle spotykam się z odpowiedzią na mój problem wkrótce po zapytaniu :) Znalazłem odpowiedź na http://grokbase.com/t/centos/centos/099bmc07mq/persisting-iproute2-routes-and-rules

W Redhat 5+ /etc/sysconfig/network-scripts/ifup-routesskrypt obsługuje rule-*pliki. Odpowiedni kod poniżej:

# 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

Skrypt dla RHEL 6.5 (prawdopodobnie starszy 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
źródło
6

Powyższe stanowi około 3/4 odpowiedzi - brakującym fragmentem jest sposób sformatowania pliku / etc / sysconf / network-scripts / rules-ethX. Musisz także dodać tabele routingu do / etc / iproute2 / rt_tables:

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

I dodaj plik reguł / etc / sysconfig / network-scripts / rules-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}

Pamiętaj, że nazwy tabel muszą być zgodne i rozróżniana jest wielkość liter.

Rubin Bennett
źródło
1

Uwaga: jeśli używasz priorytetów w tych plikach reguł dla dowolnej reguły, musisz używać priorytetów dla wszystkich reguł. W przeciwnym razie te, które nie mają żadnych priorytetów, zostaną dodane do łańcucha priorytetu 0.

sabujp
źródło