Как настроить постоянный 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
сценарий
Как обычно, я натыкаюсь на ответ на свою проблему вскоре после того, как спросил :) Нашел ответ на 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
}
Вышеупомянутое составляет около 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}
Обратите внимание, что имена таблиц должны совпадать и учитывать регистр.
Обратите внимание: если вы используете приоритеты в этих файлах правил для любого из правил, вы должны использовать приоритеты для всех правил. В противном случае все те, у которых нет никаких приоритетов, добавляются в цепочку приоритета 0.