Regra de IP persistente no Linux (Redhat)

12

Como posso configurar um ip rule persistente no Linux (especificamente distribuições baseadas em Redhat)? Não existe um método embutido? Minha única opção é adicionar a /etc/rc.d/rc.local ou criar meu próprio script rc.d ?

Editar: Para esclarecimento, não estou me referindo a iptables , mas à ferramenta ip (que eu não acho que muita gente esteja familiarizada). Em qualquer caso, 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: link que recomenda criar um script rc.d

    
por brent 05.04.2012 / 20:31

3 respostas

11

Como é costumeiro, deparei com a resposta ao meu próprio problema logo após perguntar :) Encontrei uma resposta em link

No Redhat 5+, o script /etc/sysconfig/network-scripts/ifup-routes processa 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 mais antigo 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
}
    
por 05.04.2012 / 21:02
6

O texto acima é de 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 para / 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 diferenciar maiúsculas e minúsculas.

    
por 11.02.2015 / 15:36
1

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

    
por 12.06.2013 / 17:48