Regra IP persistente no Linux (Redhat)


12

Como posso configurar um persistente ip ruleno Linux (especificamente distribuições baseadas no Redhat)? Não existe um método incorporado? Minha única opção é adicionar /etc/rc.d/rc.localou criar meu próprio rc.dscript?

Edit: Para esclarecimento, não estou me referindo, iptablesmas a ipferramenta (que eu não acho que muitas pessoas estão familiarizadas). De qualquer forma, a regra que estou tentando persistir é adicionada com o seguinte comando:

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

A única referência que encontrei para fazer isso é da Novell: http://www.novell.com/support/viewContent.do?externalId=7008874&sliceId=1, que recomenda a criação de um rc.dscript


Você pode compartilhar a regra de IP que gostaria de persistir?
ewwhite

A regra éip rule add fwmark 1 lookup 100
brent

Respostas:


11

Como é habitual, me deparo com a resposta para meu próprio problema logo após perguntar :) Encontrei uma resposta em http://grokbase.com/t/centos/centos/099bmc07mq/persisting-iproute2-routes-and-rules

No Redhat 5+, o /etc/sysconfig/network-scripts/ifup-routesscript lida com rule-*arquivos. Código relevante abaixo:

# 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 para RHEL 6.5 (possivelmente com mais de 6 anos):

# 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

A descrição acima é cerca de 3/4 da resposta - a parte que falta é como formatar o arquivo / etc / sysconf / network-scripts / rule-ethX. Você também precisa adicionar as tabelas de roteamento em / etc / iproute2 / rt_tables:

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

E adicione o arquivo de regras / 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}

Observe que os nomes das tabelas devem corresponder e diferenciam maiúsculas de minúsculas.


1

note que se você usar prioridades nesses arquivos de regras para qualquer uma das regras, precisará usar prioridades para todas as regras. Caso contrário, os que não têm prioridades serão adicionados à cadeia de prioridade 0.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.