Постоянное правило ip в Linux (Redhat)


12

Как я могу настроить персистентность ip ruleв Linux (особенно в дистрибутивах на основе Redhat)? Нет ли встроенного метода? Является ли мой единственный вариант добавления /etc/rc.d/rc.localили создания собственного rc.dсценария?

Изменить: Для пояснения я не имею в виду, iptablesно ipинструмент (с которым я не думаю, что многие люди знакомы). В любом случае правило, которое я пытаюсь сохранить, добавляется с помощью следующей команды:

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

Единственная ссылка, которую я нашел для этого, - от Novell: http://www.novell.com/support/viewContent.do?externalId=7008874&sliceId=1, в которой рекомендуется создать rc.dскрипт


Можете ли вы поделиться правилом IP, которое вы хотели бы сохранить?
2012 г.

Правилоip rule add fwmark 1 lookup 100
Brent

Ответы:


11

Как обычно, я наткнулся на ответ на свою проблему вскоре после того, как спросил :) Нашел ответ на http://grokbase.com/t/centos/centos/099bmc07mq/persisting-iproute2-routes-and-rules

На Redhat 5+ /etc/sysconfig/network-scripts/ifup-routesскрипт обрабатывает rule-*файлы. Соответствующий код ниже:

# 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

Скрипт для RHEL 6.5 (возможно, старше 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
}

6

Выше приведено около 3/4 ответа - отсутствует часть о том, как отформатировать файл / etc / sysconf / network-scripts / rule-ethX. Вам также необходимо добавить таблицы маршрутизации в / etc / iproute2 / rt_tables:

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

И добавьте файл правил / 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}

Обратите внимание, что имена таблиц должны совпадать и чувствительны к регистру.


1

обратите внимание, что если вы используете приоритеты в этих файлах правил для какого-либо из правил, вы должны использовать приоритеты для всех правил. В противном случае те, у кого нет приоритетов, все добавляются в цепочку приоритетов 0.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.